NEWS
Script Anfängerfragen, u.a. SetInterval
-
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