NEWS
[Frage] Wie den Counter unterbrechen
-
Hallo,
ich scheitere mal wieder und bräuchte eure Hilfe.
Ich möchte meinen Garten welcher in vier Zonen eingeteilt ist auf Knopfdruck jeweils X-Minuten bewässern. Wenn in Zone 1 die Zeit abgelaufen ist, wird automatisch nach Zone zwei gewechselt usw. nach Zone 4 wird der Durchlauf beendet. Die Restzeit wird in eine Variable geschrieben welche ich in Vis darstelle.
Bis hier hin funktioniert alles perfekt nun mein Problem. Ich möchte durch einen "Off-Button" das ganze stoppen und meinen Counter anhalten und auf 0 setzen.
Doch egal was ich mache er lässt sich zwar beeinflussen aber läuft einfach nach 0 wieder weiter.
Hier mal mein Script:
// ----------------------------------------------------------------------------- // allgemeine Variablen // ----------------------------------------------------------------------------- var logging = true; // Logging on/off var instanz = 'javascript.0'; instanz = instanz + '.'; // // var pfad0 = 'Automation.'; // Pfad innerhalb der Instanz - Status allgemien var pfad1 = 'Bewaesserung.'; var BwZeit = 20; // ----------------------------------------------------------------------------- // Objekte // ----------------------------------------------------------------------------- createState(pfad0 + 'Bewaesserungsautomatik', {def: 'false', type: 'boolean', name: 'Gießautomatik ein/aus'}); createState(pfad1 + 'Bewaesserungsautomatik_Schalter', {def: 'off', type: 'string', name: 'Schalter automatische Bewässerung start/stop'}); createState(pfad1 + 'Bewaesserung_countdown', {def: '0', type: 'number', name: 'Bewaesserung Counter'}); // ############################################################################ // # # // # Funktion zum automatischen Bewässern der 4 Gartenbereiche # // # # // ############################################################################ function bewaesserung_alle_bereiche(Ventil_Nr) { if(logging && Ventil_Nr != 5) log('Aktuell bewässerter Bereich:' + Ventil_Nr); if(getState("hm-rpc.0.OEQ0205754.1.STATE").val) setState("hm-rpc.0.OEQ0205754.1.STATE", false); // Ventil 1 if(getState("hm-rpc.0.OEQ0205754.2.STATE").val) setState("hm-rpc.0.OEQ0205754.2.STATE", false); // Ventil 2 if(getState("hm-rpc.0.OEQ0205754.3.STATE").val) setState("hm-rpc.0.OEQ0205754.3.STATE", false); // Ventil 3 if(getState("hm-rpc.0.OEQ0205754.4.STATE").val) setState("hm-rpc.0.OEQ0205754.4.STATE", false); // Ventil 4 if(!getState("hm-rpc.0.OEQ0205754.5.STATE").val) setState("hm-rpc.0.OEQ0205754.5.STATE", true); //Pumpe if(Ventil_Nr == 1){ if(!getState("hm-rpc.0.OEQ0205754.1.STATE").val) setState("hm-rpc.0.OEQ0205754.1.STATE", true); bewaesserung_counter(Ventil_Nr); } if(Ventil_Nr == 2){ if(!getState("hm-rpc.0.OEQ0205754.2.STATE").val) setState("hm-rpc.0.OEQ0205754.2.STATE", true); bewaesserung_counter(Ventil_Nr); } if(Ventil_Nr == 3){ if(!getState("hm-rpc.0.OEQ0205754.3.STATE").val) setState("hm-rpc.0.OEQ0205754.3.STATE", true); bewaesserung_counter(Ventil_Nr); } if(Ventil_Nr == 4){ if(!getState("hm-rpc.0.OEQ0205754.4.STATE").val) setState("hm-rpc.0.OEQ0205754.4.STATE", true); bewaesserung_counter(Ventil_Nr); } if(Ventil_Nr == 5){ if(getState("hm-rpc.0.OEQ0205754.5.STATE").val) setState("hm-rpc.0.OEQ0205754.5.STATE", false); //Pumpe log('Automatische Bewässerung fertig'); } } // ############################################################################ // # // # Counter der die Bewässerungszeit herunter zählt und sie in eine Variable schreibt // # // ############################################################################ function bewaesserung_counter(Ventil_Nr) { setTimeout(function () { var timer = getState(pfad1 + 'Bewaesserung_countdown').val || BwZeit; if (timer > 1) { setState(pfad1 + 'Bewaesserung_countdown', timer - 1); bewaesserung_counter(Ventil_Nr); log(timer); } else{ setState(pfad1 + 'Bewaesserung_countdown', 0); bewaesserung_alle_bereiche(Ventil_Nr + 1); } }, 1000); } // ############################################################################ // # // # Aufruf der Automatischen Bewässerung über Schedule // # // ############################################################################ on("javascript.0.Bewaesserung.Bewaesserungsautomatik_Schalter", function (dp) { if(dp.state.val == 'on'){ bewaesserung_alle_bereiche(1); log("Bewässerungsautomatik durch manu. Start"); } if(dp.state.val == 'off'){ //----------------------------------------------------------------------------------------------------- // // Hier müsste nun der Abbruch stehen jedoch bekomme ich es einfach nicht hin // //----------------------------------------------------------------------------------------------------- log("Bewässerungsautomatik durch manu. Stop"); } });
Ich hoffe jemand kann mir mal einen "Schuppser" in die richtige Richtung geben
Peoples
-
Ich möchte durch einen "Off-Button" das ganze stoppen und meinen Counter anhalten und auf 0 setzen. `
Das erste Skript (Zeitvorwahl) in http://forum.iobroker.net/viewtopic.php?f=21&t=5067&start=20#p77980 zeigt, wie es geht.