NEWS
Hilfe bei Blockly zur Bewässerungssteuerung
-
Guten Abend Zusammen.
Ich habe ein Problem mit eine Blockly Script bei dem ich absolut nicht weiter komme. Es geht dabei um die Steuerung meiner Bewässerung. Jeder Bewässerungskreis soll 3x für eine bestimmt Zeit eingeschaltet werden. In meinem derzeitigen Stand vom Script ist hier lediglich eine Testzeit von 30 Sek. eingestellt. Mit einem Kreis klappt es aktuell wie es soll, doch nun möchte ich den nächsten Kreis mit einbinden und da ist die Problemstelle. Ich bekomme den zweiten Kreis ums verrecken nicht ins Skript vernünftig eingebunden. Zuerst soll der Kreis "Dusche" starten und nach Ablauf der Zeit soll Dusche wieder ausgeschaltet werden und der nächste Kreis "Feuerschale" starten. Anschließend soll der Durchlaufzähler "DLF" um 1 erhöht werden und der nächste Bewässerungszyklus startet (Bis 3 Durchläufe erreicht sind).Hat hier jemand einen Vorschlag wie sich das schlank lösen lässt?
Danke im Vorfeld.
-
@estegemann sagte: Jeder Bewässerungskreis soll 3x für eine bestimmt Zeit eingeschaltet werden.
Initialisiere einen Count down Zähler für das Intervall mit 3 * Kreis-Anzahl, berechne cnt % 3 als Wert, der den laufenden Kreis aus und den nächsten Kreis einschaltet. Das funktioniert natürlich nur, wenn die Bewässerungsdauer für alle Kreise identisch ist. Es bietet sich ein Array of IDs an.
Besser nicht mit "umschalten" arbeiten. -
@paul53
Hi Paul,
Vielen Dank. Leider hat jeder Bewässerungkreis unterschiedliche Beregnungszeiten die jeweils in einem separaten Datenpunkt hinterlegt sind und sich auch ändern können. Zudem verstehe ich leider nicht, was du mit den ID's meinst. Warum nicht mit umschalten arbeiten? -
Ich gehe davon aus das
- Du für jeden Kreis einen State hast in dem hinterlegt wird wie lange der laufen soll.
- Diese Zeiten in Sekunden angegeben sind
Dann kann so etwas gehen (ist dann auch erweiterbar auf mehr als 2 Kreise, einfach die beiden Listen erweitern.)
Weggelassen habe ich den Zeitplan um den Durchlaufzähler initial zu starten. In dem müsstest Du den Durchlaufzähler auf die Anzahl der gewünschten Durchläufe setzen.
Nebenbei: Ein Intervall mit 1x pro Sekunde laufen lassen nur um per "falls" block einen Zähler beim Runterzählen zu beobachten ist Ressourcenverschwendung. Du kannst die Dauer eines Timeouts vorher berechnen (muss in ms sein).
A.
-
@asgothian absolut klasse!
Deine beiden genannten Punkte sind vorhanden.
Sobald die Regenmassen sich bei uns hier verzogen haben, werde ich das Script testen.
Hab vielen Dank für deine Zeit.Besten Gruß,
Eric -
@asgothian Mich würde dennoch interessieren, wie das Script aussehen müsste, wenn man nach Zeitplan steuern würde. Gibt es da evtl. auch die Möglichkeit den Wochentag sowie die Startzeit variabel zugestalten? Ich würde das dann gern in meine VIS einbauen und per checkbox die Wochentage auswählen, an denen bewässert werden soll sowie die Uhrzeit.
Hast du vlt. Zeit das Script nochmal dahingehend anzupassen? Das wäre klasse.
Mit besten Grüßen,
Eric -
Du brauchst:
- Diese 3 Bausteine, am besten in einer Funktion:
- Je nach dem was du über die Vis ansteuern willst ersetzt du die "*" Bausteine durch ein "wert von ...". Dabei darauf achten das die Werte zu den Cron Regeln passen
- im Schedule setzt du wie gehabt einfach deinen Durchlaufzähler auf die Anzahl an Durchläufen die du haben willst.
- einen Trigger auf alle States mit denen du den Zeitplan ansteuern willst, in dem du die 3 obigen Bausteine nutzt.
- Die Funktion solltest du dann auch bei Skriptstart aufrufen.
A.
- Diese 3 Bausteine, am besten in einer Funktion:
-
@estegemann Du kannst dir auch mal das Skript von Kuddel anschauen: https://forum.iobroker.net/topic/33573/vorlage-gartenbewässerung-mit-6-ventilen falls du es noch nicht kennst.