NEWS
Ganz einfache Abschaltverzögerung für Anfänger
-
Hallo,
ich habe mal meine Abschaltverzögerung für die Gartenbewässerung etwas kommentiert für den Fall, dass ein Anfänger sowas mal braucht. Ist das ok, wenn man sowas Einfaches zur Verfügung stellt?
VG Tristan
idDropdown = "javascript.0.myDropdownBrunnen"; // Ein Dropdownfeld im VIS mit den Werten 0;5;10;15;20 (Minuten) idZiel = "zwave.0.NODE5.SWITCH_BINARY.Switch_1"; // Ein FIBARO Wall Plug var human = true; // Zwischenspeicher ob die Aktion manuell ausgeführt wurde var timer = null; // Timerspeicher für die Abschaltverszögerung on(idDropdown, function (obj) { // Wenn sich am Dropdown der Zustand ändert if(human === true){ // Nur ausführen, wenn manuell ausgelöst human = false; // Für folgende Aktionen human auf false, dasmit das Script weiß, dass es selbst der Auslöser ist //console.log( getState(idDropdown).val ); var zeit = getState(idDropdown).val; // Abschaltverzögerung auslesen und speichern if(timer) clearTimeout(timer); // Wenn schon ein Timer lief, diesen löschen und neu setzen setState(idZiel, true); // Das Gerät einschalten timer = setTimeout(function() { // Abschaltverzögerung setState(idZiel, false); // Gerät verzögert abschalten setState(idDropdown, 0); // Das Dropdown wieder auf 0 setzen }, zeit * 1000 * 60 ); // Verzögerung setTimeout(function(){ // Eine Sekunde verzögert (Antiprellen) human wieder auf true für zukünftige manuelle Eingaben human = true; },1 * 1000); // Verzögerung 1 Sekunde } }); on(idZiel, function(obj) { // Das Gerät ist im VIS direkt auf einen ON/OFF Schalter gelegt, dessen Zustand hier überwacht wird if(human === true){ // Nur ausführen, wenn manuell ausgelöst human = false; // Für folgende Aktionen human auf false, dasmit das Script weiß, dass es selbst der Auslöser ist setState(idDropdown, 0); // Unser Dropdown auf 0 setzen, da der ON/OFF Schalter jetzt Vorrang hat //console.log("ON/OFF gedrückt"); setTimeout(function(){ // Eine Sekunde verzögert (Antiprellen) human wieder auf true für zukünftige manuelle Eingaben human = true; },1 * 1000); // Verzögerung 1 Sekunde } });