Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] clearInterval will nicht so wie ich

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Gelöst] clearInterval will nicht so wie ich

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      Chauffeur last edited by

      Hallo, ihr Lieben.

      Hätte mal wieder ein kleines Problem. Ich bemühe mich grad wirklich, in JS durchzusteigen, aber das ist (und bleibt wohl) ein Buch mit 7 Siegeln.

      Also, ich würde mit setInterval gerne eine Schleife erstellen. Da meine Versuche bisher (mit dem Hauptzweck) viel zu wirr und unübersichtlich (und fehlerbehaftet) waren, habe ich erstmal ein kleines Testskript geschrieben, um überhaupt ein Gespür für setInterval zu bekommen. Dieses soll alle 3 Sek abhängig eines Datenpunktwertes (1, 2, oder eine andere Zahl) ins log eintragen:

      "ist ne Eins", "ist ne Zwei", "Aus die Maus" (Für jede Zahl ausser 1+2) und generell "Änderung" bei jeder Änderung.

      soweit klappt alles, nur die clearInterval-Funktion will einfach nicht… je nachdem, wohin ich sie setzte wird sie scheinbar einfach ignoriert bzw. bringt bereits im Skript ne Meldung.

      Sobald ich die Zahl im Datenpunkt ändere (z.B. von 1 auf 2) kommt zwar "Änderung", aber es laufen "Es ist ne Eins" und "Es ist ne Zwei" parallel weiter.

      Vielleicht kann mir jemand sagen, wie man das hier besser hinbekommt?

      ! ````
      var Datenpunkt = "javascript.0.GardenspotsColor.Gardentime"/Gardentime/;
      ! function Text1() {
      console.log('Ist ne Eins');
      }
      ! function Text2() {
      console.log('Ist ne Zwei');
      }
      ! on(Datenpunkt, function (data) {
      console.log ('Änderung');
      clearInterval (timer1);
      clearInterval (timer2);

      if (data.state.val == 1) {
          var timer1 =  setInterval (Text1, 3000);
      

      }

      ! else if (data.state.val == 2) {
      var timer2 = setInterval (Text2, 3000);
      }

      else {
      console.log ('Aus die Maus');
      

      }
      });

      
      Danke schonmal
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Deklarier mal die Timer-Variablen außerhalb einer Funktion:

        ! ````
        var Datenpunkt = "javascript.0.GardenspotsColor.Gardentime"/Gardentime/;
        ! function Text1() {
        console.log('Ist ne Eins');
        }
        ! function Text2() {
        console.log('Ist ne Zwei');
        }
        ! var timer1 = null;
        var timer2 = null;
        ! on(Datenpunkt, function (data) {
        console.log ('Änderung');
        if(timer1) clearInterval (timer1);
        if(timer2) clearInterval (timer2);

        if (data.state.val == 1) {
            timer1 =  setInterval (Text1, 3000);
        }
        

        ! else if (data.state.val == 2) {
        timer2 = setInterval (Text2, 3000);
        }

        else {
        console.log ('Aus die Maus');
        }
        

        });

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

          Hallo,

          ich hab das mal ausprobiert. Kann es daran liegen das du versuchst die Timer zu clearen, diese aber noch gar nicht deklariert sind. Versuch mal die Variablendeklaration vor dem ersten function(). Damit funktioniert es bei mir.

          ! ````
          createState("javascript.0.GardenspotsColor.Gardentime");
          var Datenpunkt = "javascript.0.GardenspotsColor.Gardentime"/Gardentime/;
          var timer1, timer2;
          function Text1() {
          console.log('Ist ne Eins');
          }
          ! function Text2() {
          console.log('Ist ne Zwei');
          }
          ! on(Datenpunkt, function (data) {
          console.log ('Änderung');
          clearInterval (timer1);
          clearInterval (timer2);
          if (data.state.val == 1) {
          timer1 = setInterval (Text1, 3000);

          }

          ! else if (data.state.val == 2) {
          timer2 = setInterval (Text2, 3000);

          }

          else {
          console.log ('Aus die Maus');
          

          }

          !
          });
          ! ````

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

            OK, da war ich etwas zu langsam 😉

            Und die if (timer1)… Abfrage hab ich auch nicht drin. Wieder was gelernt.

            1 Reply Last reply Reply Quote 0
            • C
              Chauffeur last edited by

              Vielen herzlichen Dank schonmal.

              Die Timer-Variablen an den Anfang zu setzten hatte ich tatsächlich schon versucht, aber halt nicht mit "= null" oder leer, sondern gleich mit setInterval. Da wurden die aber immer sofort ausgeführt… Auf sowas wie die Deklaration muß man als Laie erst mal kommen (hab ich aus Beispielen auch nie verständlich rausgelesen...)

              Das if bei clearInterval hatte ich auch schon probiert, aber kann ja nicht gehen, wenn die Timer nicht richtig funktionieren...

              Wunderbar, da kann ich jetzt mal weiter dran arbeiten und mein eigentliches Script neu entwerfen/überarbeiten...

              Puh, ich glaub, für die JS-Logik bin ich zu alt... 😞 :mrgreen:

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              478
              Online

              31.7k
              Users

              79.8k
              Topics

              1.3m
              Posts

              3
              5
              1208
              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