From ce3a47a7e6e0a6b896b2ce99a2b198725c8802b8 Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Wed, 12 Oct 2022 19:25:48 +0200 Subject: [PATCH] Fixed error blinks and improved WiFi reconnect --- src/AmsToMqttBridge.h | 2 +- src/AmsToMqttBridge.ino | 45 +++++++++++++++++++++++++++-------------- src/HwTools.cpp | 4 ++-- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/AmsToMqttBridge.h b/src/AmsToMqttBridge.h index aa2e148a..477fbba2 100644 --- a/src/AmsToMqttBridge.h +++ b/src/AmsToMqttBridge.h @@ -1,7 +1,7 @@ #ifndef _AMSTOMQTTBRIDGE_H #define _AMSTOMQTTBRIDGE_H -#define WIFI_CONNECTION_TIMEOUT 30000; +#define WIFI_CONNECTION_TIMEOUT 30000 #define INVALID_BUTTON_PIN 0xFFFFFFFF diff --git a/src/AmsToMqttBridge.ino b/src/AmsToMqttBridge.ino index e4f50fbe..92a527d1 100644 --- a/src/AmsToMqttBridge.ino +++ b/src/AmsToMqttBridge.ino @@ -436,6 +436,10 @@ void loop() { } } + if(now > 10000 && now - lastErrorBlink > 3000) { + errorBlink(); + } + // Only do normal stuff if we're not booted as AP if (WiFi.getMode() != WIFI_AP) { if (WiFi.status() != WL_CONNECTED) { @@ -506,10 +510,6 @@ void loop() { MDNS.update(); #endif - if(now > 10000 && now - lastErrorBlink > 3000) { - errorBlink(); - } - if (mqttEnabled || config.isMqttChanged()) { if(mqtt == NULL || !mqtt->connected() || config.isMqttChanged()) { MQTT_connect(); @@ -725,22 +725,25 @@ void errorBlink() { if(lastError == 3) lastError = 0; lastErrorBlink = millis(); - for(;lastError < 3;lastError++) { - switch(lastError) { + while(lastError < 3) { + switch(lastError++) { case 0: if(lastErrorBlink - meterState.getLastUpdateMillis() > 30000) { + debugW("No HAN data received last 30s, single blink"); hw.ledBlink(LED_RED, 1); // If no message received from AMS in 30 sec, blink once return; } break; case 1: if(mqttEnabled && mqtt != NULL && mqtt->lastError() != 0) { + debugW("MQTT connection not available, double blink"); hw.ledBlink(LED_RED, 2); // If MQTT error, blink twice return; } break; case 2: if(WiFi.getMode() != WIFI_AP && WiFi.status() != WL_CONNECTED) { + debugW("WiFi not connected, tripe blink"); hw.ledBlink(LED_RED, 3); // If WiFi not connected, blink three times return; } @@ -985,17 +988,29 @@ void debugPrint(byte *buffer, int start, int length) { Debug.println(""); } -unsigned long wifiTimeout = WIFI_CONNECTION_TIMEOUT; unsigned long lastWifiRetry = -WIFI_CONNECTION_TIMEOUT; void WiFi_connect() { - if(millis() - lastWifiRetry < wifiTimeout) { - delay(50); - return; - } - lastWifiRetry = millis(); - if (WiFi.status() != WL_CONNECTED) { + if(WiFi.status() == WL_DISCONNECTED) { + if(millis() - lastWifiRetry < WIFI_CONNECTION_TIMEOUT) { + return; + } + } if(WiFi.getMode() != WIFI_OFF) { + switch(WiFi.status()) { + case WL_NO_SSID_AVAIL: + debugE("WiFi error, no SSID available"); + break; + case WL_CONNECT_FAILED: + debugE("WiFi error, connection failed"); + break; + case WL_CONNECTION_LOST: + debugE("WiFi error, connection lost"); + break; + case WL_WRONG_PASSWORD: + debugE("WiFi error, wrong password"); + break; + } if(wifiReconnectCount > 3) { ESP.restart(); return; @@ -1029,11 +1044,11 @@ void WiFi_connect() { WiFi.softAPdisconnect(true); WiFi.enableAP(false); WiFi.mode(WIFI_OFF); + WiFi.forceSleepBegin(); yield(); - wifiTimeout = 5000; return; } - wifiTimeout = WIFI_CONNECTION_TIMEOUT; + lastWifiRetry = millis(); WiFiConfig wifi; if(!config.getWiFiConfig(wifi) || strlen(wifi.ssid) == 0) { diff --git a/src/HwTools.cpp b/src/HwTools.cpp index 007c06a4..7683621b 100644 --- a/src/HwTools.cpp +++ b/src/HwTools.cpp @@ -373,8 +373,8 @@ bool HwTools::ledBlink(uint8_t color, uint8_t blink) { if(!ledOn(color)) return false; delay(50); ledOff(color); - if(i != blink) - delay(50); + if(i != blink-1) + delay(200); } return true; }