Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Script Anfängerfragen, u.a. SetInterval

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Script Anfängerfragen, u.a. SetInterval

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

      Hi Zusammen,

      ein eigener Script Versuch und im Grundgerüst schon drei "Fehler/Probleme":

      1. Intervall stoppt nicht

      2. Die Logs bei true und false werden jeweils doppelt ausgegeben

      3. Die erste Aktivierungsmeldung kommt erst nach ein paar Sekunden

      createState('alarm01', 0);
      
      on({id: "javascript.0.alarm01"}, function(obj) {
        if (obj.newState.val === true || obj.newState.val === "true") {
      
        // Alarm wurde aktiviert
        var alarmIntervall01 = setInterval(function() {alarm01()} ,8000);
        } else {
      
        // Alarm wurde deaktiviert
        clearInterval(alarmIntervall01);
        log("#### Alarm01 deaktiviert #####");
        }
        });
      
      // Was soll alle 8 Sekunden wiederholt werden, solange der Alarm aktiv ist:
      function alarm01() {
              log("#### Alarm01 #####");
      }
      

      1. Intervall stoppt nicht

      Wenn der Alarm mit false gestoppt wirf, wird im Log "#### Alarm01 deaktiviert ####" zweimal ausgegeben.

      Das Intervall läuft aber weiter. Alle 8 Sekunden wird "#### Alarm01 ####" zweimal weiter ausgegeben.

      Meine Vermutung (Achtung: blutiger Anfänger) ist, dass alarmInterval01 irgendwie global gesetzt werden muss.

      2. Die Logs bei true und false werden jeweils doppelt ausgegeben

      Ich ändere die JavaScriptvariable javascript.0.alarm01 über einen Schalter in VIS von true auf false und umgekehrt.

      Jedes Log wird aber doppelt ausgegeben. Bei true die Alarmmeldung alle 8 Sekunden zweimal.

      Bei false die Deaktivierungsmeldung zweimal (einmalig).

      Als Workaround könnte ich den timer aus der Beschreibung einbauen:

      var timer;
      
              if (!timer) {
                     timer = setTimeout(function () {
                 timer = null;
              }, 4000);
      
              // wird im ersten Lauf durchgeführt (Timer = 0) danach für 4 Sekunden nicht
              log("#### alarm01 - wurde ausgeführt #####");
              }
      

      Das fühlt sich aber irgendwie falsch an.

      3. Die erste Aktivierungsmeldung kommt erst nach ein paar Sekunden

      Ich vermute, erst wenn der Timer das erste mal durch ist, wird die Funktion aufgerufen?

      Wen dem so ist, könnte ich die Funktion eimal vor dem setInterval aufrufen.

      Würde nur gerne sicher gehen und das gerade entstehende Wissen nicht auf falschen Beinen aufbauen 😉

      Für einen Tipp wäre ich dankbar 😉

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

      Support us

      ioBroker
      Community Adapters
      Donate

      945
      Online

      31.7k
      Users

      79.6k
      Topics

      1.3m
      Posts

      1
      1
      2341
      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