Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Brauche Hilfe zu async/await

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Brauche Hilfe zu async/await

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

      Hallo,
      ich möchte hier ein Script erstellen und denke, dass hierfür async/await anzuwenden wäre. Aber ich verstehe noch nicht ganz, wie man das scripted.
      Folgender Fall: ich habe an einem Gerät (eine Enthärtungsanlage judo isoft) u.a. 2 Datenpunkte:

      62402d50-2bd2-4523-82f7-8abfaa15e26f-image.png
      'judoisoft.0.StandBy' wird vom Anwender auf 'true' geschaltet. Damit wird der Leckageschutz der Anlage für eine bestimmte Zeit deaktiviert. Diese Zeit ist in der Anlage voreingestellt (aber variabel, 1 - x Stunden), und wird erst nach diesem Trigger an den 2. Datenpunkt, 'judoisoft.0.StandByValue', zurückgeschrieben. Diese Dauer möchte ich auslesen, um sie in meiner Visualisierung anzuzeigen. Das Script muss dazu aber warten, bis der 2. DP den neuen Wert hat. Ich möchte vermeiden, da mit 'wait' oder Ähnlichem zu arbeiten. Auf der anderen Seite sollte das Script iobroker nicht blockieren, in dem es ewig wartet, wenn 2. der DP nicht aktualisiert wird. Wie macht man das am Besten ?

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

        @roughestboy sagte in Brauche Hilfe zu async/await:

        Hallo,
        ich möchte hier ein Script erstellen und denke, dass hierfür async/await anzuwenden wäre. Aber ich verstehe noch nicht ganz, wie man das scripted.
        Folgender Fall: ich habe an einem Gerät (eine Enthärtungsanlage judo isoft) u.a. 2 Datenpunkte:

        62402d50-2bd2-4523-82f7-8abfaa15e26f-image.png
        'judoisoft.0.StandBy' wird vom Anwender auf 'true' geschaltet. Damit wird der Leckageschutz der Anlage für eine bestimmte Zeit deaktiviert. Diese Zeit ist in der Anlage voreingestellt (aber variabel, 1 - x Stunden), und wird erst nach diesem Trigger an den 2. Datenpunkt, 'judoisoft.0.StandByValue', zurückgeschrieben. Diese Dauer möchte ich auslesen, um sie in meiner Visualisierung anzuzeigen. Das Script muss dazu aber warten, bis der 2. DP den neuen Wert hat. Ich möchte vermeiden, da mit 'wait' oder Ähnlichem zu arbeiten. Auf der anderen Seite sollte das Script iobroker nicht blockieren, in dem es ewig wartet, wenn 2. der DP nicht aktualisiert wird. Wie macht man das am Besten ?

        Das ist kein Fall für async/await sondern ein einfacher "setTimeout"

        let offTimout = null;
        let WaitForDuration = false;
        let WFDTimeout = null
        
        // auf das aktivieren des standby warten,  um die Überwachung für die Dauer einzuschalten
        
        on ({id:'..standby', change:'gt'}, function(obj) {
          if (WFDTimeout) {
            clearTimeout(WFDTimeout)
          }
        WaitForDuration = true;
          WFDTimeout = setTimeout(function() { WaitForDuration = false}, 10000) ; // wenn nicht in 10 Sekunden eine Dauer kommt, dauer-ueberwachung abschalten
        } 
        
        // eigentlicher Start des Standby durch Anpassung des Standby wertes
        on ({id:'..standbyvalue', change:'ne', function(obj) {
          if WaitForDuration {
            if (offTimeout) clearTimeout(offTimeout);
            offTimeout = setTimeout(function() { setState('..standby', false); offTimeout = null; } , obj.val * 60 * 60 * 1000);
          }
        }
        

        Die Datenpunkte musst du natürlich korrekt benennen, und der ZeitWert für den Timeout muss in ms umgerechnet werden, daher die * 10006060

        A.
        ps. So - ist korrigiert.

        R 1 Reply Last reply Reply Quote 0
        • R
          roughestboy @Asgothian last edited by

          @asgothian
          Geht das auch mit Blockly oder muss ich da ins Javascript rein ?

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

            @roughestboy latuernich 🙂

            Screenshot 2022-09-08 at 15.43.57.png

            Alternative, geht aber nur wenn die Standby Zeit während des Standby nicht aktualisiert wird:

            Screenshot 2022-09-08 at 15.46.07.png

            R 1 Reply Last reply Reply Quote 0
            • R
              roughestboy @Asgothian last edited by

              @asgothian

              Danke Dir, sollte dann auch bei meinen Kenntnissen reichen, das umzusetzen.
              Außerdem glaube ich, ich habe falsch rum gedacht und es ist viel einfacher, das umzusetzen, was ich möchte. Wenn das Setzen von 'StandBy' auf true schon nach sich zieht, dass 'StandbyValue' von 0 auf 'x' Stunden geändert wird, kann ich ja 'StandByValue' als Trigger für diesen Modus hernehmen, nicht 'Standby'.
              Die Anlage zählt ja nach 'StandBy' = true ihre x Stunden runter, bis sie den Leckageschutz wieder anschaltet.
              Ich kann dann ja 'StandbyValue' im Script als Trigger her nehmen, ggf. 'sicherheitshalber' nochmal nachfragen ob 'Standby' auch true ist, und dann einen Timer mit der gleichen Zeit/Dauer setzen, der in der VIS angezeigt wird und herunterzählt. Danach beendet die Anlage eh von selbst diesen Modus, und auch die beiden DP's gehen wieder auf ihre vorherigen Werte ('false' und '0' (h)).

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

              Support us

              ioBroker
              Community Adapters
              Donate

              882
              Online

              32.0k
              Users

              80.5k
              Topics

              1.3m
              Posts

              2
              5
              219
              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