NEWS
Set State ( Timestamp ) Zeitverzögert [gelöst].
-
Noch eleganter ist es, wenn Du die Überprüfung der Zeitstempel aus der Hauptfunktion Dosierung() entfernst und es der jeweiligen Funktion hinzufügst.
dosingChlor():
var stateORP = getState(idORPWert); var orpIstWert = parseFloat(stateORP.val); // parseFloat, falls ORPWert ein String ist if(orpIstWert < 100 || orpIstWert > 1000 || Date.now() - stateORP.ts > 1200000) { stoerung = true; setState(idStoerung, true); return; }
dosingPH():
var statePH = getState(idPHWert); var phIstWert = parseFloat(statePH.val); if(phIstWert < 6.5 || phIstWert > 8 || Date.now() - statePH.ts > 1200000) { stoerung = true; setState(idStoerung, true); return; }
-
Meinst du so ? Scheint zu passen
//Dosierung ist noch nicht abgeschaltet if(getState(idPumpeChlor).val || getState(idPumpePH).val ) { stoerung = true; setState(idStoerung, true); } else { acid = !acid; if(acid) dosingPH(); else dosingChlor(); } },180000); // alle 3 Minuten } }
// DosingTime abhängig von PH Differenz festlegen setState(idChlorAcidAlternative, "acid"); var statePH = getState(idPHWert); var phIstWert = parseFloat(statePH.val); if(phIstWert < 6.5 || phIstWert > 8 || Date.now() - statePH.ts > 1200000) { stoerung = true; setState(idStoerung, true); return; } var dosingTime = 35; if (PHZielwert - phIstWert < 0.1) dosingTime = 25; if (PHZielwert - phIstWert < 0.05) dosingTime = 20; if (PHZielwert - phIstWert < 0.03) dosingTime = 10; if (PHZielwert <= phIstWert) dosingTime = 0;
// DosingTime abhängig von ORP-Differenz festlegen setState(idChlorAcidAlternative, "chlor"); var stateORP = getState(idORPWert); var orpIstWert = parseFloat(stateORP.val); // parseFloat, falls ORPWert ein String ist if(orpIstWert < 100 || orpIstWert > 1000 || Date.now() - stateORP.ts > 1200000) { stoerung = true; setState(idStoerung, true); return; } var dosingTime = 80; if (orpZielwert - orpIstWert < 100) dosingTime =60; if (orpZielwert - orpIstWert < 60) dosingTime = 50; if (orpZielwert - orpIstWert < 40) dosingTime = 45; if (orpZielwert - orpIstWert < 20) dosingTime = 35; if (orpZielwert - orpIstWert < 10) dosingTime = 20; if (orpZielwert - orpIstWert < 5) dosingTime = 10; if (orpZielwert <= orpIstWert) dosingTime = 0;
Das mit der 1 Minute ist mir bewusst ist nur zum testen damit es schneller geht.
-
Meinst du so ? `
Ja, genau so. -
Sauber geht DANKE nochmal !!!!!
-
Hallo nochmal,
da die Pool Saison jetzt anfängt und ich die Reglung über Java laufen habe ist gerade noch ein Problem aufgetaucht. Folgendes Problem:
var dosingTime = 80; if (orpZielwert - orpIstWert < 100) dosingTime =60; if (orpZielwert - orpIstWert < 60) dosingTime = 50; if (orpZielwert - orpIstWert < 40) dosingTime = 45; if (orpZielwert - orpIstWert < 20) dosingTime = 35; if (orpZielwert - orpIstWert < 10) dosingTime = 20; if (orpZielwert - orpIstWert < 5) dosingTime = 10; if (orpZielwert <= orpIstWert) dosingTime = 0;
Das Funktioniert auch Super.
var dosingTime = 35; if (PHZielwert - phIstWert < 0.1) dosingTime = 25; if (PHZielwert - phIstWert < 0.05) dosingTime = 20; if (PHZielwert - phIstWert < 0.03) dosingTime = 10; if (PHZielwert <= phIstWert) dosingTime = 0;
Das leider nicht. Die Dosierzeit ist immer 35 sec. Irgendwie werden die Werte nicht berechnet. Liegt das Irgendwie am . ??
Hat wer eine Idee ??Achso die Werte frage ich über einen Parser Adapter ab.
Grüße Timo
-
@kasperfunsurfer
Ein Skript läuft immer und wird nicht gestartet.Die Ausführung sollte eventbasiert oder zeitgesteuert erfolgen
-
Hallo,
Das ganz Script läuft super ist nur ein ausschnitt wo das Problem liegt. Es gibt ein Problem mit der Berechnung vom Ph Wert.
Der Berechnung vom Orp Wert funktioniert dagegen super. Habe gedacht das es irgendwie an dem Punkt liegt also 0.1, 0.05 und 0.03.
Ist das möglich ?Grüße Timo
-
Hier mal ei Ausschnitt vielleicht kann man da mehr sehen.
javascript.0 2019-04-11 18:17:51.554 info script.js.Pool_Dosierung: setForeignState(id=hm-rpc.1.NEQ1810472.18.STATE, state=false) javascript.0 2019-04-11 18:17:33.569 info script.js.Pool_Dosierung: setTimeout(ms=18000) javascript.0 2019-04-11 18:17:33.568 info script.js.Pool_Dosierung: setForeignState(id=hm-rpc.1.NEQ1810472.18.STATE, state=true) javascript.0 2019-04-11 18:17:33.567 info script.js.Pool_Dosierung: setForeignState(id=hm-rega.0.25722, state=603) javascript.0 2019-04-11 18:17:33.566 info script.js.Pool_Dosierung: getState(id=parser.0.Pool-ph, timerId=undefined) => {"val":7.25,"ack":false,"ts":1554999366086,"q":0,"from":"system.adapter.admin.0","lc":1554999366086} javascript.0 2019-04-11 18:17:33.565 info script.js.Pool_Dosierung: setForeignState(id=hm-rega.0.25720, state="acid") javascript.0 2019-04-11 18:17:33.563 info script.js.Pool_Dosierung: getState(id=hm-rpc.1.NEQ1810472.18.STATE, timerId=undefined) => {"val":false,"ack":true,"ts":1554998097090,"q":0,"from":"system.adapter.hm-rpc.1","lc":1554998097014}
Der eingestellt Wert ist 7.2 und der übertragene Wert ist 7.25 demnach müsste das ganze 5 sec laufen. Es sind aber immer 18 sec egal welchen Ph Wert ich einstelle.
Grüße
-
Servus,
habe nochmal bisschen rumgespielt. Wenn ich die < umdrehe der Funktioniert die Berechnung wieder.
var dosingTime = 18; if (PHZielwert - phIstWert < 0.1) dosingTime = 13; if (PHZielwert - phIstWert < 0.05) dosingTime = 10; if (PHZielwert - phIstWert < 0.03) dosingTime = 5; if (PHZielwert <= phIstWert) dosingTime = 0;
Leide funktioniert es so falsch rum. Ändere ich es in so. Funktioniert es leider nicht mehr. Warum ????
var dosingTime = 18; if (PHZielwert - phIstWert > 0.1) dosingTime = 13; if (PHZielwert - phIstWert > 0.05) dosingTime = 10; if (PHZielwert - phIstWert > 0.03) dosingTime = 5; if (PHZielwert >= phIstWert) dosingTime = 0;
Grüße Timo
-
@kasperfunsurfer
Wahrscheinlich müsstest du mit elseif arbeiten.Oder die Reihenfolge umdrehen