Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Blockly
  5. Brauche Hilfe zu async/await

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    498

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    403

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    985

Brauche Hilfe zu async/await

Geplant Angeheftet Gesperrt Verschoben Blockly
5 Beiträge 2 Kommentatoren 389 Aufrufe 2 Beobachtet
  • Ä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.
  • R Offline
    R Offline
    roughestboy
    schrieb am zuletzt editiert von
    #1

    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 ?

    AsgothianA 1 Antwort Letzte Antwort
    0
    • R roughestboy

      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 ?

      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von Asgothian
      #2

      @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.

      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

      R 1 Antwort Letzte Antwort
      0
      • AsgothianA 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 Offline
        R Offline
        roughestboy
        schrieb am zuletzt editiert von
        #3

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

        AsgothianA 1 Antwort Letzte Antwort
        0
        • R roughestboy

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

          AsgothianA Offline
          AsgothianA Offline
          Asgothian
          Developer
          schrieb am zuletzt editiert von Asgothian
          #4

          @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

          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

          R 1 Antwort Letzte Antwort
          0
          • AsgothianA 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 Offline
            R Offline
            roughestboy
            schrieb am zuletzt editiert von
            #5

            @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 Antwort Letzte Antwort
            0

            Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

            Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

            Mit deinem Input könnte dieser Beitrag noch besser werden 💗

            Registrieren Anmelden
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            493

            Online

            32.8k

            Benutzer

            82.9k

            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