diff --git a/src/PortalTask.h b/src/PortalTask.h index f60d4fc..aa550e1 100644 --- a/src/PortalTask.h +++ b/src/PortalTask.h @@ -55,6 +55,7 @@ protected: bool webServerEnabled = false; bool dnsServerEnabled = false; unsigned long webServerChangeState = 0; + bool mDnsState = false; #if defined(ARDUINO_ARCH_ESP32) const char* getTaskName() override { @@ -874,8 +875,14 @@ protected: this->startWebServer(); Log.straceln(FPSTR(L_PORTAL_WEBSERVER), F("Started: AP up or STA connected")); - if (MDNS.begin(networkSettings.hostname)) { - MDNS.addService("http", "tcp", 80); + // Enabling mDNS + if (!this->mDnsState && settings.portal.mdns) { + if (MDNS.begin(networkSettings.hostname)) { + MDNS.addService("http", "tcp", 80); + this->mDnsState = true; + + Log.straceln(FPSTR(L_PORTAL_WEBSERVER), F("mDNS enabled and service added")); + } } #ifdef ARDUINO_ARCH_ESP8266 @@ -886,13 +893,27 @@ protected: this->stopWebServer(); Log.straceln(FPSTR(L_PORTAL_WEBSERVER), F("Stopped: AP and STA down")); - MDNS.end(); + // Disabling mDNS + if (this->mDnsState) { + MDNS.end(); + this->mDnsState = false; + + Log.straceln(FPSTR(L_PORTAL_WEBSERVER), F("mDNS disabled")); + } #ifdef ARDUINO_ARCH_ESP8266 ::optimistic_yield(1000); #endif } + // Disabling mDNS if disabled in settings + if (this->mDnsState && !settings.portal.mdns) { + MDNS.end(); + this->mDnsState = false; + + Log.straceln(FPSTR(L_PORTAL_WEBSERVER), F("mDNS disabled")); + } + // dns server if (!this->stateDnsServer() && !network->isConnected() && network->isApEnabled() && this->stateWebServer()) { this->startDnsServer(); diff --git a/src/Settings.h b/src/Settings.h index dbae29b..5a493e2 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -49,6 +49,7 @@ struct Settings { bool auth = false; char login[13] = DEFAULT_PORTAL_LOGIN; char password[33] = DEFAULT_PORTAL_PASSWORD; + bool mdns = true; } portal; struct { diff --git a/src/strings.h b/src/strings.h index 306a397..32ad73a 100644 --- a/src/strings.h +++ b/src/strings.h @@ -122,6 +122,7 @@ const char S_MAX_MODULATION[] PROGMEM = "maxModulation"; const char S_MAX_POWER[] PROGMEM = "maxPower"; const char S_MAX_TEMP[] PROGMEM = "maxTemp"; const char S_MAX_TEMP_SYNC_WITH_TARGET_TEMP[] PROGMEM = "maxTempSyncWithTargetTemp"; +const char S_MDNS[] PROGMEM = "mdns"; const char S_MEMBER_ID[] PROGMEM = "memberId"; const char S_MIN[] PROGMEM = "min"; const char S_MIN_FREE[] PROGMEM = "minFree"; diff --git a/src/utils.h b/src/utils.h index 51ccae1..261d2d2 100644 --- a/src/utils.h +++ b/src/utils.h @@ -440,6 +440,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) { portal[FPSTR(S_AUTH)] = src.portal.auth; portal[FPSTR(S_LOGIN)] = src.portal.login; portal[FPSTR(S_PASSWORD)] = src.portal.password; + portal[FPSTR(S_MDNS)] = src.portal.mdns; auto opentherm = dst[FPSTR(S_OPENTHERM)].to(); opentherm[FPSTR(S_UNIT_SYSTEM)] = static_cast(src.opentherm.unitSystem); @@ -707,6 +708,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false changed = true; } + if (src[FPSTR(S_PORTAL)][FPSTR(S_MDNS)].is()) { + bool value = src[FPSTR(S_PORTAL)][FPSTR(S_MDNS)].as(); + + if (value != dst.portal.mdns) { + dst.portal.mdns = value; + changed = true; + } + } + // opentherm if (!src[FPSTR(S_OPENTHERM)][FPSTR(S_UNIT_SYSTEM)].isNull()) { diff --git a/src_data/locales/en.json b/src_data/locales/en.json index 4ee06ba..8dcbf79 100644 --- a/src_data/locales/en.json +++ b/src_data/locales/en.json @@ -296,7 +296,8 @@ "portal": { "login": "Login", "password": "Password", - "auth": "Require authentication" + "auth": "Require authentication", + "mdns": "Use mDNS" }, "system": { diff --git a/src_data/locales/it.json b/src_data/locales/it.json index d8cbb16..a0b8e05 100644 --- a/src_data/locales/it.json +++ b/src_data/locales/it.json @@ -296,7 +296,8 @@ "portal": { "login": "Login", "password": "Password", - "auth": "Richiede autenticazione" + "auth": "Richiede autenticazione", + "mdns": "Usa mDNS" }, "system": { diff --git a/src_data/locales/ru.json b/src_data/locales/ru.json index 8379c90..fa1daa8 100644 --- a/src_data/locales/ru.json +++ b/src_data/locales/ru.json @@ -296,7 +296,8 @@ "portal": { "login": "Логин", "password": "Пароль", - "auth": "Требовать аутентификацию" + "auth": "Требовать аутентификацию", + "mdns": "Использовать mDNS" }, "system": { diff --git a/src_data/pages/settings.html b/src_data/pages/settings.html index 6102774..2b9d7d7 100644 --- a/src_data/pages/settings.html +++ b/src_data/pages/settings.html @@ -57,6 +57,11 @@ settings.portal.auth + +
@@ -773,6 +778,7 @@ setCheckboxValue("[name='portal[auth]']", data.portal.auth); setInputValue("[name='portal[login]']", data.portal.login); setInputValue("[name='portal[password]']", data.portal.password); + setCheckboxValue("[name='portal[mdns]']", data.portal.mdns); setBusy('#portal-settings-busy', '#portal-settings', false); // Opentherm