All light commands collected under "led" mqtt topic

This commit is contained in:
2026-04-11 23:33:49 +02:00
parent db3798dc07
commit 9e09b3fa27

View File

@@ -194,50 +194,6 @@ def make_gauge_topics(prefix, gauge_id):
"led_red_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_red/config", "led_red_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_red/config",
"led_green_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_green/config", "led_green_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_green/config",
"led_bl_disc": f"homeassistant/light/{MQTT_CLIENT_ID}_g{gauge_id}_bl/config", "led_bl_disc": f"homeassistant/light/{MQTT_CLIENT_ID}_g{gauge_id}_bl/config",
"status_red": f"{prefix}/gauge{gauge_id}/status_led/red/set",
"status_green": f"{prefix}/gauge{gauge_id}/status_led/green/set",
"status_red_state": f"{prefix}/gauge{gauge_id}/status_led/red/state",
"status_green_state": f"{prefix}/gauge{gauge_id}/status_led/green/state",
"status_red_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_status_red/config",
"status_green_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_status_green/config",
}
gauge_topics = [make_gauge_topics(MQTT_PREFIX, g["id"]) for g in gauges]
T_SET = f"{MQTT_PREFIX}/set"
T_STATE = f"{MQTT_PREFIX}/state"
T_STATUS = f"{MQTT_PREFIX}/status"
T_ZERO = f"{MQTT_PREFIX}/zero"
T_DISC_GAUGE = f"homeassistant/number/{MQTT_CLIENT_ID}/config"
T_DISC_RED = f"homeassistant/switch/{MQTT_CLIENT_ID}_red/config"
T_DISC_GREEN = f"homeassistant/switch/{MQTT_CLIENT_ID}_green/config"
T_DISC_BL = f"homeassistant/light/{MQTT_CLIENT_ID}_bl/config"
def make_gauge_topics(prefix, gauge_id):
return {
"set": f"{prefix}/gauge{gauge_id}/set",
"state": f"{prefix}/gauge{gauge_id}/state",
"status": f"{prefix}/gauge{gauge_id}/status",
"zero": f"{prefix}/gauge{gauge_id}/zero",
"disc": f"homeassistant/number/{MQTT_CLIENT_ID}_g{gauge_id}/config",
"led_red": f"{prefix}/gauge{gauge_id}/led/red/set",
"led_green": f"{prefix}/gauge{gauge_id}/led/green/set",
"led_bl": f"{prefix}/gauge{gauge_id}/led/backlight/set",
"led_red_state": f"{prefix}/gauge{gauge_id}/led/red/state",
"led_green_state": f"{prefix}/gauge{gauge_id}/led/green/state",
"led_bl_state": f"{prefix}/gauge{gauge_id}/led/backlight/state",
"led_red_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_red/config",
"led_green_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_green/config",
"led_bl_disc": f"homeassistant/light/{MQTT_CLIENT_ID}_g{gauge_id}_bl/config",
"status_red": f"{prefix}/gauge{gauge_id}/status_led/red/set",
"status_green": f"{prefix}/gauge{gauge_id}/status_led/green/set",
"status_red_state": f"{prefix}/gauge{gauge_id}/status_led/red/state",
"status_green_state": f"{prefix}/gauge{gauge_id}/status_led/green/state",
"status_red_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_status_red/config",
"status_green_disc": f"homeassistant/switch/{MQTT_CLIENT_ID}_g{gauge_id}_status_green/config",
} }
@@ -356,11 +312,7 @@ def _flush_backlight(client):
}, },
"brightness": int(backlight_brightness[i] * 2.55), "brightness": int(backlight_brightness[i] * 2.55),
} }
client.publish( client.publish(gt["led_bl_state"], ujson.dumps(payload), retain=True)
f"{gt['set'].replace('/set', '/backlight/state')}",
ujson.dumps(payload),
retain=True,
)
info( info(
f"Gauge {i} backlight: {payload['state']} {backlight_color[i]} @ {backlight_brightness[i]}%" f"Gauge {i} backlight: {payload['state']} {backlight_color[i]} @ {backlight_brightness[i]}%"
) )
@@ -559,17 +511,19 @@ def on_message(topic, payload):
info(f"Gauge {i} backlight → #{r:02x}{g:02x}{b:02x} @ {brightness}%") info(f"Gauge {i} backlight → #{r:02x}{g:02x}{b:02x} @ {brightness}%")
return return
if topic == gt["status_red"]: if topic == gt["led_status_red"]:
state = payload.upper() == "ON" state = payload.upper() == "ON"
set_status_led(i, "red", state) set_status_led(i, "red", state)
_publish(gt["status_red_state"], "ON" if state else "OFF", retain=True) _publish(gt["led_status_red_state"], "ON" if state else "OFF", retain=True)
info(f"Gauge {i} status red → {'ON' if state else 'OFF'}") info(f"Gauge {i} status red → {'ON' if state else 'OFF'}")
return return
if topic == gt["status_green"]: if topic == gt["led_status_green"]:
state = payload.upper() == "ON" state = payload.upper() == "ON"
set_status_led(i, "green", state) set_status_led(i, "green", state)
_publish(gt["status_green_state"], "ON" if state else "OFF", retain=True) _publish(
gt["led_status_green_state"], "ON" if state else "OFF", retain=True
)
info(f"Gauge {i} status green → {'ON' if state else 'OFF'}") info(f"Gauge {i} status green → {'ON' if state else 'OFF'}")
return return
@@ -602,8 +556,8 @@ def connect_mqtt():
client.subscribe(gt["led_red"]) client.subscribe(gt["led_red"])
client.subscribe(gt["led_green"]) client.subscribe(gt["led_green"])
client.subscribe(gt["led_bl"]) client.subscribe(gt["led_bl"])
client.subscribe(gt["status_red"]) client.subscribe(gt["led_status_red"])
client.subscribe(gt["status_green"]) client.subscribe(gt["led_status_green"])
_mqtt_connected = True _mqtt_connected = True
info(f"MQTT connected client_id={MQTT_CLIENT_ID}") info(f"MQTT connected client_id={MQTT_CLIENT_ID}")
return client return client
@@ -654,8 +608,8 @@ def check_mqtt():
client_ref.subscribe(gt["led_red"]) client_ref.subscribe(gt["led_red"])
client_ref.subscribe(gt["led_green"]) client_ref.subscribe(gt["led_green"])
client_ref.subscribe(gt["led_bl"]) client_ref.subscribe(gt["led_bl"])
client_ref.subscribe(gt["status_red"]) client_ref.subscribe(gt["led_status_red"])
client_ref.subscribe(gt["status_green"]) client_ref.subscribe(gt["led_status_green"])
_mqtt_connected = True _mqtt_connected = True
info("MQTT reconnected!") info("MQTT reconnected!")
publish_discovery(client_ref) publish_discovery(client_ref)
@@ -761,13 +715,13 @@ def publish_discovery(client):
info(f"Discovery: gauge {i} backlight") info(f"Discovery: gauge {i} backlight")
client.publish( client.publish(
gt["status_red_disc"], gt["led_status_red_disc"],
ujson.dumps( 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["led_status_red"],
"stat_t": gt["status_red_state"], "stat_t": gt["led_status_red_state"],
"pl_on": "ON", "pl_on": "ON",
"pl_off": "OFF", "pl_off": "OFF",
"icon": "mdi:led-on", "icon": "mdi:led-on",
@@ -780,13 +734,13 @@ def publish_discovery(client):
info(f"Discovery: gauge {i} status red") info(f"Discovery: gauge {i} status red")
client.publish( client.publish(
gt["status_green_disc"], gt["led_status_green_disc"],
ujson.dumps( 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["led_status_green"],
"stat_t": gt["status_green_state"], "stat_t": gt["led_status_green_state"],
"pl_on": "ON", "pl_on": "ON",
"pl_off": "OFF", "pl_off": "OFF",
"icon": "mdi:led-on", "icon": "mdi:led-on",