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

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Herausfinden, ob ein Timeout in der Pipeline ist

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    988

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Herausfinden, ob ein Timeout in der Pipeline ist

Geplant Angeheftet Gesperrt Verschoben Blockly
13 Beiträge 6 Kommentatoren 395 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.
  • G Offline
    G Offline
    guitardoc
    schrieb am zuletzt editiert von
    #1

    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!

    OliverIOO 1 Antwort Letzte Antwort
    0
    • G guitardoc

      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!

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #2

      @guitardoc

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

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      1 Antwort Letzte Antwort
      0
      • MartinPM Online
        MartinPM Online
        MartinP
        schrieb am zuletzt editiert von
        #3

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

        Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
        Virtualization : unprivileged lxc container (debian 12 on Proxmox 9.1.5)
        Linux pve 6.17.9-1-pve
        6 GByte RAM für den Container
        Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
        Remote-Access über Wireguard der Fritzbox

        AsgothianA 1 Antwort Letzte Antwort
        0
        • MartinPM MartinP

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

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

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

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

          MartinPM 1 Antwort Letzte Antwort
          0
          • AsgothianA Asgothian

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

            MartinPM Online
            MartinPM Online
            MartinP
            schrieb am zuletzt editiert von
            #5

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

            Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
            Virtualization : unprivileged lxc container (debian 12 on Proxmox 9.1.5)
            Linux pve 6.17.9-1-pve
            6 GByte RAM für den Container
            Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
            Remote-Access über Wireguard der Fritzbox

            AsgothianA 1 Antwort Letzte Antwort
            0
            • MartinPM MartinP

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

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

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

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

              MartinPM 1 Antwort Letzte Antwort
              0
              • AsgothianA Asgothian

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

                MartinPM Online
                MartinPM Online
                MartinP
                schrieb am zuletzt editiert von
                #7

                @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
                

                Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                Virtualization : unprivileged lxc container (debian 12 on Proxmox 9.1.5)
                Linux pve 6.17.9-1-pve
                6 GByte RAM für den Container
                Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                Remote-Access über Wireguard der Fritzbox

                paul53P 1 Antwort Letzte Antwort
                0
                • JLegJ Offline
                  JLegJ Offline
                  JLeg
                  schrieb am zuletzt editiert von
                  #8

                  @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

                  MartinPM 1 Antwort Letzte Antwort
                  1
                  • JLegJ JLeg

                    @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

                    MartinPM Online
                    MartinPM Online
                    MartinP
                    schrieb am zuletzt editiert von
                    #9

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

                    Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                    Virtualization : unprivileged lxc container (debian 12 on Proxmox 9.1.5)
                    Linux pve 6.17.9-1-pve
                    6 GByte RAM für den Container
                    Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                    Remote-Access über Wireguard der Fritzbox

                    1 Antwort Letzte Antwort
                    0
                    • MartinPM MartinP

                      @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
                      
                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #10

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

                      Doch:

                      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

                      G 1 Antwort Letzte Antwort
                      2
                      • paul53P paul53

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

                        Doch:

                        Blockly_temp.JPG

                        G Offline
                        G Offline
                        guitardoc
                        schrieb am zuletzt editiert von
                        #11

                        @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

                        paul53P MartinPM 2 Antworten Letzte Antwort
                        0
                        • G guitardoc

                          @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

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

                          @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

                          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
                          • G guitardoc

                            @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

                            MartinPM Online
                            MartinPM Online
                            MartinP
                            schrieb am zuletzt editiert von
                            #13

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

                            Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                            Virtualization : unprivileged lxc container (debian 12 on Proxmox 9.1.5)
                            Linux pve 6.17.9-1-pve
                            6 GByte RAM für den Container
                            Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                            Remote-Access über Wireguard der Fritzbox

                            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

                            475

                            Online

                            32.6k

                            Benutzer

                            82.3k

                            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