From abf674ac438f5cee4ac2ef04c8439a55e0aeff12 Mon Sep 17 00:00:00 2001 From: Yukti Date: Thu, 30 Apr 2026 03:39:53 +0530 Subject: [PATCH 1/3] alert user on LCD and DFPlayer when MQTT connection is lost --- Firmware/GPAD_API/GPAD_API/GPAD_API.ino | 22 +++++++++++++++++----- Firmware/GPAD_API/GPAD_API/GPAD_HAL.cpp | 20 ++++++++++++++++++++ Firmware/GPAD_API/GPAD_API/GPAD_HAL.h | 1 + 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/Firmware/GPAD_API/GPAD_API/GPAD_API.ino b/Firmware/GPAD_API/GPAD_API/GPAD_API.ino index c1931cc0..a774f0e8 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); + playNotBusyLevel(problem); + } + reconnect(); + if (client.connected() && !wasConnected && !running_menu) + { + restoreAlarmLevel(&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); From 3f025c9d08f5e1fc850da2d39a6335eea710988c Mon Sep 17 00:00:00 2001 From: Yukti Date: Thu, 30 Apr 2026 18:49:55 +0530 Subject: [PATCH 2/3] use playAlarmLevel for MQTT disconnect sound and annunciateAlarmLevel on reconnect to prevent audio lockup --- Firmware/GPAD_API/GPAD_API/GPAD_API.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/GPAD_API/GPAD_API/GPAD_API.ino b/Firmware/GPAD_API/GPAD_API/GPAD_API.ino index a774f0e8..c277f6da 100644 --- a/Firmware/GPAD_API/GPAD_API/GPAD_API.ino +++ b/Firmware/GPAD_API/GPAD_API/GPAD_API.ino @@ -1810,12 +1810,12 @@ void loop() if (wasConnected && !running_menu) { showMqttStatusLCD(false); - playNotBusyLevel(problem); + playAlarmLevel(problem); } reconnect(); if (client.connected() && !wasConnected && !running_menu) { - restoreAlarmLevel(&debugSerial); + annunciateAlarmLevel(&debugSerial); } } } From 236519141f4c8f1ea5dc34fd992443dae1989173 Mon Sep 17 00:00:00 2001 From: Yukti Date: Thu, 30 Apr 2026 19:47:47 +0530 Subject: [PATCH 3/3] restore alarm display on reconnect regardless of wasConnected to prevent LCD stuck on MQTT DISCONNECTED --- Firmware/GPAD_API/GPAD_API/GPAD_API.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/GPAD_API/GPAD_API/GPAD_API.ino b/Firmware/GPAD_API/GPAD_API/GPAD_API.ino index c277f6da..ad387ad1 100644 --- a/Firmware/GPAD_API/GPAD_API/GPAD_API.ino +++ b/Firmware/GPAD_API/GPAD_API/GPAD_API.ino @@ -1813,7 +1813,7 @@ void loop() playAlarmLevel(problem); } reconnect(); - if (client.connected() && !wasConnected && !running_menu) + if (client.connected() && !running_menu) { annunciateAlarmLevel(&debugSerial); }