From cf36a2c07fecd1d5e89b471bb50a19729fc1d164 Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Tue, 21 Apr 2026 23:08:16 +0200 Subject: [PATCH] Discovery missing effects --- gauge.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/gauge.py b/gauge.py index 4ee571c..af5940b 100644 --- a/gauge.py +++ b/gauge.py @@ -923,6 +923,59 @@ def connect_mqtt(): raise last_error +def check_mqtt(): + global client_ref, _mqtt_connected, _last_mqtt_check + now = utime.ticks_ms() + if utime.ticks_diff(now, _last_mqtt_check) < _mqtt_check_interval_ms: + return _mqtt_connected + _last_mqtt_check = now + + if client_ref is None: + return False + + try: + client_ref.ping() + _mqtt_connected = True + return True + except Exception as e: + log_err(f"MQTT connection lost: {e}") + _mqtt_connected = False + + log_err("Attempting MQTT reconnection...") + from umqtt.robust import MQTTClient + for attempt in range(3): + try: + client_ref = MQTTClient( + client_id=MQTT_CLIENT_ID, + server=MQTT_BROKER, + port=MQTT_PORT, + user=MQTT_USER, + password=MQTT_PASSWORD, + keepalive=30, + ) + client_ref.set_callback(on_message) + client_ref.connect() + _mqtt_connected = True + info("MQTT reconnected!") + schedule_discovery() + _subscribe_all(client_ref) + publish_online(client_ref) + publish_state(client_ref) + publish_backlight_states(client_ref) + return True + except Exception as e2: + log_err(f"MQTT reconnect attempt {attempt + 1} failed: {e2}") + try: + client_ref.sock.close() + except Exception: + pass + gc.collect() + utime.sleep_ms(2000) + + log_err("MQTT reconnection failed after 3 attempts") + return False + + _mqtt_check_interval_ms = 30000 _last_mqtt_check = 0 _discovery_queue = []