Automatische Gartenbewässerung

Automatische Gartenbewässerung

Zur Startseite zu diesem Projekt

1. Einführung

Nachdem im Sommer 2023 einige Pflanzen während Ferienabwesenheit arg gelitten haben, wuchs die Idee, die Bewässerung des Gartens an den sonnigsten Stellen zu automatisieren.

Die Steuerung wird durch den im Januar 2024 erworbenen Raspberry Pi 4 B (Raspi) vorgenommen.

2. Material

- Ein Raspbery Pi 4 B
- Verteilerbox/Nassabzweigdose
- Druckminderer
- Gardena-Bewässerungsventil (bei Galaxus Fr. 33.60, bei Jumbo Fr. 59.95)
- Gardena Ventilbox V3
  (wegen möglichem Ausbau in Zukunft V3 und nicht V1)
- Steckernetzteil 230V AC --> 24V AC für das Gardena-Ventil
- Gardena Wasserrohr 25mm; Länge je nach Situation
- Gardena-Schneidwerkzeug
- Gardena Entwässerungsventil am Ende des 25mm-Wasserrohrs
- Gardena Micro-Drip-System 13mm, 50m lang, mit 4l/Stunde pro Tropfloch (konnte ich bei "Do it + Garden" zu einem Liquidationspreis von Fr. 50.- erstehen)
- Gardena Rohrhalter 13 mm
- Gardena Micro-Drip-System T-Stücke 13mm > 4.6mm
- Gardena Micro-Drip-System Verteilerrohr 4.6mm, 15m lang
- Gardena Rohrhalter 4.6 mm
- Gardena Micro-Drip-System regulierbare Reihentropfer (1-8 l/h)
- Verbindungen für Gardena-Verteilrohre (25mm, 13mm, 4.6mm) und Rohrhalterungen (13mm, 4.6mm) sind bei Jumbo oft günstiger als bei Online-Anbietern
- 2 Stück Shelly plus 1
- WAGO-Klemmen
- Elektrodraht und Kabel mit Steckern
- Kabel für die Steuerung: Laut Gardena beträgt die Stromaufnahme des 24-Ventils bis zu 150mA und somit ist ein Kabelquerschnitt von mind. 0.05mm² erforderlich.
- Kabelbinder

3. Planung

Geplant wurde, die Bewässerung mittels einem Raspi und HTTP-Befehlen an Shelly-Geräte zu steuern, welche den Strom an das Wasser-Ventil ein- und ausschalten. Damit der Trafo nicht ständig unter Strom ist (gemessen wurde zwar nur ein Verbrauch von 1.8 W ohne Last), soll einerseits die Stromversorgung des Trafos und anschliessend die Stromversorgung des Ventils geschaltet werden.
Ein Schaltschema ist dabei immer hilfreich - auch wenn es optisch nicht sehr ansprechend ist... ;-)


Die fertige Box mit allen Elementen (Zuführung 230 V AC, Trafo mit Ausgangsspannung 24 V AC, den zwei Shellys plus 1 und der Ausführung eines dünneren Kabels mit 24 V AC zum Ventil ist unten abgebildet:


Der Trafo wurde mittels Schrauben und daran befestigten Kabelbindern fixiert. Die Stromkabel wurden beim Ausgang und Eingang ebenfalls mittels Kabelbindern fixiert, damit die Innereien gegen Zug gesichert sind.

4. Installation

Ein erster Test der Steuerungsbox am 4.2.24 zeigte: Es funktioniert! :-)


Elektrische Anschlüsse in der Ventilbox V3:

Die schwarzen Kabel kommen vom Ventil, die beiden anderen führen die 24 V AC von der oben beschriebenen Steuerungsbox hinzu.

Am 21. Februar 2024 wurde ca. 15m Pipeline (Gardena 25mm-Wasserrohr) verlegt. Nach ca. 10m wurde das Rohr durchnitten, um ein T-Stück einzufügen. Dabei hat sich das Gardena-Schneidwerkzeug als extrem hilfreich bewährt: Werkzeug auf Rohr drücken und nach etwa zwei Umdrehungen ist das Rohr sauber geschnitten.
Anschliessend wurde vom T-Stück aus ein 50m langes Tropfrohr (mit 4l Wasser pro Stunde und Tropfloch) entlang einer Glanzmispel-Hecke und in einer Böschung mit Johanniskraut (Hypericum) verlegt.
Beim anschliessenden Test, ob alle Verbindungen dicht sind, floss plötzlich kein Wasser mehr. Ob sich ein Shelly verabschiedet hat? Ein Blick auf die Uhr zeigte: Es ist 19:30 Uhr und es wurde klar, dass die Sicherheitsabschaltung aktiv geworden war - check! :-)
In den ersten Märztagen wurden das 50m-Tropfrohr besser verlegt und mittels Befestigungshaken fixiert. Ausserdem wurden von diesem Rohr zwei Abzweigungen mittels 13mm-T-Stücken zu 4.6mm-Röhrchen eingebaut: Diese Röhrchen führen zum einen an drei Farne und ausserdem zu einem Zebragras-Strauch. An diesen Röhrchen wurden fünf regulierbare Reihentropfer (siehe oben in der Materialliste) zwischengeschaltet.
Nach dem Einschalten der Bewässerung wurde kontrolliert, ob alle Pflanzen mit Wasser versorgt werden und zudem, ob auch der Perückenstrauch am Ende des Tropfrohres mit Wasser versorgt wird. Alles war in Ordnung und nach dem Abschalten des Ventils floss auch Wasser aus dem am Ende der 25mm-Pipeline angebrachten Entwässerungsventils.
Dieses sollte keinesfalls mehr als 2m unterhalb des Einspeisepunktes liegen, weil es sich sonst wegen der Gravitation nicht öffnet; das Ventil öffnet sich erst, wenn der Druck unter 0.2 Bar fällt!
Da wir beim Aussen-Wasseraschluss den vollen Druck der Hauszuleitung haben (das Druckreduzierventil im Untergeschoss füs Innere des Hauses wurde absichtlich nach der Abzweigung zum Aussenanschluss eingebaut) wurde am 9.3.24 ein 'Gardena Druckminderer' am Anschluss eingebaut, welcher den Druck auf 3.1 Bar reduziert. Am 11. März 2024 wurden ein 25mm-Wasserrohr und ein Elektro-Wellrohr unter Waschbetonplatten verlegt (nicht ganz so einfach, wenn die Platten anschliessend wieder horizontal, bündig und wackelfrei verlegt sein sollen...).

Rechts der Wasseranschluss, rechts hinten die helle Steuerbox für das Ventil und links unten die Ventilbox. Die Rohre sind allesamt dicht, nur beim Ausgang der Ventilbox ist die Schraubverbindung etwas undicht - da muss noch eine Lösung gesucht werden...
Diese Leckage habe ich Gardena in einer E-Mail via Kontaktformular beschrieben und noch gleichentags erhielt ich eine Antwort mit der Frage, ob vielleicht beim Verbinder Art.2762-20 die Flachdichtung fehlen würde. Daraufhin schickte ich das Foto unten links, in dem in der Tat keine Dichtung vorhanden ist. Umgehend erhielt ich die Antwort, dass mir kostenlos Ersatz geschickt wird und heute (19.3.24) kam das Paket an. Unten rechts ist der Verbinder (25mm <-> 1") mit der schwarzen Dichtung abgebildet:
 
Beim Kauf eines solchen Verbinders sollte man also unbedingt darauf achten, dass die Dichtung innen vorhanden ist!
Nach dem Einbau des Ersatzes funktionierte alles einwandfrei und ohne, dass irgendwo irgend ein Teil der ganzen Anlage undicht gewesen wäre! Danke an Herrn M.B. von Gardena!
Das folgende Foto zeigt den Wasseranschluss mit dem Druckminderer

und unten ist der Anschluss an die Ventilbox (unterlegt mit Flusskiesel ⌀ 8-25mm) abgebildet:

Projekt momentan erfolgreich beendet!   🙂   An der Software wird natürlich noch weiter gearbeitet...

5. Software

Die Steuerung des Trafos und des Ventils wird über die beiden Shellys gemacht. Auf dem Raspi läuft ein cron-job mit einem Script, das täglich jeweils um 03:11 Uhr (Profis empfehlen, jeweils frühmorgens zu wässern) aufgrund der Meteodaten der letzten acht Tage (Maximaltemperaturen, Niederschlag) entscheidet, ob die Bewässerung gestartet werden soll oder nicht:

11 3 * * * /pfad_zum_script/bewaesserung.sh >> pfad_zum_script/bewaesserung.log 2>>/pfad_zum_script/bewaesserung.errlog

Falls die Bewässerung gestartet werden soll, wird Folgendes ausgeführt:

Zur besseren Darstellung wurde vor dem Einfügen des untenstehenden Scripts folgender Befehl benutzt:
cat bewaesserung.sh | > bewaesserung.text

IP_TRAFO="192.168.XXX.YYY" IP_VENTIL="192.168.XXX.ZZZ" # GIESSDAUER=20 # 20 Sekunden - zum Testen. Im aktiven Betrieb: 3600 (= 1h) HALBEGIESSDAUER=`echo $((GIESSDAUER/2))` # korrektes Runden spielt keine Rolle PAUSENDAUER=20 # 20 Sekunden - zum Testen. Im aktiven Betrieb: 1800 (= 1/2h) # giessen=`grep giessen_ giessen.txt | cut -d"_" -f 2` # ###giessen="YES" # zum Testen !!! # rm -f H2O.new # source $HOME/smarthome/HA/MASTER.file # if test "$MASTER" = "yes" ; then if test "$giessen" = "YES" ; then datumtrafo=`date +%d.%m.%Y_%H:%M:%S` task="http://$IP_TRAFO/relay/0?turn=on" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outTRAFO.txt if test $? -eq 0 ; then out=`cat outTRAFO.txt | tr -s "," " " | tr -s ":" " " | tr -d '"' | tr -d "}"` sleep 3 datumventil=`date +%d.%m.%Y_%H:%M:%S` task="http://$IP_VENTIL/relay/0?turn=on" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outVENTIL.txt if test $? -eq 0 ; then out=`cat outVENTIL.txt | tr -s "," " " | tr -s ":" " " | tr -d '"' | tr -d "}"` echo "Trafo EIN: $datumtrafo - Ventil OFFEN: $datumventil" >> H2O.new # echo "--> Erste Phase Wässern während $HALBEGIESSDAUER Sekunden" >> H2O.new sleep $HALBEGIESSDAUER # datumventil=`date +%d.%m.%Y_%H:%M:%S` task="http://$IP_VENTIL/relay/0?turn=off" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outVENTIL.txt out=`cat outTRAFO.txt | tr -s "," " " | tr -s ":" " " | tr -d '"' | tr -d "}"` sleep 3 datumtrafo=`date +%d.%m.%Y_%H:%M:%S` task="http://$IP_TRAFO/relay/0?turn=off" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outTRAFO.txt out=`cat outTRAFO.txt | tr -s "," " " | tr -s ":" " " | tr -d '"' | tr -d "}"` echo "Ventil GESCHLOSSEN: $datumventil - Trafo AUS: $datumtrafo" >> H2O.new echo "--> Wässern während $PAUSENDAUER Sekunden pausieren: `date +%d.%m.%Y_%H:%M:%S`" >> H2O.new # sleep $PAUSENDAUER # datumtrafo=`date +%d.%m.%Y_%H:%M:%S` task="http://$IP_TRAFO/relay/0?turn=on" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outTRAFO.txt sleep 3 datumventil=`date +%d.%m.%Y_%H:%M:%S` task="http://$IP_VENTIL/relay/0?turn=on" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outVENTIL.txt echo "Trafo EIN: $datumtrafo - Ventil OFFEN: $datumventil" >> H2O.new echo "--> Zweite Phase Wässern während $HALBEGIESSDAUER Sekunden" >> H2O.new sleep $HALBEGIESSDAUER datumventil=`date +%d.%m.%Y_%H:%M:%S` task="http://$IP_VENTIL/relay/0?turn=off" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outVENTIL.txt sleep 3 datumtrafo=`date +%d.%m.%Y_%H:%M:%S` task="http://$IP_TRAFO/relay/0?turn=off" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outTRAFO.txt echo "Ventil GESCHLOSSEN: $datumventil - Trafo AUS: $datumtrafo" >> H2O.new echo " " >> H2O.new else echo "Shelly-VENTIL nicht erreichbar: $datumventil --> KEINE Bewässerung!" >> H2O.new fi else echo "Shelly-TRAFO nicht erreichbar: $datumtrafo --> KEINE Bewässerung!" >> H2O.new scp -p H2O.new REMOTE_RECHNER:/var/www/ZIEL_DIRECTORY/gartenbewaesserung/wetter/H2O.history fi echo "<font color=green>Bewässerung notwendig - `date +%d.%m.%Y_%H:%M:%S`</font>" > H2Otest.last echo " " >> H2Otest.last scp -p H2Otest.last REMOTE_RECHNER:/var/www/ZIEL_DIRECTORY/gartenbewaesserung/wetter/ else echo "<font color=red>Keine Bewässerung notwendig - `date +%d.%m.%Y_%H:%M:%S`</font>" > H2Otest.last echo " " >> H2Otest.last scp -p H2Otest.last REMOTE_RECHNER:/var/www/ZIEL_DIRECTORY/gartenbewaesserung/wetter/ fi fi # scp -p REMOTE_RECHNER:/var/www/ZIEL_DIRECTORY/gartenbewaesserung/wetter/H2O.history . scp -p REMOTE_RECHNER:/var/www/ZIEL_DIRECTORY/gartenbewaesserung/wetter/H2Otest.last . cat H2O.history >> H2O.new mv H2O.new H2O.history # # Generate bewaesserung.html # echo "<html>" > bewaesserung_new.html echo "<head>" >> bewaesserung_new.html echo "<body bgcolor=bbccff>" >> bewaesserung_new.html echo "<title>" >> bewaesserung_new.html echo "Bewässerungs-Log" >> bewaesserung_new.html echo "</title>" >> bewaesserung_new.html echo "</head>" >> bewaesserung_new.html echo "<h1>Bewässerungs-Log</h1>" >> bewaesserung_new.html echo "<p>" >> bewaesserung_new.html lastupdate=`ls -l meteodaten/temprain_REH.png | tr -s " " " " | cut -d" " -f 6-8` echo "<h4>&#9660; Last Update: $lastupdate &#9660;</h4><br>" >> bewaesserung_new.html echo "Daten REH & dunkelgrün: Wassergaben durch Bewässerung<br>" >> bewaesserung_new.html echo "<img src=../wetter/meteodaten/temprain_REH.png>" >> bewaesserung_new.html echo "<p>" >> bewaesserung_new.html echo "<h2>" >> bewaesserung_new.html cat /home/kradi/smarthome/checkstatus/index_overview_new.html | head -n 49 | tail -n 15 >> bewaesserung_new.html lastupdate=`ls -l /home/kradi/smarthome/checkstatus/index_overview_new.html | tr -s " " " " | cut -d" " -f 6-8` echo "<h4>&#9650; Last Update: $lastupdate &#9650;</h4>" >> bewaesserung_new.html echo "<h2>" >> bewaesserung_new.html echo "<p>" >> bewaesserung_new.html ###echo "<a href=http://www.kradolfer.net/SmartHome/>SmartHome</a>" >> bewaesserung_new.html ###echo "<p>" >> bewaesserung_new.html echo "<pre>" >> bewaesserung_new.html cat H2Otest.last >> bewaesserung_new.html cat H2O.history >> bewaesserung_new.html echo "</pre>" >> bewaesserung_new.html echo "</h2>" >> bewaesserung_new.html echo "<hr style='border-color: blue;'>" >> bewaesserung_new.html echo "<address>Last (automatic) update (`uname -n`): `date +%d.%m.%Y_%H:%M` - Created: 03Feb2024/uk</address>" >> bewaesserung_new.html # scp -p bewaesserung_new.html REMOTE_RECHNER:/var/www/ZIEL_DIRECTORY/gartenbewaesserung/log/index.html #

Falls bewässert wird (ca. 30 l/m²) wird dieser Wert in einem separaten File wassergaben.dat gespeichert und einerseits in den Graphiken und andererseits im täglich ablaufenden Algorithums, ob heute bewässert werden soll oder nicht, gleichbedeutend mit natülichem Niederschlag mitberücksichtigt.
Um das gesamte System (Bewässerung, Berechnung, graphische Darstellung) zu testen, wird jeweils einmal in der Woche testeshalber um (im Moment) 16:11 Uhr während vier Minuten bewässert. In den Graphiken ist dies in grüner Farbe dargestellt. Diese "Testbewässerungen" werden im Algorithmus, ob bewässert werden soll oder nicht, natürlich nicht berücksichtigt!

Und: Falls mit der automatischen Steuerung irgendetwas schief laufen sollte, wurde ein Sicherheitssystem eingerichtet, welches verhindern soll, dass die Bewässerung "ewig" läuft.

Schliesslich wurde sicherheitshalber ein Hochverfügbarkeitssystem eingerichtet: Jeweils einer der Raspis (beide Raspberry Pi 4 B) ist Master, während der andere als Slave bereitsteht, um im Fall des Versagens des Masters die Arbeiten mittels einem 'Failover' praktisch nahtlos zu übernehmen.

6. Erfahrungen

Frühmorgens am 9. April 2024 wurde aufgrund des verwendeten Algorithums erstmals eine Bewässerung ausgelöst:

Der Grund ist in der ersten Kolonne oben zu sehen: Die durchschnittliche Maximaltemperatur in den letzten acht Tagen lag über 20 Grad, der kumulierte Niederschlag der letzten acht Tage war weniger als 3mm und im Moment der Entscheidung betrug die Windgeschwindigkeit weniger als 40km/h.


Last update: 22Apr2024 - Created: 04Feb2024/uk