From 76c58833dc64c0a861a9451638ed09ecb1cabac2 Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Sun, 12 Apr 2026 17:13:15 +0200 Subject: [PATCH] function d added --- gaugemqttcontinuous.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/gaugemqttcontinuous.py b/gaugemqttcontinuous.py index 995c0af..5dfb89d 100644 --- a/gaugemqttcontinuous.py +++ b/gaugemqttcontinuous.py @@ -23,6 +23,7 @@ Serial log format: [HH:MM:SS.mmm] LEVEL message import network import utime import ujson +import urandom from umqtt.robust import MQTTClient from machine import Pin from neopixel import NeoPixel @@ -209,6 +210,7 @@ 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_DISCO = f"{MQTT_PREFIX}/disco" T_DISC_GAUGE = f"homeassistant/number/{MQTT_CLIENT_ID}/config" T_DISC_RED = f"homeassistant/switch/{MQTT_CLIENT_ID}_red/config" @@ -455,6 +457,8 @@ client_ref = None _mqtt_connected = False _last_mqtt_check = 0 +_disco_end_time = 0 + def _publish(topic, payload, retain=False): """Safely publish MQTT message, returning True on success.""" @@ -505,6 +509,12 @@ def on_message(topic, payload): info("All gauges zeroed") return + if topic == T_DISCO: + global _disco_end_time + _disco_end_time = utime.ticks_ms() + 5000 + info("Disco mode started") + return + for i, gt in enumerate(gauge_topics): if topic == gt["led_red"]: state = payload.upper() == "ON" @@ -592,6 +602,7 @@ def connect_mqtt(): client_ref = client client.subscribe(T_SET) client.subscribe(T_ZERO) + client.subscribe(T_DISCO) for gt in gauge_topics: client.subscribe(gt["set"]) client.subscribe(gt["zero"]) @@ -646,6 +657,7 @@ def check_mqtt(): client_ref.connect() client_ref.subscribe(T_SET) client_ref.subscribe(T_ZERO) + client_ref.subscribe(T_DISCO) for gt in gauge_topics: client_ref.subscribe(gt["set"]) client_ref.subscribe(gt["zero"]) @@ -844,6 +856,29 @@ def main(): while True: try: + now = utime.ticks_ms() + + if _disco_end_time > 0 and utime.ticks_diff(_disco_end_time, now) <= 0: + _disco_end_time = 0 + set_backlight_brightness(0, backlight_brightness[0]) + for i in range(num_gauges): + set_backlight_color(i, *backlight_color[i], backlight_brightness[i]) + info("Disco mode ended") + elif _disco_end_time > 0: + r = urandom.getrandbits(8) + g = urandom.getrandbits(8) + b = urandom.getrandbits(8) + r = max(r, 128) + g = max(g, 128) + b = max(b, 128) + for i in range(num_gauges): + leds_per_gauge = BACKLIGHT_LEDS_PER_GAUGE + STATUS_LEDS_PER_GAUGE + base_idx = i * leds_per_gauge + for j in range(BACKLIGHT_LEDS_PER_GAUGE): + leds_bl[base_idx + j] = (g, r, b) + leds_bl.write() + utime.sleep_ms(200) + check_wifi() if not check_mqtt(): @@ -852,8 +887,6 @@ def main(): client_ref.check_msg() - now = utime.ticks_ms() - moved_any = False for i, g in enumerate(gauge_objects): current_target = g._val_to_step(gauge_targets[i])