diff --git a/include/Configuration.h b/include/Configuration.h index 62d95c0..39284cb 100644 --- a/include/Configuration.h +++ b/include/Configuration.h @@ -66,6 +66,8 @@ struct CONFIG_T { char WiFi_Hostname[WIFI_MAX_HOSTNAME_STRLEN + 1]; uint32_t WiFi_ApTimeout; + bool Mdns_Enabled; + char Ntp_Server[NTP_MAX_SERVER_STRLEN + 1]; char Ntp_Timezone[NTP_MAX_TIMEZONE_STRLEN + 1]; char Ntp_TimezoneDescr[NTP_MAX_TIMEZONEDESCR_STRLEN + 1]; diff --git a/include/NetworkSettings.h b/include/NetworkSettings.h index f2cbdad..fa94c8b 100644 --- a/include/NetworkSettings.h +++ b/include/NetworkSettings.h @@ -59,6 +59,7 @@ public: private: void setHostname(); void setStaticIp(); + void handleMDNS(); void setupMode(); void NetworkEvent(WiFiEvent_t event); bool adminEnabled = true; @@ -76,6 +77,7 @@ private: network_mode _networkMode = network_mode::Undefined; bool _ethConnected = false; std::vector _cbEventList; + bool lastMdnsEnabled = false; }; extern NetworkSettingsClass NetworkSettings; \ No newline at end of file diff --git a/include/defaults.h b/include/defaults.h index 35753b9..2ee0063 100644 --- a/include/defaults.h +++ b/include/defaults.h @@ -20,6 +20,8 @@ #define WIFI_PASSWORD "" #define WIFI_DHCP true +#define MDNS_ENABLED false + #define NTP_SERVER "pool.ntp.org" #define NTP_TIMEZONE "CET-1CEST,M3.5.0,M10.5.0/3" #define NTP_TIMEZONEDESCR "Europe/Berlin" @@ -96,4 +98,4 @@ #define DISPLAY_CONTRAST 60U #define DISPLAY_LANGUAGE 0U -#define REACHABLE_THRESHOLD 2U \ No newline at end of file +#define REACHABLE_THRESHOLD 2U diff --git a/src/Configuration.cpp b/src/Configuration.cpp index aacac78..e90f719 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -41,6 +41,9 @@ bool ConfigurationClass::write() wifi["hostname"] = config.WiFi_Hostname; wifi["aptimeout"] = config.WiFi_ApTimeout; + JsonObject mdns = doc.createNestedObject("mdns"); + mdns["enabled"] = config.Mdns_Enabled; + JsonObject ntp = doc.createNestedObject("ntp"); ntp["server"] = config.Ntp_Server; ntp["timezone"] = config.Ntp_Timezone; @@ -191,6 +194,9 @@ bool ConfigurationClass::read() config.WiFi_Dhcp = wifi["dhcp"] | WIFI_DHCP; config.WiFi_ApTimeout = wifi["aptimeout"] | ACCESS_POINT_TIMEOUT; + JsonObject mdns = doc["mdns"]; + config.Mdns_Enabled = mdns["enabled"] | MDNS_ENABLED; + JsonObject ntp = doc["ntp"]; strlcpy(config.Ntp_Server, ntp["server"] | NTP_SERVER, sizeof(config.Ntp_Server)); strlcpy(config.Ntp_Timezone, ntp["timezone"] | NTP_TIMEZONE, sizeof(config.Ntp_Timezone)); diff --git a/src/NetworkSettings.cpp b/src/NetworkSettings.cpp index ab90c37..7e725ff 100644 --- a/src/NetworkSettings.cpp +++ b/src/NetworkSettings.cpp @@ -8,6 +8,7 @@ #include "PinMapping.h" #include "Utils.h" #include "defaults.h" +#include #include NetworkSettingsClass::NetworkSettingsClass() @@ -110,6 +111,35 @@ void NetworkSettingsClass::raiseEvent(network_event event) } } +void NetworkSettingsClass::handleMDNS() +{ + bool mdnsEnabled = Configuration.get().Mdns_Enabled; + + if (lastMdnsEnabled == mdnsEnabled) { + return; + } + + lastMdnsEnabled = mdnsEnabled; + + MDNS.end(); + + if (!mdnsEnabled) { + return; + } + + if (MDNS.begin(getHostname())) { + MessageOutput.print("MDNS responder starting..."); + + MDNS.addService("http", "tcp", 80); + MDNS.addService("opendtu", "tcp", 80); + MDNS.addServiceTxt("opendtu", "tcp", "git_hash", AUTO_GIT_HASH); + + MessageOutput.println("done"); + } else { + MessageOutput.println("Error setting up MDNS responder!"); + } +} + void NetworkSettingsClass::setupMode() { if (adminEnabled) { @@ -218,6 +248,8 @@ void NetworkSettingsClass::loop() if (dnsServerStatus) { dnsServer->processNextRequest(); } + + handleMDNS(); } void NetworkSettingsClass::applyConfig() @@ -417,4 +449,4 @@ network_mode NetworkSettingsClass::NetworkMode() return _networkMode; } -NetworkSettingsClass NetworkSettings; \ No newline at end of file +NetworkSettingsClass NetworkSettings; diff --git a/src/WebApi_network.cpp b/src/WebApi_network.cpp index 9c05e7c..849c5f8 100644 --- a/src/WebApi_network.cpp +++ b/src/WebApi_network.cpp @@ -76,6 +76,7 @@ void WebApiNetworkClass::onNetworkAdminGet(AsyncWebServerRequest* request) root["ssid"] = config.WiFi_Ssid; root["password"] = config.WiFi_Password; root["aptimeout"] = config.WiFi_ApTimeout; + root["mdnsenabled"] = config.Mdns_Enabled; response->setLength(); request->send(response); @@ -236,6 +237,7 @@ void WebApiNetworkClass::onNetworkAdminPost(AsyncWebServerRequest* request) config.WiFi_Dhcp = false; } config.WiFi_ApTimeout = root["aptimeout"].as(); + config.Mdns_Enabled = root["mdnsenabled"].as(); Configuration.write(); retMsg["type"] = "success"; diff --git a/webapp/src/locales/de.json b/webapp/src/locales/de.json index 759423b..62e7548 100644 --- a/webapp/src/locales/de.json +++ b/webapp/src/locales/de.json @@ -402,7 +402,9 @@ "ApTimeout": "AccessPoint Zeitlimit:", "ApTimeoutHint": "Zeit die der AccessPoint offen gehalten wird. Ein Wert von 0 bedeutet unendlich.", "Minutes": "Minuten", - "Save": "@:dtuadmin.Save" + "Save": "@:dtuadmin.Save", + "EnableMdns": "mDNS aktivieren", + "MdnsSettings": "mDNS-Einstellungen" }, "mqttadmin": { "MqttSettings": "MQTT-Einstellungen", diff --git a/webapp/src/locales/en.json b/webapp/src/locales/en.json index 67c6dbf..40458b1 100644 --- a/webapp/src/locales/en.json +++ b/webapp/src/locales/en.json @@ -402,7 +402,9 @@ "ApTimeout": "AccessPoint Timeout:", "ApTimeoutHint": "Time which the AccessPoint is kept open. A value of 0 means infinite.", "Minutes": "minutes", - "Save": "@:dtuadmin.Save" + "Save": "@:dtuadmin.Save", + "EnableMdns": "Enable mDNS", + "MdnsSettings": "mDNS Settings" }, "mqttadmin": { "MqttSettings": "MQTT Settings", diff --git a/webapp/src/locales/fr.json b/webapp/src/locales/fr.json index 7f9fb07..e5a48eb 100644 --- a/webapp/src/locales/fr.json +++ b/webapp/src/locales/fr.json @@ -402,7 +402,9 @@ "ApTimeout": "Délai d'attente du point d'accès", "ApTimeoutHint": "Durée pendant laquelle le point d'accès reste ouvert. Une valeur de 0 signifie infini.", "Minutes": "minutes", - "Save": "@:dtuadmin.Save" + "Save": "@:dtuadmin.Save", + "EnableMdns": "Activer mDNS", + "MdnsSettings": "mDNS Settings" }, "mqttadmin": { "MqttSettings": "Paramètres MQTT", @@ -580,4 +582,4 @@ "ValueSelected": "Sélectionné", "ValueActive": "Activé" } -} \ No newline at end of file +} diff --git a/webapp/src/types/NetworkkConfig.ts b/webapp/src/types/NetworkConfig.ts similarity index 89% rename from webapp/src/types/NetworkkConfig.ts rename to webapp/src/types/NetworkConfig.ts index e9b3578..da5ddd4 100644 --- a/webapp/src/types/NetworkkConfig.ts +++ b/webapp/src/types/NetworkConfig.ts @@ -9,4 +9,5 @@ export interface NetworkConfig { dns1: string; dns2: string; aptimeout: number; -} \ No newline at end of file + mdnsenabled: boolean; +} diff --git a/webapp/src/views/NetworkAdminView.vue b/webapp/src/views/NetworkAdminView.vue index c8bf0cb..1019f3e 100644 --- a/webapp/src/views/NetworkAdminView.vue +++ b/webapp/src/views/NetworkAdminView.vue @@ -50,6 +50,12 @@ type="text" maxlength="32"/> + + + + \ No newline at end of file +