Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Blockly Timeout Erläuterung

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Blockly Timeout Erläuterung

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

      Hallo liebe Community,

      ich bin noch recht neu im Thema SmartHome unterwegs. Ich komme allerdings beruflich aus der IT-Richtung, das nur als Hintergrund. Trotzdem, oder gerade deshalb muss ich hier mal eine vermutlich echt Anfängerfrage stellen.

      Und zwar, wie viele Einträge hier, habe auch ich ein Licht, welches per Shelly schaltet und einen PIR, der auf Personen reagiert, wodurch das Licht einschalten soll.

      Mein Script funktioniert auch wie gewünscht, allerdings habe ich den Aufbau mit dem "Stop Timeout" und "Ausführen Timeout" aus einem anderen Forumbeispiel.

      Meine Frage ist nun: Kann mir bitte jemand verständlich erklären, wie dieser Mechanismus des Timeouts funktioniert ?
      Ich sehe das Script und denke wie folgt:

      1. Wenn sich der Eingang ändern, dann...
        ... 2. Wenn der Eingang dann "true" ist, dann...
        ...3. Schalte das Licht ein
        ....3. Stoppe Timeout
        ... 2. Wenn der Eingang aber "false" ist, dann...
        3. Starte Timeout von 5 Sekunden und schalte dann das Licht aus

      Die Zahlen 1, 2, 3 sollen die IF, ELSE - Ebenen im Script sein.
      Was ich nicht verstehe ist, wenn einmal die Bedingung erfüllt ist, dass der PIR ausschaltet und die 5 Sekunden Timeout laufen, wie kann während dieser Zeit dann ein erneutes Auslösen des PIR dazu führen, dass das Script erneut reagiert und dadurch Stop Timeout aufgerufen wird ? Verstehe diese "Abbruch"-Bedingung des Timeouts nicht bzw. wie das überhaupt funktioniert, dass beim erneuten Auslösen innerhalb der Timeout Zeit das Script überhaupt nochmal reagiert darauf ?

      Hier noch ein Screenshot:
      892bfd55-b8d5-4239-adc9-89b2cf5d5c53-image.png

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

        @dewaldo sagte: wie das überhaupt funktioniert, dass beim erneuten Auslösen innerhalb der Timeout Zeit das Script überhaupt nochmal reagiert darauf ?

        Javascript arbeitet nicht zyklisch, sondern Ereignis gesteuert. Ein Ereignis ist z.B. die Wertänderung eines Datenpunktes (PIR-Trigger) oder auch der Ablauf eines Timeout.

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

          @paul53 :
          D.h. ich muss mir das so vorstellen ?

          • Bewegungsmelder löst aus -> Event, welches das erste IF triggert und welches dann abläuft
          • Bewegungsmelder schaltet ab -> Event, welches das "Else If" startet und das Timeout dort startet
          • Bewegungsmeldet löst erneut aus -> Event, welches das erste IF triggert, während das andere Else If noch abgearbeitet wird ?
            -> Und weil oben dann "Stop Timeout" steht, bricht das Event oben die Abarbeitung im unteren ab ?

          Oh ha, ich habe bislang nur Erfahrung mit zyklischen Skripten, das wird eine ganz schöne Umstellung so zu denken ...
          Aber vielen Dank für die Erläuterung, sofern ich es jetzt so richtig wiedergegeben habe ...

          Gruß, dewaldo

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

            @dewaldo sagte: Event, welches das erste IF triggert, während das andere Else If noch abgearbeitet wird ?

            Es wird nicht das else if abgearbeitet, sondern im Hintergrund läuft der Timer, der nun gestoppt wird.

            @dewaldo sagte in Blockly Timeout Erläuterung:

            das wird eine ganz schöne Umstellung so zu denken ...

            Das ging mir auch so.

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

              @paul53

              Oh je... dann muss ich leider nochmal nachhaken, Entschuldigung...
              Wenn also im "Else if" nur das Timeout sozusagen angestoßen wird, dass der Timer im Hintergrund läuft, wie wird dann das Ausschalten des Lichts bewerkstelligt ?
              Merkt sich Javascript diese Bedienung, dass wenn der Timeout abgelaufen ist, dies wiederum ein Ereignis darstellt, das dann das Kommando "Licht aus" ausführt ?

              Bedeutet das weiter, dass "Timeout" quasi wie eine globale Variable zu sehen ist?
              Was heißt das für mehrere Scripts, die parallel ausgeführt werden, wo jedes für sich ebenfalls das Timeout verwendet ? Führt das dann zu Konflikten ?

              Asgothian paul53 2 Replies Last reply Reply Quote 0
              • Asgothian
                Asgothian Developer @dewaldo last edited by Asgothian

                @dewaldo

                Du darfst dir das so vorstellen:

                im System gibt es eine Lange liste von Dingen die "in der Zukunft" ausgeführt werden sollen. Mit dem Befehl "Ausführen timeout in x sekunden" fügst du dieser Liste eine neue Aufgabe hinzu (mit Aufgabe und wann es passieren soll). Als Ergebnis bekommst du eine Adresse, an der diese Aufgabe abgelegt ist. Diese Adresse speicherst du in der (in dem Skript globalen) Variable timeout.

                Auf die Art und weise kanns der "stop timeout" Befehl den Eintrag aus der globalen Liste wieder entfernen, bevor die Aktion ausgeführt wurde.

                A.

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

                  @dewaldo sagte: wie wird dann das Ausschalten des Lichts bewerkstelligt ?

                  An den Timer wird eine Referenz zur Callback-Funktion übergeben, die das Ausschalten ausführt: Bei Ablauf ruft der Timer die Callback-Funktion auf.

                  @dewaldo sagte in Blockly Timeout Erläuterung:

                  Was heißt das für mehrere Scripts, die parallel ausgeführt werden, wo jedes für sich ebenfalls das Timeout verwendet ? Führt das dann zu Konflikten ?

                  Nein, es können viele Timer parallel laufen.

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

                    @paul53 , @Asgothian

                    Vielen Dank euch beiden für die schnellen Informationen zu dem Thema.
                    Ich kann mir das ganze jetzt schon besser vorstellen.
                    Ich habe gerade 2 Einzelscripte in eines zusammenkopiert. Das andere Script wertet einen zum Licht gehörenden Wandtaster aus. Da die Scripte themenmäßig zusammengehören, habe ich sie in eins kopiert und sehe jetzt im JavaScript Code auch, wie das mit dem Timeout funktioniert. Ich sehe, dass nun 2 Variablen angelegt wurden: timeout und timeout2, sodass diese jeweils ihren eigenen Callback haben.

                    Also nochmal vielen Dank, das hat mir schonmal einen Schups in die richtige Richtung gegeben, auch wenn ich noch einen langen Weg vor mir habe, bis ich das Werkzeug beherrschen werde...

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    857
                    Online

                    32.0k
                    Users

                    80.4k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    313
                    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