Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. clear Timeout funktioniert nicht mehr

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    280

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

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

clear Timeout funktioniert nicht mehr

Scheduled Pinned Locked Moved JavaScript
18 Posts 4 Posters 1.7k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S sub1ne

    @paul53 dein Beispiel ist nicht das Gleiche. Setz das "stop" mal in einen anderen Event-Block.

    So sieht das bei mir aus:
    Bildschirmfoto 2021-05-05 um 19.12.55.png

    der Timer wird im Event-Block #1 erzeugt und im Event-Block #2 gelöscht. Das Ganze funktioniert also übergreifen.

    Ich bin jetzt auf den JavaScript-Code umgestiegen und hab das JavaScript wie folgt geändert:

    var catModeTimeout = null;
    
    on({id: 'deconz.0.Sensors.6.open', val: true}, async function (obj) {
    
      if (catModeTimeout === null) {
        catModeTimeout = setTimeout(async function () {
            setState("javascript.0.custom.Keller.CatMode"/*CatMode*/, true);
        }, 600000);
      }
    
    });
    
    on({id: 'deconz.0.Sensors.6.open', val: false}, async function (obj) {
     
      if (catModeTimeout) {
          clearTimeout(catModeTimeout);
          catModeTimeout = null;
      }
    
    });
    
    

    ...jetzt funktioniert es wie vorher. Es hat ja ein Jahr funktioniert und erst nach dem Update nicht mehr. Für mich sieht das so aus, als ob da was mit dem Scope der Timeout-Variable nicht stimmt.

    paul53P Offline
    paul53P Offline
    paul53
    wrote on last edited by paul53
    #5

    @sub1ne sagte: Für mich sieht das so aus, als ob da was mit dem Scope der Timeout-Variable nicht stimmt.

    Im vom Blockly erzeugten Javascript-Code steht doch sicherlich in Zeile 1?

    var catModeTimeout;
    

    Zwei Trigger auf den gleichen Datenpunkt in einem Skript ist Ressourcenverschwendung. Außerdem sollte auf Wertänderung getriggert werden, damit mit Sicherheit nur ein Timer läuft, der gestoppt werden kann.

    @sub1ne sagte: hab das JavaScript wie folgt geändert:

      if (catModeTimeout === null) {
    

    Damit wird ebenfalls verhindert, dass der Timer mehrfach gestartet wird,

    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 Reply Last reply
    0
    • S sub1ne

      @paul53 dein Beispiel ist nicht das Gleiche. Setz das "stop" mal in einen anderen Event-Block.

      So sieht das bei mir aus:
      Bildschirmfoto 2021-05-05 um 19.12.55.png

      der Timer wird im Event-Block #1 erzeugt und im Event-Block #2 gelöscht. Das Ganze funktioniert also übergreifen.

      Ich bin jetzt auf den JavaScript-Code umgestiegen und hab das JavaScript wie folgt geändert:

      var catModeTimeout = null;
      
      on({id: 'deconz.0.Sensors.6.open', val: true}, async function (obj) {
      
        if (catModeTimeout === null) {
          catModeTimeout = setTimeout(async function () {
              setState("javascript.0.custom.Keller.CatMode"/*CatMode*/, true);
          }, 600000);
        }
      
      });
      
      on({id: 'deconz.0.Sensors.6.open', val: false}, async function (obj) {
       
        if (catModeTimeout) {
            clearTimeout(catModeTimeout);
            catModeTimeout = null;
        }
      
      });
      
      

      ...jetzt funktioniert es wie vorher. Es hat ja ein Jahr funktioniert und erst nach dem Update nicht mehr. Für mich sieht das so aus, als ob da was mit dem Scope der Timeout-Variable nicht stimmt.

      S Offline
      S Offline
      sub1ne
      wrote on last edited by sub1ne
      #6

      @paul53 die Codestellen. auf die du dich beziehst, sind die, die ich selbst im kopierten Javascript Coding manuell eingefügt habe - und mit diesen funktioniert alles wieder wie gehabt.

      Das Javascript aus meinem zweiten Posting ist das, was aus dem Blockly generiert wird. Dort gibt es weder in Zeile 1 eine Deklaration von catModeTimeout noch den if-Block um den Timer-start. Diese habe ich eingefügt, NACHDEM es mit dem reinen Blockly-Skript nicht mehr funktioniert hat.

      Fakt ist, mit meinem manuell angepassten Javascript funktioniert es, mit dem Blocky nicht.

      @paul53 said in clear Timeout funktioniert nicht mehr:

      Außerdem sollte auf Wertänderung getriggert werden, damit mit Sicherheit nur ein Timer läuft, der gestoppt werden kann.

      ich reagiere auf die Wertänderung von "deconz.0.Sensors.6.open" - einmal wenn er "true" wird, einmal, wenn er "false" wird.

      Ich könnte jetzt beides noch in den gleichen Trigger hängen, allerdings hat es ja funktioniert.

      paul53P 1 Reply Last reply
      0
      • S sub1ne

        @paul53 die Codestellen. auf die du dich beziehst, sind die, die ich selbst im kopierten Javascript Coding manuell eingefügt habe - und mit diesen funktioniert alles wieder wie gehabt.

        Das Javascript aus meinem zweiten Posting ist das, was aus dem Blockly generiert wird. Dort gibt es weder in Zeile 1 eine Deklaration von catModeTimeout noch den if-Block um den Timer-start. Diese habe ich eingefügt, NACHDEM es mit dem reinen Blockly-Skript nicht mehr funktioniert hat.

        Fakt ist, mit meinem manuell angepassten Javascript funktioniert es, mit dem Blocky nicht.

        @paul53 said in clear Timeout funktioniert nicht mehr:

        Außerdem sollte auf Wertänderung getriggert werden, damit mit Sicherheit nur ein Timer läuft, der gestoppt werden kann.

        ich reagiere auf die Wertänderung von "deconz.0.Sensors.6.open" - einmal wenn er "true" wird, einmal, wenn er "false" wird.

        Ich könnte jetzt beides noch in den gleichen Trigger hängen, allerdings hat es ja funktioniert.

        paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by paul53
        #7

        @sub1ne sagte: ich reagiere auf die Wertänderung von "deconz.0.Sensors.6.open" - einmal wenn er "true" wird, einmal, wenn er "false" wird.

        Nein, der Trigger reagiert nicht nur auf Wertänderung, sondern auch dann, wenn der Zeitstempel bei gleich bleibendem Wert aktualisiert wird.

        @sub1ne sagte in clear Timeout funktioniert nicht mehr:

        Dort gibt es weder in Zeile 1 eine Deklaration von catModeTimeout

        Das kann ich bei mir nicht nachvollziehen.

        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

        S 1 Reply Last reply
        0
        • paul53P paul53

          @sub1ne sagte: ich reagiere auf die Wertänderung von "deconz.0.Sensors.6.open" - einmal wenn er "true" wird, einmal, wenn er "false" wird.

          Nein, der Trigger reagiert nicht nur auf Wertänderung, sondern auch dann, wenn der Zeitstempel bei gleich bleibendem Wert aktualisiert wird.

          @sub1ne sagte in clear Timeout funktioniert nicht mehr:

          Dort gibt es weder in Zeile 1 eine Deklaration von catModeTimeout

          Das kann ich bei mir nicht nachvollziehen.

          S Offline
          S Offline
          sub1ne
          wrote on last edited by sub1ne
          #8

          @paul53 said in clear Timeout funktioniert nicht mehr:

          Das kann ich bei mir nicht nachvollziehen.

          d.h. wenn du in deinem MIT Blockly generierten Skript auf Javascript umschaltest wird in Zeile 1 ein

          var myTimeout = null; 
          

          gemacht? Das ist bei mir definitiv nicht der Fall...

          AsgothianA paul53P 2 Replies Last reply
          0
          • S sub1ne

            @paul53 said in clear Timeout funktioniert nicht mehr:

            Das kann ich bei mir nicht nachvollziehen.

            d.h. wenn du in deinem MIT Blockly generierten Skript auf Javascript umschaltest wird in Zeile 1 ein

            var myTimeout = null; 
            

            gemacht? Das ist bei mir definitiv nicht der Fall...

            AsgothianA Offline
            AsgothianA Offline
            Asgothian
            Developer
            wrote on last edited by Asgothian
            #9

            @sub1ne die Ursache warum dein Skript nicht funktioniert hat hat @paul53 Bereits oben erwähnt:

            Ein trigger auf “ist wahr” wird jedes Mal aktiv wenn der datenpunkt mit wahr aktualisiert wird. Das kann öfter sein als man denkt.

            Was dann passiert ist einfach. Es wird ein zweiter timeout gestartet und der gleichen Variable zugeordnet. Damit kann der erste timeout nicht mehr angehalten werden.

            Ein sauberer Weg auf die Änderung falsch/wahr zu trigger ist ein trigger auf “ist größer als vorher”, (bei falsch: ist kleiner als vorher)

            Wenn du in deinem originalen Blockly die triggerbedi ging anpasst dann sollte es also auch gehen.

            Das die Variable vor dem “setTimeout” nicht deklariert wird liegt wahrscheinlich daran das die timeout Benennungen initial nicht wie “benutzerdefinierte” Variablen behandelt werden. Sie stehen ja auch nicht in der “variablen” Liste von Blockly.

            A.

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

            N S 2 Replies Last reply
            0
            • S sub1ne

              @paul53 said in clear Timeout funktioniert nicht mehr:

              Das kann ich bei mir nicht nachvollziehen.

              d.h. wenn du in deinem MIT Blockly generierten Skript auf Javascript umschaltest wird in Zeile 1 ein

              var myTimeout = null; 
              

              gemacht? Das ist bei mir definitiv nicht der Fall...

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #10

              @sub1ne sagte: Blockly generierten Skript auf Javascript umschaltest wird in Zeile 1 ein

              var timeout;
              

              gemacht. Enthält undefined.

              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 Reply Last reply
              0
              • AsgothianA Asgothian

                @sub1ne die Ursache warum dein Skript nicht funktioniert hat hat @paul53 Bereits oben erwähnt:

                Ein trigger auf “ist wahr” wird jedes Mal aktiv wenn der datenpunkt mit wahr aktualisiert wird. Das kann öfter sein als man denkt.

                Was dann passiert ist einfach. Es wird ein zweiter timeout gestartet und der gleichen Variable zugeordnet. Damit kann der erste timeout nicht mehr angehalten werden.

                Ein sauberer Weg auf die Änderung falsch/wahr zu trigger ist ein trigger auf “ist größer als vorher”, (bei falsch: ist kleiner als vorher)

                Wenn du in deinem originalen Blockly die triggerbedi ging anpasst dann sollte es also auch gehen.

                Das die Variable vor dem “setTimeout” nicht deklariert wird liegt wahrscheinlich daran das die timeout Benennungen initial nicht wie “benutzerdefinierte” Variablen behandelt werden. Sie stehen ja auch nicht in der “variablen” Liste von Blockly.

                A.

                N Offline
                N Offline
                Nordischerjung
                wrote on last edited by
                #11

                @asgothian sagte in clear Timeout funktioniert nicht mehr:

                Ein trigger auf “ist wahr” wird jedes Mal aktiv wenn der datenpunkt mit wahr aktualisiert wird. Das kann öfter sein als man denkt.

                Ein sauberer Weg auf die Änderung falsch/wahr zu trigger ist ein trigger auf “ist größer als vorher”, (bei falsch: ist kleiner als vorher)

                Nur mal kurz geräubert,

                das heißt also, so

                b9d256cc-3004-4fbf-9138-3b528ffa4edc-grafik.png

                ist besser als so?

                920e9e18-9a4b-4823-b831-7363f931c328-grafik.png

                Gruß Nordischerjung

                sonnige Grüße von der Ostsee

                AsgothianA paul53P 2 Replies Last reply
                0
                • N Nordischerjung

                  @asgothian sagte in clear Timeout funktioniert nicht mehr:

                  Ein trigger auf “ist wahr” wird jedes Mal aktiv wenn der datenpunkt mit wahr aktualisiert wird. Das kann öfter sein als man denkt.

                  Ein sauberer Weg auf die Änderung falsch/wahr zu trigger ist ein trigger auf “ist größer als vorher”, (bei falsch: ist kleiner als vorher)

                  Nur mal kurz geräubert,

                  das heißt also, so

                  b9d256cc-3004-4fbf-9138-3b528ffa4edc-grafik.png

                  ist besser als so?

                  920e9e18-9a4b-4823-b831-7363f931c328-grafik.png

                  AsgothianA Offline
                  AsgothianA Offline
                  Asgothian
                  Developer
                  wrote on last edited by Asgothian
                  #12

                  @nordischerjung
                  Besser und besser.

                  In genau dem Beispiel ist das Ergebnis ziemlich gleich. Ich ziehe das erste vor, insbesondere wenn mich der gegenteilige Fall nicht interessiert.

                  Das gilt so lange wie im falls der “wert” Baustein genutzt wird.

                  A.

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

                  1 Reply Last reply
                  1
                  • N Nordischerjung

                    @asgothian sagte in clear Timeout funktioniert nicht mehr:

                    Ein trigger auf “ist wahr” wird jedes Mal aktiv wenn der datenpunkt mit wahr aktualisiert wird. Das kann öfter sein als man denkt.

                    Ein sauberer Weg auf die Änderung falsch/wahr zu trigger ist ein trigger auf “ist größer als vorher”, (bei falsch: ist kleiner als vorher)

                    Nur mal kurz geräubert,

                    das heißt also, so

                    b9d256cc-3004-4fbf-9138-3b528ffa4edc-grafik.png

                    ist besser als so?

                    920e9e18-9a4b-4823-b831-7363f931c328-grafik.png

                    paul53P Offline
                    paul53P Offline
                    paul53
                    wrote on last edited by
                    #13

                    @nordischerjung sagte: ist besser als so?

                    Ich bevorzuge

                    Bild_2021-05-06_135444.png

                    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

                    N S 2 Replies Last reply
                    1
                    • paul53P paul53

                      @nordischerjung sagte: ist besser als so?

                      Ich bevorzuge

                      Bild_2021-05-06_135444.png

                      N Offline
                      N Offline
                      Nordischerjung
                      wrote on last edited by
                      #14

                      @paul53 Ja danke, das hatte ich mir so auch schon überlegt.

                      Gruß Nordischerjung

                      sonnige Grüße von der Ostsee

                      1 Reply Last reply
                      0
                      • AsgothianA Asgothian

                        @sub1ne die Ursache warum dein Skript nicht funktioniert hat hat @paul53 Bereits oben erwähnt:

                        Ein trigger auf “ist wahr” wird jedes Mal aktiv wenn der datenpunkt mit wahr aktualisiert wird. Das kann öfter sein als man denkt.

                        Was dann passiert ist einfach. Es wird ein zweiter timeout gestartet und der gleichen Variable zugeordnet. Damit kann der erste timeout nicht mehr angehalten werden.

                        Ein sauberer Weg auf die Änderung falsch/wahr zu trigger ist ein trigger auf “ist größer als vorher”, (bei falsch: ist kleiner als vorher)

                        Wenn du in deinem originalen Blockly die triggerbedi ging anpasst dann sollte es also auch gehen.

                        Das die Variable vor dem “setTimeout” nicht deklariert wird liegt wahrscheinlich daran das die timeout Benennungen initial nicht wie “benutzerdefinierte” Variablen behandelt werden. Sie stehen ja auch nicht in der “variablen” Liste von Blockly.

                        A.

                        S Offline
                        S Offline
                        sub1ne
                        wrote on last edited by sub1ne
                        #15

                        @asgothian

                        @asgothian said in clear Timeout funktioniert nicht mehr:

                        Ein trigger auf “ist wahr” wird jedes Mal aktiv wenn der datenpunkt mit wahr aktualisiert wird.

                        demnach ist der generierte Eventbehandler

                        on({id: 'deconz.0.Sensors.6.open', val: true}, async function (obj) {...});
                        

                        schlecht gewählt, die Javascript API gibt da laut Doku (https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state) bessers her, nämlich:

                        on({id: 'deconz.0.Sensors.6.open', val: true, oldVal: false}, async function (obj) {...});
                        

                        somit reagiert der Trigger nur auf Änderungen von false auf true.

                        @asgothian said in clear Timeout funktioniert nicht mehr:

                        Ein sauberer Weg auf die Änderung falsch/wahr zu trigger ist ein trigger auf “ist größer als vorher”, (bei falsch: ist kleiner als vorher)

                        ich bin seit 14 Jahren als Software-Engineer tätig...und die Verwendung von "true > false" würde ich nicht gerade als sauber bezeichnen...bei C++, C# oder Java haut dir das mal schön der Compiler um die Ohren...

                        1 Reply Last reply
                        1
                        • paul53P paul53

                          @nordischerjung sagte: ist besser als so?

                          Ich bevorzuge

                          Bild_2021-05-06_135444.png

                          S Offline
                          S Offline
                          sub1ne
                          wrote on last edited by sub1ne
                          #16

                          @paul53 und "... wurde geändert" triggert also nur wenn der Wert sich zu dem vorherigen Wert geändert hat? Also von true auf false und umgekehrt?

                          N paul53P 2 Replies Last reply
                          0
                          • S sub1ne

                            @paul53 und "... wurde geändert" triggert also nur wenn der Wert sich zu dem vorherigen Wert geändert hat? Also von true auf false und umgekehrt?

                            N Offline
                            N Offline
                            Nordischerjung
                            wrote on last edited by
                            #17

                            @sub1ne ne, guck mal hier hatte @paul53 geschrieben

                            Nein, der Trigger reagiert nicht nur auf Wertänderung, sondern auch dann, wenn der Zeitstempel bei gleich bleibendem Wert aktualisiert wird.
                            

                            Gruß Nordischerjung

                            sonnige Grüße von der Ostsee

                            1 Reply Last reply
                            0
                            • S sub1ne

                              @paul53 und "... wurde geändert" triggert also nur wenn der Wert sich zu dem vorherigen Wert geändert hat? Also von true auf false und umgekehrt?

                              paul53P Offline
                              paul53P Offline
                              paul53
                              wrote on last edited by paul53
                              #18

                              @sub1ne sagte: "... wurde geändert" triggert also nur wenn der Wert sich zu dem vorherigen Wert geändert hat? Also von true auf false und umgekehrt?

                              Ja.
                              Diese Bedingungen triggern nur bei Wertänderung:

                              • wurde geändert
                              • ist kleiner als letztes
                              • ist größer als letztes

                              Alle anderen Bedingungen können auch bei Aktualisierung des Zeitstempels ohne Wertänderung triggern.

                              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 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              534

                              Online

                              32.7k

                              Users

                              82.5k

                              Topics

                              1.3m

                              Posts
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Home
                              • Recent
                              • Tags
                              • Unread 0
                              • Categories
                              • Unreplied
                              • Popular
                              • GitHub
                              • Docu
                              • Hilfe