function d added

This commit is contained in:
2026-04-12 17:13:15 +02:00
parent 7fb3b5e1fd
commit 76c58833dc

View File

@@ -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])