Tahoma: verlorene Funkbefehle erkennen und nachsenden
Der Funk von der Box zum Motor ist unbestaetigt. Die Box nimmt einen Befehl an und meldet Erfolg, auch wenn er den Motor nie erreicht - dann faehrt der Behang gar nicht. Erkennbar ist das allein daran, dass er hinterher nicht dort steht, wo er stehen soll. Genau das ist jetzt die Bedingung fuer den zweiten Versuch. Der Ansatz stand schon in der Datei, konnte aber nicht wirken: Die Endstellung wurde gegen Neigung 0 geprueft, obwohl gerade die gewuenschte Neigung geschickt worden war. Damit lieferte die Wartefunktion immer "nicht erreicht" - verlorener Befehl und geglueckte Fahrt sahen gleich aus, jedes Kommando lief zweimal 120 Sekunden und ging zweimal raus. aktion["actor_name"] gibt es im Auftrag nicht; der Name steht eine Ebene hoeher. Der KeyError flog nach der Vorstufe, also nachdem "Neigung 0" schon draussen war: der Behang fuhr auf Position und liess die Lamellen offen. 23 Mal im Protokoll, zuletzt am 21.09. um 18:49 an acht Jalousien. Jetzt: _positionsZiel() leitet das Ziel auch fuer "up" und "down" ab (0 bzw. 100 Prozent Schliessung). Ohne das haette ausgerechnet der haeufigste Befehl kein pruefbares Ziel und der Wiederholversuch liefe fuer ihn leer. _zieleErreicht() vergleicht mit zwei Prozentpunkten Spielraum: io-Motoren melden fuer befohlene 100 gern 99 oder 101. Ohne Toleranz gaelte eine geglueckte Fahrt als verloren. None heisst "ist egal" - damit funktionieren auch Rollladen ohne Lamellen und reine Neigungsbefehle. _fahren() haelt die Schleife an einer Stelle. Vor der Wiederholung wird noch einmal nachgesehen, weil der Stand nur alle zwei Sekunden gelesen wird und der Behang in der letzten Sekunde angekommen sein kann. Ohne pruefbares Ziel (stop, my, wink) wird einmal geschickt und nicht gewartet. Wiederholt wird ausdruecklich immer, wenn das Ziel nicht erreicht ist - auch wenn der Behang unterwegs war und woanders stehengeblieben ist. Die Unterscheidung waere ueber core:MovingState moeglich und ist bewusst nicht gewollt. Geprueft ohne Schaltbefehle: Ziel erreicht -> einmal gesendet; Befehl verloren -> zweimal; erster verloren, zweiter kommt an -> zweimal, Erfolg; 99 statt 100 -> einmal; Rollladen ohne Lamellen, stop und reine Neigung jeweils richtig. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1242,6 +1242,9 @@ class Runner:
|
||||
continue
|
||||
auftrag = {
|
||||
"actor_url": kommando["actor_url"],
|
||||
# Nur fuer Protokollmeldungen des Transports: "io://1215-.../332898"
|
||||
# sagt niemandem, welcher Rollladen gemeint ist.
|
||||
"actor_name": kommando["actor_name"],
|
||||
"command_url": kommando["command_url"],
|
||||
"params": [{"url": p["url"], "name": p["parameter_name"],
|
||||
"wert": aktion["werte"].get(p["id"], "")}
|
||||
|
||||
Reference in New Issue
Block a user