Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [Gelöst] [Frage] stateChange bei Fehler rückgängig machen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Gelöst] [Frage] stateChange bei Fehler rückgängig machen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      MiSchroe last edited by

      Hallo,

      ich schreibe mit Hilfe des Adapter-Templates einen eigenen Adapter und stehe vor dem Problem, einen durch den User gesetzten Datenpunkt (ack = false) auf den vorherigen Wert zurücksetzen zu müssen.

      Konkret bedeutet das bei mir:
      <list type="decimal">3. Der Datenpunkt ist vom Typ level, d.h. Werte von 0-100%.

      1. Ich kann den aktuellen Wert nicht aus dem Gerät lesen (!!!)

      2. Es sind nur bestimmte Werte definiert (abhängig vom Device), z.B. 0%, 20%, 40%, 60%, 80% und 100%, ist aber für jedes Device unterschiedlich.

      D.h., wenn ich den Datenpunkt auf 20% setze, ist alles ok. Setze ich den Datenpunkt auf 25%, so ist das Ergebnis nicht definiert und ich möchte den Wert zurück auf den alten Wert setzen, z.B. wieder auf 20%.

      Lese ich den Wert mit getState aus, bekomme ich allerdings schon den neuen Wert geliefert. Muss ich mir die alten Werte also selbst speichern oder gibt es eine einfachere Methode?

      Viele Grüße

      Michael

      1 Reply Last reply Reply Quote 0
      • frankjoke
        frankjoke last edited by

        Wenn du das Objekt (mit getObject) und nicht den State abrufst solltest du auch 'oldState' bekommen, also den Status vor der letzen Änderung, und darauf kannst du zurücksetzen!

        1 Reply Last reply Reply Quote 0
        • M
          MiSchroe last edited by

          @Frank: Mit getObject bekomme ich nur die Definitionen, aber nicht den Wert, weder den aktuellen, noch den alten. Trotzdem danke.

          1 Reply Last reply Reply Quote 0
          • Jey Cee
            Jey Cee Developer last edited by

            Das von fsjoke vorgeschlagene vorgehen funktioniert mindestens bei der subscription State Change.

            Ich denke aber auch das es außerhalb gehen sollte.

            Wenn es nicht anders geht dann musst du es wohl selbst zwischen speichern.

            Gesendet von Unterwegs

            1 Reply Last reply Reply Quote 0
            • apollon77
              apollon77 last edited by

              Old state gibt's nur bei "onStateChanged". Aber am Ende ist das doch der Punkt an dem auch die Logik für Änderungen liegt und man entscheidet ob ein Wert korrekt ist, oder?! Damit braucht man dort eigentlich kein getObject.

              Ansonsten musst du die letzten Werte im Adapter speichern

              1 Reply Last reply Reply Quote 0
              • M
                MiSchroe last edited by

                Ich stehe - glaube ich - noch etwas auf dem Schlauch. Im````
                on('stateChange', ...

                
                So sieht es bei mir aktuell aus:
                

                adapter.on('stateChange', function (id, state) {
                if (state && !state.ack) {
                // Try setting the new value and revert to old value on error

                
                Michael
                1 Reply Last reply Reply Quote 0
                • AlCalzone
                  AlCalzone Developer last edited by

                  Ich glaube ihr werft hier Adapter-Entwicklung und Skript-Entwicklung zusammen.

                  Im JS-Adapter gibts im on/subscribce-Callback obj.(new)state und obj.oldState, in denen das alte und neue State-Objekt stehen. In eigenen Adaptern wird bei StateChange nur der jeweils aktuelle State an den Callback übergeben:

                  type StateChangeHandler = (id: string, obj: State) => void;
                  

                  Schätze hier führt kein Weg daran vorbei, selbst eine Liste der States zu führen, die mit ack=true vom Gerät bestätigt wurden.

                  1 Reply Last reply Reply Quote 0
                  • M
                    MiSchroe last edited by

                    Ok. Dann werde ich mir den alten Status selbst merken.

                    Danke an alle.

                    Michael

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    782
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    5
                    8
                    1336
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo