Zeitpläne Startzeit dynamisch ändern

Ich würde gerne die Bewässerung in Zukunft über IPS laufen lassen. Gardena empfiehlt den Rasen vor Sonnenaufgang zu wässern. Diese Zeit ist in IPS hinterlegt. Es soll jetzt täglich eine halbe Stunde vor Sonnenaufgang abhängig von der Bodenfeuchte gewssert werden. Nur kann man bei den Zeitplänen keine Variable hinterlegen.
Würde das dann nicht über die Zeitpläne funktionieren oder gibts da eine andere Möglichkeit.

Dazu legst Du Dir im Objektbaum unter Kerninstanzen -> Location einen Offset 30 vor Sonnenaufgang an. Auf den Offset kannst Du dann ganz normal ein Ereignis legen und in dem Ereignis bindest Du als zusätzliche Bedingung die Variable der Bodenfeuchtigkeit ein.
Dann wird immer täglich zum gleichen Intervall vor Sonnenaufgang bewässerst es sei den der Boden ist schon ausreichend feucht.

Sehr gut, danke. Als Ereignis nehme ich höchstwahrscheinlich „Ausgelöstes Ereignis“ und als Auslöser „Bei Aktualisierung“.

„Bei Änderung“ wäre richtig, siehe Location Control richtig benutzen.

Ich habe im Hinterkopf, dass hier „Bei Änderung“ genommen werden muss.

Edit: Fonzo war schneller.

Stimmt, „Bei Ändernung“. Die Begriffe sind etwas verwirrend. Aber ich hab die Beschreibung gefunden. „Bei Aktualsierung“ wird auch dann ausgelöst, wenn sich der Wert nicht ändert. Anders bei Änderung.

Ich finde es eigentlich sehr gut beschrieben:
https://www.symcon.de/service/dokumentation/konzepte/ereignisse/ausgeloest/

Ich habe nicht gemeint, dass die Beschreibung schlecht ist. Aber wenn man nur die Begriffe in der Console liest, ist es zumindest für mich verwirrend. Die Beschreibung hab ich auch gefunden. Dann ist es klar.

Ich hab das jetzt für mich anders gelöst, nämlich so wie ich mir das gedacht hätte. Ohne einer Offsetvariable, dafür mit einem Script zum setzen der Startzeit. Hintergrund ist jener, wei ich die von Gardena vorgeschlagene Bewässerung simulieren will. Also vor Sonnenaufgang und in zwei Phasen. Die erste Phase ist 10 Minuten lang, dann wird 20 Minuten gewartet, dann 30 Minuten. Mit dem Offset geht das so nicht, wei sich ja beide Zeiten ändern würden und somit würden beide Phasen ausgelöst werden.

IPS_SETEVENTCYCLICTIMEFROM(25886,
date("H",getvalue(51713)),
date("i",getvalue(51713))-30,
0);
IPS_SETEVENTCYCLICTIMEFROM(23023,
date("H",getvalue(51713)),
date("i",getvalue(51713)),
0);

25886 bzw. 23023 sind die zyklischen Zeitpläne. 51713 ist die Variable für Sonnenaufgang. Wobei das Skript bei Änderung von Sonnenaufgang aufgerufen wird was mir dann den Startzeitpunkt der Bewässerung ändert.

Wobei ich, wenn ich mir das so recht überlege, beim ersten Lösungsansatz was falsch verstanden haben dürfte. Wenn ich die Offsetvariable mit Sonnenaufgang-30 Minuten anlege und dann die Bewässerung bei Änderung der Offsetvariable starte, dann Beginnt er nicht bei der Zeit der Offsetvariable zu bewässern, sonder bei der Änderung der Variable. Also etwas kurz nach Mitternacht, wo der neu Sonnenaufgang berechnet wird. Oder sehe ich das fasch?

Wenn Du im Location Control eine Offsetvariable anlegst, beispielsweise 30 Minuten vor Sonnenaufgang und der Sonnenaufgang ist um 07:00 Uhr, dann wird die Offsetvariable um 06:30 Uhr geändert.

Mein Vorschlag wäre:

  • Offsetvariable erstellen
  • Skript auf Änderung der Variable starten
  • Zählervariable anlegen (Startwert 0) und diese im Skript mit switch / case abfragen und nach jedem Schritt um eins erhöhen.
  • Skripttimer setzen.

Wird das Skript also zum ersten Mal aufgerufen, kannst Du Deine Bewässerung starten. Gleichzeitig setzt Du einen Skripttimer von 10 Minuten. Wird das Skript zum zweiten Mal aufgerufen, kannst Du die Bewässerung stoppen und einen Skripttimer von 20 Minuten setzen. Und so weiter. Beim letzten Aufruf setzt Du die Zählervariable und den Skripttimer auf 0 - fertig.

Natürlich ausgehend davon, dass ich Deine Anforderung richtig verstanden habe.

Du hast meine Frage schon richtig verstanden. es sollen zwei Bewässerungszyklen gefahren werden. Allerdings wird die Offset gleichzeitig mit der Sonnenaufgangszeit so gegen Mitternacht geändert. Wenn ich jetzt nur auf Änderung abfrage, dann wird gewässert, sobald sich die Variable ändert und nicht zum Zeitpunkt die dem Wert der Variable entspricht.

Wird die Variable wirklich geändert? Das wäre ein Fehler. Ich gehe eher davon aus, dass sie aktualisiert, aber nicht geändert wird.

Ja, wird geändert. Frag meine Frau und den Hund. Die sind nass geworden :wink:

Edit:
offenbar liege ich falsch. Die Neuberechnung findet zum Zeitpunkt des Sonnenaufgangwertes statt.

Die Dämmerungswerte bestimmen auch den Zeitpunkt der Neuberechnung. Das heißt, dass beim Erreichen des Zeitpunkts für den Sonnenaufgang, der neue Wert für den nächsten Sonnenaufgang berechnet wird.

Jetzt liegst Du nur noch bißchen falsch, aber zitiert hast Du es schon richtig.

Zum Zeitpunkt des HEUTIGEN Sonnenaufgangs wurde / wird der Wert für den Sonnenaufgang MORGEN berechnet.

Zum Zeitpunkt des HEUTIGEN Sonnenuntergangs wurde / wird der Wert für den Sonnenuntergang MORGEN berechnet.

Es werden dabei aber immer alle Variablen aktualisiert, jedoch nicht geändert. Geändert wird immer nur die Variable, welche gerade quasi der Auslöser ist. Deswegen unbedingt auf Änderung triggern und nicht auf Aktualisierung.

So, ich hab wieder alles über Board geworfen und es der Empfehlung nach gemacht. Schauen wir mal, was er morgen macht. Gespannt ich bin. Bewässert wird vorerst nicht, aber das egal. Wird derzeit noch von Gardena direkt gemacht, weil es mit dem Plugin noch ein paar Schwierigkeiten gibt. Start und Ende der Bewässerung würden funktionieren, derzeit über IFTTT, aber ich bekomme momentan keine Werte vom Sensor. Egal.
Über IFTTT steuer ich auch die Zeit der Bewässerung, da bit es nur fixe Einstellungen, aber das passt mal gut so. von Daher brauche ich auch kein Ende für die Bewässerung.
Ich lasse mir auch eine Pushnachricht senden, dann sehe ich was passiert.
Die Variable „nächste Bewässerung“ wurde im Location Teil als Offsetvariable eingerichtet.

Sehr gut! Dann berichte mal … :loveips:

Soweit dürfte es funktionieren. Zumindest läuft es die zwei Phasen mit dem abstand 1800 Sekunden (30 Minuten) durch. Und wenn man am Ende des ersten Case noch ein break einfügt, dann hört er auch dann auf ;-).
Mal schauen was morgen an Meldungen da ist.
Vielen Dank.

Habe gerade mit einem Kunden telefoniert, der witzigerweise die gleiche Anforderung hatte (Grüße an dieser Stelle). :smiley:

Man kann dann z.B. noch so weit gehen, dass man sich Variablen anlegt, „Phase 1“, „Phase 2“, „Phase 3“, in welche man die Zeit in Sekunden steckt. Dann kann man die Phasen variabel gestalten und z.B. über das WebFront einstellen. Bei Dir dann z.B. in Zeile 9 nicht fix 1800 Sekunden, sondern ein GetValue, welches die Zeit aus einer Variable holt. Nur als Anregung - falls gewünscht oder notwendig.

Richtig. Das mache ich zum Beispiel mit dem Schwellenwert für die Bodenfeuchte. Da hab ich mir zwei Variablen angelegt. Eine für den Rasensensor und die andere für den Thujensensor. Da ich aber im Moment auf die Einstellungen von IFTTT festgelegt bin, ist die Bewässerung auf 10 und 30 Minuten festgelegt. Sobald die Werte wieder kommen und auch die Ventile über IPS steuern kann (ich hab nicht das Irrigation system), werde ich das so umbauen. Derweil lass ich es mal so. Ich bein generell auch kein Freund von hardcodierten Dingen. :smiley:

Guten Morgen,
Also das hat so funktioniert wir beschrieben und erwartet. um 4:25 hat Phase 1 begonnen und eine halbe Stunde später Phase 2. Also hat das mit der Änderung der Offsetvariablen hin. Sehr gut :slight_smile: