Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Herausfinden, ob ein Timeout in der Pipeline ist

    NEWS

    • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    Herausfinden, ob ein Timeout in der Pipeline ist

    This topic has been deleted. Only users with topic management privileges can see it.
    • Asgothian
      Asgothian Developer @MartinP last edited by

      @martinp sagte in Herausfinden, ob ein Timeout in der Pipeline ist:

      @guitardoc sagte in Herausfinden, ob ein Timeout in der Pipeline ist:

      Hallo zusammen,

      Gibt es eine Möglichkeit, herauszufinden, ob ein Timeout schon angestoßen wurde? Außer umständlich einen Datenpunkt dafür anzulegen und es selbst mitzuloggen?

      Danke schon mal für die Info!

      Einen Datenpunkt anlegen muss man nicht, sondern nur eine Variable in dem Blockly-Script, z.B. MyTimeOutStarted
      Die setzt man beim Starten des Scripts auf false, und beim Starten des Timeouts auf true. Bei regulärem Ablauf des Timeouts und bei vorzeitigem stoppen muss die Variable aber auf false gesetzt werden ...

      Das Design-Pattern, zu vermeiden, dass ein Timeout doppelt gestartet wird, ist es, routinemäßig ein stop des Timeouts auszuführen, bevor man ihn startet...

      eine zusätzliche Variable ist eigentlich unnötig. Allerdings sollte man immer den handle des Timeouts behalten. Den braucht man um den Timeout zu stoppen. Und der sollte dann auch im Timeout auf null gesetzt werden. (macht Blockly automatisch).
      Dann kann man vor dem Starten des Timeout den Handle verifizieren *if (!handle) handle=setTimeout(...);)

      A.

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

        @asgothian Ist die Frage, ob man das mit reinem Blockly bewerkstelligt bekommt, oder da ein Javascript-Einsprengsel in sein Blockly Script gebraucht wird...

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

          @martinp sagte in Herausfinden, ob ein Timeout in der Pipeline ist:

          @asgothian Ist die Frage, ob man das mit reinem Blockly bewerkstelligt bekommt, oder da ein Javascript-Einsprengsel in sein Blockly Script gebraucht wird...

          wie gesagt - Blockly macht es automatisch - es legt die Variable (timeout, timeout2, ...) an, nutzt diese um den Handle zu speichern, und setzt diesen auf null.

          Wenn man in einem Blockly ein JS Skript Anteil nutzt (als Funktion) dann kann man diese Variable auch nutzen.

          A.

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

            @asgothian Okay, also würde es reichen, in Blockly abzufragen, ob timeout == 0?

            Leider kann aber in Blockly nicht direkt auf die timeouts zugegriffen werden ... also doch Javascript ... oder

            214457f9-c97a-430d-a183-70e8dfd40216-grafik.png
            Javascript Funktionscode

            return timeout;
            

            Debug Ausgaben

            javascript.0	14:02:09.136	info	1 timeout = undefined
            javascript.0	14:02:09.136	info	setTimeout(ms=1000)
            javascript.0	14:02:09.136	info	3 timeout = 98061448
            javascript.0	14:02:09.137	info	setTimeout(ms=2000)
            javascript.0	14:02:09.137	info	subscribe: {"pattern":{"change":"ne","q":0},"name":"script.js.Spielwiese.Test"}
            javascript.0	14:02:09.137	info	registered 2 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
            javascript.0	14:02:10.136	info	2 timeout = null
            javascript.0	14:02:11.137	info	4 timeout = null
            
            paul53 1 Reply Last reply Reply Quote 0
            • JLeg
              JLeg last edited by

              @martinp sagte in Herausfinden, ob ein Timeout in der Pipeline ist:

              Leider kann aber in Blockly nicht direkt auf die timeouts zugegriffen werden

              ..würde schon denken, dass das geht:

              0816282f-9048-4cde-b704-bf050b744e1f-grafik.png

              MartinP 1 Reply Last reply Reply Quote 1
              • MartinP
                MartinP @JLeg last edited by

                @jleg Stimmt, das funktioniert ... Hatte "Verzögerung" für eine Aktion gehalten...

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

                  @martinp sagte: Leider kann aber in Blockly nicht direkt auf die timeouts zugegriffen werden

                  Doch:

                  Blockly_temp.JPG

                  G 1 Reply Last reply Reply Quote 2
                  • G
                    guitardoc @paul53 last edited by

                    @paul53 Jepp, das funktioniert. Kurz zum Hintergrund, falls das interessiert:

                    Bei allen batteriebetriebenen Geräten schaue ich per "IDs vom Selektor", ob sich der Ladestand eines der Geräte geändert hat und wenn einbestimmter Wert unterschritten wird, dann sende ich eine Nachricht per Telegram.
                    Ich habe unterschiedliche batteriebetriebene Geräte (Shellys, unterschiedliche Geräte im Zigbee-Netzwerk), welche in unterschiedlichen Abständen den Ladezustand aktualisieren. Eines der Zigbee-Geräte (ein Lichtsensor) liefert aus unerklärlichen Gründen immer mal 0%, obwohl die Ladung viel größer ist. Hab schon alles versucht, er sagt zwischendurch immer wieder 0%, und das teilweise über Stunden, bevor er den richtigen Wert wieder liefert.
                    Ich habe den Timeout auf 6h(!) setzen müssen, damit ich nicht immer eine Nachricht bekomme, dass er auf 0% ist, nur weil sich der Ladezustand eines anderen Gerätes geändert hat und das Blockly ausgelöst wird. In der Liste der Geräte, deren Ladung zu gering ist, steht dann ja jedesmal die 0% drin, auch wenn ich die 0% schon vor Stunden erfasst hab.
                    Wenn ich nun den Timeout jedesmal vor Ausführung lösche, dann fängt er immer wieder an 6h zu warten, mit dem Ergebnis, dass ich vielleicht gar keine Meldung mehr bekomme, denn eines der Geräte wird sich in der Zeit vermutlich schon mit einem geänderten Ladungszustand melden. Daher die Frage, wie man herausbekommt, ob der Timeout schon läuft.

                    Hier noch das Blockly zur Veranschaulichung (hoffentlich kann man was erkennen).

                    f5d98c27-0938-4c49-8b11-c3dde58f6f95-image.png

                    paul53 MartinP 2 Replies Last reply Reply Quote 0
                    • paul53
                      paul53 @guitardoc last edited by paul53

                      @guitardoc sagte: Eines der Zigbee-Geräte (ein Lichtsensor) liefert aus unerklärlichen Gründen immer mal 0%, obwohl die Ladung viel größer ist.

                      Weshalb nicht nur die Sonderbehandlung per Timer für dieses eine Gerät?

                      EDIT: Etwa so:

                      Blockly_temp.JPG

                      1 Reply Last reply Reply Quote 0
                      • MartinP
                        MartinP @guitardoc last edited by

                        @guitardoc Hier ist der Timeout eigentlich das zu komplizierte Design Pattern. Timeouts braucht man, wenn das Problem adressiert werden muss, dass eine zu lange Zeit gar nichts passiert.
                        Hier werden aber regelmäßig Null-Werte gesendet, sodass man zu diesem Zeitpunkten prüfen kann, wie lange es her ist, dass ein "guter" Batteriewert hereingekommen ist.

                        Auf der anderen Seite kann man mit dem Timeout auch gleich prüfen, ob ein Sensor komplett Funkstille hat, also gar nicht mehr sendet.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        1.1k
                        Online

                        32.4k
                        Users

                        81.2k
                        Topics

                        1.3m
                        Posts

                        6
                        13
                        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