diff --git a/Firmware/GPAD_API/GPAD_API/GPAD_API.ino b/Firmware/GPAD_API/GPAD_API/GPAD_API.ino index c1931cc0..ad387ad1 100644 --- a/Firmware/GPAD_API/GPAD_API/GPAD_API.ino +++ b/Firmware/GPAD_API/GPAD_API/GPAD_API.ino @@ -1800,12 +1800,24 @@ void loop() { #if defined HMWK || defined KRAKE - if (!client.loop()) { - debugSerial.print(mqtt_broker_name); - debugSerial.print(" lost MQTT at: "); - debugSerial.println(millis()); - reconnect(); + const bool wasConnected = client.connected(); + if (!client.loop()) + { + debugSerial.print(mqtt_broker_name); + debugSerial.print(" lost MQTT at: "); + debugSerial.println(millis()); + if (wasConnected && !running_menu) + { + showMqttStatusLCD(false); + playAlarmLevel(problem); + } + reconnect(); + if (client.connected() && !running_menu) + { + annunciateAlarmLevel(&debugSerial); + } + } } if (wifiResetRequestedAtMs != 0 && (millis() - wifiResetRequestedAtMs) > 750) diff --git a/Firmware/GPAD_API/GPAD_API/GPAD_HAL.cpp b/Firmware/GPAD_API/GPAD_API/GPAD_HAL.cpp index 32e2acee..cd7dd7a7 100644 --- a/Firmware/GPAD_API/GPAD_API/GPAD_HAL.cpp +++ b/Firmware/GPAD_API/GPAD_API/GPAD_HAL.cpp @@ -608,6 +608,26 @@ void clearLCD(void) lcd.clear(); } +void showMqttStatusLCD(bool connected) +{ + lcd.init(); + lcd.clear(); + if (connected) + { + lcd.noBacklight(); + return; + } + lcd.backlight(); + lcd.setCursor(0, 0); + lcd.print("MQTT DISCONNECTED "); + lcd.setCursor(0, 1); + lcd.print("Alarm status stale "); + lcd.setCursor(0, 2); + lcd.print("Reconnecting... "); + lcd.setCursor(0, 3); + lcd.print(" "); +} + // Splash a message so we can tell the LCD is working void splashLCD(wifi_mode_t wifiMode, IPAddress &deviceIp) { diff --git a/Firmware/GPAD_API/GPAD_API/GPAD_HAL.h b/Firmware/GPAD_API/GPAD_API/GPAD_HAL.h index e179ae70..53838357 100644 --- a/Firmware/GPAD_API/GPAD_API/GPAD_HAL.h +++ b/Firmware/GPAD_API/GPAD_API/GPAD_HAL.h @@ -288,6 +288,7 @@ void restoreAlarmLevel(Stream *serialport); void unchanged_anunicateAlarmLevel(Stream *serialport); void annunciateAlarmLevel(Stream *serialport); void clearLCD(void); +void showMqttStatusLCD(bool connected); void splashLCD(wifi_mode_t wifiMode, IPAddress &deviceIp); void interpretBuffer(char *buf, int rlen, Stream *serialport, PubSubClient *client);