In Artikel Gartenbewässerung selbst bauen und über openHAB steuern habe ich gezeigt wie du mit Hilfe eines NodeMCU und openHAB eine smarte Bewässerung realisieren kannst. Böse Zungen behaupten das Ein- und Ausschalten über das Smartphone oder den Rechner ist nicht wirklich smart 😉
Darum wird die Gartenbewässerung jetzt komplett automatisiert, so dass kein manueller Eingriff mehr notwendig ist. Die einfachste Art der Automatisierung ist eine Zeitschaltuhr. Allerdings wird man schnell merken, dass diese Lösung nicht ideal ist. Irgendwann wird es regnen und gleichzeitig schaltet sich die Bewässerung für den Garten an. Das ist Wasserverschwendung und kostet zudem noch unnötig Geld.
Bewässerung mit Wettervorhersage und Sensoren steuern
Damit sinnvoll beregnet werden kann sind Daten aus der Zukunft und Vergangenheitsdaten relevant. Zum einen soll ermittelt werden, ob eine Bewässerung aufgrund der aktuell vorherrschenden Bedingungen überhaupt notwendig ist (hat es vielleicht vor ein paar Stunden erst geregnet). Zum anderen ist ein Blick in die Nahe Zukunft sinnvoll um nicht kurz vor einem bevorstehenden Regenschauer zu bewässern.
Für die Vorhersage eignet sich das WheaterUnderground Binding hervorragend.
Bei den Vergangenheitsdaten kommt es auf die verfügbaren Daten an. Ich habe eine KNX Wetterstation, die mir ausgibt, ob es aktuell regnet. Dieser Wert (Regen Ja/Nein) wird in der Datenbank gespeichert. So kann ich später abfragen ob es beispielsweise in den letzten 24 Stunden geregnet hat. Über diesen Weg kann schon einmal sichergestellt werden, dass es nicht kurz vor der geplanten Bewässerung geregnet hat.
Meine Automatisierung bedient sich dieser zwei Werte. Wenn man entsprechend ausgestattet ist, können noch Daten über die Menge des gefallenen Regens gesammelt werden und wie feucht der Boden ist. Beides ist bei mir (noch) nicht vorhanden.
Bindings installieren
Damit es losgehen kann muss das WeatherUnderground Binding installiert werden. Das erledigst du am besten über die PaperUI.
Damit das Binding genutzt werdem kann, muss ein Zugang und ein API Code erstellt werden. Zur Registrierung. Sobald du den Zugang hast, kann das Binding über eine entsprechende .things Datei konfiguriert werden. Dazu legst du am besten im Ordner Things eine Datei mit dem Namen weatherunderground.things an. Natürlich müssen die entsprechenden Werte aus der API und die ID der Wetterstation angegeben werden:
1 2 3 4 5 6 |
Thing weatherunderground:weather:ort "Ortsname" [ apikey="123456789", location="pws:xxxxxxxx", language="DL", refresh=5 ] { Channels: Type rainDayTomorrow : forecastTomorrow#precipitationDay Type rainTomorrow : forecastTomorrow#probaPrecipitation } |
Nun müssen noch die entsprechenden Items angelegt werden. Hierzu im Ordner items eine Datei mit dem Namen weatherunderground.items anlegen:
1 2 3 |
//VORHERSAGE MORGEN Number Regenmenge_Morgen "Regenmenge morgen [%.2f mm]" <rain> {channel="weatherunderground:weather:ort:forecastTomorrow#precipitationDay"} Number Regenwahrscheinlichkeit_Morgen "Regenwahrsch. morgen [%.2f %%]" <rain> {channel="weatherunderground:weather:ort:forecastTomorrow#probaPrecipitation"} |
Auch hier darauf achten im Channel das Wort „ort“ entsprechend deiner Angaben anzupassen.
Dummies anlegen
Im nächsten Schritt werden noch einige Dummy Schalter benötigt. Diese kannst du problemlos in der zuvor angelegten weatherunderground.items Datei anlegen.
1 2 3 |
//DUMMY FÜR VORHERSAGE Switch Beregnung_Heute "Beregnung heute [%s]" Switch Regen_Morgen "Regen morgen wahrscheinlich [%s]" |
Diese Schalter werden mit Hilfe von Regeln entsprechend an- oder ausgeschaltet. Das erleichtert später die Darstellung der Bedingungen für eine Beregnung. Um den Schalter „Regen_Morgen“ zu schalten, wird folgende Regel erstellt. Zur besseren Übersichtlichkeit habe ich hierzu eine neue Datei mit dem Namen beregnung.rules angelegt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//REGEN WAHRSCHEINLICH rule "Regen wahrscheinlich" when Time cron "0 0 0/1 1/1 * ? *" then if(Regenmenge_Morgen.state > 1 && Regenwahrscheinlichkeit_Morgen.state > 49) { Regen_Morgen.sendCommand(ON) } else { Regen_Morgen.sendCommand(OFF) } end |
Die Regel prüft stündlich, ob die Regenmenge morgen größer als 1mm ist und ob die Regenwahrscheinlichkeit bei 50% oder höher liegt. Sobald beide Bedingungen erfüllt sind, wird der Schalter auf AN gestellt – andernfalls auf AUS.
Regen in den letzten 24 Stunden
Die Zukunft haben wir nun abgebildet. Fehlt noch die Vergangenheit. In meinem Fall ist eine KNX Wetterstation im Einsatz, die mittels Switch (Regen AN/AUS) meldet, ob es gerade regnet. Damit ich die Daten aus der Vergangenheit auslesen kann, muss dieser Wert in einer Datenbank gespeichert werden. Dazu nutze ich die rrd4j Datenbank. Wie diese installiert und eingerichtet wird, erfährst du hier.
Um festzustellen, ob es in den letzten 24 Stunden geregnet hat, wird wieder ein Dummy Switch angelegt:
1 |
Switch Regen_Wetterstation_24h "Regen 24h [%s]" |
Danach wird über eine Regel aus der Datenbank ausgelesen, ob der Regenschalter, der Wetterstation in den letzten 24 Stunden auf ON stand.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
rule "Regen innerhalb 24h" when Time cron "0 0 0/1 1/1 * ? *" then if (Regen_Wetterstation.state == OFF && !(Regen_Wetterstation.changedSince(now.minusHours(24)))) { Regen_Wetterstation_24h.sendCommand(OFF) } else { Regen_Wetterstation_24h.sendCommand(ON) } end |
Auch diese Regel wird jede Stunde ausgelöst und prüft, ob der Schalter Regen aktuell AUS ist und ob er sich in den letzten 24 Stunden geändert hat. Hat es keine Änderung gegeben, so wird der Befehl OFF in Richtung des neuen Dummy „Regen_Wetterstation_24h“ gesendet. Andernfalls wird ein ON Befehl gesendet. Somit wissen wir jede Stunde, ob es in den vorangegangenen 24 Stunden geregnet hat.
Zur Automatik zusammenführen
Jetzt haben wir alle Einzelprüfungen angelegt, um nun die Automatik umzusetzen. Den Dummy Switch „Beregnung heute“ haben wir bereits oben angelegt. Dieser wird über folgende Regel geschaltet:
1 2 3 4 5 6 7 8 9 10 11 |
Time cron "0 0 0/1 1/1 * ? *" then if(Regen_Morgen.state == ON || Regen_Wetterstation_24h.state == ON) { Beregnung_Heute.sendCommand(OFF) } else { Beregnung_Heute.sendCommand(ON) } end |
Diese Regel wird ebenfalls stündlich ausgelöst und prüft den aktuellen Status der Schalter Regen_Morgen (also die Regenwahrscheinlichkeit morgen) und Regen_Wetterstation_24h (also ob es in den letzten 24 Stunden geregnet hat. Hier gilt: sobald eine der Bedingungen zutrifft wird bekommt der Schalter „Beregnung_Heute“ den Befehl OFF. Andernfalls wird der Befehl ON gesendet. Ab jetzt wird es ganz einfach. Mit dieser Info kannst du nun die letzte Regel erstellen, die die Bewässerung dann tatsächlich auslöst.
1 2 3 4 5 6 7 8 9 10 11 |
rule "Automatisch beregnen" when Time cron "0 0 23 * * ?" then if (Beregnung_Heute.state == ON) { Beregnung_Garten_Programm.sendCommand(ON) Thread::sleep(120000) Beregnung_Garten_Programm.sendCommand(OFF) } end |
Diese Regel wird täglich um 23 Uhr ausgeführt. Es wird geprüft ob der Schalter „Beregnung_Heute“ ON ist. Ist das der Fall wird die Beregnung gestartet. Nach 2 Minuten Wartezeit wird die Beregnung wieder ausgeschaltet. Dieser Wert ist nur ein Beispiel. Die Beregnungszeit kannst du individuell auf die Bedürfnisse deiner Pflanzen anpassen. In meiner Installation ist „Beregnung_Garten_Programm“ der Switch, der die Bewässerungsventile steuert. Der Sleep Befehl kann an dieser Stelle auch durch einen Timer ersetzt werden – das wäre auch die sauberere Variante.
Damit ist die automatische Bewässerung komplett. Viel Spaß beim Bewässern lassen 😉
(Edit) Bewässerung ohne Vorhersage
Da WeatherUnderground leider die die kostenlose API eingestellt hat, gibt es hier noch einmal die Anleitung für die Bewässerung ohne Vorhersage. Es wird also lediglich die Vergangenheit betrachtet.
Um festzustellen, ob es in den letzten 24 Stunden geregnet hat, wird ein Dummy Switch angelegt:
1 |
Switch Regen_Wetterstation_24h "Regen 24h [%s]" |
Danach wird über eine Regel aus der Datenbank ausgelesen, ob der Regenschalter, der Wetterstation in den letzten 24 Stunden auf ON stand. Beachte, dass du den Status (Regen Ja/Nein) in einer Datenbank speicherst. Dazu nutze ich die rrd4j Datenbank. Wie diese installiert und eingerichtet wird, erfährst du hier.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
rule "Regen innerhalb 24h" when Time cron "0 0 0/1 1/1 * ? *" then if (Regen_Wetterstation.state == OFF && !(Regen_Wetterstation.changedSince(now.minusHours(24)))) { Regen_Wetterstation_24h.sendCommand(OFF) } else { Regen_Wetterstation_24h.sendCommand(ON) } end |
Auch diese Regel wird jede Stunde ausgelöst und prüft, ob der Schalter Regen aktuell AUS ist und ob er sich in den letzten 24 Stunden geändert hat. Hat es keine Änderung gegeben, so wird der Befehl OFF in Richtung des neuen Dummy „Regen_Wetterstation_24h“ gesendet. Andernfalls wird ein ON Befehl gesendet. Somit wissen wir jede Stunde, ob es in den vorangegangenen 24 Stunden geregnet hat.
Nun kann bereits die Automatische Bewässerung als Regel erstellt werden:
1 2 3 4 5 6 7 8 9 10 11 |
rule "Automatisch beregnen" when Time cron "0 0 23 * * ?" then if (Regen_Wetterstation_24h.state == OFF) { Beregnung_Garten_Programm.sendCommand(ON) Thread::sleep(120000) Beregnung_Garten_Programm.sendCommand(OFF) } end |
Das war es schon. Jetzt ist die automatische Beregnung nur noch abhängig vom Regen in der Vergangenheit. Die Regel wird täglich um 23 Uhr ausgelöst und prüft, ob der Dummy Switch „Regen_Wetterstation_24h.state“ auf OFF steht. Ist dies der Fall startet die Beregnung. Andernfalls passiert nichts.
Ich habe ebenfalls meine Beregnung Smart gemacht, jedoch noch nicht automatisiert. Ich würde meine Beispiele gern inkl. Code posten, wenn das von Interesse ist. Auf meinem Esp (sonoff 4ch pro) läuft Espeasy und dort kann man mit Eventtriggern und Variablen arbeiten.
Ich gebe dem Esp den Start und die Dauer mit http rüber. Stoppen tut der Esp dann selbst nach Ablauf der Zeit. Das finde ich etwas sicherer, sollte mal unterwegs die Kommunikation ausfallen, würde ja die ganze Nacht gewässert werden.
Hallo Fossi,
dein Ansatz klingt interessant und bringt tatsächlich mehr Sicherheit mit. Würde dein Projekt und deinen Code sehr gerne in der Rubrik Leserprojekte posten. Hast ggf. noch ein paar Bilder, die ich dazu posten kann? Schicke mir gerne deinen Code und die Bilder an zukunftathome@interwebs-ug.de
Viele Grüße
Patrick
Mittlerweile gibt es eine Alternative zu wheaterundergrounds
https://www.openhab.org/addons/bindings/openweathermap/
Vielleicht willst du deine Anleitung anpassen bzw. es ausprobieren?
BTW: super Anleitungen! Bau gerade die smarte Bewässerung nach 😉
Hallo Tim,
vielen Dank für den Hinweis. Bin am Wochenende auch darübergestolpert und werde das ganze hoffentlich schnell ausprobieren können. Wenn ich es richtig gesehen habe bietet openweathermap keine Regenwahrscheinlichkeit in Prozent für den kommenden Tag an, sondern nur eine Regenmenge. Aber das ist wohl zu verkraften. Ich werde ein Update vom Artikel erstellen, sobald ich meine Installation getestet habe 🙂
Freut mich, dass dir die Anleitung gefällt.
Hallo!
Habe mit die Sache auch mal angeschaut. Die kostenlose API von Openweather bietet leider nur diet Wetterlage an, keine Vorhersage. Es gibt zwar ein etwas kompliziertes Workaround, ist aber eher nicht zu empfehlen.
Die richtig gute Alternative ist meteoblue, auch mit einem eigenen binding und kostenloser API, die man sich per Email bestellen muss. Ein Jahr lang kostenlos. Regenmenge und Wahrscheinlichkeit sind drin.
Läuft bei mir prima!
Grüße,
Matthias
Hallo Matthias, vielen Dank für den Tipp. Das schaue ich mir doch gleich Mal an. Es gefällt mir nämlich nicht ohne Regenmenge zu arbeiten. 😉
Viele Grüße
Patrick