NEWS
innerhalb eines Zeitplans Status abfragen
-
Hallo,
wie kann ich innerhalb eines Zeitplanes (Bewässerung zu bestimmten Zeiten) die Umweltdaten (Regen, Wind) regelmäßig abfragen, um das Programm zu beenden oder gar nicht erst zu starten?
Danke, liebe Community!
Bisher habe ich das so gelöst (ist Blockly, soll aber Javascript werden, weil da mehr fetzt...)// Terrasse vorn schedule("30 23 * * 0-1,3,5", function () { if (getState("hm-rega.0.11439").val <= 4 && getState("hm-rega.0.11440").val <= 4 && getState("hm-rpc.0.NEQ1100316.1.WIND_SPEED").val <= 30 && getState("hm-rpc.0.QEQ2009796.1.STATE").val == 0) { setState("hm-rpc.0.NEQ0102532.3.STATE"/*Bewässerung Terrasse vorn.STATE*/, true); setStateDelayed("hm-rpc.0.NEQ0102532.3.STATE"/*Bewässerung Terrasse vorn.STATE*/, false, 1800000, false); } else { setState("hm-rpc.0.NEQ0102532.3.STATE"/*Bewässerung Terrasse vorn.STATE*/, false); } });
-
Also in dem Sinne als Unterpunkt der Schedule...
(ist mein erstes Script, dass ich allein gemacht habe und ich lerne es jetzt erst)// Regnet es? var nass = (getState('hm-rpc.0.QEQ2009796.1.STATE'/*Garten - Regensensor 1 STATE*/).val == 1) var trocken = (getState('hm-rpc.0.QEQ2009796.1.STATE'/*Garten - Regensensor 1 STATE*/).val == 0) schedule("*/10 * * * *", function () { if (nass) { console.log("Es regnet.") } if (trocken) { console.log("Es regnet nicht.") } });
-
@luebke69 sagte: ist mein erstes Script, dass ich allein gemacht habe
Das sieht man, denn es kann nicht funktionieren: Man muss den Datenpunkt-Wert innerhalb eines Triggers (schedule) auslesen.
-
@paul53 Das untere Script macht, was es soll. Kannst du mir helfen?
-
@luebke69 sagte: Das untere Script macht, was es soll. Kannst du mir helfen?
Das täuscht, denn die Variablen nass, trocken werden nur bei Skript-Start mit den Werten befüllt, ändern sich danach aber nicht mehr: Im Log wird immer der gleiche Text ausgegeben, auch wenn es anfängt oder aufhört zu regnen.
Normalerweise macht man keine zyklische Abfrage, sondern triggert auf Wertänderung:// Regnet es? on('hm-rpc.0.QEQ2009796.1.STATE'/*Garten - Regensensor 1 STATE*/, function(dp) { if(dp.state.val) { log("Es regnet."); } else { log("Es regnet nicht."); } });
-
Cool. Vielen Dank!
Fragt er jetzt auch regelmäßig ab? Er macht ein log doch jetzt nur bei Änderung, oder, weil das on() auf Änderungen regiert...Aber wie frage ich mein obiges Script so ab, dass in der Bewässerungszeit prüft, ob es regnet oder windig ist - dann Sprenger aus?
Darf ich fragen, ob meine Annahme richtig ist, dass dann "dp.state.val" dem Grunde nach true ist?
Ich lerne gerade JavaScript über einen Online-Kurs und muss feststellen, dass sich IoBroker davon doch etwas unterscheidet... -
@luebke69 sagte: Er macht ein log doch jetzt nur bei Änderung
Ja, braucht man öfter ein Log ? Es würde keine neue Information enthalten.
@luebke69 sagte in innerhalb eines Zeitplans Status abfragen:
"dp.state.val" dem Grunde nach true ist?
dp.state.val ist der Wert des Trigger-Datenpunktes, der bei Regen true ist.
-
@paul53 Danke für dein Mitdenken!
Mir geht es ja dem Grunde nach nicht um das Log, das für mich ja nur Spielerei ist, um einen Erfolg - oder eben nicht - meiner Programmierung darzustellen. Mir geht es wie gesagt, um das Prüfen innerhalb einer Schedule, den Rasensprenger auszuschalten, wenn es regent oder stürmt. Das macht das Programm oben an sich aber eben nur einmal. Wenn es dann nach der Prüfung im Zeitraum regnet, macht er einfach weiter... -
@luebke69 sagte in innerhalb eines Zeitplans Status abfragen:
macht er einfach weiter...
was spricht dagegen einfach zusätzlich auf "Regenbeginn" (welcher DP das auch immer ist) zu triggern?
...zu früh abgeschickt...so hatte Paul es ja auch vorgeschlagen.
Der schedule startet die Begegnung --> Beregnung = true und wenn dann der richtige Regen einsetzt wird durch den Trigger Beregnung = false.