From de722e001c7495e6ebb8bce629f50e3faf9dfbb4 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Mon, 18 Jan 2021 10:57:45 +0100 Subject: [PATCH] Set up mDNS in a more fool-proof way --- WeatherStation.ino | 48 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/WeatherStation.ino b/WeatherStation.ino index 7e51758..9cee67b 100644 --- a/WeatherStation.ino +++ b/WeatherStation.ino @@ -47,6 +47,9 @@ # include #endif // HAVE_BMP180 +char *negotiated_hostname = NULL; +bool hostname_verified = false; +MDNSResponder::hMDNSService mdns_service = NULL; ESP8266WebServer server(80); unsigned long last_update = 0; @@ -163,6 +166,42 @@ stop() } } +bool +set_station_hostname(const char *hostname) +{ + if (hostname) { + WiFi.hostname(hostname); + } + + return true; +} + +void +host_probe_result(String hostname, bool result) +{ + if (result == true) { + set_station_hostname(negotiated_hostname); + + if (!hostname_verified) { + hostname_verified = true; + + if (!mdns_service) { + mdns_service = MDNS.addService(0, "http", "tcp", 80); + + if (mdns_service) { + MDNS.addServiceTxt(mdns_service, "port#", 80); + } + } + } + } else { + if (MDNSResponder::indexDomain(negotiated_hostname, "-", 0)) { + MDNS.setHostname(negotiated_hostname); + } else { + Serial.println("Failed to set mDNS hostname"); + } + } +} + void setup() { @@ -183,8 +222,11 @@ setup() address.printTo(Serial); Serial.println(""); - if (!MDNS.begin(MDNS_NAME)) { - Serial.println("Error setting up mDNS responder!"); + MDNS.setHostProbeResultCallback(host_probe_result); + + if ((!MDNSResponder::indexDomain(negotiated_hostname, 0, MDNS_NAME)) || + (!MDNS.begin(negotiated_hostname))) { + Serial.println("Error setting up mDNS!"); stop(); } @@ -194,8 +236,6 @@ setup() server.begin(); - MDNS.addService("http", "tcp", 80); - // Initialize sensors #ifdef DHT_TYPE dht.begin();