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
    983

  • 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.
  • 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 8.4.14)
      Linux pve 6.8.12-16-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 8.4.14)
          Linux pve 6.8.12-16-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 8.4.14)
              Linux pve 6.8.12-16-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 8.4.14)
                      Linux pve 6.8.12-16-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

                      789

                      Online

                      32.6k

                      Benutzer

                      82.2k

                      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