Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Unterschied timeout und pause in Blockly

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

Unterschied timeout und pause in Blockly

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
pause timeout blockly
35 Beiträge 9 Kommentatoren 13.7k Aufrufe 5 Watching
  • Ä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.
  • L Offline
    L Offline
    loverz
    schrieb am zuletzt editiert von loverz
    #1

    Hi, seit dem neuesten Java-Update habe ich einen "Pause" Block unter den Timeouts gefunden.

    Kann mir jemand sagen was der Unterschied zwischen timeout und pause in Blockly ist?

    93e4df17-3d88-4881-97ea-06f41d04f6e8-image.png

    AsgothianA 1 Antwort Letzte Antwort
    0
    • L loverz

      Hi, seit dem neuesten Java-Update habe ich einen "Pause" Block unter den Timeouts gefunden.

      Kann mir jemand sagen was der Unterschied zwischen timeout und pause in Blockly ist?

      93e4df17-3d88-4881-97ea-06f41d04f6e8-image.png

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

      @loverz

      Timeout: Es wird Ein Block an Aktionen im Timeout angegeben der in x ms ausgeführt wird, aber die "normale" Bearbeitung des Skriptes geht weiter.

      Pause: Es wird x ms gewartet bis es weiter geht.

      Der Haupt unterschied besteht in der Art der Abarbeitung.

      Der Einsatz von "Pause" führt zu einer synchronen Abarbeitung der im Skript stehenden Befehle in genau der angegebenen Reihenfolge. Pause kann beim Thema "Skript erneut auslösen" zu Problemen führen.

      Der Einsatz von Timeout führt zu einer asynchronen Abarbeitung so das das eigentliche Skript beendet wird und nur die im Timeout angegebenen Befehle werden in einem eigenen Ablauf im Hintergrund ausgelöst.

      Insgesamt sollte wann immer möglich mit einem Timeout gearbeitet werden da die "Pause" die zu dem Skript gehörenden Ressourcen weiter belegt bleiben. Je länger die Zeit ist die gewartet wird desto wichtiger ist der Einsatz von Timeout an Stelle von Pause.

      Ich persönlich würde Pause nur einsetzen wenn sichergestellt ist das das Skript während der Pause nicht ein zweites mal aktiviert werden kann. Das wäre zu Beginn von Skripten oder innerhalb eines Zeitplans. Immer dann wenn ein Skript über einen "event" (Trigger, nicht Zeitplan) ausgelöst wird würde ich mit einem Timeout arbeiten.

      A.

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

      E 1 Antwort Letzte Antwort
      4
      • AsgothianA Asgothian

        @loverz

        Timeout: Es wird Ein Block an Aktionen im Timeout angegeben der in x ms ausgeführt wird, aber die "normale" Bearbeitung des Skriptes geht weiter.

        Pause: Es wird x ms gewartet bis es weiter geht.

        Der Haupt unterschied besteht in der Art der Abarbeitung.

        Der Einsatz von "Pause" führt zu einer synchronen Abarbeitung der im Skript stehenden Befehle in genau der angegebenen Reihenfolge. Pause kann beim Thema "Skript erneut auslösen" zu Problemen führen.

        Der Einsatz von Timeout führt zu einer asynchronen Abarbeitung so das das eigentliche Skript beendet wird und nur die im Timeout angegebenen Befehle werden in einem eigenen Ablauf im Hintergrund ausgelöst.

        Insgesamt sollte wann immer möglich mit einem Timeout gearbeitet werden da die "Pause" die zu dem Skript gehörenden Ressourcen weiter belegt bleiben. Je länger die Zeit ist die gewartet wird desto wichtiger ist der Einsatz von Timeout an Stelle von Pause.

        Ich persönlich würde Pause nur einsetzen wenn sichergestellt ist das das Skript während der Pause nicht ein zweites mal aktiviert werden kann. Das wäre zu Beginn von Skripten oder innerhalb eines Zeitplans. Immer dann wenn ein Skript über einen "event" (Trigger, nicht Zeitplan) ausgelöst wird würde ich mit einem Timeout arbeiten.

        A.

        E Offline
        E Offline
        ente34
        schrieb am zuletzt editiert von
        #3

        @asgothian
        Jetzt muss ich mal nachfragen:
        "pause" macht await wait(), das ist doch ebenfalls asynchron und sollte nichts blockieren oder liege ich da falsch?

        await wait(1000);
        
        AsgothianA 1 Antwort Letzte Antwort
        0
        • E ente34

          @asgothian
          Jetzt muss ich mal nachfragen:
          "pause" macht await wait(), das ist doch ebenfalls asynchron und sollte nichts blockieren oder liege ich da falsch?

          await wait(1000);
          
          AsgothianA Offline
          AsgothianA Offline
          Asgothian
          Developer
          schrieb am zuletzt editiert von
          #4

          @ente34

          Ich bin nicht sicher in wie weit das intern abgebildet ist. Unter der Annahme das ein einzelnes Script über einen Thread abgearbeitet wird sollte das Script im await durchaus "warten", während ein Timeout die Ausführung des Codes innerhalb des Timeout in einen anderen Thread auslagert. Es ist aber zumindest so das die CPU dieses Script in der Zeit nicht ausführt.

          A.

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

          1 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            RkcCorian
            schrieb am zuletzt editiert von
            #5

            Hallo Zusammen,

            ich stelle mir auch gerade die Frage, ob ich das "bequemere" PAUSE oder doch lieber STEUERE mit Verzögerung verwenden soll. Ich habe mal ein paar Tests mit dem PAUSE-Block gemacht. Soweit ich es sehe wird diese eine Abarbeitung des Scripts über einen Trigger verzögert, hindert dennoch nicht, dass das Script mehrfach parallel getriggert wird und dann parallel mehrfach ausgeführt wird. Wenn ich es richtig sehe ist der Wesentliche Unterschied bzgl. STEUERE... will ich:

            • A Mein Skript, bzw. meine Befehle konsistent abarbeiten und "hart" mehrfach Steuerfehle hintereinander abschicken
            • B Meine Steuerbefehle ggf. über "löschen, falls läuft" direkt wieder zurück setzen lassen, bei konfliktionärer Steuerung

            Hab ich das richtig verstanden?

            Viele Grüße!

            AsgothianA 1 Antwort Letzte Antwort
            0
            • K Offline
              K Offline
              karsten089
              schrieb am zuletzt editiert von karsten089
              #6

              Ich versuche eine Zeitschaltuhr mit Bewegungsmelder zu bauen, das klappt aber mit dem time out nicht. Verstehe ich richtig, dass mein Script immer weiter läuft, sprich von vorne anfängt, bis der Switch auf false ist, und nur der Check presence verzögert wird?

              Mit einer Pause funktioniert es, hier wird aber der Befehl false für den Switch mehrfach verschickt (wird mehrmals hintereinander grün in den Objekten, und irgendwann rot - was bedeutet rot?)

              Wie kann ich das charmanter lösen?

              5081F2EA-B02A-484A-9506-A00BB9BFFAC1.jpeg

              paul53P AsgothianA 2 Antworten Letzte Antwort
              0
              • K karsten089

                Ich versuche eine Zeitschaltuhr mit Bewegungsmelder zu bauen, das klappt aber mit dem time out nicht. Verstehe ich richtig, dass mein Script immer weiter läuft, sprich von vorne anfängt, bis der Switch auf false ist, und nur der Check presence verzögert wird?

                Mit einer Pause funktioniert es, hier wird aber der Befehl false für den Switch mehrfach verschickt (wird mehrmals hintereinander grün in den Objekten, und irgendwann rot - was bedeutet rot?)

                Wie kann ich das charmanter lösen?

                5081F2EA-B02A-484A-9506-A00BB9BFFAC1.jpeg

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

                @karsten089 sagte: Ich versuche eine Zeitschaltuhr mit Bewegungsmelder zu bauen

                Wie sieht der Versuch aus?

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                K 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @karsten089 sagte: Ich versuche eine Zeitschaltuhr mit Bewegungsmelder zu bauen

                  Wie sieht der Versuch aus?

                  K Offline
                  K Offline
                  karsten089
                  schrieb am zuletzt editiert von
                  #8

                  @paul53 Sorry Bild hatte gefehlt. Habe es eingefügt. :-)

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • K karsten089

                    @paul53 Sorry Bild hatte gefehlt. Habe es eingefügt. :-)

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #9

                    @karsten089
                    "Wiederhole solange" erzeugt eine Endlosschleife!

                    @karsten089 sagte in Unterschied timeout und pause in Blockly:

                    Wie kann ich das charmanter lösen?

                    Blockly_temp.JPG

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    • R RkcCorian

                      Hallo Zusammen,

                      ich stelle mir auch gerade die Frage, ob ich das "bequemere" PAUSE oder doch lieber STEUERE mit Verzögerung verwenden soll. Ich habe mal ein paar Tests mit dem PAUSE-Block gemacht. Soweit ich es sehe wird diese eine Abarbeitung des Scripts über einen Trigger verzögert, hindert dennoch nicht, dass das Script mehrfach parallel getriggert wird und dann parallel mehrfach ausgeführt wird. Wenn ich es richtig sehe ist der Wesentliche Unterschied bzgl. STEUERE... will ich:

                      • A Mein Skript, bzw. meine Befehle konsistent abarbeiten und "hart" mehrfach Steuerfehle hintereinander abschicken
                      • B Meine Steuerbefehle ggf. über "löschen, falls läuft" direkt wieder zurück setzen lassen, bei konfliktionärer Steuerung

                      Hab ich das richtig verstanden?

                      Viele Grüße!

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

                      @markus-2 sagte in Unterschied timeout und pause in Blockly:

                      Hallo Zusammen,

                      ich stelle mir auch gerade die Frage, ob ich das "bequemere" PAUSE oder doch lieber STEUERE mit Verzögerung verwenden soll. Ich habe mal ein paar Tests mit dem PAUSE-Block gemacht. Soweit ich es sehe wird diese eine Abarbeitung des Scripts über einen Trigger verzögert, hindert dennoch nicht, dass das Script mehrfach parallel getriggert wird und dann parallel mehrfach ausgeführt wird. Wenn ich es richtig sehe ist der Wesentliche Unterschied bzgl. STEUERE... will ich:

                      • A Mein Skript, bzw. meine Befehle konsistent abarbeiten und "hart" mehrfach Steuerfehle hintereinander abschicken
                      • B Meine Steuerbefehle ggf. über "löschen, falls läuft" direkt wieder zurück setzen lassen, bei konfliktionärer Steuerung

                      Hab ich das richtig verstanden?

                      Viele Grüße!

                      Das hast du soweit richtig verstanden. Insbesondere das "Problem" der doppelten Ausführung des gleichen Skript Codes ohne einfache Möglichkeit da einzugreifen.

                      Ich würde in der Situation immer zu Timeout / Intervall / Steuerbefehle mit Verzögerung und löschen falls läuft raten.

                      A.

                      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
                      2
                      • K karsten089

                        Ich versuche eine Zeitschaltuhr mit Bewegungsmelder zu bauen, das klappt aber mit dem time out nicht. Verstehe ich richtig, dass mein Script immer weiter läuft, sprich von vorne anfängt, bis der Switch auf false ist, und nur der Check presence verzögert wird?

                        Mit einer Pause funktioniert es, hier wird aber der Befehl false für den Switch mehrfach verschickt (wird mehrmals hintereinander grün in den Objekten, und irgendwann rot - was bedeutet rot?)

                        Wie kann ich das charmanter lösen?

                        5081F2EA-B02A-484A-9506-A00BB9BFFAC1.jpeg

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

                        @karsten089 sagte in Unterschied timeout und pause in Blockly:

                        Ich versuche eine Zeitschaltuhr mit Bewegungsmelder zu bauen, das klappt aber mit dem time out nicht. Verstehe ich richtig, dass mein Script immer weiter läuft, sprich von vorne anfängt, bis der Switch auf false ist, und nur der Check presence verzögert wird?

                        Mit einer Pause funktioniert es, hier wird aber der Befehl false für den Switch mehrfach verschickt (wird mehrmals hintereinander grün in den Objekten, und irgendwann rot - was bedeutet rot?)

                        Wie kann ich das charmanter lösen?

                        5081F2EA-B02A-484A-9506-A00BB9BFFAC1.jpeg

                        Das was Du im Bild gemacht hast hat mehrere Probleme. Die Lösung von @paul53 weiter oben im Thread ist eine saubere Umsetzung einer BWM Ansteuerung - wenn es auch nicht das abbildet was Du in Deinem Skript getan hast.

                        Vorab: die Aussage von @paul53 das dein Skript eine Endlosschleife hat ist nicht korrekt. Die Schleife hat eine Abbruchbedingung die auch ausgelöst werden kann. Es gibt mehrere viel grössere Probleme die sich aus Deinem Ansatz ergeben.

                        Als erstes Problem triggerst du auf "wurde aktualisiert". Das bedeutet das Dein Skript bei jeder Aktualisierung des Datenpunktes gestartet wird, unabhängig davon ob sich der Wert auch verändert hat.
                        Das Zweite Problem ist das der Skript-teil im Trigger so lange läuft bis der Datenpunkt mit falsch Aktualisiert wird. Wenn der Datenpunkt also mit wahr aktualisiert wird ohne das er vorher auf falsch geht dann wird der der Skript-teil im Trigger ein zweites (drittes, viertes, fünftes) mal gestartet.
                        Das Dritte Problem ist die Verwendung des Timeout. Der Baustein "Ausführen Timeout" fügt den im Timeout definierten Skript-Teil in eine Liste von zeitgesteuerten Skripten ein. Diese Aktion dauert ein paar Millisekunden. Die Solange Schleife läuft also mit voller Last so lange bis der Wert auf falsch fällt.
                        Das Vierte Problem ist das der timeout nicht gelöscht wird. Zusammen mit dem was ich im Vorfeld geschrieben habe, und unter der Annahme das

                        • der Schalter nach 10 sekunden auf falsch geht
                        • das Eintragen in den Timeout 100 ms dauert (es geht schneller, aber das Ergebnis ist so schon ziemlich heftig)

                        bekommst Du 100 5 Sekunden Timeouts die im 100ms Abstand den Wert des Präsenzsensors abfragen. Sollte in der Zeit der Wert mit Wahr aktualisiert werden kommen noch weitere Timeouts hinzu.

                        Wenn du das Skript von @paul53 so anpasst wie im Screenshot unten dargestellt (den rot durchgestrichenen Block entfernen) dann sollte die Funktion so sein wie sie nach Deinem Skript (anscheinend) sein soll - Die Lampe wird automatisch 5 Sekunden nachdem der Präsenzmelder keine Präsenz mehr erkannt wird abgeschaltet. Einschalten ist weiterhin manuell notwendig.

                        Screenshot 2021-05-27 at 10.19.07.png

                        A.

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

                        AlCalzoneA paul53P 2 Antworten Letzte Antwort
                        0
                        • AsgothianA Asgothian

                          @karsten089 sagte in Unterschied timeout und pause in Blockly:

                          Ich versuche eine Zeitschaltuhr mit Bewegungsmelder zu bauen, das klappt aber mit dem time out nicht. Verstehe ich richtig, dass mein Script immer weiter läuft, sprich von vorne anfängt, bis der Switch auf false ist, und nur der Check presence verzögert wird?

                          Mit einer Pause funktioniert es, hier wird aber der Befehl false für den Switch mehrfach verschickt (wird mehrmals hintereinander grün in den Objekten, und irgendwann rot - was bedeutet rot?)

                          Wie kann ich das charmanter lösen?

                          5081F2EA-B02A-484A-9506-A00BB9BFFAC1.jpeg

                          Das was Du im Bild gemacht hast hat mehrere Probleme. Die Lösung von @paul53 weiter oben im Thread ist eine saubere Umsetzung einer BWM Ansteuerung - wenn es auch nicht das abbildet was Du in Deinem Skript getan hast.

                          Vorab: die Aussage von @paul53 das dein Skript eine Endlosschleife hat ist nicht korrekt. Die Schleife hat eine Abbruchbedingung die auch ausgelöst werden kann. Es gibt mehrere viel grössere Probleme die sich aus Deinem Ansatz ergeben.

                          Als erstes Problem triggerst du auf "wurde aktualisiert". Das bedeutet das Dein Skript bei jeder Aktualisierung des Datenpunktes gestartet wird, unabhängig davon ob sich der Wert auch verändert hat.
                          Das Zweite Problem ist das der Skript-teil im Trigger so lange läuft bis der Datenpunkt mit falsch Aktualisiert wird. Wenn der Datenpunkt also mit wahr aktualisiert wird ohne das er vorher auf falsch geht dann wird der der Skript-teil im Trigger ein zweites (drittes, viertes, fünftes) mal gestartet.
                          Das Dritte Problem ist die Verwendung des Timeout. Der Baustein "Ausführen Timeout" fügt den im Timeout definierten Skript-Teil in eine Liste von zeitgesteuerten Skripten ein. Diese Aktion dauert ein paar Millisekunden. Die Solange Schleife läuft also mit voller Last so lange bis der Wert auf falsch fällt.
                          Das Vierte Problem ist das der timeout nicht gelöscht wird. Zusammen mit dem was ich im Vorfeld geschrieben habe, und unter der Annahme das

                          • der Schalter nach 10 sekunden auf falsch geht
                          • das Eintragen in den Timeout 100 ms dauert (es geht schneller, aber das Ergebnis ist so schon ziemlich heftig)

                          bekommst Du 100 5 Sekunden Timeouts die im 100ms Abstand den Wert des Präsenzsensors abfragen. Sollte in der Zeit der Wert mit Wahr aktualisiert werden kommen noch weitere Timeouts hinzu.

                          Wenn du das Skript von @paul53 so anpasst wie im Screenshot unten dargestellt (den rot durchgestrichenen Block entfernen) dann sollte die Funktion so sein wie sie nach Deinem Skript (anscheinend) sein soll - Die Lampe wird automatisch 5 Sekunden nachdem der Präsenzmelder keine Präsenz mehr erkannt wird abgeschaltet. Einschalten ist weiterhin manuell notwendig.

                          Screenshot 2021-05-27 at 10.19.07.png

                          A.

                          AlCalzoneA Offline
                          AlCalzoneA Offline
                          AlCalzone
                          Developer
                          schrieb am zuletzt editiert von
                          #12

                          Um die ursprüngliche Frage zu klären: pause ist hinter den Kulissen auch einfach nur ein setTimeout, mit dem Unterschied dass der Code für weniger JS-erfahrene Programmierer einfacher nachzuvollziehen ist.

                          Wir haben diesen Block ergänzt als wir im Skript-Adapter intern async/await-Unterstützung eingebaut haben - der kann bedenkenlos genutzt werden, wenn es wirklich nur ums Warten geht.
                          Soll aber die gleichzeitige Ausführung verzögerter Aktionen verhindert werden, führt aktuell kein Weg um die Kombination Timeout stoppen - Timeout erstellen.

                          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                          R 1 Antwort Letzte Antwort
                          1
                          • AsgothianA Asgothian

                            @karsten089 sagte in Unterschied timeout und pause in Blockly:

                            Ich versuche eine Zeitschaltuhr mit Bewegungsmelder zu bauen, das klappt aber mit dem time out nicht. Verstehe ich richtig, dass mein Script immer weiter läuft, sprich von vorne anfängt, bis der Switch auf false ist, und nur der Check presence verzögert wird?

                            Mit einer Pause funktioniert es, hier wird aber der Befehl false für den Switch mehrfach verschickt (wird mehrmals hintereinander grün in den Objekten, und irgendwann rot - was bedeutet rot?)

                            Wie kann ich das charmanter lösen?

                            5081F2EA-B02A-484A-9506-A00BB9BFFAC1.jpeg

                            Das was Du im Bild gemacht hast hat mehrere Probleme. Die Lösung von @paul53 weiter oben im Thread ist eine saubere Umsetzung einer BWM Ansteuerung - wenn es auch nicht das abbildet was Du in Deinem Skript getan hast.

                            Vorab: die Aussage von @paul53 das dein Skript eine Endlosschleife hat ist nicht korrekt. Die Schleife hat eine Abbruchbedingung die auch ausgelöst werden kann. Es gibt mehrere viel grössere Probleme die sich aus Deinem Ansatz ergeben.

                            Als erstes Problem triggerst du auf "wurde aktualisiert". Das bedeutet das Dein Skript bei jeder Aktualisierung des Datenpunktes gestartet wird, unabhängig davon ob sich der Wert auch verändert hat.
                            Das Zweite Problem ist das der Skript-teil im Trigger so lange läuft bis der Datenpunkt mit falsch Aktualisiert wird. Wenn der Datenpunkt also mit wahr aktualisiert wird ohne das er vorher auf falsch geht dann wird der der Skript-teil im Trigger ein zweites (drittes, viertes, fünftes) mal gestartet.
                            Das Dritte Problem ist die Verwendung des Timeout. Der Baustein "Ausführen Timeout" fügt den im Timeout definierten Skript-Teil in eine Liste von zeitgesteuerten Skripten ein. Diese Aktion dauert ein paar Millisekunden. Die Solange Schleife läuft also mit voller Last so lange bis der Wert auf falsch fällt.
                            Das Vierte Problem ist das der timeout nicht gelöscht wird. Zusammen mit dem was ich im Vorfeld geschrieben habe, und unter der Annahme das

                            • der Schalter nach 10 sekunden auf falsch geht
                            • das Eintragen in den Timeout 100 ms dauert (es geht schneller, aber das Ergebnis ist so schon ziemlich heftig)

                            bekommst Du 100 5 Sekunden Timeouts die im 100ms Abstand den Wert des Präsenzsensors abfragen. Sollte in der Zeit der Wert mit Wahr aktualisiert werden kommen noch weitere Timeouts hinzu.

                            Wenn du das Skript von @paul53 so anpasst wie im Screenshot unten dargestellt (den rot durchgestrichenen Block entfernen) dann sollte die Funktion so sein wie sie nach Deinem Skript (anscheinend) sein soll - Die Lampe wird automatisch 5 Sekunden nachdem der Präsenzmelder keine Präsenz mehr erkannt wird abgeschaltet. Einschalten ist weiterhin manuell notwendig.

                            Screenshot 2021-05-27 at 10.19.07.png

                            A.

                            paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von paul53
                            #13

                            @asgothian sagte: Die Schleife hat eine Abbruchbedingung die auch ausgelöst werden kann.

                            Bis die Abbruchbedingung erfüllt ist, ist die Javascript-Instanz meist schon abgeschmiert.

                            @asgothian sagte in Unterschied timeout und pause in Blockly:

                            Einschalten ist weiterhin manuell notwendig.

                            Du hast recht: Das Skript sollte nur ausschalten:

                            Blockly_temp.JPG

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            AsgothianA 1 Antwort Letzte Antwort
                            0
                            • paul53P paul53

                              @asgothian sagte: Die Schleife hat eine Abbruchbedingung die auch ausgelöst werden kann.

                              Bis die Abbruchbedingung erfüllt ist, ist die Javascript-Instanz meist schon abgeschmiert.

                              @asgothian sagte in Unterschied timeout und pause in Blockly:

                              Einschalten ist weiterhin manuell notwendig.

                              Du hast recht: Das Skript sollte nur ausschalten:

                              Blockly_temp.JPG

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

                              @paul53 sagte in Unterschied timeout und pause in Blockly:

                              Bis die Abbruchbedingung erfüllt ist, ist die Javascript-Instanz meist schon abgeschmiert.

                              Das Stimmt, allerdings liegt es meiner Meinung nach weniger an der fehlenden Abbruchbedingung und mehr an der großen Anzahl an Timeouts die vom Skript erzeugt werden. Wenn statt des "ausführen Timeout" einfach nur ein "mache irgendwas" im solange stehen würde müsste die JS Instanz durchlaufen.

                              A.

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

                              1 Antwort Letzte Antwort
                              0
                              • AlCalzoneA AlCalzone

                                Um die ursprüngliche Frage zu klären: pause ist hinter den Kulissen auch einfach nur ein setTimeout, mit dem Unterschied dass der Code für weniger JS-erfahrene Programmierer einfacher nachzuvollziehen ist.

                                Wir haben diesen Block ergänzt als wir im Skript-Adapter intern async/await-Unterstützung eingebaut haben - der kann bedenkenlos genutzt werden, wenn es wirklich nur ums Warten geht.
                                Soll aber die gleichzeitige Ausführung verzögerter Aktionen verhindert werden, führt aktuell kein Weg um die Kombination Timeout stoppen - Timeout erstellen.

                                R Offline
                                R Offline
                                RkcCorian
                                schrieb am zuletzt editiert von
                                #15

                                @alcalzone Vielen Dank dafür! Da ich mehrere Geräte in ein definiertes Setting schalten möchte hilft das ungemein. Bei parallelen Anfragen könnten durch Nutzung von "Löschen falls läuft" undefinierte Zustände passieren. Durch die Pausen wird ein Befehl immer konsistent bearbeitet, wenngleich dies als Nachteil hat, dass manche Befehle hintereinander mehrfach geschickt werden ggü. "Löschen falls läuft".

                                1 Antwort Letzte Antwort
                                0
                                • AsgothianA Asgothian

                                  @markus-2 sagte in Unterschied timeout und pause in Blockly:

                                  Hallo Zusammen,

                                  ich stelle mir auch gerade die Frage, ob ich das "bequemere" PAUSE oder doch lieber STEUERE mit Verzögerung verwenden soll. Ich habe mal ein paar Tests mit dem PAUSE-Block gemacht. Soweit ich es sehe wird diese eine Abarbeitung des Scripts über einen Trigger verzögert, hindert dennoch nicht, dass das Script mehrfach parallel getriggert wird und dann parallel mehrfach ausgeführt wird. Wenn ich es richtig sehe ist der Wesentliche Unterschied bzgl. STEUERE... will ich:

                                  • A Mein Skript, bzw. meine Befehle konsistent abarbeiten und "hart" mehrfach Steuerfehle hintereinander abschicken
                                  • B Meine Steuerbefehle ggf. über "löschen, falls läuft" direkt wieder zurück setzen lassen, bei konfliktionärer Steuerung

                                  Hab ich das richtig verstanden?

                                  Viele Grüße!

                                  Das hast du soweit richtig verstanden. Insbesondere das "Problem" der doppelten Ausführung des gleichen Skript Codes ohne einfache Möglichkeit da einzugreifen.

                                  Ich würde in der Situation immer zu Timeout / Intervall / Steuerbefehle mit Verzögerung und löschen falls läuft raten.

                                  A.

                                  R Offline
                                  R Offline
                                  RkcCorian
                                  schrieb am zuletzt editiert von
                                  #16

                                  @asgothian Vielen Dank für Deine Rückmeldung! Da ich mehrere Geräte in ein definiertes Setting schalten möchte ist es für meinen Use Case dennoch besser Pause zu nutzen. Bei parallelen Anfragen könnten durch Nutzung von "Löschen falls läuft" ansonsten undefinierte Zustände passieren. Durch die Pausen wird ein Befehl immer konsistent bearbeitet, wenngleich dies als Nachteil hat, dass manche Befehle hintereinander mehrfach geschickt werden ggü. "Löschen falls läuft". Aber gut zu wissen, dass es beide Alternativen gibt. Je nach Use Case werde ich diese einsetzen (können) :-)

                                  1 Antwort Letzte Antwort
                                  0
                                  • K Offline
                                    K Offline
                                    karsten089
                                    schrieb am zuletzt editiert von
                                    #17

                                    Klasse, danke euch allen. Bin noch sehr am
                                    Anfang und mache viel Trial&error… und dabei viel Error. ;-)

                                    1 Antwort Letzte Antwort
                                    1
                                    • X Offline
                                      X Offline
                                      XWing
                                      schrieb am zuletzt editiert von XWing
                                      #18

                                      Ich mache das hier mal wieder auf.
                                      Hier mein Script:
                                      2d67c7df-5024-43b5-98f9-7cf0d81aa4e7-grafik.png

                                      Es soll die Pumpe meines Pools steuern. Dabei sollen folgende Parameter erfüllt sein:

                                      1. Es liegt ein Stromüberschuß von mind 3kW an (PV und/ oder BHKW)
                                      2. Es sollen max. 2,4kWh am Tag verbraucht werden.
                                      3. Es soll eine Vorlauftemperatur von mind. 60°C anliegen.
                                        Bei meinen ersten Versuchen habe ich ohne Timeout gearbeitet. Das funktioniert zwar sehr gut, aber nach kurzer Zeit tilt mein Shelly Schalter (auch wenn er nur ein Schütz steuert, ich muss dann jedes mal die Sicherung ab- und wieder anschalten, damit der Shelly wieder funktioniert), da es zu zu vielen Schaltvorgängen kommt. Für die Schwimmbadpumpe ist das sicher auch nicht förderlich.
                                        Deswegen möchte ich, daß die Pumpe, nachdem sie eingeschaltet wurde mind. 5 Minuten laufen soll.
                                        Ich hoffe ich habe den Thread soweit richtig verstanden und die Tips dort umgesetzt? Oder sind da noch Fehler drin?
                                      HomoranH paul53P 2 Antworten Letzte Antwort
                                      0
                                      • X XWing

                                        Ich mache das hier mal wieder auf.
                                        Hier mein Script:
                                        2d67c7df-5024-43b5-98f9-7cf0d81aa4e7-grafik.png

                                        Es soll die Pumpe meines Pools steuern. Dabei sollen folgende Parameter erfüllt sein:

                                        1. Es liegt ein Stromüberschuß von mind 3kW an (PV und/ oder BHKW)
                                        2. Es sollen max. 2,4kWh am Tag verbraucht werden.
                                        3. Es soll eine Vorlauftemperatur von mind. 60°C anliegen.
                                          Bei meinen ersten Versuchen habe ich ohne Timeout gearbeitet. Das funktioniert zwar sehr gut, aber nach kurzer Zeit tilt mein Shelly Schalter (auch wenn er nur ein Schütz steuert, ich muss dann jedes mal die Sicherung ab- und wieder anschalten, damit der Shelly wieder funktioniert), da es zu zu vielen Schaltvorgängen kommt. Für die Schwimmbadpumpe ist das sicher auch nicht förderlich.
                                          Deswegen möchte ich, daß die Pumpe, nachdem sie eingeschaltet wurde mind. 5 Minuten laufen soll.
                                          Ich hoffe ich habe den Thread soweit richtig verstanden und die Tips dort umgesetzt? Oder sind da noch Fehler drin?
                                        HomoranH Nicht stören
                                        HomoranH Nicht stören
                                        Homoran
                                        Global Moderator Administrators
                                        schrieb am zuletzt editiert von Homoran
                                        #19

                                        @xwing jedesmal wenn ein Wert > -3000 (2995, 29800, 2800) nacheinander kommt wird ein neuer timeout gestartet ohne dass der laufende gestoppt wird.
                                        dadurch kann keiner der timeouts gestoppt werden

                                        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                        1 Antwort Letzte Antwort
                                        0
                                        • X XWing

                                          Ich mache das hier mal wieder auf.
                                          Hier mein Script:
                                          2d67c7df-5024-43b5-98f9-7cf0d81aa4e7-grafik.png

                                          Es soll die Pumpe meines Pools steuern. Dabei sollen folgende Parameter erfüllt sein:

                                          1. Es liegt ein Stromüberschuß von mind 3kW an (PV und/ oder BHKW)
                                          2. Es sollen max. 2,4kWh am Tag verbraucht werden.
                                          3. Es soll eine Vorlauftemperatur von mind. 60°C anliegen.
                                            Bei meinen ersten Versuchen habe ich ohne Timeout gearbeitet. Das funktioniert zwar sehr gut, aber nach kurzer Zeit tilt mein Shelly Schalter (auch wenn er nur ein Schütz steuert, ich muss dann jedes mal die Sicherung ab- und wieder anschalten, damit der Shelly wieder funktioniert), da es zu zu vielen Schaltvorgängen kommt. Für die Schwimmbadpumpe ist das sicher auch nicht förderlich.
                                            Deswegen möchte ich, daß die Pumpe, nachdem sie eingeschaltet wurde mind. 5 Minuten laufen soll.
                                            Ich hoffe ich habe den Thread soweit richtig verstanden und die Tips dort umgesetzt? Oder sind da noch Fehler drin?
                                          paul53P Offline
                                          paul53P Offline
                                          paul53
                                          schrieb am zuletzt editiert von paul53
                                          #20

                                          @xwing sagte: Pumpe, nachdem sie eingeschaltet wurde mind. 5 Minuten laufen soll.

                                          So werden bei Werten >= -3000 mehrere Timeout gestartet, die sich nicht mehr stoppen lassen. Ersetze sonst durch sonst falls vorheriger Wert < -3000, damit immer nur ein Timeout gestartet wird.
                                          Besser: Bau eine Hysterese ein, die größer ist als die Leistungsaufnahme der Pumpe.

                                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                          X 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          666

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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