Hi allerseits,
ich habe mich bei einer Fehlersuche intensiv mit den triggern (Abhängigkeiten im GUI) bei callidomus beschäftigt und dabei ein Trigger-Verhalten gefunden, dass ich so nicht erwartet hätte. Das ist nicht unbedingt ein Fehler, aber da es nicht wirklich erwartungskonform ist (zumindest habe ich das nicht erwartet), wollte ich das hier mal festhalten - vielleicht hilft es ja jemandem bei der Fehlersuche.
Ausgangssituation: Ein Item, dass bei mir auf den Stop von Rolläden reagiert
Da Stop immer über ein 1 gesendet wird, ist auch "enforce_updates" notwendig, was meiner Meinung nach ursächlich für das Problem ist.
Ich habe eine SM, die von diesem Item getriggert wird. Für mein Beispiel hier reicht aber ein einfaches Item, das getriggert wird und einfach die Anzahl der Trigger zählt:
Was würde man erwarten? Jedes mal, wenn Stop gesendet wird, sollte Zaehler um den Wert 1 erhöht werden. Das stimmt auch für einen KNX-Taster, der eine 1 auf die GA x/y/z schickt. Wenn ich aber über die Visu auf das Stop-Item eine 1 schicke, wird Zaehler um 2 erhöht, Zaehler wird somit 2 mal getriggert.
Wenn man sich das Log anschaut, dann sieht man das auch deutlich:
- erstmal wird Stop über die Visu auf 1 gesetzt
- Dann werden alle Abhängigkeiten getriggert, also knx_send und Zaehler
- Dann sieht man, wie callidomus auf die x/y/z eine 1 schreibt
- Dann wird Zaehler um 1 erhöht
- (jetzt kommt das unerwartete): Das schreiben auf die x/y/z triggert das knx_listen von Stop
- Jetzt werden wieder alle Abhängigkeiten von Stop getriggert, wieder knx_send und Zaehler
- das knx-plugin weiß noch, dass der Trigger von der GA x/y/z kam und macht keinen erneuten write auf den Bus
- Der Zaehler wird getriggert und nochmal um 1 erhöht
Somit ist bei einem Visu-Tastendruck der Zaehler um 2 erhöht, bei einer KNX-Taste nur um 1. Das hätte ich so nicht erwartet!
Ich wollte das hier mal festhalten, weil das bei allen Zähl- oder Toggle-artigen Items zu unerwarteten Ergebnissen führen kann, bei mir war es eine SM, die auf Stop reagiert hat und durch die Trigger-Verdopplung immer wieder in einem falschen Zustand gelandet ist.
Der Workaround ist recht simpel:
Man lässt das Item, das auf den Trigger reagieren soll (in diesem Beispiel der Zaehler) nicht über callidomus triggern (trigger-Attribut), sondern über knx_listen. Bei einer SM muss man ein Hilfsitem einführen, das nur ein knx_listen hat und die SM dann darauf reagieren lassen.
Gruß, Waldemar
ich habe mich bei einer Fehlersuche intensiv mit den triggern (Abhängigkeiten im GUI) bei callidomus beschäftigt und dabei ein Trigger-Verhalten gefunden, dass ich so nicht erwartet hätte. Das ist nicht unbedingt ein Fehler, aber da es nicht wirklich erwartungskonform ist (zumindest habe ich das nicht erwartet), wollte ich das hier mal festhalten - vielleicht hilft es ja jemandem bei der Fehlersuche.
Ausgangssituation: Ein Item, dass bei mir auf den Stop von Rolläden reagiert
Code:
Stop: type: bool name: Stop enforce_updates: true (im GUI heißt das "Abhängigkeiten immer benachrichtigen") knx_dpt: 1 knx_listen: x/y/z knx_send: x/y/z
Ich habe eine SM, die von diesem Item getriggert wird. Für mein Beispiel hier reicht aber ein einfaches Item, das getriggert wird und einfach die Anzahl der Trigger zählt:
Code:
Zaehler: type: num code: Zaehler() + 1 trigger: Stop (heisst im GUI "Abhängigkeiten")
Wenn man sich das Log anschaut, dann sieht man das auch deutlich:
- erstmal wird Stop über die Visu auf 1 gesetzt
- Dann werden alle Abhängigkeiten getriggert, also knx_send und Zaehler
- Dann sieht man, wie callidomus auf die x/y/z eine 1 schreibt
- Dann wird Zaehler um 1 erhöht
- (jetzt kommt das unerwartete): Das schreiben auf die x/y/z triggert das knx_listen von Stop
- Jetzt werden wieder alle Abhängigkeiten von Stop getriggert, wieder knx_send und Zaehler
- das knx-plugin weiß noch, dass der Trigger von der GA x/y/z kam und macht keinen erneuten write auf den Bus
- Der Zaehler wird getriggert und nochmal um 1 erhöht
Somit ist bei einem Visu-Tastendruck der Zaehler um 2 erhöht, bei einer KNX-Taste nur um 1. Das hätte ich so nicht erwartet!
Ich wollte das hier mal festhalten, weil das bei allen Zähl- oder Toggle-artigen Items zu unerwarteten Ergebnissen führen kann, bei mir war es eine SM, die auf Stop reagiert hat und durch die Trigger-Verdopplung immer wieder in einem falschen Zustand gelandet ist.
Der Workaround ist recht simpel:
Code:
Zaehler: type: num code: Zaehler() + 1 knx_dpt: 1 knx_listen: x/y/z
Gruß, Waldemar
Kommentar