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.
    • OliverIO
      OliverIO @guitardoc last edited by

      @guitardoc

      Selbst mit Javascript gibt es keine System Möglichkeit, das herauszufinden. Wenn, dann muss man sich die ganzen Time out handles selber merken.

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

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

        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:

          @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