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

      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!

      OliverIO 1 Reply Last reply Reply Quote 0
      • 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