Fhem: Automatische Gartenbewässerung mit Fhem und Gardena (laufendes Projekt, Gastbeitrag)

Update 13.09.2015 Nochmalige Überarbeitung des Beitrages

fhemBlog-Leser Christian hat sich auf die Fahne geschrieben, sein Heim mit Fhem komplett zu automatisieren. Viele Infos hat er sich von meinem Blog schon geborgt, aber jetzt wollte auch mal was zurückgeben. Er stellt in seinem Gastbeitrag Automatische Gartenbewässerung mit Gardena und Fhem sein neuestes Projekt vor. Grundlage ist das aktuelle Fhem mit den Modulen von MySensors. Da es ein noch laufendes Projekt ist, könnt ihr sicher sein, das dieser Beitrag noch öfters angepasst und erweitert wird. Solltet ihr Fragen und Anregungen haben, könnt ihr gerne unten in den Kommentaren Euren Senf dazu schreiben. Also viel Spaß beim Lesen und Nachbauen!

Funtionsumfang:

  • Drahtloses Steuern der Gardena Ventile
  • Drahtloses Schalten der Gardena Pumpe
  • Funktionsüberprüfung, ob Pumpe an oder aus
  • Distanzsensor (Blog-Beitrag zum Distanzsensor) zum Bemessen der Wasserhöhe in den Tanks
  • Giess-Sensoren für die Messung der Erdfeuchte
  • Wetterlogging über Wetter.com und die Entscheidung, ob bewässert werden muss

Zutaten Bewässerung

Zutaten für das Steuerungsmodul für Ventile / Schläuche / Ersatz und Pumpe

Distanzsensor

Giessensor (folgt)

Überprüfung, ob die Pumpe ein- oder ausgeschaltet ist (USV)
Schaltplan ungefähr so, wie in diesem Blog-Beitrag beschrieben

Beschreibung:

Für die Erstellung einer automatischen Gartenbewässerung sind Bauteile eines Sprinklersystems notwendig. Die hier verwendeten Geräte sind von Gardena, da sie durchweg gute Bewertungen erhielten. Ein weiterer Grund war der Vielflächen-Versenkregner von Gardena. Da wir unser Haus vor rund einem Jahr erst gekauft haben, ist uns noch nicht ganz klar, wo welche Bereiche im Garten wie Sitzbereich, Pool oder ähnliches später sein sollen. Hierbei eignet sich der Einsatz des Gerätes gut, da der Beregnungsbereich von 25° bis 360° reicht. Innerhalb dieses Bereiches ist es möglich, 50 verschiedene Punkte einzustellen/ programmieren, so das spätere Änderungen im Garten berücksichtigt werden können ohne ganze Schläuche neu zu verlegen.
Im Zusammenspiel mit der Gardena 4000/5 Pumpe und entsprechenden Wassertanks bietet die Pumpe geschätzt 3 Bar Druck. Dies reicht aus um eine Beregnung von rund 7 m – 8 m von dem AquaContour zu erzielen.
Aufgrund der Größe des Gartens werden 4 AquaContour Geräte verbaut. Die Pumpe erzeugt dabei leider nicht genügend Druck um alle Geräte gleichzeitig laufen zu lassen. Dadurch wurden entsprechend 4 einzelne Schläuche zu den Beregnern geführt. Ein weiterer Schlauch wird für den vorderen Teil des Hauses genutzt. Ein weiterer Schlauch dient als Direktentnahme für einen Gartenschlauch.

Gartenbewässerung robins blog

Dadurch ergeben sich insgesamt 6 Schläuche, die einzeln gesteuert werden müssen. Die Steuerung erfolgt mittels eines Arduinos Nano einem 4er-, 2er Relais und einem nRF24L01+ Funkmodul. Die Schaltung der Pumpe erfolgt durch ein gesondertes Relais mit eigenem Sendemodul.
 Somit werden 2 komplette Bausätze verwendet.
Hierbei wird der Standard-Code eines MySensor-Relais verwendet und entsprechend angepasst.

Gartenbewässerung Robins blog 2

Links oben befindet sich die LAN-Gateway.

In der Mitte ist die Steuerung für die einzelnen Ventile. Die gelb-gestrichelte Linie vom 24V Netzteil zu den Relais ist die Zuleitung welche für die Relais verwendet wird. Diese sind untereinander verbunden. Somit benötigt man nur eine Zuleitung. Die rot-gestrichelte Linie ist die andere Leitung, welche von der Lüsterklemme zurück zum 24V Netzteil führt.

Rechts befindet sie die relais-Steuerung für die Gardena Pumpe, welche mit einem Zuleitungsschlauch zu den Ventilen versehen ist.

Verkabelung der Einzelkomponenten:

Um ein Relais anzusteuern ist bei MySensors (http://www.mysensors.org/build/relay) eine Anleitung.

Hinzu kommt das der 2,4 GHz Sender (nRF24L01+) mit angeschlossen werden muss. Dazu ist hier die entsprechende Anleitung: (http://www.mysensors.org/build/connect_radio). Achtung dabei handelt es sich um einen Arduino Pro Mini! Bitte bei der Verkabelung darauf achten, dass die PINs nicht an den gleichen Stellen sind. Lieber in der Tabelle schauen und den Beschriftungen folgen!

Programm-Code Relais Gartenbewässerung

In der obigen Anleitung vom Relais ist ein Programmcode enthalten, der genutzt werden kann aber entsprechend angepasst werden muss.

 Anzahl der Relais muss eingestellt werden

 digitalWrite(pin, gw.loadState(sensor)?RELAY_OFF:RELAY_ON);

 digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_OFF:RELAY_ON);

Hierbei wurde ON und OFF vertauscht, da sich gezeigt hat, das sobald das Gerät in FHEM eingerichtet war ON als OFF interpretiert wurde.

 

Änderungen:

Das Resultat sieht so aus:

 

Arduino Nano mit 6 Relais

Einrichtung in FHEM:

Die folgende Grafik zeigt den Ablauf der Beregnungsroutine.

Beregnungs grafik

Dies ist der vollautomatisierte Ablauf der Bspw. jeden Morgen um 6:00 Uhr gestartet werden kann und je nach Wetterlage entscheidet ob der Garten beregnet werden soll oder nicht.

Eine weitere, bereits eingerichtete Funktion ist die Beregnung von Hand. Es wird durch entsprechende Dummys in FHEM ein Signal ausgelöst, welches die Pumpe automatisch einschaltet, dann den entsprechenden Beregnungsbereich gießt und bei deaktivieren des Dummys in FHEM auch das Ventil und die Pumpe ausgeschaltet wird.

Erstellung der Dummys und Konfigurationsdaten für die Bewässerung in FHEM:

Nach der Erstellung beider Relais werden die Geräte in Fhem eingebunden.

bewaesserung

Es werden folgende Dummys im System benötigt:

Bewaesserung

 Zur Steuerung der Anlage (Ja / Nein)

configGeraete

 Steuerung der einzelnen Geräte um sie ansprechen zu können

configGartenBewaesserung

 Steuerung der Programmierung

RegenwarscheinlichkeitProTag  (sorry Dummy falsch geschrieben, Anm. Robin)

 Regenwahrscheinlichkeit der kommenden 24h

confGeraete ist ein zweidimensionales Array um die Gerätenamen und Spezifikationen der einzelnen

Relais und Zeiten in einem Dummy zu steuern.

Verwendung:

 Dimension getrennt durch LEERZEICHEN zur besseren Übersicht in Fhem

 Dimension getrennt durch KOMMA

Somit ergibt sich folgende Syntax für ein Gerät:

<Name des Gerätes>,<Name des einzelnen Relais>,<Dauer in Minuten wie lange das Gerät geöffnet

sein soll> LEERZEICHEN …usw…

configGartenBewaesserung ist ein Eindimensionales Array welches mit KOMMA getrennt wird.

Hierbei werden in folgender Reihnefolge die Werte belegt:

<Sicherheitsschaltung>,<Gießfrequenz>,<Regenwarscheinlichkeit in % >,<Logfile>,<Timestamp der

letzten Beregnung>

Sicherheitsschaltung (Ja/ Nein). Dadurch werden beim Starten des Programms alles Relais

ausgeschaltet bevor mit dem Gießprozess begonnen wird.

 Gießfrequenz in Tagen. BSP 2 = Jeden zweiten Tag gießen

 Regenwahrscheinlichkeit in % ab der nicht mehr gegossen werden soll

 Logfile (Ja/ Nein). Soll ein Logfile erstellt werden? Hier werden Informationen gespeichert, wie

z.B. wann das letzte mal gegossen wurde, oder wie voll die Tonne vor bzw. nach dem Gießen

war. Dazu wird der Dinstanzsensor benötigt.

 Timestamp, wird vom System eingetragen um die letzte Bewässerung zu protokollieren.

Die Beregnung soll bei mir um 6:00 Uhr morgens beginnen. Hierfür wird ein AT-Befehl in FHEM wie

folgt integriert:

define test at *06:00:00 {myGardenIrrigation()}

Für die Beregnung von Hand werden nun entsprechende Dummys angelegt

define GSchlauch_1 dummy

attr GSchlauch_1 room Gartenbewässerung

attr GSchlauch_1 webCmd Schlauch1:on:off

Syntax:

<Name>_<Ventilnummer>

Der Name ist zur automatisierten Erstellung durch die Programmierung Notwendig.

Die Ventilnummer ist das Ventil / Schlauch der geöffnet werden soll. Hierbei ist es notwendig in dem

Programmode die variable $ventilName entsprechend anzupassen. In dem Beispiel ist der Name

„RelaisGartenVentil“

Wichtig zu beachten ist das der Unterstrich als „trenner“ fungiert um den Namen und die Zahl im

späteren Verlauf des Programms zu trennen.

Notify zum Ansteuern der Ventile:

Ein Notify muss angelegt werden, der auf den eben angelegten Dummy reagiert und die Methode

mit entsprechenden übergabeparametern aufruft

define HandsteuerungNotify notify GSchlauch_1:.* {\

myGardenIrrigation($NAME,$EVENT);;\

}

attr HandsteuerungNotify room Gartenbewässerung

Benötigte Wetterdaten:

Die Entscheidung für eine vernünftige Wetterinformation war nicht ganz einfach. Gesucht wurde eine Wetter-API die die Regenwahrscheinlichkeit mit angibt. Nach einigen verschiedenen Tests kam heraus das die API von wetter.com für den Norddeutschen Bereich am genauesten ist, was das Thema Regenwahrscheinlichkeit betrifft. Aufgrund der Küstennähe in Bremerhaven ist es nicht sinnvoll eine Wetterstation zu nehmen die ~50 km entfernt ist, da diese Werte mit dem aktuellem Wetter nicht zielführend sind. Ein kleines Manko ist das die Regenwahrscheinlichkeit wird in Blöcken angegeben.

Zum Integrieren der wetter.com API ist hier eine Anleitung verfügbar:

http://fhem.de/commandref_DE.html#OPENWEATHER

In dem oben genanntem Programm-Code ist eine Methode zur Relativierung der Regenwahrscheinlichkeit.

Das Prinzip ist folgendes:

Ist eine Regenwahrscheinlichkeit (fc0_chOfRain) bei 90 – also 90% und fc0_weather=“leichter Regen – schauer“, dann ist ein leichter Schauer sehr wahrscheinlich. Zudem sind die Wettervorhersagen in Stundenblöcken unterteilt (fc0_chOfRain, fc0_chOfRain06, fc0_chOfRain11, fc0_chOfRain17, fc0_chOfRain23).

Davon ausgegangen das 90% Regenwahrscheinlichkeit vorhanden sind aber nur „leichter Regen“ zu erwarten ist, wird dieser leichte Regen von der Regenwahrscheinlichkeit zu je 20% abgezogen um eine realistische Regenwahrscheinlichkeit zu berechnen.

Dies beschreibt die Methode „myWeatherData()“

sub myWeatherData(){
 my $faktor;
my $w1 = ReadingsVal("MeinWetter","fc0_weather",0);
my $w2 = ReadingsVal("MeinWetter","fc0_weather06",0);
my $w3 = ReadingsVal("MeinWetter","fc0_weather11",0);
my $w4 = ReadingsVal("MeinWetter","fc0_weather17",0);
my $w5 = ReadingsVal("MeinWetter","fc0_weather23",0);
$faktor += ($w1 =~ m/leichter Reg/i)? 20: 0;
$faktor += ($w2 =~ m/leichter Reg/i)? 20: 0;
$faktor += ($w3 =~ m/leichter Reg/i)? 20: 0;
$faktor += ($w4 =~ m/leichter Reg/i)? 20: 0;
$faktor += ($w5 =~ m/leichter Reg/i)? 20: 0;
my $regenwarscheinlichkeit = ($faktor > 0)? ((ReadingsVal("MeinWetter","fc0_chOfRain",0)) /100) * $faktor : (ReadingsVal("MeinWetter","fc0_chOfRain",0));
fhem("set RegenwarscheinlickeitProTag $regenwarscheinlichkeit");
return $regenwarscheinlichkeit;
}

Weiteres in Planung:

  • Nutzung von einem Distanzsensor, der die Höhe des Wasserstands ermittelt, um die Pumpe nicht zu beschädigen
  • Logfile-Erstellung zur Übersicht wann beregnet wurde, wie der Wasserstand war etc.
  • Schaltung einzelner Beregnungsschläuche um von Handsteuerung zu ermöglichen
  • Einbindung der USV. Zur Überprüfung ob die Pumpe An bzw. Aus ist.

Nachtrag: Man benötigt zum „Verbinden“ an Fhem noch das MySensors-Gateway. Hierzu kann ich auf einem Blogbeitrag verweisen. Die Software davon ist aber nicht mehr uptodate, jedoch die Hardware ist die gleiche. Hier geht es zum Blog-Beitrag.

Programm-Code: Code_version1-2

Dieser Beitrag wurde unter Fhem-Hausautomation abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

28 Antworten zu Fhem: Automatische Gartenbewässerung mit Fhem und Gardena (laufendes Projekt, Gastbeitrag)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.