diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 0707d9fea..00e62cf0b 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -14,6 +14,7 @@ - Add current room influence for RC300[#136] - Added Home Assistant device_class to sensor entities - Added another Buderus RC10 thermostat with Product ID 65 [#160](https://github.com/emsesp/EMS-ESP32/issues/160) +- Added support for mDNS [#161](https://github.com/emsesp/EMS-ESP32/issues/161) ## Fixed diff --git a/lib/framework/NetworkSettingsService.cpp b/lib/framework/NetworkSettingsService.cpp index a5a94b081..2522b222e 100644 --- a/lib/framework/NetworkSettingsService.cpp +++ b/lib/framework/NetworkSettingsService.cpp @@ -62,6 +62,7 @@ void NetworkSettingsService::manageSTA() { } WiFi.setHostname(_state.hostname.c_str()); // set hostname + // www.esp32.com/viewtopic.php?t=12055 read([&](NetworkSettings & networkSettings) { if (networkSettings.bandwidth20) { @@ -74,31 +75,17 @@ void NetworkSettingsService::manageSTA() { WiFi.setSleep(false); // turn off sleep - WIFI_PS_NONE } }); + WiFi.begin(_state.ssid.c_str(), _state.password.c_str()); // attempt to connect to the network } } -// handles both WiFI and Ethernet +// handles if wifi stopped void NetworkSettingsService::WiFiEvent(WiFiEvent_t event) { - switch (event) { - case SYSTEM_EVENT_STA_DISCONNECTED: - WiFi.disconnect(true); - break; - - case SYSTEM_EVENT_STA_STOP: + if (event == SYSTEM_EVENT_STA_STOP) { if (_stopping) { _lastConnectionAttempt = 0; _stopping = false; } - break; - - case SYSTEM_EVENT_ETH_START: - if (_state.staticIPConfig) { - ETH.config(_state.localIP, _state.gatewayIP, _state.subnetMask, _state.dnsIP1, _state.dnsIP2); // configure for static IP - } - break; - - default: - break; } } diff --git a/lib/framework/OTASettingsService.cpp b/lib/framework/OTASettingsService.cpp index f0662507c..f2b7d7477 100644 --- a/lib/framework/OTASettingsService.cpp +++ b/lib/framework/OTASettingsService.cpp @@ -59,6 +59,7 @@ void OTASettingsService::configureArduinoOTA() { Serial.println(F("End Failed")); }); + _arduinoOTA->setMdnsEnabled(false); // disable as handled in NetworkSettingsService.cpp. https://github.com/emsesp/EMS-ESP32/issues/161 _arduinoOTA->begin(); } } diff --git a/lib/framework/OTASettingsService.h b/lib/framework/OTASettingsService.h index d7fa86c10..d0759818e 100644 --- a/lib/framework/OTASettingsService.h +++ b/lib/framework/OTASettingsService.h @@ -4,8 +4,6 @@ #include #include -#include - #include #include diff --git a/src/version.h b/src/version.h index 9aa872702..ea04ed793 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.2.2b12" +#define EMSESP_APP_VERSION "3.2.2b13" diff --git a/src/web/WebStatusService.cpp b/src/web/WebStatusService.cpp index f6177626c..c39623800 100644 --- a/src/web/WebStatusService.cpp +++ b/src/web/WebStatusService.cpp @@ -35,6 +35,7 @@ void WebStatusService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) { switch (event) { case SYSTEM_EVENT_STA_DISCONNECTED: EMSESP::logger().info(F("WiFi Disconnected. Reason code=%d"), info.disconnected.reason); + WiFi.disconnect(true); break; case SYSTEM_EVENT_STA_GOT_IP: @@ -47,11 +48,20 @@ void WebStatusService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) { EMSESP::system_.syslog_start(); } }); + mDNS_start(); break; case SYSTEM_EVENT_ETH_START: EMSESP::logger().info(F("Ethernet initialized")); ETH.setHostname(EMSESP::system_.hostname().c_str()); + + // configure for static IP + EMSESP::esp8266React.getNetworkSettingsService()->read([&](NetworkSettings & networkSettings) { + if (networkSettings.staticIPConfig) { + ETH.config(networkSettings.localIP, networkSettings.gatewayIP, networkSettings.subnetMask, networkSettings.dnsIP1, networkSettings.dnsIP2); + } + }); + break; case SYSTEM_EVENT_ETH_GOT_IP: @@ -67,6 +77,7 @@ void WebStatusService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) { } }); EMSESP::system_.ethernet_connected(true); + mDNS_start(); } break; @@ -105,6 +116,7 @@ void WebStatusService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) { } EMSESP::system_.send_heartbeat(); EMSESP::system_.syslog_start(); + mDNS_start(); break; #endif @@ -127,4 +139,22 @@ void WebStatusService::webStatusService(AsyncWebServerRequest * request) { request->send(response); } +// start the multicast UDP service so EMS-ESP is discoverable via .local +void WebStatusService::mDNS_start() { + if (!MDNS.begin(EMSESP::system_.hostname().c_str())) { + EMSESP::logger().warning(F("Failed to start mDNS responder service")); + return; + } + + std::string address_s = EMSESP::system_.hostname() + ".local"; + + MDNS.addService("http", "tcp", 80); // add our web server and rest API + MDNS.addService("telnet", "tcp", 23); // add our telnet console + + MDNS.addServiceTxt("http", "tcp", "version", EMSESP_APP_VERSION); + MDNS.addServiceTxt("http", "tcp", "address", address_s.c_str()); + + EMSESP::logger().info(F("mDNS responder service started")); +} + } // namespace emsesp \ No newline at end of file diff --git a/src/web/WebStatusService.h b/src/web/WebStatusService.h index c9ed67db7..09d7b13e6 100644 --- a/src/web/WebStatusService.h +++ b/src/web/WebStatusService.h @@ -25,6 +25,8 @@ #include #include +#include + #define EMSESP_STATUS_SERVICE_PATH "/rest/emsespStatus" namespace emsesp { @@ -36,6 +38,7 @@ class WebStatusService { private: void webStatusService(AsyncWebServerRequest * request); void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info); + void mDNS_start(); }; } // namespace emsesp