NEWS
ClearSchedule funktioniert nicht
-
Hallo an alle,
ich möchte eine kleine Stoppuhr basteln. Die Stoppuhr startet, wenn ein Kanal auf true springt und soll beendet werden, wenn der Kanal wieder auf false springt.
Wenn mein Kanal auf false springt, trigert diesr korrekt die unteren "on".. code Zeilen. Meine Variable 'Bewaesserung.LaufzeitVorgarten' wird zuverlässig auf 00:00 gesetzt. Allerdings wird der Scheduler nicht beendet.
Ich arbeite öfter mit Scheduler und beende oder setzte diese neu. Ich sehe den Fehler nicht, warum dies hier nicht funktioniert.Hat jemand eine Idee für mich. Danke im Voraus.
//Vorgarten var TimerVorgarten=null; on({ id:'hm-rpc.1.000D1D89A09811.10.STATE'/*Bewaesserung Kanal:1:10 STATE*/, val:true },function(obj){ var ZeitMin=getState('Bewaesserung.BewaesserungNoetig.VorgartenZeit').val; var Zeitms=ZeitMin*60*1000; setStateDelayed('hm-rpc.1.000D1D89A09811.10.STATE',false,Zeitms); TimerVorgarten='*/10 * * * * *'; TimerVorgarten=schedule(TimerVorgarten,function(){ var TimerVorgartenLaufzeit=getState('Bewaesserung.LaufzeitVorgarten').val; var minute=TimerVorgartenLaufzeit.substr(0,2); log(minute); var sekunde=TimerVorgartenLaufzeit.substr(3,2); log(sekunde); if (sekunde<50){ sekunde=parseInt(sekunde)+10; }else{ sekunde='00'; minute=parseInt(minute)+1; if (minute<10){minute='0'+minute}; } setState('Bewaesserung.LaufzeitVorgarten',minute+":"+sekunde); }) }); on({ id:'hm-rpc.1.000D1D89A09811.10.STATE'/*Bewaesserung Kanal:1:10 STATE*/, val:false },function(obj){ clearSchedule(TimerVorgarten); setStateDelayed('Bewaesserung.LaufzeitVorgarten','00:00',5000); });
-
@roland
Zeilen 10, 11:
Der CRON-String und der Schedule-Handler (Objekt) verwenden den gleichen Variablenbezeichner. -
@paul53
Ich weiß. Dies war mein letzter Versuch, weil ich es in einem Beispiel gelesen haben. Ich dachte es ändert eventuell etwas am verhalten.
Leider nein. Davor habe ich die ganze Zeit unterschiedliche Bezeichner verwendet. -
@roland sagte: Hat jemand eine Idee für mich.
Es können mit dem Trigger val: true mehrere Scheduler laufen. Ändere den Trigger in change: 'gt'.
Besser nur einen Trigger auf Wertänderung verwenden und innerhalb des Callbacks den Wert prüfen:
//Vorgarten var TimerVorgarten=null; on('hm-rpc.1.000D1D89A09811.10.STATE'/*Bewaesserung Kanal:1:10 STATE*/, function(obj) { if(obj.state.val) { // Operationen bei true } else { clearSchedule(TimerVorgarten); setStateDelayed('Bewaesserung.LaufzeitVorgarten','00:00',5000); } });