Behaviour when MQTT and/or Wifi is not available (#1126)

* Behaviour when MQTT and/or Wifi is not available

I was looking into why all my OpenMQTTGateway devices were not responding after a recent power failure and am speculating that the ESP32 was able to restart faster than my Wifi and MQTT Server was able to restart and resume operations.  And was thinking that a generic ESP.restart may be a reasonable approach with repeated Wifi and/or MQTT connection failures.

As mentioned here https://community.openmqttgateway.com/t/behaviour-when-mqtt-and-or-wifi-is-not-available/1747

Added new variable maxRetryWatchDog, which is the maximum number of mqtt or wifi connection attempts before restarting gateway device.
This commit is contained in:
Northern Man authored and GitHub committed 2022-01-17 16:16:43 -06:00
1 parent 149aa40802
commit 9546f43cd6
2 files changed
+37 -9

No files matched your search

+36 -9
View File
@@ -317,7 +317,7 @@ void pub(const char* topicori, JsonObject& data) {
# ifdef ZgatewayPilight
String value = data["value"];
String protocol = data["protocol"];
if (value != 0) {
if (value != "null" && value != 0) {
topic = topic + "/" + protocol + "/" + value;
}
# else
@@ -561,6 +561,9 @@ void connectMQTT() {
delay(2000);
digitalWrite(LED_ERROR, !LED_ERROR_ON);
delay(5000);
if (failure_number_mqtt > maxRetryWatchDog) {
watchdogReboot(1);
}
}
}
@@ -982,8 +985,19 @@ void setup_wifi() {
Log.trace(F("." CR));
failure_number_ntwk++;
# if defined(ESP32) && defined(ZgatewayBT)
if (failure_number_ntwk > maxConnectionRetryWifi && lowpowermode)
lowPowerESP32();
if (lowpowermode) {
if (failure_number_ntwk > maxConnectionRetryWifi) {
lowPowerESP32();
}
} else {
if (failure_number_ntwk > maxRetryWatchDog) {
watchdogReboot(2);
}
}
# else
if (failure_number_ntwk > maxRetryWatchDog) {
watchdogReboot(2);
}
# endif
}
Log.notice(F("WiFi ok with manual config credentials" CR));
@@ -1203,12 +1217,8 @@ void setup_wifimanager(bool reset_settings) {
if (!wifiManager.autoConnect(WifiManager_ssid, WifiManager_password)) {
Log.warning(F("failed to connect and hit timeout" CR));
delay(3000);
//reset and try again
# if defined(ESP8266)
ESP.reset();
# else
ESP.restart();
# endif
//reset and try again
watchdogReboot(3);
delay(5000);
}
digitalWrite(LED_ERROR, !LED_ERROR_ON);
@@ -2117,3 +2127,20 @@ String toString(uint32_t input) {
}
# endif
#endif
/*
Reboot for repeated connection issues
Reason Codes
1 - Repeated MQTT Connection Failure
2 - Repeated WiFi Connection Failure
3 - Failed WiFiManager configuration portal
*/
void watchdogReboot(byte reason) {
Log.warning(F("Rebooting for reason code %d" CR), reason);
#if defined(ESP32)
ESP.restart();
#elif defined(ESP8266)
ESP.reset();
#else // Insert other architectures here
#endif
}