NEWS
[gelöst] Schaltzustand Verzögern
-
@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); });
-
-
@paul53
Na toll -
@Aphofis
Nimm diese:
Osmose.js.txt -
@paul53
Da fehlt dann nurlog('Schwimmer: ' + Schwimmer);
-
-
@paul53
In der txt die ich nehmen sollte oder ist der Log da schon irgendwo drin? -
-
@paul53 Das hab ich wohl nicht so ganz gefunden!
Wird wohl auch noch eine Zeit dauern, bis ich JS lesen kann -
@paul53
Bis jetzt macht die Osmose Steuerung was sie soll!
Wird nicht zu viel dosiert und Filter Max wurde seid gestern Abend nicht erreicht -
@Aphofis sagte:
Wird nicht zu viel dosiert
Wenn vorher zuviel dosiert wurde, dann war die Abfrage des Schwimmers alle 2 Sekunden zu langsam. Jetzt wird direkt auf den Schwimmer reagiert.
-
@paul53
klingt toll aber heute wurde wieder bis filter max true war dosiert.
bringt es was den wert auf 500 ms zu stellen???