Ankündigung

Einklappen
Keine Ankündigung bisher.

On_change Syntax

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

    On_change Syntax

    Hi,

    Ich versuche bisher vergeblich ein item mit "on_change" zu konfigurieren.
    Hier mal ein einfach Test item.

    "Status" soll einfach nur dann auf 1 gesetzt werden, wenn sich "InfoEin" auf 1 ändert.

    Code:
    Test:
    
        InfoEin:
            type: bool
            knx_dpt: 1
            visu_acl: rw
    
            Status:
                type: bool
                visu_acl: rw
                eval: 1 if sh.Test.InfoEin() == 1 else None
                on_change: Test.InfoEin = 1​
    Test case:
    Setze ich im Executer plugin
    1) sh.Test.InfoEin(0) --> Test.InfoEin.Status bleibt auf 0 --> korrekt
    2) sh.Test.InfoEin(1) --> Test.InfoEin.Status bleibt auf weiter auf 0 --> WARUM​

    Offenbar verstehe ich hier etwas nicht. Vielleicht kann mir jemand helfen?

    mfg
    Markus

    #2
    Mit on_change änderst Du den Wert eines anderen Items. Wenn sich also Test.InfoEin.Status ändert, wird der Wert von Test.InfoEin auf 1 gesetzt.

    Nach dem von Dir beschriebenen Testcase willst Du jedoch bei Änderung eines des Items Test.InfoEin​ den Wert von Test.InfoEin.Status​ verändern. Dazu brauchst Du kein on_change. Das dazu benötigte eval Attribut des Items Test.InfoEin.Status​​ hast Du ja bereits geschrieben. Es wird nur nicht ausgelöst, weil Du kein eval_trigger Attribut definiert hast. Du müsstest noch im Item Test.InfoEin.Status​ ein eval_trigger: Test.InfoEin​ hinzufügen und das on_change Attribut entfernen.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #3
      Vielen Dank Msinn,
      Da hab ich wohl etwas missverstanden.

      Eine Frage noch. Kann ich das auslösen von eval auch um zB 30 sek verzögern.
      zB eval_Trigger löst aus, aber der wert wird erst nach 30 sek. gesetzt?
      Kann man hier autotimer inkludieren?

      Kommentar


        #4
        Zitat von fuxl66 Beitrag anzeigen
        Kann ich das auslösen von eval auch um zB 30 sek verzögern.
        Nein, direkt geht das nicht.

        Du kannst dazu aber in einem eval oder on_change die timer Funktion nutzen, um ein (anderes) Item verzögert zu setzen.
        Genau wie in Logiken kannst Du die Zuweisung zu einem Item verzögern, wenn Du statt dernomalen Wertzuweisung sh.myitem(<Wert>) die timer-Funktion des Items aufrufst sh.myitem.timer(<Verzögerung>, <Wert>)

        Zitat von fuxl66 Beitrag anzeigen
        Kann man hier autotimer inkludieren?
        Was meinst Du damit?
        Viele Grüße
        Martin

        There is no cloud. It's only someone else's computer.

        Kommentar


          #5
          Zitat von Msinn Beitrag anzeigen
          statt der nomalen Wertzuweisung sh.myitem(<Wert>) die timer-Funktion des Items aufrufst sh.myitem.timer(<Verzögerung>, <Wert>)
          Wow - DEN kannte ich noch nicht, danke Martin! Mein Bauch sagt mir, dass das auch die Lösung für zwei uralte Probleme sein kann, die wir vor Jahren immer mal wieder diskutiert haben (Blinklicht bzw. Universaltimer für shNG rein über Items und ohne Zusatzlogik - siehe hier, hier und hier). Das probier ich demnächst mal aus ...

          /tom

          Kommentar


            #6
            Auf DEN war ich wieder aufmerksam geworden, als ich für das kommende Release v1.10 Item Attribute implementiert habe, um eine Hysterese Schleife abzubilden.
            Viele Grüße
            Martin

            There is no cloud. It's only someone else's computer.

            Kommentar

            Lädt...
            X