Ankündigung

Einklappen
Keine Ankündigung bisher.

Überraschender Trigger (mit Workaround)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [callidomus] Überraschender Trigger (mit Workaround)

    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

    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
    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:
    Code:
    Zaehler:
        type: num
        code: Zaehler() + 1
        trigger: Stop  (heisst im GUI "Abhängigkeiten")
    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:
    Code:
    Zaehler:
        type: num
        code: Zaehler() + 1
        knx_dpt: 1
        knx_listen: x/y/z
    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


    OpenKNX www.openknx.de

    #2
    Danke für diesen Workaround. Und wann kommt der Bugfix?

    Kommentar


      #3
      Hi,

      ich würde das nicht unbedingt einen Bug nennen, das Verhalten der einzelnen Funktionen ist nicht falsch, sie bringen in der Kombination nur ein nicht erwartetes Ergebnis. Und die Kombination mit knx_listen, knx_send, enforce_updates, trigger und visu-Steuerung ist ja auch keine häufige. Es funktioniert ja, wenn man es anders macht.

      Ich wollte nur darauf hinweisen, dass man in Situationen kommen kann, bei denen die Bedienung über die Visu zu anderen Ergebnissen führen kann wie durch KNX. Das hatte ich so nicht erwartet.

      Gruß, Waldemar
      OpenKNX www.openknx.de

      Kommentar

      Lädt...
      X