MQTT doesn't autodiscover properly

This commit is contained in:
2026-04-17 21:24:17 +02:00
parent 10ef3580b2
commit 549a7c7d37

199
gauge.py
View File

@@ -812,6 +812,11 @@ def _discovery_pause(client, count=5, delay_ms=25):
gc.collect() gc.collect()
def _publish_discovery_entity(client, topic, payload, log_msg):
client.publish(topic, ujson.dumps(payload), retain=True)
info(log_msg)
def publish_discovery(client): def publish_discovery(client):
"""Publish all HA MQTT discovery payloads for gauges and LEDs.""" """Publish all HA MQTT discovery payloads for gauges and LEDs."""
_dev_ref = _DEVICE _dev_ref = _DEVICE
@@ -825,86 +830,80 @@ def publish_discovery(client):
f"homeassistant/switch/{MQTT_CLIENT_ID}_g{i}_status_green/config", f"homeassistant/switch/{MQTT_CLIENT_ID}_g{i}_status_green/config",
]: ]:
client.publish(old_t, b"", retain=True) client.publish(old_t, b"", retain=True)
_discovery_pause(client, count=2, delay_ms=15) _discovery_pause(client, count=2, delay_ms=15)
for i, g in enumerate(gauges): for i, g in enumerate(gauges):
gt = gauge_topics[i] gt = gauge_topics[i]
client.publish( _publish_discovery_entity(
client,
gt["disc"], gt["disc"],
ujson.dumps( {
{ "name": g["entity_name"],
"name": g["entity_name"], "unique_id": f"{MQTT_CLIENT_ID}_g{i}",
"unique_id": f"{MQTT_CLIENT_ID}_g{i}", "cmd_t": gt["set"],
"cmd_t": gt["set"], "stat_t": gt["state"],
"stat_t": gt["state"], "avty_t": gt["status"],
"avty_t": gt["status"], "min": g["min"],
"min": g["min"], "max": g["max"],
"max": g["max"], "step": 1,
"step": 1, "unit_of_meas": g["unit"],
"unit_of_meas": g["unit"], "icon": "mdi:gauge",
"icon": "mdi:gauge", "dev": _dev_ref,
"dev": _dev_ref, },
} f"Discovery: gauge {i} ({g['name']})",
),
retain=True,
) )
info(f"Discovery: gauge {i} ({g['name']})")
_discovery_pause(client) _discovery_pause(client)
client.publish( _publish_discovery_entity(
client,
gt["speed_disc"], gt["speed_disc"],
ujson.dumps( {
{ "name": f"{g['name']} Speed",
"name": f"{g['name']} Speed", "unique_id": f"{MQTT_CLIENT_ID}_g{i}_speed",
"unique_id": f"{MQTT_CLIENT_ID}_g{i}_speed", "cmd_t": gt["speed"],
"cmd_t": gt["speed"], "stat_t": gt["speed_state"],
"stat_t": gt["speed_state"], "avty_t": gt["status"],
"avty_t": gt["status"], "min": 1,
"min": 1, "max": 50000,
"max": 50000, "step": 1,
"step": 1, "mode": "box",
"mode": "box", "unit_of_meas": "steps/s",
"unit_of_meas": "steps/s", "icon": "mdi:speedometer",
"icon": "mdi:speedometer", "enabled_by_default": False,
"enabled_by_default": False, "entity_category": "config",
"entity_category": "config", "dev": _dev_ref,
"dev": _dev_ref, },
} f"Discovery: gauge {i} speed",
),
retain=True,
) )
info(f"Discovery: gauge {i} speed")
_discovery_pause(client)
client.publish( _publish_discovery_entity(
client,
gt["acceleration_disc"], gt["acceleration_disc"],
ujson.dumps( {
{ "name": f"{g['name']} Acceleration",
"name": f"{g['name']} Acceleration", "unique_id": f"{MQTT_CLIENT_ID}_g{i}_acceleration",
"unique_id": f"{MQTT_CLIENT_ID}_g{i}_acceleration", "cmd_t": gt["acceleration"],
"cmd_t": gt["acceleration"], "stat_t": gt["acceleration_state"],
"stat_t": gt["acceleration_state"], "avty_t": gt["status"],
"avty_t": gt["status"], "min": 1,
"min": 1, "max": 100000,
"max": 100000, "step": 1,
"step": 1, "mode": "box",
"mode": "box", "unit_of_meas": "steps/s2",
"unit_of_meas": "steps/s2", "icon": "mdi:chart-bell-curve-cumulative",
"icon": "mdi:chart-bell-curve-cumulative", "enabled_by_default": False,
"enabled_by_default": False, "entity_category": "config",
"entity_category": "config", "dev": _dev_ref,
"dev": _dev_ref, },
} f"Discovery: gauge {i} acceleration",
),
retain=True,
) )
info(f"Discovery: gauge {i} acceleration")
_discovery_pause(client) _discovery_pause(client)
client.publish( _publish_discovery_entity(
client,
gt["led_red_disc"], gt["led_red_disc"],
ujson.dumps({ {
"name": f"{g['name']} Red LED", "name": f"{g['name']} Red LED",
"uniq_id": f"{MQTT_CLIENT_ID}_g{i}_red", "uniq_id": f"{MQTT_CLIENT_ID}_g{i}_red",
"cmd_t": gt["led_red"], "cmd_t": gt["led_red"],
@@ -916,15 +915,14 @@ def publish_discovery(client):
"icon": "mdi:led-on", "icon": "mdi:led-on",
"dev": _dev_ref, "dev": _dev_ref,
"ret": True, "ret": True,
}), },
retain=True, f"Discovery: gauge {i} red LED",
) )
info(f"Discovery: gauge {i} red LED")
_discovery_pause(client)
client.publish( _publish_discovery_entity(
client,
gt["led_green_disc"], gt["led_green_disc"],
ujson.dumps({ {
"name": f"{g['name']} Green LED", "name": f"{g['name']} Green LED",
"uniq_id": f"{MQTT_CLIENT_ID}_g{i}_green", "uniq_id": f"{MQTT_CLIENT_ID}_g{i}_green",
"cmd_t": gt["led_green"], "cmd_t": gt["led_green"],
@@ -936,37 +934,34 @@ def publish_discovery(client):
"icon": "mdi:led-on", "icon": "mdi:led-on",
"dev": _dev_ref, "dev": _dev_ref,
"ret": True, "ret": True,
}), },
retain=True, f"Discovery: gauge {i} green LED",
) )
info(f"Discovery: gauge {i} green LED")
_discovery_pause(client) _discovery_pause(client)
client.publish( _publish_discovery_entity(
client,
gt["led_bl_disc"], gt["led_bl_disc"],
ujson.dumps( {
{ "name": f"{g['name']} Backlight",
"name": f"{g['name']} Backlight", "uniq_id": f"{MQTT_CLIENT_ID}_g{i}_bl",
"uniq_id": f"{MQTT_CLIENT_ID}_g{i}_bl", "cmd_t": gt["led_bl"],
"cmd_t": gt["led_bl"], "stat_t": gt["led_bl_state"],
"stat_t": gt["led_bl_state"], "schema": "json",
"schema": "json", "supported_color_modes": ["rgb"],
"supported_color_modes": ["rgb"], "effect": True,
"effect": True, "effect_list": _EFFECT_LIST,
"effect_list": _EFFECT_LIST, "icon": "mdi:led-strip",
"icon": "mdi:led-strip", "dev": _dev_ref,
"dev": _dev_ref, "ret": True,
"ret": True, },
} f"Discovery: gauge {i} backlight",
),
retain=True,
) )
info(f"Discovery: gauge {i} backlight")
_discovery_pause(client)
client.publish( _publish_discovery_entity(
client,
gt["status_red_disc"], gt["status_red_disc"],
ujson.dumps({ {
"name": f"{g['name']} Status Red", "name": f"{g['name']} Status Red",
"uniq_id": f"{MQTT_CLIENT_ID}_g{i}_status_red", "uniq_id": f"{MQTT_CLIENT_ID}_g{i}_status_red",
"cmd_t": gt["status_red"], "cmd_t": gt["status_red"],
@@ -978,15 +973,14 @@ def publish_discovery(client):
"icon": "mdi:led-on", "icon": "mdi:led-on",
"dev": _dev_ref, "dev": _dev_ref,
"ret": True, "ret": True,
}), },
retain=True, f"Discovery: gauge {i} status red",
) )
info(f"Discovery: gauge {i} status red")
_discovery_pause(client)
client.publish( _publish_discovery_entity(
client,
gt["status_green_disc"], gt["status_green_disc"],
ujson.dumps({ {
"name": f"{g['name']} Status Green", "name": f"{g['name']} Status Green",
"uniq_id": f"{MQTT_CLIENT_ID}_g{i}_status_green", "uniq_id": f"{MQTT_CLIENT_ID}_g{i}_status_green",
"cmd_t": gt["status_green"], "cmd_t": gt["status_green"],
@@ -998,10 +992,9 @@ def publish_discovery(client):
"icon": "mdi:led-on", "icon": "mdi:led-on",
"dev": _dev_ref, "dev": _dev_ref,
"ret": True, "ret": True,
}), },
retain=True, f"Discovery: gauge {i} status green",
) )
info(f"Discovery: gauge {i} status green")
_discovery_pause(client) _discovery_pause(client)