Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Verzögerte Programmausführung bei Subscribe/On

    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

    Verzögerte Programmausführung bei Subscribe/On

    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      Eisenbahnbär last edited by

      Ich bin noch ioBroker-Anfänger, daher ist es vielleicht eine dumme Frage. Dann bitte ich schon mal im voraus um Entschuldigung!

      Ich steuere u.a. einen Entfeuchter. 2 Minuten nachdem dieser angelaufen ist, prüfe ich (bisher in der Homematic) ob er auch wirklich Strom verbraucht. Wenn nicht, gibt es eine E-Mail, dass der Wasserbehälter geleert werden muss (Entfeuchter an, aber ohne Stromverbrauch bedeutet: der ist voll und zieht deswegen keinen Strom).

      In der Homematic starte ich deswegen 2 Minuten nach dem ersten Script (an/aus) das zweite Script zur Überprüfung. Geht dort mit einem einzigen Auslöser und ein Script wird sofort gestartet, das andere verzögert.

      Bei dem Befehl Subscribe/On gibt es einen solchen verzögerten Programmstart nicht, oder? Ich habe mir überlegt, ich könnte am Ende des ersten Scripts eine Variable verzögert schreiben (SetStateDelayed) die dann ein zweites Script triggert. Dann brauche ich aber eine zusätzliche Variable, das widerstrebt mir.

      Zweite Möglichkeit wäre ein SubscribeDelayed/OnDelayed, das gibt es aber nicht, oder?

      Dritte Möglichkeit wäre es in der Funktion eine Verzögerung zu bauen (in der Zeit müssten aber natürlich parallel andere Programme ausgeführt werden können). So eine Art Wait(120s). Gibt es so etwas?

      Was wäre denn Best Practice?

      paul53 AlCalzone 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @Eisenbahnbär last edited by

        @Eisenbahnbär sagte:

        Gibt es so etwas?

        Ja, setTimeout(callback, delay).

        1 Reply Last reply Reply Quote 1
        • AlCalzone
          AlCalzone Developer @Eisenbahnbär last edited by AlCalzone

          @Eisenbahnbär sagte in Verzögerte Programmausführung bei Subscribe/On:

          Dritte Möglichkeit wäre es in der Funktion eine Verzögerung zu bauen (in der Zeit müssten aber natürlich parallel andere Programme ausgeführt werden können). So eine Art Wait(120s). Gibt es so etwas?
          Was wäre denn Best Practice?

          Das geht ganz einfach. Grundsätzlich arbeitet ioBroker so, dass du nicht Programme/Skripte startest, sondern in immer laufenden Skripten auf Ereignisse wie die Änderung eines Datenpunktes reagierst.

          Das machst du mit subscribe/on. Innerhalb des Triggers kannst du wie gehabt dein Gerät starten. Mittels setTimeout kannst du verzögert weiteren Code ausführen, der z.B. den Stromverbrauch überprüft.

          Einen Befehl zum Warten gibt es nicht, da die Codeausführung grundsätzlich asynchron arbeitet. Ein Beispiel:

          on("...", () => {
              setState("entfeuchter-datenpunkt", true);
              setTimeout(() => {
                  // wird nach 2 Minuten ausgeführt
              }, 120000);
              // wird sofort nach dem "Anstoßen" der Wartezeit ausgeführt
          });
          

          Die "Reihenfolge" der Befehlszeilen in obigem Skript wäre demnach:
          2: Bei Trigger/Ereignis
          3: Direkt nach 2 (startet nur den Timer)
          4: 2 Minuten nach 3
          6: Direkt nach 3

          Falls du kein JavaScript kannst ist ggf. Blockly was für dich. Oder du arbeitest dich ein, dann empfehle ich dir, die Grundlagen für modernes JavaScript drauf zu schaffen.
          Edit: Einen Link zu den in ioBroker vorhandenen Funktionen hat Paul dir gerade gepostet.

          1 Reply Last reply Reply Quote 1
          • E
            Eisenbahnbär last edited by

            Super, danke an euch beide!

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

            Support us

            ioBroker
            Community Adapters
            Donate

            391
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            3
            4
            204
            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