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. Skripten / Logik
  4. setStateAsync-Änderungen landen in Endlosschleife

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    251

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

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

setStateAsync-Änderungen landen in Endlosschleife

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
13 Beiträge 4 Kommentatoren 706 Aufrufe 3 Watching
  • Ä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.
  • S sir0drake

    @paul53

    ich fürchte, das jede Änderung von A oder B von "system.adapter.javascript.0" kommt.
    Von beiden State's, da die Änderungen ja jedes Mal per Script abgefangen werden.

    ich brauche irgendwas, das ich jeweils zur Entscheidung benutzen kann.
    Eine Erweiterung, die ich auch Absender-Ebene setzen kann
    und die bis zur Empfänger-Ebene mitgeht.

    so etwas wie obj.state.ack
    kommt auch vom Absender und wird durchgereicht bis zum Empfänger.
    Ist aber eben nicht nutzbar für meine Zwecke.

    ich schaue mir aber auf jeden Fall noch deine Idee an.

    danke dafür !

    vg

    T Nicht stören
    T Nicht stören
    ticaki
    schrieb am zuletzt editiert von ticaki
    #4

    @sir0drake
    Das denke ich nicht

    Eine Änderung ( kann von Jarvis kommen ) an A soll nach B weitergegeben werden.
    B wird durch ein Skript geändert

    Eine Änderung von der Hardware über B, soll nach A gehen, aber nicht als Feedback zurück nach B.
    B wird durch einen Adapter geändert.

    Aber du könntest auch einfach State A und B vergleichen und eine Übertragung nur auslösen wenn sie nicht gleich sind

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    S 1 Antwort Letzte Antwort
    0
    • T ticaki

      @sir0drake
      Das denke ich nicht

      Eine Änderung ( kann von Jarvis kommen ) an A soll nach B weitergegeben werden.
      B wird durch ein Skript geändert

      Eine Änderung von der Hardware über B, soll nach A gehen, aber nicht als Feedback zurück nach B.
      B wird durch einen Adapter geändert.

      Aber du könntest auch einfach State A und B vergleichen und eine Übertragung nur auslösen wenn sie nicht gleich sind

      S Offline
      S Offline
      sir0drake
      schrieb am zuletzt editiert von
      #5

      @ticaki

      vielen Dank für deinen Input.

      leider komme ich auch hiermit nicht weiter,
      da von beiden Seite Änderungen getriggert werden können.

      ich komme immer wieder an den punkt,
      das ich genau so eine zirkuläre schleife erzeuge
      und ein state den anderen seinen wert zuweisen will.

      Ich bin für jeden weiteren Vorschlag dankbar...

      viele grüße

      B 1 Antwort Letzte Antwort
      0
      • S sir0drake

        @paul53

        ich fürchte, das jede Änderung von A oder B von "system.adapter.javascript.0" kommt.
        Von beiden State's, da die Änderungen ja jedes Mal per Script abgefangen werden.

        ich brauche irgendwas, das ich jeweils zur Entscheidung benutzen kann.
        Eine Erweiterung, die ich auch Absender-Ebene setzen kann
        und die bis zur Empfänger-Ebene mitgeht.

        so etwas wie obj.state.ack
        kommt auch vom Absender und wird durchgereicht bis zum Empfänger.
        Ist aber eben nicht nutzbar für meine Zwecke.

        ich schaue mir aber auf jeden Fall noch deine Idee an.

        danke dafür !

        vg

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #6

        @sir0drake sagte: jede Änderung von A oder B von "system.adapter.javascript.0" kommt.

        Aus anderen Skripten? Dann füge die Skripte zusammen und verwende Sperrvariablen.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        S 1 Antwort Letzte Antwort
        0
        • S sir0drake

          @ticaki

          vielen Dank für deinen Input.

          leider komme ich auch hiermit nicht weiter,
          da von beiden Seite Änderungen getriggert werden können.

          ich komme immer wieder an den punkt,
          das ich genau so eine zirkuläre schleife erzeuge
          und ein state den anderen seinen wert zuweisen will.

          Ich bin für jeden weiteren Vorschlag dankbar...

          viele grüße

          B Offline
          B Offline
          BoehserWolf
          schrieb am zuletzt editiert von
          #7

          @sir0drake Wie wäre es bei setState mit dem ack zu arbeiten und das entsprechend nach Absender bzw. Script auf true oder false zu setzen?

          S 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @sir0drake sagte: jede Änderung von A oder B von "system.adapter.javascript.0" kommt.

            Aus anderen Skripten? Dann füge die Skripte zusammen und verwende Sperrvariablen.

            S Offline
            S Offline
            sir0drake
            schrieb am zuletzt editiert von
            #8

            @paul53
            danke Paul.
            Schaue ich mir an.
            vg

            1 Antwort Letzte Antwort
            0
            • B BoehserWolf

              @sir0drake Wie wäre es bei setState mit dem ack zu arbeiten und das entsprechend nach Absender bzw. Script auf true oder false zu setzen?

              S Offline
              S Offline
              sir0drake
              schrieb am zuletzt editiert von
              #9

              @boehserwolf

              Hallo Wolf,
              das war in der tat eine ausgangssituation.
              Aber auf lange sicht komme ich da in teufels küche,
              da das ack-flag für anderes bestimmt ist.

              Aber ja, das flag selbst ist sowas , das vom "Verursacher" an den "Empfänger" durchgereicht wird.

              hab dank für deinen input

              T 1 Antwort Letzte Antwort
              0
              • S sir0drake

                @boehserwolf

                Hallo Wolf,
                das war in der tat eine ausgangssituation.
                Aber auf lange sicht komme ich da in teufels küche,
                da das ack-flag für anderes bestimmt ist.

                Aber ja, das flag selbst ist sowas , das vom "Verursacher" an den "Empfänger" durchgereicht wird.

                hab dank für deinen input

                T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von ticaki
                #10

                @sir0drake
                Ist etwas schwierig gute Vorschläge zu unterbreiten ohne alle Infos zu haben. Was auf jeden Fall funktionieren dürfte ist:
                Eine weitere Instanz des Scriptadapters installieren, dort dieses Skript laufen lassen mit der von Paul vorgeschlagenen Abfrage.

                if(obj.state.from != 'system.adapter.javascript.1') setState(...);
                

                Dort ist dann klar zu erkennen das die Änderung von diesem Skript kommt und nicht von irgendeinem anderen Skript.

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                S 1 Antwort Letzte Antwort
                0
                • T ticaki

                  @sir0drake
                  Ist etwas schwierig gute Vorschläge zu unterbreiten ohne alle Infos zu haben. Was auf jeden Fall funktionieren dürfte ist:
                  Eine weitere Instanz des Scriptadapters installieren, dort dieses Skript laufen lassen mit der von Paul vorgeschlagenen Abfrage.

                  if(obj.state.from != 'system.adapter.javascript.1') setState(...);
                  

                  Dort ist dann klar zu erkennen das die Änderung von diesem Skript kommt und nicht von irgendeinem anderen Skript.

                  S Offline
                  S Offline
                  sir0drake
                  schrieb am zuletzt editiert von
                  #11

                  @ticaki said in setStateAsync-Änderungen landen in Endlosschleife:

                  Ist etwas schwierig gute Vorschläge zu unterbreiten ohne alle Infos zu haben.

                  Hallo ticaki,
                  da hast du sicher recht.
                  Aber es geht mir um ein Grundprinzip, wie ich mehr wie einen Wert in ein SetState kommando packen kann.

                  Im Moment teste ich eine Idee aus, die leider auch so ihre tücken hat.

                  ich packe statt eines Wertes
                  setState( ziel_node, 1 )

                  ein JSON.Object rein

                  let msg = { "val": 10,
                  "txt": "hurra",
                  "ack": false,
                  "fwd": true
                  }
                  setState( ziel_node, JSON.stringify(msg) )

                  Am Ende parse ich in der On(...) Ereigniss das ganze wieder zurück und habe quasi was ich möchte.

                  Nachteil: Der Typ des ziel_nodes ist natürlich immer unterschiedlich. String, number, boolean.
                  Ich zwinge dem ZielNode erst einmal ein artfremden Inhalt auf ( das geht wirklich trotz typ-declaration )
                  und muss sehen wie ich jetzt den Inhalt korrigiert bekomme.
                  eine typeof überprüfung von obj.state.val hilft schon mal.
                  aber da bin ich erst am anfang der tüftelei.

                  Habt alle vielen Dank für euren Input.
                  Viele Leute, viele Ideen !!!!

                  Große Klasse dieses Forum.

                  1 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    sir0drake
                    schrieb am zuletzt editiert von
                    #12

                    dear all,

                    auf meiner Suche bin ich auf folgende Dokumentation gestoßen:
                    attributes for getState/stateChange/setState object:

                    getState method and stateChange event delivers an object with all attributes

                    So habe ich getestet mit:
                    await setStateAsync( _node, {val: 12, from: "FWD", c:"a" } );

                    Am Ende des setState konnte ich im stateChange event folgendes auslesen:
                    {"val":12,"ts":1630432308218,"ack":false,"lc":1630431023088,"from":"FWD","q":0}

                    obj.state.c wird mir zwar im javascript-editor als Option angegeben,
                    nur wird nicht "übertragen".

                    Nun meine Fragen:

                    a) Wird dieses Attribut c ausschließlich von ioBroker gesetzt ?

                    b) Darf ich das Attribut from mit einem String meiner Wahl besetzen,
                    ohne im Hintergrund Chaos anzurichten ?

                    habt dank für eure Antwort(en)

                    paul53P 1 Antwort Letzte Antwort
                    1
                    • S sir0drake

                      dear all,

                      auf meiner Suche bin ich auf folgende Dokumentation gestoßen:
                      attributes for getState/stateChange/setState object:

                      getState method and stateChange event delivers an object with all attributes

                      So habe ich getestet mit:
                      await setStateAsync( _node, {val: 12, from: "FWD", c:"a" } );

                      Am Ende des setState konnte ich im stateChange event folgendes auslesen:
                      {"val":12,"ts":1630432308218,"ack":false,"lc":1630431023088,"from":"FWD","q":0}

                      obj.state.c wird mir zwar im javascript-editor als Option angegeben,
                      nur wird nicht "übertragen".

                      Nun meine Fragen:

                      a) Wird dieses Attribut c ausschließlich von ioBroker gesetzt ?

                      b) Darf ich das Attribut from mit einem String meiner Wahl besetzen,
                      ohne im Hintergrund Chaos anzurichten ?

                      habt dank für eure Antwort(en)

                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von paul53
                      #13

                      @sir0drake sagte: a) Wird dieses Attribut c ausschließlich von ioBroker gesetzt ?

                      Gerade getestet: Das Attribut c enthält den Skriptnamen, wenn der Wert mit setState() aus einem Skript gesetzt wurde.

                      log(getState('0_userdata.0.Test.neueZahl'));
                      setState('0_userdata.0.Test.neueZahl'/*neueZahl*/, {val:11, ack:true, c: 'Kommentar'});
                      

                      Log:

                      script.js.common.Neuer_Test: {'val':11,'ack':true,'ts':1630442081839,'q':0,'c':'script.js.common.Neuer_Test','from':'system.adapter.javascript.0','user':'system.user.admin','lc':1630441922443}
                      

                      @sir0drake sagte in setStateAsync-Änderungen landen in Endlosschleife:

                      b) Darf ich das Attribut from mit einem String meiner Wahl besetzen,
                      ohne im Hintergrund Chaos anzurichten ?

                      from wird vom js-controller gesetzt, genauso wie ts, lc, und q.

                      Die Attribute c und user werden an getState() übergeben, aber nicht an on().

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

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


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      537

                      Online

                      32.7k

                      Benutzer

                      82.5k

                      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