NEWS
[gelöst] Schaltzustand Verzögern
- 
					
					
					
					
 @paul53 OK Prima! 
 Dafür das bei mir ein JS jetzt die Osmose und Filter MAx übernommen hat, muss ich dir nun Löcher in Bauch fragen!!! Ich hoffe das ist OK
- 
					
					
					
					
 @Aphofis sagte: Ich hoffe das ist OK Ja, besser als ein Blockly, bei dem Du dann noch die richtigen Datenpunkt-IDs zuordnen müsstest. 
- 
					
					
					
					
 @paul53 Punkt für Dich !!!  
- 
					
					
					
					
 @paul53 
 Jetzt gerade wurde wieder zu viel dosiert
 Wie kommt sowas ? 
- 
					
					
					
					
 Osmose Schwimmer ist false und Magnet Ventil läuft einfach weiter zumindest in Objekte in ioBroker ist der datenpunkt Osmose Niveau Schwimmer false und in der Web Oberfläche vom tasmota gerät 
- 
					
					
					
					
 @Aphofis sagte: Osmose Schwimmer ist false und Magnet Ventil läuft einfach weiter Laufen die Wellen-Skripte, so dass der Computer vielleicht überlastet ist ? 
- 
					
					
					
					
 @paul53 
 Nein die sind aus!
 16% RAM sind frei
- 
					
					
					
					
 @Aphofis 
 Sollte eigentlich nicht nötig sein, aber füge mal im Skript in Zeile 37 (s. Skript oben) ein:else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false);
- 
					
					
					
					
 @paul53 mach ich! Mein Script sieht so aus const idRestzeit = 'Osmose.Restzeit'; const text_ein = ['Filter Max unterschritten, Skimmer & Osmose','\n','wurden wieder eingeschaltet'].join(''); const text_aus = ['Filter Max erreicht, Skimmer & Osmose','\n','wurden abgeschaltet'].join(''); createState(idRestzeit, 300, {type: 'number', unit: 's'}); var Osmosefreigabe = !getState('sonoff.0.Aqua_Float.POWER4').val; var Schwimmer = getState("sonoff.0.Aqua_Float.POWER1").val; var Restzeit, timeout_aus, timeout_ein, Magnetventil_Kontrolle; function Magnetventil_Ein() { if (!Magnetventil_Kontrolle && Restzeit > 0 && Osmosefreigabe) { Magnetventil_Kontrolle = setInterval(function () { if (Restzeit > 0 && Schwimmer && Osmosefreigabe) { Restzeit--; setState(idRestzeit, 2 * Restzeit, true); } else { setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); clearInterval(Magnetventil_Kontrolle); Magnetventil_Kontrolle = null; } }, 2000); setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, true); } } // Skripstart setTimeout(function() { Restzeit = getState(idRestzeit).val / 2; if(Schwimmer && Osmosefreigabe) Magnetventil_Ein(); else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }, 200); on({id: 'sonoff.0.Aqua_Float.POWER1', change: "ne"}, function (obj) { Schwimmer = obj.state.val; if(Schwimmer) Magnetventil_Ein(); }); schedule("0 0 * * *", function () { Restzeit = 150; setState(idRestzeit, 300, true); if(Schwimmer) Magnetventil_Ein(); }); on({id: 'sonoff.0.Aqua_Float.POWER4', change: "ne"}, function (obj) { if (obj.state.val) { timeout_aus = setTimeout(function () { Osmosefreigabe = false; setState("sonoff.0.Aqua_Power.POWER3"/*Aqua_Power_Skimmer*/, false); setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }, 5000); if (timeout_ein) { clearTimeout(timeout_ein); timeout_ein = null; } } else { timeout_ein = setTimeout(function () { Osmosefreigabe = true; if(Schwimmer) Magnetventil_Ein(); setStateDelayed("sonoff.0.Aqua_Power.POWER3"/*Aqua_Power_Skimmer*/, true, 10000); }, 10000); if (timeout_aus) { clearTimeout(timeout_aus); timeout_aus = null; } } }); on({id: 'sonoff.0.Aqua_Power.POWER3', change: "ne"}, function (obj) { var txt; if (obj.state.val) txt = text_ein; else txt = text_aus; sendTo("telegram.0", "send", { text: txt }); log(txt); });Wo soll ich es hier einfügen ? 
- 
					
					
					
					
 
- 
					
					
					
					
 @paul53 
 nach:if(Schwimmer) Magnetventil_Ein(); else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false);
- 
					
					
					
					
 @Aphofis sagte: nach: Richtig. Und in Zeile 70 füge noch ein Log ein, um zu sehen ob richtig getriggert wird: log('Schwimmer: ' + Schwimmer);
- 
					
					
					
					
 ok 
 korrekt?on({id: 'sonoff.0.Aqua_Float.POWER1', change: "ne"}, function (obj) { Schwimmer = obj.state.val; if(Schwimmer) Magnetventil_Ein(); else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); });
- 
					
					
					
					
 @Aphofis sagte: korrekt? Ja, jedoch die Leerzeilen sind überflüssig: Sie entstehen beim Kopieren aus dem Forum. 
- 
					
					
					
					
 Magnetventil Stecker ist wieder drin JS neu gestartet. 
 OK also kann ich die rasu nehmen?
- 
					
					
					
					
 @paul53 
 ist es so in Ordnung ?const idRestzeit = 'Osmose.Restzeit'; const text_ein = ['Filter Max unterschritten, Skimmer & Osmose','\n','wurden wieder eingeschaltet'].join(''); const text_aus = ['Filter Max erreicht, Skimmer & Osmose','\n','wurden abgeschaltet'].join(''); createState(idRestzeit, 300, {type: 'number', unit: 's'}); var Osmosefreigabe = !getState('sonoff.0.Aqua_Float.POWER4').val; var Schwimmer = getState("sonoff.0.Aqua_Float.POWER1").val; var Restzeit, timeout_aus, timeout_ein, Magnetventil_Kontrolle; function Magnetventil_Ein() { if (!Magnetventil_Kontrolle && Restzeit > 0 && Osmosefreigabe) { Magnetventil_Kontrolle = setInterval(function () { if (Restzeit > 0 && Schwimmer && Osmosefreigabe) { Restzeit--; setState(idRestzeit, 2 * Restzeit, true); } else { setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); clearInterval(Magnetventil_Kontrolle); Magnetventil_Kontrolle = null; } }, 2000); setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, true); } } // Skripstart setTimeout(function() { Restzeit = getState(idRestzeit).val / 2; if(Schwimmer && Osmosefreigabe) Magnetventil_Ein(); else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }, 200); on({id: 'sonoff.0.Aqua_Float.POWER1', change: "ne"}, function (obj) { Schwimmer = obj.state.val; if(Schwimmer) Magnetventil_Ein(); else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }); schedule("0 0 * * *", function () { Restzeit = 150; setState(idRestzeit, 300, true); if(Schwimmer) Magnetventil_Ein(); }); on({id: 'sonoff.0.Aqua_Float.POWER4', change: "ne"}, function (obj) { if (obj.state.val) { timeout_aus = setTimeout(function () { Osmosefreigabe = false; setState("sonoff.0.Aqua_Power.POWER3"/*Aqua_Power_Skimmer*/, false); setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }, 5000); if (timeout_ein) { clearTimeout(timeout_ein); timeout_ein = null; } } else { timeout_ein = setTimeout(function () { Osmosefreigabe = true; if(Schwimmer) Magnetventil_Ein(); setStateDelayed("sonoff.0.Aqua_Power.POWER3"/*Aqua_Power_Skimmer*/, true, 10000); }, 10000); if (timeout_aus) { clearTimeout(timeout_aus); timeout_aus = null; } } }); on({id: 'sonoff.0.Aqua_Power.POWER3', change: "ne"}, function (obj) { var txt; if (obj.state.val) txt = text_ein; else txt = text_aus; sendTo("telegram.0", "send", { text: txt }); log(txt); log('Schwimmer: ' + Schwimmer); });so 
- 
					
					
					
					
 @Aphofis sagte: ist es so in Ordnung ? Ja, aber wegen der besseren Lesbarkeit füge vorn in Zeile 35 (vor else) ein Leerzeichen ein; in Zeilen 51 und 61 vor if zwei Leerzeichen ein. 
- 
					
					
					
					
 @paul53 
 So besser ?const idRestzeit = 'Osmose.Restzeit'; const text_ein = ['Filter Max unterschritten, Skimmer & Osmose','\n','wurden wieder eingeschaltet'].join(''); const text_aus = ['Filter Max erreicht, Skimmer & Osmose','\n','wurden abgeschaltet'].join(''); createState(idRestzeit, 300, {type: 'number', unit: 's'}); var Osmosefreigabe = !getState('sonoff.0.Aqua_Float.POWER4').val; var Schwimmer = getState("sonoff.0.Aqua_Float.POWER1").val; var Restzeit, timeout_aus, timeout_ein, Magnetventil_Kontrolle; function Magnetventil_Ein() { if (!Magnetventil_Kontrolle && Restzeit > 0 && Osmosefreigabe) { Magnetventil_Kontrolle = setInterval(function () { if (Restzeit > 0 && Schwimmer && Osmosefreigabe) { Restzeit--; setState(idRestzeit, 2 * Restzeit, true); } else { setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); clearInterval(Magnetventil_Kontrolle); Magnetventil_Kontrolle = null; } }, 2000); setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, true); } } // Skripstart setTimeout(function() { Restzeit = getState(idRestzeit).val / 2; if(Schwimmer && Osmosefreigabe) Magnetventil_Ein(); else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }, 200); on({id: 'sonoff.0.Aqua_Float.POWER1', change: "ne"}, function (obj) { Schwimmer = obj.state.val; if(Schwimmer) Magnetventil_Ein(); else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }); schedule("0 0 * * *", function () { Restzeit = 150; setState(idRestzeit, 300, true); if(Schwimmer) Magnetventil_Ein(); }); on({id: 'sonoff.0.Aqua_Float.POWER4', change: "ne"}, function (obj) { if (obj.state.val) { timeout_aus = setTimeout(function () { Osmosefreigabe = false; setState("sonoff.0.Aqua_Power.POWER3"/*Aqua_Power_Skimmer*/, false); setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }, 5000); if (timeout_ein) { clearTimeout(timeout_ein); timeout_ein = null; } } else { timeout_ein = setTimeout(function () { Osmosefreigabe = true; if(Schwimmer) Magnetventil_Ein(); setStateDelayed("sonoff.0.Aqua_Power.POWER3"/*Aqua_Power_Skimmer*/, true, 10000); }, 10000); if (timeout_aus) { clearTimeout(timeout_aus); timeout_aus = null; } } }); on({id: 'sonoff.0.Aqua_Power.POWER3', change: "ne"}, function (obj) { var txt; if (obj.state.val) txt = text_ein; else txt = text_aus; sendTo("telegram.0", "send", { text: txt }); log(txt); log('Schwimmer: ' + Schwimmer); });
- 
					
					
					
					
 @Aphofis sagte: So besser ? Bedingt: Jetzt sind es zwei bzw. je ein Leerzeichen zuviel: - else gehört linksbündig unter if
- if gehört linksbündig über die zugehörige schließende geschweifte Klammer in Zeilen 54, 64
 
- 
					
					
					
					
 @paul53 Ich schnalle die Struktur nicht so ganz! const idRestzeit = 'Osmose.Restzeit'; const text_ein = ['Filter Max unterschritten, Skimmer & Osmose','\n','wurden wieder eingeschaltet'].join(''); const text_aus = ['Filter Max erreicht, Skimmer & Osmose','\n','wurden abgeschaltet'].join(''); createState(idRestzeit, 300, {type: 'number', unit: 's'}); var Osmosefreigabe = !getState('sonoff.0.Aqua_Float.POWER4').val; var Schwimmer = getState("sonoff.0.Aqua_Float.POWER1").val; var Restzeit, timeout_aus, timeout_ein, Magnetventil_Kontrolle; function Magnetventil_Ein() { if (!Magnetventil_Kontrolle && Restzeit > 0 && Osmosefreigabe) { Magnetventil_Kontrolle = setInterval(function () { if (Restzeit > 0 && Schwimmer && Osmosefreigabe) { Restzeit--; setState(idRestzeit, 2 * Restzeit, true); } else { setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); clearInterval(Magnetventil_Kontrolle); Magnetventil_Kontrolle = null; } }, 2000); setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, true); } } // Skripstart setTimeout(function() { Restzeit = getState(idRestzeit).val / 2; if(Schwimmer && Osmosefreigabe) Magnetventil_Ein(); else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }, 200); on({id: 'sonoff.0.Aqua_Float.POWER1', change: "ne"}, function (obj) { Schwimmer = obj.state.val; if(Schwimmer) Magnetventil_Ein(); else setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }); schedule("0 0 * * *", function () { Restzeit = 150; setState(idRestzeit, 300, true); if(Schwimmer) Magnetventil_Ein(); }); on({id: 'sonoff.0.Aqua_Float.POWER4', change: "ne"}, function (obj) { if (obj.state.val) { timeout_aus = setTimeout(function () { Osmosefreigabe = false; setState("sonoff.0.Aqua_Power.POWER3"/*Aqua_Power_Skimmer*/, false); setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false); }, 5000); if (timeout_ein) { clearTimeout(timeout_ein); timeout_ein = null; } } else { timeout_ein = setTimeout(function () { Osmosefreigabe = true; if(Schwimmer) Magnetventil_Ein(); setStateDelayed("sonoff.0.Aqua_Power.POWER3"/*Aqua_Power_Skimmer*/, true, 10000); }, 10000); if (timeout_aus) { clearTimeout(timeout_aus); timeout_aus = null; } } }); on({id: 'sonoff.0.Aqua_Power.POWER3', change: "ne"}, function (obj) { var txt; if (obj.state.val) txt = text_ein; else txt = text_aus; sendTo("telegram.0", "send", { text: txt }); log(txt); log('Schwimmer: ' + Schwimmer); });
 
		
	 
		
	 
			
		