NEWS
Doppelte Ausführung von Skriptcode.
-
Hi,
ich habe den folgenden Skriptcode. Im Allgemeinen habe ich einen Schalter, mit dem ich durch Drücken der EIN Taste eine Lampe für xx Sekunden leuchten lassen möchte. Wenn man die Taste öfter drückt, werden wieder XX Sekunden auf den Zähler addiert. Der Zahler wird dann wieder heruntergezählt, bis das Licht ausgeschaltet wird. Im Endeffekt ähnlich wie bei einem Treppenlicht nur mit dieser additiven Funktion.
Was ich jetzt in der Log Ausgabe sehe, ist, dass die Log Ausgabe pro abgelaufenen Timer (hier alle 5 Sekunden) zweimal ausgeführt wird.
Hat jemand eine Idee?
createState('Aussenbeleuchtung_Eingang_CountDown', 0); createState('Aussenbeleuchtung_Eingang_CountDown_State', false); // Auslösung mit Homematic Hardware-Taster on({ id: "hm-rpc.1.XXXXXX.1.STATE"/*Taster XXXXX.PRESS_SHORT*/, val: true }, function(obj) { log("Hier"); var current_countdown = getState('Aussenbeleuchtung_Eingang_CountDown').val || 30; if( current_countdown != 30) { current_countdown += 30;} setState('Aussenbeleuchtung_Eingang_CountDown', current_countdown); if(!getState("Aussenbeleuchtung_Eingang_CountDown_State").val) { count();} } ); function count() { setTimeout(function () { var countdown = getState('Aussenbeleuchtung_Eingang_CountDown').val; setState("Aussenbeleuchtung_Eingang_CountDown_State",true); log("Countdown ist: "+ countdown); if (countdown >= 1) { setState('Aussenbeleuchtung_Eingang_CountDown', countdown - 1); count(); } else setState("hm-rpc.1.XXXXXX.1.STATE",false); setState("Aussenbeleuchtung_Eingang_CountDown_State",false); }, 5000); }
-
Du prüfst in "on" nicht auf den "ack" Flag … also damit hast Du theoretisch einmal nen call mit "ack=false" und sobald vom Gerät bestätigt mit "ack=true" ... Kann das der Grund sein?
-
Will man retriggern, sollte der Timer vorher gelöscht werden:
... var timer = null; function count() { if(timer) clearTimeout(timer); timer = setTimeout(function () { ...
-
Hallo ihr beiden,
ja, es war beides korrekt. Sowohl den TImer muss ich zurücksetzten damit es sauber ist, als auch auf das ack flag schauen. Da ich erst mit der Programmierung anfange, bin ich froh über jedes Beispiel und Frage, die ich hier beitragen kann, auch wenn Sie noch so einfach erscheint
Grüße, Jens