MQTT troubleshooting

This commit is contained in:
2026-04-17 22:17:49 +02:00
parent 44afc207ea
commit 9a25805522

View File

@@ -756,6 +756,10 @@ def connect_mqtt():
_mqtt_check_interval_ms = 30000
_last_mqtt_check = 0
_discovery_phases = ()
_discovery_phase_idx = 0
_last_discovery_ms = 0
_DISCOVERY_INTERVAL_MS = 500
def check_mqtt():
@@ -791,7 +795,7 @@ def check_mqtt():
client_ref.connect()
_mqtt_connected = True
info("MQTT reconnected!")
publish_discovery(client_ref)
schedule_discovery()
_subscribe_all(client_ref)
publish_online(client_ref)
publish_state(client_ref)
@@ -1020,6 +1024,47 @@ def publish_discovery(client):
_publish_backlight_status_discovery(client, _dev_ref)
def schedule_discovery():
global _discovery_phases, _discovery_phase_idx, _last_discovery_ms
_dev_ref = _DEVICE
_discovery_phases = (
lambda client: _clear_legacy_discovery(client),
lambda client: _publish_gauge_discovery(client, _dev_ref),
lambda client: _publish_speed_discovery(client, _dev_ref),
lambda client: _publish_acceleration_discovery(client, _dev_ref),
lambda client: _publish_indicator_led_discovery(client, _dev_ref),
lambda client: _publish_backlight_status_discovery(client, _dev_ref),
)
_discovery_phase_idx = 0
_last_discovery_ms = 0
def _clear_legacy_discovery(client):
for i in range(num_gauges):
for old_t in [
f"homeassistant/switch/{MQTT_CLIENT_ID}_g{i}_red/config",
f"homeassistant/switch/{MQTT_CLIENT_ID}_g{i}_green/config",
f"homeassistant/switch/{MQTT_CLIENT_ID}_g{i}_status_red/config",
f"homeassistant/switch/{MQTT_CLIENT_ID}_g{i}_status_green/config",
]:
client.publish(old_t, b"", retain=True)
_discovery_pause(client, count=2, delay_ms=15)
def service_discovery():
global _discovery_phase_idx, _last_discovery_ms
if client_ref is None or _discovery_phase_idx >= len(_discovery_phases):
return
now = utime.ticks_ms()
if _last_discovery_ms and utime.ticks_diff(now, _last_discovery_ms) < _DISCOVERY_INTERVAL_MS:
return
_discovery_phases[_discovery_phase_idx](client_ref)
_discovery_phase_idx += 1
_last_discovery_ms = utime.ticks_ms()
def publish_online(client):
for i in range(num_gauges):
client.publish(gauge_topics[i]["status"], b"online", retain=True)
@@ -1052,11 +1097,9 @@ def main():
connect_wifi(WIFI_SSID, WIFI_PASSWORD)
connect_mqtt()
info("Publishing discovery...")
publish_discovery(client_ref)
_subscribe_all(client_ref)
schedule_discovery()
apply_motion_defaults()
info("Draining initial retained messages...")
for _ in range(50):
@@ -1099,6 +1142,7 @@ def main():
continue
client_ref.check_msg()
service_discovery()
arduino_recv()
_flush_backlight_state()