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:
+18
-10
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user