feat: added mDNS settings

This commit is contained in:
Yurii
2025-02-15 00:05:10 +03:00
parent 0c778d4c7f
commit bb7c3eeba3
8 changed files with 48 additions and 6 deletions

View File

@@ -55,6 +55,7 @@ protected:
bool webServerEnabled = false; bool webServerEnabled = false;
bool dnsServerEnabled = false; bool dnsServerEnabled = false;
unsigned long webServerChangeState = 0; unsigned long webServerChangeState = 0;
bool mDnsState = false;
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
const char* getTaskName() override { const char* getTaskName() override {
@@ -874,8 +875,14 @@ protected:
this->startWebServer(); this->startWebServer();
Log.straceln(FPSTR(L_PORTAL_WEBSERVER), F("Started: AP up or STA connected")); Log.straceln(FPSTR(L_PORTAL_WEBSERVER), F("Started: AP up or STA connected"));
if (MDNS.begin(networkSettings.hostname)) { // Enabling mDNS
MDNS.addService("http", "tcp", 80); 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 #ifdef ARDUINO_ARCH_ESP8266
@@ -886,13 +893,27 @@ protected:
this->stopWebServer(); this->stopWebServer();
Log.straceln(FPSTR(L_PORTAL_WEBSERVER), F("Stopped: AP and STA down")); 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 #ifdef ARDUINO_ARCH_ESP8266
::optimistic_yield(1000); ::optimistic_yield(1000);
#endif #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 // dns server
if (!this->stateDnsServer() && !network->isConnected() && network->isApEnabled() && this->stateWebServer()) { if (!this->stateDnsServer() && !network->isConnected() && network->isApEnabled() && this->stateWebServer()) {
this->startDnsServer(); this->startDnsServer();

View File

@@ -49,6 +49,7 @@ struct Settings {
bool auth = false; bool auth = false;
char login[13] = DEFAULT_PORTAL_LOGIN; char login[13] = DEFAULT_PORTAL_LOGIN;
char password[33] = DEFAULT_PORTAL_PASSWORD; char password[33] = DEFAULT_PORTAL_PASSWORD;
bool mdns = true;
} portal; } portal;
struct { struct {

View File

@@ -122,6 +122,7 @@ const char S_MAX_MODULATION[] PROGMEM = "maxModulation";
const char S_MAX_POWER[] PROGMEM = "maxPower"; const char S_MAX_POWER[] PROGMEM = "maxPower";
const char S_MAX_TEMP[] PROGMEM = "maxTemp"; const char S_MAX_TEMP[] PROGMEM = "maxTemp";
const char S_MAX_TEMP_SYNC_WITH_TARGET_TEMP[] PROGMEM = "maxTempSyncWithTargetTemp"; 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_MEMBER_ID[] PROGMEM = "memberId";
const char S_MIN[] PROGMEM = "min"; const char S_MIN[] PROGMEM = "min";
const char S_MIN_FREE[] PROGMEM = "minFree"; const char S_MIN_FREE[] PROGMEM = "minFree";

View File

@@ -440,6 +440,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) {
portal[FPSTR(S_AUTH)] = src.portal.auth; portal[FPSTR(S_AUTH)] = src.portal.auth;
portal[FPSTR(S_LOGIN)] = src.portal.login; portal[FPSTR(S_LOGIN)] = src.portal.login;
portal[FPSTR(S_PASSWORD)] = src.portal.password; portal[FPSTR(S_PASSWORD)] = src.portal.password;
portal[FPSTR(S_MDNS)] = src.portal.mdns;
auto opentherm = dst[FPSTR(S_OPENTHERM)].to<JsonObject>(); auto opentherm = dst[FPSTR(S_OPENTHERM)].to<JsonObject>();
opentherm[FPSTR(S_UNIT_SYSTEM)] = static_cast<uint8_t>(src.opentherm.unitSystem); opentherm[FPSTR(S_UNIT_SYSTEM)] = static_cast<uint8_t>(src.opentherm.unitSystem);
@@ -707,6 +708,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false
changed = true; changed = true;
} }
if (src[FPSTR(S_PORTAL)][FPSTR(S_MDNS)].is<bool>()) {
bool value = src[FPSTR(S_PORTAL)][FPSTR(S_MDNS)].as<bool>();
if (value != dst.portal.mdns) {
dst.portal.mdns = value;
changed = true;
}
}
// opentherm // opentherm
if (!src[FPSTR(S_OPENTHERM)][FPSTR(S_UNIT_SYSTEM)].isNull()) { if (!src[FPSTR(S_OPENTHERM)][FPSTR(S_UNIT_SYSTEM)].isNull()) {

View File

@@ -296,7 +296,8 @@
"portal": { "portal": {
"login": "Login", "login": "Login",
"password": "Password", "password": "Password",
"auth": "Require authentication" "auth": "Require authentication",
"mdns": "Use mDNS"
}, },
"system": { "system": {

View File

@@ -296,7 +296,8 @@
"portal": { "portal": {
"login": "Login", "login": "Login",
"password": "Password", "password": "Password",
"auth": "Richiede autenticazione" "auth": "Richiede autenticazione",
"mdns": "Usa mDNS"
}, },
"system": { "system": {

View File

@@ -296,7 +296,8 @@
"portal": { "portal": {
"login": "Логин", "login": "Логин",
"password": "Пароль", "password": "Пароль",
"auth": "Требовать аутентификацию" "auth": "Требовать аутентификацию",
"mdns": "Использовать mDNS"
}, },
"system": { "system": {

View File

@@ -57,6 +57,11 @@
<input type="checkbox" name="portal[auth]" value="true"> <input type="checkbox" name="portal[auth]" value="true">
<span data-i18n>settings.portal.auth</span> <span data-i18n>settings.portal.auth</span>
</label> </label>
<label>
<input type="checkbox" name="portal[mdns]" value="true">
<span data-i18n>settings.portal.mdns</span>
</label>
<br /> <br />
<button type="submit" data-i18n>button.save</button> <button type="submit" data-i18n>button.save</button>
@@ -773,6 +778,7 @@
setCheckboxValue("[name='portal[auth]']", data.portal.auth); setCheckboxValue("[name='portal[auth]']", data.portal.auth);
setInputValue("[name='portal[login]']", data.portal.login); setInputValue("[name='portal[login]']", data.portal.login);
setInputValue("[name='portal[password]']", data.portal.password); setInputValue("[name='portal[password]']", data.portal.password);
setCheckboxValue("[name='portal[mdns]']", data.portal.mdns);
setBusy('#portal-settings-busy', '#portal-settings', false); setBusy('#portal-settings-busy', '#portal-settings', false);
// Opentherm // Opentherm