Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. ack in Skripten setzen?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    ack in Skripten setzen?

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

      Hi,
      zum Thema ack bei States habe ich ein paar ältere Threads und Erklärungen gefunden, z.B.
      https://forum.iobroker.net/topic/773/setstate-mit-acknowledge/11
      https://forum.iobroker.net/topic/11657/gelöst-datenpunkt-aktualisieren-ohne-aktion
      https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#commands-and-statuses

      Mir ist bewusst dass der "normale" Anwendungsfall ist, ein Command oder Status eines Adapters mit ack=false zu setzen, und der Adapter bestätigt das in dem er ack=true setzt.

      Kann und darf ich das auch bei meinen eigenen Datenpunkten innerhalb von 0_userdata.0 verwenden?
      Also ich setze in eimem TS-Skript einen eigenen Datenpunkt mit ack=false und in einer zweiten Funktion subscribe ich darauf, verwende ihn weiter und setze darin dann ack=true?

      Wenn ja, gibt es dazu einen einfachen Weg?

      So erscheint es mit recht umständlich:

      const dpMyUserState: string = '0_userdata.0.testState';
      
      subscribe ({id: dpMyUserState}, function (obj) {
          /* do the stuff*/
          
          /* set the ack */
          setState (obj.id, obj.state.val, true);
      });
      

      Viele Grüße
      Marco

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @stan23 last edited by

        @stan23 sagte: setze in eimem TS-Skript einen eigenen Datenpunkt mit ack=false und in einer zweiten Funktion subscribe ich darauf, verwende ihn weiter und setze darin dann ack=true?

        Wozu soll das gut sein? Virtuelle Datenpunkte setzt man mit ack = true.

        Asgothian 1 Reply Last reply Reply Quote 0
        • Asgothian
          Asgothian Developer @paul53 last edited by Asgothian

          @paul53 sagte in ack in Skripten setzen?:

          @stan23 sagte: setze in eimem TS-Skript einen eigenen Datenpunkt mit ack=false und in einer zweiten Funktion subscribe ich darauf, verwende ihn weiter und setze darin dann ack=true?

          Wozu soll das gut sein? Virtuelle Datenpunkte setzt man mit ack = true.

          @stan23 bei selbst definierten Daten punkten darfst du das natürlich tun. Du solltest aber in deinem trigger dann auch sicherstellen das ack false ist und ansonsten nix tun.

          @paul53 zum Thema wozu: wenn ein Skript sich wie ein Adapter verhalten soll und mit dem ack bestätigen soll das die gewünschte Funktion ausgeführt wurde ist das ein Weg. Ein weiterer Grund ist das verhindern von “change loops”

          Von “extern” wird der state üblicherweise ohne ack gesetzt. Wenn du jetzt 2 states hast die z.bsp. Eine Umrechnung machen und sich gegenseitig beeinflussen dann kannst du im Skript auf setzen ohne ack triggern und das Ergebnis mit ack setzen. Dadurch verhinderst du einen change Loop ohne im trigger durch prüfen von obj.state.from Anpassungen durch den JS adapter zu unterbinden.

          A.

          paul53 S 2 Replies Last reply Reply Quote 1
          • paul53
            paul53 @Asgothian last edited by

            @asgothian sagte: wenn ein Skript sich wie ein Adapter verhalten soll

            @stan23 sagte in ack in Skripten setzen?:

            in einer zweiten Funktion subscribe ich

            Eine zweite Funktion ist nicht unbedingt ein zweites Skript.

            1 Reply Last reply Reply Quote 0
            • S
              stan23 @Asgothian last edited by

              @asgothian said in ack in Skripten setzen?:

              Du solltest aber in deinem trigger dann auch sicherstellen das ack false ist und ansonsten nix tun.

              Stimmt, das müsste also so aussehen, damit da keine Schleife entsteht:

              const dpMyUserState: string = '0_userdata.0.testState';
              
              subscribe ({id: dpMyUserState, ack: false}, function (obj) {
                  /* do the stuff*/
              
                  /* set the ack */
                  setState (obj.id, obj.state.val, true);
              });
              

              Danke 🙂

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

              Support us

              ioBroker
              Community Adapters
              Donate

              864
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              3
              5
              551
              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