From 8dbcf2424a370d979a362cce1150e14809f198ec Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Sat, 20 May 2023 08:17:56 +0200 Subject: [PATCH] Hack to fix DNS on networks with IPv6 --- src/AmsToMqttBridge.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/AmsToMqttBridge.cpp b/src/AmsToMqttBridge.cpp index 6e706600..4f99f6ce 100644 --- a/src/AmsToMqttBridge.cpp +++ b/src/AmsToMqttBridge.cpp @@ -31,6 +31,7 @@ ADC_MODE(ADC_VCC); #if defined(ESP32) #include +#include #endif #define WDT_TIMEOUT 60 @@ -158,6 +159,19 @@ void printHanReadError(int pos); void debugPrint(byte *buffer, int start, int length); +#if defined(ESP32) +ip_addr_t dns0; +void WiFiEvent(WiFiEvent_t event) { + switch(event) { + case ARDUINO_EVENT_WIFI_STA_GOT_IP: + const ip_addr_t* dns = dns_getserver(0); + memcpy(&dns0, dns, sizeof(dns0)); + break; + } +} +#endif + + void setup() { Serial.begin(115200); @@ -620,6 +634,7 @@ void handleNtpChange() { config.ackNtpChange(); } +bool dnsWorks = true; void handleSystem(unsigned long now) { unsigned long start, end; if(now - lastSysupdate > 60000) { @@ -632,6 +647,19 @@ void handleSystem(unsigned long now) { if(end - start > 1000) { debugW_P(PSTR("Used %dms to send system update to MQTT"), millis()-start); } + + #if defined(ESP32) + if(dnsWorks) { + IPAddress res; + int ret = WiFi.hostByName("hub.amsleser.no", res); + if(ret == 0) { + dns_setserver(0, &dns0); + debugI_P(PSTR("Had to reset DNS server")); + } else if(ret == 1) { + dnsWorks = true; + } + } + #endif } } @@ -1328,6 +1356,7 @@ void WiFi_connect() { if(strlen(wifi.hostname) > 0) { WiFi.setHostname(wifi.hostname); } + WiFi.onEvent(WiFiEvent); #endif WiFi.mode(WIFI_STA);