Der Sommer kommt! Da graut es manch einem schon bei dem Gedanken jeden Abend den Garten per Hand zu wässern. Eine automatische Gartenbewässerung schafft Abhilfe. fertige Systeme können schnell sehr teuer werden und sind dann auch nicht immer problemlos in die eigene Hausautomatisierung integrierbar. In meinem Fall ist das Bewässerungssystem im Garten schon vorhanden. Die Steuerung von Hunter ist leider veraltet und alles andere als smart.
Für die eigene Steuerung benötige ich folgende Teile:
Funktionsweise der Gartenbewässerung
Im Grunde ist eine Bewässerungsanlage recht simpel. Im Normalfall kommen keine Pumpen oder Ähnliches zum Einsatz. Es werden lediglich Magnetventile eingesetzt, die im angeschalteten Zustand geöffnet sind und Wasser zu den Regnern leiten. Um die Ventile anzusteuern, genügt es den Stromkreis zu schließen. Hierzu werden Relais verwendet.
Die Relais werden von einem NodeMCU ESP8266 gesteuert. Den entsprechenden Code findest du weiter unten. Mit openHAB wird mittels MQTT Protokoll kommuniziert. Wie das funktioneirt erfährst du hier.
Hardware vorbereiten
Im ersten Schritt müssen alle Komponenten korrekt miteinander verbunden werden. Es gibt zwei Stromkreise – 5 Volt und 24 Volt. Der 5 Volt Stromkreis (Gleichstrom) versorgt die Relais und den NodeMCU mit Strom. Der 24Volt Stromkreis (mit einem Trafo von 230 Volt auf 24 Volt Wechselstrom reduziert) versorgt die Magnetventile mit Strom. Falls du andere Magnetventile nutzt, schaue einfach nach welche Spezifikationen diese haben.
Verkabelung NodeMCU und Relais
Die Magnetventile sind von der Funktionsweise recht einfach aufgebaut. Ohne Stromzufuhr sind sie geschlossen und es kann kein Wasser fließen. Ist der Stromkreis geschlossen und die 24 Volt liegen an, sind die Ventile geöffnet und das Wasser fließt. Das ganze wird mittels eines Relais realisiert. Das ist relativ einfach über ein NodeMCU ansteuerbar. Die Verkabelung des NodeMCU mit dem Relais sieht so aus:
Das Relais benötigt 5 Volt Gleichstrom. Der NodeMCU gibt allerdings nur 3,3Volt aus. Aus diesem Grund schließen wir eine externe 5 Volt Quelle an. Das kann im einfachsten Fall ein USB Ladegerät sein. Dazu wird einfach der USB Stecker abgeschnitten und der Plus und Minuspol freigelegt.
Ventile anschließen
Im nächsten Schritt wird das Ventil angeschlossen. Hierfür benögigst du wie bereits erwähnt einen Trafo mit 24 Volt Wechselstrom. Ich habe ein Hutschienennetzteil verwendet, da ich auf der 230 Volt Seite nicht löten wollte. Natürlich kann auch ein Platinentrafo verwendet werden. Da der Trafo kein Metallgehäuse hat und komplett in Kunststoff eingegossen ist, benötigt es kein GND. Somit führen in das Netzteil lediglich die Phasen herein und auf der 24 Volt Seite auch nur 2 Anschlüsse heraus.
Bei Wechselstrom gibt es keinen Plus oder Minus Pol, somit muss bei der verkabelung mit dem Ventil nicht auf die Polung geachtet werden. Damit das Venitl nun über das Relais geschlatet werden kann, muss eine Phase an der C Klemme des Relais anschließen. Nun bleiben noch zwei Klemmen am Relais übrig. NC und NO.
NC steht für „normally closed“. Im Ruhezustand ist der Stromkreis geschlossen.
NO steht für „normally open“. Im Ruhezustand ist der Stromkreis geöffnet, bzw. unterbrochen.
Für unseren Fall soll der Stromkreis im Ruhezustand unterbrochen sein, da sonst ständig Wasser fließen würde. Also wird eines der 2 Kabel des Ventils an der NO Klemme angeschlossen. Die 2. Phase aus dem 24 Volt Trafo und das übrige Kabel des Ventils können direkt miteinander verbunden werden. Die Verkabelung über den NO sorgt zusätzlich dafür, dass im Falle eines Stromausfalls alle Ventile geschlossen werden.
Damit wäre die Verkabelung abgeschlossen. Jetzt fehlt noch der Code, um das ganze per MQTT zu steuern.
NodeMCU programmieren
Der NodeMCU muss nun noch mit dem richtigen Code gefüttert werden, um das Relais und damit die Gartenbewässerung zuverlässig steuern zu können. Wie du den NodeMCU verbindest und für die Programmierung vorbereitest, bekommst du bei OpenDataLab super erklärt.
Für dieses Projekt benötigen wir folgende Bibliotheken einige Bibliotheken, die, sofern noch nicht geschehen, installiert werden müssen. Das wird im Menü Sketch – Bibilothek einbinden – Bibliotheken verwalten. Es öffnet sich der Bibliotheksverwalter. Hier über die Suche die folgenden Bibliotheken suchen und installieren:
- ESP8266WiFi
- PubSubClient
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
#include <ESP8266WiFi.h> #include <PubSubClient.h> int Relay1 = 5;// D1 const char* ssid = "XXXXXXXX"; const char* password = "XXXXXXXX"; //change with your MQTT server IP address const char* mqtt_server = "XXX.XXX.XX.XXX"; WiFiClient espClient; PubSubClient client(espClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.print(topic); Serial.print(" => "); char* payload_str; payload_str = (char*) malloc(length + 1); memcpy(payload_str, payload, length); payload_str[length] = '\0'; Serial.println(String(payload_str)); if ( String(topic) == "Haus/Garten/Relay1" ) { if (String(payload_str) == "off" ) { digitalWrite(Relay1, HIGH); // turn the RELAY off client.publish("Haus/Garten/Relay1/state","off"); } else if ( String(payload_str) == "on" ) { digitalWrite(Relay1, LOW); // turn the RELAY on client.publish("Haus/Garten/Relay1/state","on"); } else { Serial.print("I do not know what to do with "); Serial.print(String(payload_str)); Serial.print(" on topic "); Serial.println( String(topic)); } } } void connect_to_MQTT() { client.setServer(mqtt_server, 1883); client.setCallback(callback); if (client.connect("beregnung_relay")) { Serial.println("(re)-connected to MQTT"); client.subscribe("Haus/Garten/Relay1"); } else { Serial.println("Could not connect to MQTT"); } } void setup() { Serial.begin(115200); delay(10); // Connecting to our WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); connect_to_MQTT(); // initialize pin 5, where the relay is connected to. pinMode(Relay1, OUTPUT); } int tellstate = 0; void loop() { client.loop(); if (! client.connected()) { Serial.println("Not connected to MQTT...."); connect_to_MQTT(); delay(5000); } // Tell the current state Relay 1every 60 seconds if ( (millis() - tellstate) > 60000 ) { if ( digitalRead(Relay1) ) { client.publish("Haus/Garten/Relay1/state","off"); } else { client.publish("Haus/Garten/Relay1/state","on"); } tellstate = millis(); } } |
Damit es im eigenen Umfeld funktioniert, müssen natürlich noch die SSID, das WLAN Passwort, sowie die Adresse des MQTT Brokers ersetzt werden. Den MQTT Broker kannst du entweder selbst betreiben oder (testweise) einen öffentlichen MQTT Broker benutzen. Hier bietet sich HiveMQ an. Der Dienst ist kostenlos. Zum Testen der eigenen Konfiguration ist der öffentliche Broker bestens geeignet, für den Live Betrieb allerdings weniger. Die Topics sind öffentlich einsehbar und somit auslesbar oder aktiv ansteuerbar – und wer möchte schon, dass irgendjemand die eigene Gartenbewässerung von außen steuert.
Ich empfehle einen eigenen MQTT Broker. Der kann einfach auf einem Rapsberry installiert werden. In diesem Video erfährst du wie:
Wenn alles wie gewünscht funktioniert, kann das Bewässerungssystem in openHAB integriert werden. Dazu muss der MQTT Client installiert werden. Wie genau kannst du in diesem Artikel nachlesen.
Sobald du MQTT in deiner Installation laufen hast, kannst du die entsprechenden Items in openHAB anlegen. In unserem Beispiel wäre das:
1 |
Switch Sprenkler1 "Sprenkler 1" (Beregnung) {mqtt=">[mosquitto:Haus/Garten/Relay1:command:ON:on],>[mosquitto:Haus/Garten/Relay1:command:OFF:off],<[mosquitto:Haus/Garten/Relay1/state:state:MAP(beregnung.map)]"} |
Ab jetzt ist es möglich das Ventil / den Sprenkler über die Sitemap anzusteuern. Dazu einfach einen entsprechenden Switch in der Sitemap anlegen:
1 |
Switch item=Sprenkler1 |
Wie auf den Bildern zu erkennen ist, nutze ich ein 4-fach Relais, um 4 Ventile einzeln ansteuern zu können. Zusätzlich habe ich einen Spannungswandler von 24 auf 5 Volt direkt mit verbaut. Der einzige Vorteil dieser Variante ist, dass nur eine 230 Volt Steckdose benötigt wird. Die USB Netzteil-Variante ist definitiv günstiger und schneller in der Umsetzung.
Wenn du ebenfalls einen 3D Drucker besitzt und dir eine Hutschiene selbst drucken möchtest, stelle ich dir gerne die Druckdatei zur Verfügung.
Die Schiene entspricht den Standardspezifikationen und kann für alle Hutschienengeräte verwendet werden. Natürlich sollte beim Gewicht darauf geachtet werden, dass die angebrachten Teile nicht zu schwer sind.
Intelligente Steuerung der Gartenbewässerung
Jetzt bist du in der Lage deine Gartenbewässerung bequem von der Couch aus zu steuern. Der nächste Schritt ist die Automatisierung der Anlage. Hier griefe ich auf meine KNX Wetterstation, sowie die Wettervorhersage von WeatherUnderground zurück. Die genaue Umsetzung wird in diesem Artikel beschrieben.
Mein Dank an Deine Vorarbeit.
Ich habe einen Teil Deiner Arbeiten übernommen.
Ich hatte bisher meine Bewässerungsanlage mit einem Rpi der ersten Generation im Einsatz, mit einer eigenen WebApp, Anschluss über GPIO, und einem Darlington-ULN2803-Treiberbaustein, da ich damals zu schnell ein zu günstiges Relais über Ebay gekauft habe. Ebenso hat der Rpi auch eine kleine Wetterstation mit Historie bereitgestellt Das alles lief nun rund 5-6 Jahre wunderbar im Dauereinsatz, dann plötzlich hat der Rpi aufgegeben zu arbeiten.
Nun denn, da ich sowieso zur Zeit fast alles auf Homematic und openHAB umstelle, war auch endlich ein moderner Ersatz für die Bewässerung erforderlich.
Gestern abend habe ich also im Keller alles mögliche zusammengesucht und ich hatte sogar noch eine billig-Variante eines nodemcu rumliegen und konnte das ganze nach rund 2-3 Stunden in Betrieb nehmen.
Hier und dort habe ich wenige Dinge angepasst, auch Deine Angaben bzgl. dem MQTT-Item konnte ich so nicht verwenden. Keine Ahnung wieso, habe das dann direkt über die WebGUI von openHAB3 eingestellt und es hat geklappt.
Danke.
Hey,
schön, dass dir die Anleitung ein wenig geholfen hast Wenn du möchtest, können wir deine Umsetzung gerne in de Rubrik „Leserprojekte“ veröffentlichen.
Viele Grüße
Patrick
Hallo,
Vielen Dank für die klasse Beschreibung. Ich habe es alles so weit ans laufen gebracht, jedoch habe ich mehr Ventile und da habe ich jetzt keinen Plan mehr bezüglich des esp😩
Könntest Du vielleicht mal beschreiben wie sich die Programmierung des esp und die des openHAB 3 ändert wenn es 4 Ventile sind.
Grüße
Christoph
Hallo,
Bin bis jetzt super vorwärts gekommen mit deiner Anleitung und den Links. Stehe jetzt aber vor dem Problem, dass ich nicht ganz verstehe wie ich den NodeMCU für 4 Ventile konfigurieren muss und wie der Code fürderhin weiteren Ventile angepasst werden muss. Kannst du da vielleicht mal erläutern wie man das System erweitern kann?
Besten Dank schon mal, für die tolle Anleitung bis hier und mit freundlichen Grüßen
Christoph
Hey Christoph,
freut mich, dass dir der Artikel weitergeholfen hat. Du hast Glück. Meine Bewässerung hat genau 4 Ventile 😉 Ich habe dir meinen Code in Pastebin kopiert. Hier der Link dazu: https://pastebin.com/xVC20C39
Viele Grüße
Patrick
Sorry, hatte deine Antwort zu spät bemerkt.🥺
Wir wollten zusammen mit meiner Freundin ein Gartenbewässerungssystem selbst bauen. Ich bin ein Ingenieur und sie ist sehr gut im Programmieren. Ich weiß nicht, wie es am Ende aussehen wird, aber ich bin gerade in der Suche nach notwendigen Details für Uhr Magnetventil.
Moin,
Irgendwie bekomme ich es nicht hin. Was genau muss ich Einstellen (SSID, Passwort..) bevor ich die Daten überspiele?
im Openhab scheint es alles zu Funktionieren. Die Übertragung auf den ESP8266 aber nicht. Ich kann auch über MQTT.fx mich mit dem Openhab/Broker verbinden..
2020-11-19 12:22:43.253 [ome.event.ItemCommandEvent] – Item ‚Sprenkler1‘ received command ON
2020-11-19 12:22:43.260 [nt.ItemStatePredictedEvent] – Sprenkler1 predicted to become ON
Vielleicht weil ich direkt das MQTT2 benutze ??
Hi Marvin,
die SSID ist der Name deines WLAN Netzwerks und Passwort ist das Passwort deines WLAN Netzwerks. Danach sollte dein NodeMCU mit dem Netzwerk verbunden sein.
Viele Grüße
Patrick
Hallo,
ich habe mich ziemlich genau an die Anleitung gehalten, aber scheinbar wird von OpenHAB nichts in Richtung ESP8266 gepublished. Hat jemand mal ein Beispiel-Item mit Channel, das funktiniert, das wuerde mir glaube ich weiterhelfen.
Danke im Voraus
Dirk
Hallo Dirk,
hast du mal mit einem MQTT Client (z.B. MQTT.fx) geschaut, ob der Befehl grundsätzlich rausgeht? Ansonsten ist meine Anleitung noch für das alte MQTT1 Binding geschrieben. Hier könnte das Problem liegen, wenn du bereits das neue Bindung benutzt. schick mir gerne mal deine Items und Things Datei an zukunftathome@interwebs-ug.de. Ich schaue mal drüber, ob mir etwas auffällt 🙂
Viele Grüße
Patrick
Hallo,
eine sehr schöne Beschreibung.
Baue diese gerade nach. Leider – aus mangelnder Erfahrung – habe ich einen DC-DC Stepdown Converter bestellt. Das hat er nicht überlebt, der Converter….
Kannst du mir einen Link zu deinem AC-DC Converter senden ?
Finde irgendwie nur DC-DC Converter.
Grüsse aus München
Jürgen
Hallo Jürgen,
schön zu hören, dass nicht nur ich in der Lage bin Hardware im Trial and Error Verfahren zu zerstören 😀 . Den Converter hatte ich damals bei Conrad in der Filiale gekauft. Ich finde ihn online gerade nicht. Es ist eine Platine mit den Bauteilen offen sichtbar. Allerdings wird sehr viel Wärme erzeugt, wenn von 24 auf 5Volt runtergeregelt wird. Daher werde ich meine Konstruktion etwas umbauen und für die Versorgung ein normales USB Netzteil verwenden. Einfach den Stecker ab und die 2 Pole als 5 Volt Quelle für NodeMCU und das Relais verwenden.
Der kleien „Nachteil“ – man benötigt 2 Steckdosen.
Ich hoffe ich konnte dir helfen 🙂
Viele Grüße
Patrick
Hallo Ptarick,
vielen Dank für die schnelle Antwort. Habe etwas gebraucht bis ich mich wieder damit beschäftigen konnte. Also meine Lösung ist jetzt folgende: habe einen USB Charge so umgebaut das er in einem neuen (3D Print) Gehäuse sitzt und die NodeMCU mit 5V betreibt. Die Relais betreibe ich mit 3.3V direkt von der NodeMCU (schein bis jetzt zu klappen). Habe allerdings auch (nur zur Sicherheit … ) einen Mini 220V-AC auf 5V-DC von AZ-Delivery (via Amazon) bestellt. Falls die Relais nicht zuverlässig schalten.
Bin sehr zu frieden mit dem Projekt. Vielen Dank für das entwerfen !
Grüsse aus München
Jürgen
Hallo Jürgen,
das freut mich zu hören. Falls du Bilder zum Projekt hast und erlaubst das Projekt in der Rubrik „Leserprojekte“ vorzustellen, würde ich mich über Material freuen 🙂
Viele Grüße
Patrick
Hi, baue grad auch eine Steuerung ab mit Raspberry. Habe ebenfalls 24V AC Ventile und Hutschienentrafo. Der Trafo liefert 24V AC mit 15VA Leistung. Bei einem angeschlossenen Ventil demnach ca 600mA. Das Ventil hat einen Eischaltstrom von rund 350mA und Haltestrom von 190mA. Kann es Probleme geben bei 600mA? Kann ich die Ventile dadurch schädigen? Bin kein Elektriker 🙂
Hallo Sebastian,
ich muss zugeben, dass ich in dieser Materie nicht sehr bewandert bin. Ich hatte bisher absolut keine Probleme mit meinem Trafo. Alles funktioniert seit der Installation letzten Sommer einwandfrei 🙂
Hallo Sebastian,
eine höhere Leistung ist kein Problem- das Ventil „entnimmt“ nur so viel, wie es benötigt. Eine höhere Spannung, bspw. 36 Volt, könnte das Ventil beschädigen.
Viele Grüße, Michael
Hallo Micheal, vielen Dank für deine fachkundige Antwort 🙂
Danke für die Anleitung- werde ich nachbauen.
Nach meinem Verständnis sollte man das Relais-Modul auch über den Vin-Pin des NodeMCU mit 5V versorgen können. Dann braucht man nur ein Kabel/Netzteil.
Viele Grüße, Michael
Hallo Michael,
freut mich, dass dir die Anleitung gefällt.
Genau, du kannst das Relais über den Vin Pin mit 5 Volt versogern, sofern du den NodeMCU per USB betreibst. Ich habe es in der Anleitung umgedreht und mit einem 5 Volt Netzteil den NodeMCU über den Vin Pin und GND betrieben und parallel das Relais mit Strom versorgt. Das 24 Volt Netzteil brauchst du dennoch. Denn das ist die Stromquelle für die Ventile, die mit Hilfe des Relais an- und ausgeschaltet werden.
Viele Grüße
Patrick
So hatte ich es mir gedacht, vielen Dank für die Erklärung!
Viele Grüße, Michael
Super, dann viel Spaß beim basteln. Falls du dein fertiges Ergebnis präsentieren möchtest, würde ich gerne in der Rubrik Leserprojekte darüber schreiben.
Viele Grüße
Patrick
Kann ich irgenwie mit euch chatten o.ä.
Bräuchte Hilfe von euch 😉
Einen Chat haben wir nicht. Aber ich schaue mir deinen Code gerne mal an am Wochenende. Kannst du mir noch deine Konfiguration von openHAB für die Relais zukommen lassen. Gerne die Dateien an zukunftathome@interwebs-ug.de
Hallo.
Ich habe nach Deiner Anleitung alles nachgebaut und dein Code für 7 Relais erweitert. Leider habe ich das Phänomen, dass manche Relais (konnte das bei dreien bisher feststellen) wieder auf off geschaltet werden. So richtig reproduzieren konnte ich es nicht.
Ich habe im OpenHAB log view folgendes gesehen:
2019-03-29 00:07:05.369 [vent.ItemStateChangedEvent] – Sprenkler2 changed from OFF to ON (das war ich)
2019-03-29 00:07:12.118 [vent.ItemStateChangedEvent] – Sprenkler2 changed from ON to OFF (das kam ohne mein zutuen)
Über Deine Hilfe würde ich mich sehr freue.
Smarthomeserver: OpenHAB 2.4
Broker: Mosquitto
Mikorkontroller: NodeMCU ESP8266
Die Things und Channels hatte ich über PanelUI eingerichtet. Die Items via File.
Screenshots kann ich leider keine anhängen.
Danke
Bin ein wenig ratlos. Anbei noch mein Code:
Code ESP8266
Hallo,
Ohne es genau zu wissen, meine ich mich zu erinnern, das es auf einigen Pins zu „Geisterströmen“ kommen kann, wenn der danebenliegende Pin geschaltet wird. Ich habe da irgendwas mit Pull-Down Bzw Pull-UP wiederständen gelesen, aber genaues weiß ich nicht.
Bin auch im Bereich Elektronik noch neu.
Ich werde mir aber auch die tolle Anleitung genau anschauen und mein 4 Fach Homematic System durch ein NodeMCU 8Fach System zu ersetzen. Man braucht halt doch mehr Ventile als gedacht 🙂