Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. [Gelöst] [Frage] stateChange bei Fehler rückgängig machen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

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

Geplant Angeheftet Gesperrt Verschoben Entwicklung
8 Beiträge 5 Kommentatoren 1.6k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    MiSchroe
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • frankjokeF Offline
      frankjokeF Offline
      frankjoke
      schrieb am zuletzt editiert von
      #2

      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!

      Frank,

      NUC's, VM's und Raspi's unter Raspian, Ubuntu und Debian zum Testen.
      Adapter die ich selbst beigesteuert habe: BMW, broadlink2, radar2, systeminfo, km200, xs1 und einige im Anmarsch!

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        MiSchroe
        schrieb am zuletzt editiert von
        #3

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

        1 Antwort Letzte Antwort
        0
        • Jey CeeJ Online
          Jey CeeJ Online
          Jey Cee
          Developer
          schrieb am zuletzt editiert von
          #4

          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

          Persönlicher Support
          Spenden -> paypal.me/J3YC33

          1 Antwort Letzte Antwort
          0
          • apollon77A Offline
            apollon77A Offline
            apollon77
            schrieb am zuletzt editiert von
            #5

            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

            Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

            • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
            • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              MiSchroe
              schrieb am zuletzt editiert von
              #6

              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 Antwort Letzte Antwort
              0
              • AlCalzoneA Offline
                AlCalzoneA Offline
                AlCalzone
                Developer
                schrieb am zuletzt editiert von
                #7

                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.

                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                1 Antwort Letzte Antwort
                0
                • M Offline
                  M Offline
                  MiSchroe
                  schrieb am zuletzt editiert von
                  #8

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

                  Danke an alle.

                  Michael

                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  690

                  Online

                  32.7k

                  Benutzer

                  82.3k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe