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

  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Frage zu subscribeForeignStates() -> ack

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.3k

Frage zu subscribeForeignStates() -> ack

Geplant Angeheftet Gesperrt Verschoben Entwicklung
adapterentwicklungsubscribeforeignstates
16 Beiträge 5 Kommentatoren 1.4k Aufrufe 5 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.
  • MicM Offline
    MicM Offline
    Mic
    Developer
    schrieb am zuletzt editiert von
    #2

    Anyone?

    Danke.

    1 Antwort Letzte Antwort
    0
    • arteckA Offline
      arteckA Offline
      arteck
      Developer Most Active
      schrieb am zuletzt editiert von arteck
      #3

      ich frag beides ab

      
      onStateChange(id, state) {
      ...
      ...
      ...
      
      if (state && !state.ack) {
      
      ...
      ..
      
      

      zigbee hab ich, zwave auch, nuc's genauso und HA auch

      MicM 1 Antwort Letzte Antwort
      0
      • arteckA arteck

        ich frag beides ab

        
        onStateChange(id, state) {
        ...
        ...
        ...
        
        if (state && !state.ack) {
        
        ...
        ..
        
        
        MicM Offline
        MicM Offline
        Mic
        Developer
        schrieb am zuletzt editiert von Mic
        #4

        @arteck sagte in Frage zu subscribeForeignStates() -> ack:

        if (state && !state.ack) {

        Danke für deine Antwort :-)

        Aber lt. deinem Code-Beispiel

        if (state && !state.ack) {
        

        ist ack ausgeschlossen (durch && !...im Ausdruck).
        In meinen bisherigen Adaptern mache ich das auch so, aber nur bei den Adapter-eigenen States.

        Was aber, wenn sich ein fremder State ändert, lieber auf ack=false, oder ack=true reagieren, oder in meinem zukünftigen Adapter sogar als Option für jeden Datenpunkt anbieten? :thinking_face:
        Evtl. wäre tatsächlich als Option nicht schlecht, da nicht alle JS-Scripts "true" zurückgeben, etc. :thinking_face: :relaxed:

        arteckA 1 Antwort Letzte Antwort
        0
        • MicM Mic

          @arteck sagte in Frage zu subscribeForeignStates() -> ack:

          if (state && !state.ack) {

          Danke für deine Antwort :-)

          Aber lt. deinem Code-Beispiel

          if (state && !state.ack) {
          

          ist ack ausgeschlossen (durch && !...im Ausdruck).
          In meinen bisherigen Adaptern mache ich das auch so, aber nur bei den Adapter-eigenen States.

          Was aber, wenn sich ein fremder State ändert, lieber auf ack=false, oder ack=true reagieren, oder in meinem zukünftigen Adapter sogar als Option für jeden Datenpunkt anbieten? :thinking_face:
          Evtl. wäre tatsächlich als Option nicht schlecht, da nicht alle JS-Scripts "true" zurückgeben, etc. :thinking_face: :relaxed:

          arteckA Offline
          arteckA Offline
          arteck
          Developer Most Active
          schrieb am zuletzt editiert von
          #5

          @Mic es ist nicht ausgeschlossen sonder als eine verneinte "und Anweisung"

          also wenn (state && state.ack == false)

          zigbee hab ich, zwave auch, nuc's genauso und HA auch

          1 Antwort Letzte Antwort
          0
          • MicM Offline
            MicM Offline
            Mic
            Developer
            schrieb am zuletzt editiert von
            #6

            Hey @arteck :-)
            Jetzt verwirrst du mich noch mehr ;) mit deinem

            ich frag beides ab

            Also das hier:

            if (state && !state.ack) {

            if (state) prüft ja das State-Objekt auf truthly: All values are truthy unless they are defined as falsy (i.e., except for false, 0, -0, 0n, "", null, undefined, and NaN).

            Dann wird geprüft (durch &&) :
            if (!state.ack). Wenn kein acknowledge, dann geht es ins else bzw. in die leere...

            arteckA 1 Antwort Letzte Antwort
            0
            • MicM Mic

              Hey @arteck :-)
              Jetzt verwirrst du mich noch mehr ;) mit deinem

              ich frag beides ab

              Also das hier:

              if (state && !state.ack) {

              if (state) prüft ja das State-Objekt auf truthly: All values are truthy unless they are defined as falsy (i.e., except for false, 0, -0, 0n, "", null, undefined, and NaN).

              Dann wird geprüft (durch &&) :
              if (!state.ack). Wenn kein acknowledge, dann geht es ins else bzw. in die leere...

              arteckA Offline
              arteckA Offline
              arteck
              Developer Most Active
              schrieb am zuletzt editiert von
              #7

              @Mic

              jo genau so... wie du es beschreibst...

              aber das sind eigene States.. bei fremden .. hmm gute frage..

              zigbee hab ich, zwave auch, nuc's genauso und HA auch

              1 Antwort Letzte Antwort
              1
              • MicM Mic

                Hi,

                ich programmiere gerade 3 Stunden am Stück an einem Adapter und hab gerade eine "Logik-Blockade" :grin:

                Mit subscribeForeignStates() überwache ich Datenpunkte von Bewegungsmeldern, Schaltern, etc.
                Die Adapter-Funktion onStateChange() wird ausgeführt, sobald sich der State ändert.

                Soweit, so gut.
                Jetzt kommt es zu meiner Frage bezüglich "Acknowledge", also ack.
                Sobald Bewegungsmelder ausschlägt, ein Wandschalter gedrückt wird, oder ein User in javascript.0.machWas den Datenpunkt-Wert ändert, soll was ausgelöst werden in onStateChange().

                Reicht da ack=false, oder muss ich auch ack=true abfangen, bzw. beides?

                AlCalzoneA Offline
                AlCalzoneA Offline
                AlCalzone
                Developer
                schrieb am zuletzt editiert von
                #8

                @Mic sagte in Frage zu subscribeForeignStates() -> ack:

                Sobald Bewegungsmelder ausschlägt, ein Wandschalter gedrückt wird, oder ein User in javascript.0.machWas den Datenpunkt-Wert ändert, soll was ausgelöst werden in onStateChange().
                Reicht da ack=false, oder muss ich auch ack=true abfangen, bzw. beides?

                Bei anderen Adaptern solltest du davon ausgehen, dass die States erst "gültig" bzw. bestätigt sind, wenn ack: true.

                States mit ack: false zu setzen, ist eine Aufforderung an den dazugehörigen Adapter (oder Skript), diese Änderung zu verarbeiten.

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

                MicM 1 Antwort Letzte Antwort
                1
                • AlCalzoneA AlCalzone

                  @Mic sagte in Frage zu subscribeForeignStates() -> ack:

                  Sobald Bewegungsmelder ausschlägt, ein Wandschalter gedrückt wird, oder ein User in javascript.0.machWas den Datenpunkt-Wert ändert, soll was ausgelöst werden in onStateChange().
                  Reicht da ack=false, oder muss ich auch ack=true abfangen, bzw. beides?

                  Bei anderen Adaptern solltest du davon ausgehen, dass die States erst "gültig" bzw. bestätigt sind, wenn ack: true.

                  States mit ack: false zu setzen, ist eine Aufforderung an den dazugehörigen Adapter (oder Skript), diese Änderung zu verarbeiten.

                  MicM Offline
                  MicM Offline
                  Mic
                  Developer
                  schrieb am zuletzt editiert von
                  #9

                  Danke @AlCalzone

                  Evtl. wäre es sinnvoll, im Adapter eine Option anbieten, bei User-Datenpunkten unterhalb javascript.x und 0_userdata.0 auch auf ack:false zu reagieren... :thinking_face: Also grad wenn user-eigene Scripts das nicht so sauber machen... Mal sehen :-)

                  1 Antwort Letzte Antwort
                  0
                  • SKBS Offline
                    SKBS Offline
                    SKB
                    Developer Most Active
                    schrieb am zuletzt editiert von SKB
                    #10

                    Der Beitrag ist zwar schon alt, aber vielleicht kommt ja nochmal jemand her und fragt sich zu dem Thema.

                    Ich frage alle states auf ACK true ab, außer die eigenen und die von Javascript und Userdata - also startsWith.

                    ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                    Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

                    mcm1957M 1 Antwort Letzte Antwort
                    0
                    • SKBS SKB

                      Der Beitrag ist zwar schon alt, aber vielleicht kommt ja nochmal jemand her und fragt sich zu dem Thema.

                      Ich frage alle states auf ACK true ab, außer die eigenen und die von Javascript und Userdata - also startsWith.

                      mcm1957M Offline
                      mcm1957M Offline
                      mcm1957
                      schrieb am zuletzt editiert von mcm1957
                      #11

                      @skb said in Frage zu subscribeForeignStates() -> ack:

                      Der Beitrag ist zwar schon alt, aber vielleicht kommt ja nochmal jemand her und fragt sich zu dem Thema.

                      Ich frage alle states auf ACK true ab, außer die von Javascript und Userdata - also startsWith.

                      Das wäre aber fehlerhaft wenn es sich um Adaptercode handelt.

                      Adaptercode sollte / darf bei eigenen States NUR auf externe Writes ('state writeable') mit ACK=FALSE reagieren. Alles andere kann man zwar programmieren ist aber einer Verletzung der ioBroker Philosophie.

                      Oder zusammengefasst:

                      • eigene States des Adapters

                        • die von externen Quellen beschrieben werden (= Input):
                          nur state changes mit ack=false sind zu beachten
                        • die selbst vom Adaptercode beschrieben werden (= eher seltener Sonderfall dass der Code diese Änderungen per subscribe überwacht):
                          ack je nach dahinetrstehender Logik beliebig zu beachten
                      • States eines anderen Adapters
                        normalerweise sind hier nur state changes mit ack=true zu beachten, d.h. der fremde Adapter hat einen bestätigten Wert geschrieben. Alternativen sind je nach Logik denkbar

                      • States im 0_user_0 Bereich
                        wären prinzipiell analog zu fremden States zu betrachten. Die meisten Adapter ignorieren hier allerdings das ack Flag aus Komfortgründen für die User.

                      Siehe auch: https://forum.iobroker.net/topic/61876/bestätigt-acknowledged-flag-bedeutung-ein-mysterium

                      Zitat aus obigem Beitrag:

                      Jeder Adapter sollte jegliche Wertänderungen mit ack=true einfach ignorieren und nichts tun! Falls er es doch tut ist es ein Sonderfall oder ein Bug im Adapter

                      Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                      Support Repositoryverwaltung.

                      Wer Danke sagen will, kann nen Kaffee spendieren: https://paypal.me/mcm1957atiobroker

                      LESEN - gute Forenbeitrage

                      SKBS 1 Antwort Letzte Antwort
                      1
                      • mcm1957M mcm1957

                        @skb said in Frage zu subscribeForeignStates() -> ack:

                        Der Beitrag ist zwar schon alt, aber vielleicht kommt ja nochmal jemand her und fragt sich zu dem Thema.

                        Ich frage alle states auf ACK true ab, außer die von Javascript und Userdata - also startsWith.

                        Das wäre aber fehlerhaft wenn es sich um Adaptercode handelt.

                        Adaptercode sollte / darf bei eigenen States NUR auf externe Writes ('state writeable') mit ACK=FALSE reagieren. Alles andere kann man zwar programmieren ist aber einer Verletzung der ioBroker Philosophie.

                        Oder zusammengefasst:

                        • eigene States des Adapters

                          • die von externen Quellen beschrieben werden (= Input):
                            nur state changes mit ack=false sind zu beachten
                          • die selbst vom Adaptercode beschrieben werden (= eher seltener Sonderfall dass der Code diese Änderungen per subscribe überwacht):
                            ack je nach dahinetrstehender Logik beliebig zu beachten
                        • States eines anderen Adapters
                          normalerweise sind hier nur state changes mit ack=true zu beachten, d.h. der fremde Adapter hat einen bestätigten Wert geschrieben. Alternativen sind je nach Logik denkbar

                        • States im 0_user_0 Bereich
                          wären prinzipiell analog zu fremden States zu betrachten. Die meisten Adapter ignorieren hier allerdings das ack Flag aus Komfortgründen für die User.

                        Siehe auch: https://forum.iobroker.net/topic/61876/bestätigt-acknowledged-flag-bedeutung-ein-mysterium

                        Zitat aus obigem Beitrag:

                        Jeder Adapter sollte jegliche Wertänderungen mit ack=true einfach ignorieren und nichts tun! Falls er es doch tut ist es ein Sonderfall oder ein Bug im Adapter

                        SKBS Offline
                        SKBS Offline
                        SKB
                        Developer Most Active
                        schrieb am zuletzt editiert von
                        #12

                        @mcm1957 wieso fehlerhaft?

                        Viele User schreiben ihre Skripts oder Blockly nicht sauber und haben demnach kein ACK true mit dabei.

                        Daher reagiere ich in den Fällen nicht drauf, was so absolut ok ist!

                        Eigene states des Adapters bearbeite ich auch mit ACK false, da der Adapter ja damit etwas tun soll und diesen dann bestätigt.

                        ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                        Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

                        mcm1957M 1 Antwort Letzte Antwort
                        0
                        • SKBS SKB

                          @mcm1957 wieso fehlerhaft?

                          Viele User schreiben ihre Skripts oder Blockly nicht sauber und haben demnach kein ACK true mit dabei.

                          Daher reagiere ich in den Fällen nicht drauf, was so absolut ok ist!

                          Eigene states des Adapters bearbeite ich auch mit ACK false, da der Adapter ja damit etwas tun soll und diesen dann bestätigt.

                          mcm1957M Offline
                          mcm1957M Offline
                          mcm1957
                          schrieb am zuletzt editiert von mcm1957
                          #13

                          @skb

                          Wenn der User mit ACK=TRUE in einen State deines Adapters schreibt um zB. eine Einstellung zu ändern, dann ist dieser Schreibvorgang zu ignorieren. Siehe auch Apollon77s Beitrag. Alles andere ist (von etwaigen Sonderfällen mal abgesehen) schlicht und einfach falsch.

                          Wenn die States eines fremden Adapters überwachst um z.B. Werte die ein anderer Adapter schreibt zu verarbeiten, dann solltest du nur Werte mit ack = true beachten.

                          Viele User schreiben ihre Skripts oder Blockly nicht sauber und haben demnach kein ACK true mit dabei.

                          Daher reagiere ich in den Fällen nicht drauf, was so absolut ok ist!

                          Wenn es sich um eigene States deines Adapter handelt dann ist das ja OK. Du darfst ja eben NUR mit ack=false regieren! Wenn es sich um fremde States handelt, solltes du ack=false eher ignorieren.

                          Nur weil User das das ack Flag falsch verwenden und zB. Einstellungen mit ack=true schrieben ist das noch kein Grund dass sich ein Adapter falsch verhält.

                          In jedem fall fehlt in obiger Aussage um welcghe States (die deines Adapters, welche in 0:userdate_0, etc.) es sich handelt.

                          Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                          Support Repositoryverwaltung.

                          Wer Danke sagen will, kann nen Kaffee spendieren: https://paypal.me/mcm1957atiobroker

                          LESEN - gute Forenbeitrage

                          SKBS 1 Antwort Letzte Antwort
                          0
                          • mcm1957M mcm1957

                            @skb

                            Wenn der User mit ACK=TRUE in einen State deines Adapters schreibt um zB. eine Einstellung zu ändern, dann ist dieser Schreibvorgang zu ignorieren. Siehe auch Apollon77s Beitrag. Alles andere ist (von etwaigen Sonderfällen mal abgesehen) schlicht und einfach falsch.

                            Wenn die States eines fremden Adapters überwachst um z.B. Werte die ein anderer Adapter schreibt zu verarbeiten, dann solltest du nur Werte mit ack = true beachten.

                            Viele User schreiben ihre Skripts oder Blockly nicht sauber und haben demnach kein ACK true mit dabei.

                            Daher reagiere ich in den Fällen nicht drauf, was so absolut ok ist!

                            Wenn es sich um eigene States deines Adapter handelt dann ist das ja OK. Du darfst ja eben NUR mit ack=false regieren! Wenn es sich um fremde States handelt, solltes du ack=false eher ignorieren.

                            Nur weil User das das ack Flag falsch verwenden und zB. Einstellungen mit ack=true schrieben ist das noch kein Grund dass sich ein Adapter falsch verhält.

                            In jedem fall fehlt in obiger Aussage um welcghe States (die deines Adapters, welche in 0:userdate_0, etc.) es sich handelt.

                            SKBS Offline
                            SKBS Offline
                            SKB
                            Developer Most Active
                            schrieb am zuletzt editiert von
                            #14

                            @mcm1957 entspricht ja nicht meiner Aussage!

                            Eigene Adapter states werden nur mit ACK false beachtet, bei Javascript und userdatata beachte ich beides! Andere Adapter nur mit ACK true.

                            So, wie es richtig ist!

                            ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                            Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

                            mcm1957M 1 Antwort Letzte Antwort
                            0
                            • SKBS SKB

                              @mcm1957 entspricht ja nicht meiner Aussage!

                              Eigene Adapter states werden nur mit ACK false beachtet, bei Javascript und userdatata beachte ich beides! Andere Adapter nur mit ACK true.

                              So, wie es richtig ist!

                              mcm1957M Offline
                              mcm1957M Offline
                              mcm1957
                              schrieb am zuletzt editiert von mcm1957
                              #15

                              @skb said in Frage zu subscribeForeignStates() -> ack:

                              @mcm1957 entspricht ja nicht meiner Aussage!

                              Eigene Adapter states werden nur mit ACK false beachtet, bei Javascript und userdatata beachte ich beides! Andere Adapter nur mit ACK true.

                              So, wie es richtig ist!

                              Das ist vollkommen RICHTIG

                              In deinem ersten Beitrag fehlte nur ursprünglich das "eigenen" und damit entstand der Eindruck dass du Schreibvorgänge auf die eigenen States mit ack=true erwartest. Und das wäre falsch. Nach deiner obigen Korrektur ist es nun OK.

                              Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                              Support Repositoryverwaltung.

                              Wer Danke sagen will, kann nen Kaffee spendieren: https://paypal.me/mcm1957atiobroker

                              LESEN - gute Forenbeitrage

                              SKBS 1 Antwort Letzte Antwort
                              1
                              • mcm1957M mcm1957

                                @skb said in Frage zu subscribeForeignStates() -> ack:

                                @mcm1957 entspricht ja nicht meiner Aussage!

                                Eigene Adapter states werden nur mit ACK false beachtet, bei Javascript und userdatata beachte ich beides! Andere Adapter nur mit ACK true.

                                So, wie es richtig ist!

                                Das ist vollkommen RICHTIG

                                In deinem ersten Beitrag fehlte nur ursprünglich das "eigenen" und damit entstand der Eindruck dass du Schreibvorgänge auf die eigenen States mit ack=true erwartest. Und das wäre falsch. Nach deiner obigen Korrektur ist es nun OK.

                                SKBS Offline
                                SKBS Offline
                                SKB
                                Developer Most Active
                                schrieb am zuletzt editiert von
                                #16

                                @mcm1957 mehr sagte ich ja oben auch nicht 😉

                                ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                                Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

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


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                335

                                Online

                                32.4k

                                Benutzer

                                81.4k

                                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