Ankündigung

Einklappen
Keine Ankündigung bisher.

on_update aber nicht on_change

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

    on_update aber nicht on_change

    Ich möchte gern den Dimmwert ändern, wenn ich schalten schon true ist, aber nicht, wenn es vorher false war. Ich bräuchte sowas wie on_update, was aber nur bei einem update, OHNE Änderung ausgeführt wird. update_age und age kommen nicht in Frage, weil die Ergebnisse bei einem change abweichen abweichen. Gibt es da einen Workaround oder eine andere Lösung, wie das zu bewerkstelligen ist?

    Code:
        schalten:
            type: bool
            enforce_updates: yes
            on_update: ..Dimmwert = min(sh...Dimmwert() + 64, 255) if value and sh..self.update_age() != sh..self.age() else None

    Und hier ist noch ein kleiner Fehler in der Doku:

    https://www.smarthomeng.de/user/refe...on_update.html

    Wenn in eval Ausdrücken in on_change oder on_update Attributen auf den alten Wert des Items zugegriffen werden soll, muss dazu die Item Funktion prev_value() oder das Item Property property.last_value genutzt werden. Auf den alten Wert des aktuellen Items kann ohne die Angabe des vollständigen Item Pfades durch den Ausdruck sh.self.prev_value() zugegriffen werden.
    Statt "sh.self.prev_value()" müsste es "sh..self.prev_value()" heißen, sprich da fehlt noch ein Punkt.

    #2
    Hast du's denn mal mit dem prev_value probiert? Also
    = None if sh..self.prev_value() == sh..self() and sh..self() is True else ....

    Kommentar


      #3
      Zitat von Onkelandy Beitrag anzeigen
      Hast du's denn mal mit dem prev_value probiert? Also
      = None if sh..self.prev_value() == sh..self() and sh..self() is True else ....
      None if sh..self.prev_value() and sh..self() else...

      Kommentar


        #4
        Nein geht so nicht, denn value ist true und prev_value ist false. Und prev_value verändert sich ja mit einer erneuten Betätigung von On, also true nicht. prev_value and value können ja niemals den gleichen Wert haben. Deshalb ist diese Condition auch nicht sinnvoll oder übersehe ich da was?

        Was mich aber generell stört, dass es mit enforce_updates keine Unterscheidung mehr zwischen on_update und on_change gibt. Klar werden alle anhängigen Sachen im item neu ausgelöst, aber dennoch ändert sich doch der Wert des Items nicht, warum sollte man dann nicht zwischen on_update und on_change unterscheiden können?
        Zuletzt geändert von Cannon; 26.01.2021, 20:56.

        Kommentar


          #5
          Hm, ja, da hast du Recht.. prev_value wird ja bei einem Update nicht geschrieben.. Könntest du vielleicht versuchen, das Ganze mit einem eval zu lösen? Dort wird ja zwischen value und sh..self() unterschieden.. value ist sozusagen der neue Wert und sh..self() der noch aktuelle.

          Im Notfall über ein Hilfsitem mit entsprechendem eval_trigger auf das schalten item..?

          Ad on_change + enforce_updates = on_update find ich auch schade, aber in gewisser Weise ist es nachvollziehbar. Und va. war das von Anfang an so und da lässt sich wohl nix mehr dran rütteln.

          Kommentar


            #6
            Mit dem Attribut hier müsstest aber doch so wie oben beschrieben arbeiten können.. https://www.smarthomeng.de/user/refe...enforce_change

            Kommentar


              #7
              Zitat von Onkelandy Beitrag anzeigen
              Mit dem Attribut hier müsstest aber doch so wie oben beschrieben arbeiten können.. https://www.smarthomeng.de/user/refe...enforce_change
              Laut Doku ist es ja nicht eine leichtere Version von enforce_updates, sondern eine verschärfte Form. Das wird also sicher nicht funktionieren. Wir brauchen hier ja eine leichtere Form, die eben die change-Werte nicht verändert.

              Dennoch mal die Frage, ab welcher Version das drin ist? Das steht in der Doku nicht.

              Kommentar


                #8
                Es ging um die Aussage " prev_value and value können ja niemals den gleichen Wert haben." Das enforce_change würde das aber wohl ermöglichen.

                Ich vermute sei 1.8.0

                Kommentar


                  #9
                  Zitat von Onkelandy Beitrag anzeigen
                  Ich vermute sei 1.8.0
                  Ich teste das mal, wenn ich das Update gemacht habe ... bin allerrdings noch bei 1.7.2...

                  Kommentar


                    #10
                    Ich habe das Problem ganz anders gelöst. Es ging ja im Prinzip darum nur den Dimmwert zu erhöhen, wenn das Licht schon an ist. Nun habe ich mir im KNX-Gruppenmonitor mal den Ablauf angeschaut und festgestellt, dass der Dimmwert noch auf 0 steht, wenn schalten schon True ist und frage das dann entsprechend ab.

                    Kommentar

                    Lädt...
                    X