Per MQTT gesetzte Helligkeit sofort an die Anzeige senden

Am echten Broker aufgefallen: "hell_prozent = 100 uebernommen" stand im Log, die
Anzeige blieb aber auf 50 %. Der Wert landete korrekt in settings.json und der
Dimmer las ihn per reload() auch nach -- nur ging kein Helligkeitstelegramm raus.

Grund: Ein Telegramm wird nur beim *Wechsel* der Stufe gesendet (so war es schon
im alten MSP430-Programm gedacht, und fuer die LDR-Regelung ist das richtig).
Aendert man die Helligkeit von aussen, waehrend die Stufe dieselbe bleibt, gibt es
keinen Wechsel -- die Aenderung waere erst beim naechsten zufaelligen
Stufenwechsel sichtbar geworden.

run_esp32.main setzt nach dem reload() jetzt die Helligkeit der aktuellen Stufe
neu. Ohne Dimmer (kein LDR) gilt weiterhin direkt hell_prozent.

test_mqtt.TestHelligkeitWirdSofortSichtbar haelt das fest. Gegenprobe gemacht:
mit der alten Fassung schlaegt der Test fehl (keine Helligkeit gesendet), mit der
neuen geht genau ein Telegramm mit dem gesetzten Wert raus.

Am Geraet bestaetigt, Broker "nuccy": Verbindung steht, Status (ra/dec/ldr/
helligkeit/link/online) kommt retained an, Einstellungen werden uebernommen,
ungueltige Werte (500, Text) abgelehnt ohne settings.json anzufassen, und die
Anzeige reagiert jetzt sichtbar auf 100 % -> 15 % -> 50 %. 145 Tests gruen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-27 16:59:09 +02:00
parent bf39b75ac1
commit 41f5eb1821
3 changed files with 95 additions and 14 deletions
+18 -10
View File
@@ -136,18 +136,26 @@ def main(host=None, port=None, with_ldr=False, fake_display=False,
if with_mqtt:
import mqtt
# Kommt per MQTT eine neue Helligkeit, muss der Dimmer sie sofort
# sehen -- sonst wirkte sie erst nach einem Neustart.
def uebernehmen(werte):
if dimmer is not None:
dimmer.reload()
# Ohne LDR gibt es keinen Stufenwechsel, der die Helligkeit
# nachzieht: dann direkt die helle Stufe setzen.
if dimmer is None:
try:
"""Per MQTT geaenderte Einstellungen sofort sichtbar machen.
Der Dimmer muss die neuen Werte nicht nur lesen -- die Helligkeit
muss auch neu an die Anzeige. Sonst bliebe eine gesetzte
Helligkeit unsichtbar, solange die Stufe dieselbe bleibt: ein
Telegramm geht sonst nur beim *Wechsel* raus. (Am Geraet
aufgefallen, 2026-07-27.)
"""
try:
if dimmer is not None:
dimmer.reload()
if dimmer.level is not None:
d.set_brightness(dimmer.percent(dimmer.level))
else:
# Ohne LDR gibt es keine Stufen -- dann gilt "hell".
d.set_brightness(werte["hell_prozent"])
except Exception as e:
log("Anzeige: %s" % e)
except Exception as e:
log("Anzeige: %s" % e)
bridge = mqtt.connect_from_config(log=log, on_change=uebernehmen)