Ein Bodenfeuchtesensor ist unabdingbar bei der smarten Gartenbewässerung. Eine Bewässerung von Pflanzen und Rasen macht nur unterhalb einer bestimmten Bodenfeuchte Sinn und sollte darüber hinaus automatisch erfolgen. Viele Hersteller bieten proprietäre Komponenten, die sich jedoch nur schwer bis gar nicht in interoperable Systeme, wie z.B. KNX, integrieren lassen. In diesem Artikel möchte ich dir zeigen, wie du dir mit etwas handwerklichem Geschick einen Bodenfeuchtesensor selbst bauen und ihn in openHAB einbinden kannst. Von dort ist es sehr leicht beispielsweise Magnetventile über KNX zu steuern und die Daten weiterzuverarbeiten.
Die Schaltung
Im ersten Schritt müssen wir uns über die Schaltung Gedanken machen. Als Basis dient ein Microcontroller, in diesem Fall der Wemos D1 mini (ESP8266). Auf diesem lassen wir Tasmota als Firmware laufen, doch dazu später mehr. Der Wemos wird später die analogen Werte der Bodenfeuchtesensoren auswerten und via MQTT an openHAB senden. openHAB dient dann wiederum als Verteilzentrum an beispielsweise KNX, worüber dann die Bewässerungsventile gesteuert werden. Die Schaltung unterstützt bis zu vier Bodenfeuchtesensoren, um an unterschiedlichen Stellen die Feuchte im Boden messen zu können.
Generell plane ich meine Schaltungen und Platinen mit Fritzing. Zuerst stecken wir alle Komponenten auf einer Steckplatine zusammen und testen die gewünschten Funktionen:
Ich habe mich dazu entschlossen, die komplette Einheit später über Solar zu betreiben. Das bietet den Vorteil, dass ich die Station überall im Garten montieren kann, ohne eine Spannungsquelle in der Nähe zu haben.
Es ergibt sich folgende Einkaufsliste:
- Wemos D1 mini
- ADS1115 – ADC Modul 16bit mit 4 Kanälen
- BME280 – Barometrischer Sensor für Temperatur, Luftfeuchtigkeit und Luftdruck
- TP4056 – Micro USB 5V 1A Laderegler Li-Ion Batterie
- 18650 Li-Ion Akku inkl. Halter mit Printanschluss
- Solarpanel – 5V, 1,5 Watt, 115 x 85 x 3mm
- Kurzhubtaster für Printmontage
- 10kΩ Metallschicht Widerstand
- 100kΩ Metallschicht Widerstand
- Gleichrichterdiode – 1N 4001, 50V, 1A
- Schraubklemmen für Printmontage (5,08mm)
- 4x 3-pol Schraubklemme
- 1x 2-pol Schraubklemme
Alle Komponenten können nun auf einer Steckplatine zusammengesteckt und die Funktion getestet werden. Generell bietet die Schaltung einen Anschluss von bis zu vier Bodenfeuchtesensoren sowie die Möglichkeit die Luftfeuchte, die Temperatur und den Luftdruck zu messen. Gerade die Daten der Umgebungsluft lassen sich später hervorragend zur Bewässerungsplanung nutzen.
Der finale Schaltplan stellt sich zum Schluss wie folgt dar:
Die Platine
Natürlich ist der provisorische Zusammenbau der Schaltung auf einer Steckplatine nicht die finale Lösung. Damit du nicht sämtliche Bauteile auf eine Lochrasterplatine basteln musst, habe ich eine Leiterplatte (PCB) entworfen, die du als Basis für deinen Bodenfeuchtesensor verwenden kannst:
Die Gerber-Datei (Extended Gerber – RS274X), die du zur Produktion der Platine benötigst, kannst du hier herunterladen: Soil Moisture Sensor – PCB v2.2. Im Netz gibt es viele Anbieter, die dir die Platine zu einem günstigen Tarif produzieren. Ich bestelle meine Platinen z.B. bei JLCPCB.
Ist die Platine da, können alle zuvor aufgelisteten Komponenten eingelötet werden:
Die Sensoren
Die Elektronik der Steuereinheit haben wir fertig. Nun geht es dran die Sensoren zu bauen, welche die Feuchte im Boden messen sollen. Hier greife ich auf den Bodenfeuchtesensor Modul V1.2 zurück. An diesem Sensor wird anschließend ein Kabel angelötet, welches dann in der Station angeschlossen wird. Ich empfehle hier das Gardena Verlängerungskabel (01868-20), da dies für den Außen- und Nassbereich hervorragend geeignet ist. Die weiße JST-XH Stiftleiste am Sensor ist natürlich vorher auszulöten:
Die sensible Elektronik des Sensors gilt es abschließend noch gegen Feuchte zu schützen. Hierfür habe ich ein Gehäuse entworfen, welches sich leicht mit einem 3D-Drucker produzieren lässt (die Dateien findest du auf Thingiverse: Soil Moisture Sensor – Solar powered with Wemos D1 mini). Ich empfehle hierfür PETG als Filament für den Druck. Alternativ kannst du das Gehäuse auch im Internet produzieren lassen.
Der Sensor wird in das gedruckte Gehäuse gesteckt und mit Heißkleber versiegelt:
Das Gehäuse
Der elektrotechnische Teil ist nun geschafft! Nun gilt es die Platine der Basisstation gegen Umwelteinflüsse zu schützen und für den Außeneinsatz fit zu machen. Hierzu habe ich ein passendes Gehäuse entworfen, welches wieder mit dem 3D-Drucker produziert werden kann. Das Ganze habe ich auf Thingiverse veröffentlicht: Soil Moisture Sensor – Solar powered with Wemos D1 mini.
Die Solarpanele können mit Heißkleber passend in den Deckel eingeklebt werden. Die Platine wird mit 3,5 x 13mm Blechschrauben (Edelstahl – A2) im Gehäuse befestigt. Der Deckel kann mit 3,5 x 19mm Blechschrauben (Edelstahl – A2) befestigt werden. Um die Dichtigkeit des Gehäuses zu erhöhen, habe ich die Kanten des Deckels mit Moosgummi abgeklebt.
Damit die Sensorkabel ebenfalls einen geschützten Weg ins Gehäuse finden, werden im Boden des Gehäuses Kabelverschraubungen (PG7) eingeschraubt, durch diese dann wiederum das Sensorkabel eingeführt wird.
Um das Gehäuse an einem Pfosten zu befestigen, habe ich eine Halterung konstruiert. Diese steht aktuell nur für einen 70x70mm Pfosten bereit, kann jedoch leicht an andere Abmaße angepasst werden:
Die Inbetriebnahme
Es empfiehlt sich vor der Inbetriebnahme den 18650 Akku zu laden. Anschließend wird auf den Wemos D1 mini die Open Source Firmware Tasmota installiert. Dies geht am Einfachsten mit dem Web Installer. Bitte beachte, dass du die Version Tasmota Sensors installiert, damit später auch der BME280 sowie ADS1115 ordnungsgemäß funktioniert.
Im Folgenden werde ich nur auf die spezifische Konfiguration von Tasmota eingehen, die wesentlich ist für unseren Bodenfeuchtesensor. Wie du grundsätzlich Tasmota installierst und konfigurierst, werde ich in einem gesonderten Beitrag beschreiben.
Modul Konfiguration
Unter
➜ ist Tasmota wie folgt zu konfigurieren:Hinweis: Halte die vorgegebenen GPIOs und deren Konfiguration genau ein, denn diese sind durch die Platine vorgegeben.
DeepSleep
Der DeepSleep hilft den 18650 Akku zu schonen und gewährleistet einen zuverlässigen Betrieb auch an trüben Tagen. Ein DeepSleep von 10 Minuten (600 Sekunden) hat sich hier als guter Mittelwert bewährt:
DeepSleepTime 600
Um den Wemos aus seinem Tiefschlaf aufzuwecken, reicht es den DeepSleep-Knopf auf der Platine gedrückt zu halten und anschließend den Wemos neuzustarten.
Neustart und Test
Nach einem Neustart siehst du auf der Startseite sämtliche Messwerte der Bodenfeuchtesensoren sowie des BME280. Darüber hinaus gibt dir Analog0
Aufschluss über den Ladestand der Batterie. 1024
steht hierbei für eine volle, 0
hingegen für eine leere Batterie.
Die Einbindung
Abschließend möchte ich dir zeigen, wie du den Bodenfeuchtesensor in openHAB einbinden und die Werte weiterverarbeiten und visualisieren kannst. Ich setze voraus, dass du zumindest Grundkenntnisse in openHAB besitzt.
Thing
Nun legst du in openHAB ein neues
an. Das Availability Topic passt du natürlich auf deine individuelle Konfiguration an:Nun kannst du dich gleich dran machen und sämtliche Channels für dein neues Thing konfigurieren.
Channels
Die einzelnen Channels kannst du bequem über folgendes YAML hinzufügen:
UID: mqtt:topic:bremus:bodenfeuchte label: Bodenfeuchte thingTypeUID: mqtt:topic configuration: payloadNotAvailable: Offline availabilityTopic: tele/garten/bodenfeuchte/LWT payloadAvailable: Online bridgeUID: mqtt:broker:bremus location: Garten channels: - id: BatteryLevel channelTypeUID: mqtt:dimmer label: Batteriestand description: "" configuration: min: 0 stateTopic: tele/garten/bodenfeuchte/SENSOR transformationPattern: JSONPATH:$.ANALOG.A0 max: 1024 - id: LastMeasurement channelTypeUID: mqtt:datetime label: Letzte Messung description: "" configuration: stateTopic: tele/garten/bodenfeuchte/SENSOR transformationPattern: JSONPATH:$.Time - id: Temperature channelTypeUID: mqtt:number label: Temperatur description: "" configuration: stateTopic: tele/garten/bodenfeuchte/SENSOR transformationPattern: JSONPATH:$.BME280.Temperature unit: °C - id: AtmosphericPressure channelTypeUID: mqtt:number label: Luftdruck description: "" configuration: stateTopic: tele/garten/bodenfeuchte/SENSOR transformationPattern: JSONPATH:$.BME280.Pressure unit: hPa - id: Sensor1 channelTypeUID: mqtt:dimmer label: Sensor 1 description: "" configuration: min: 6100 stateTopic: tele/garten/bodenfeuchte/SENSOR transformationPattern: JSONPATH:$.ADS1115.A0 max: 16834 - id: Humidity channelTypeUID: mqtt:dimmer label: Luftfeuchte description: "" configuration: min: 0 stateTopic: tele/garten/bodenfeuchte/SENSOR transformationPattern: JSONPATH:$.BME280.Humidity max: 100
Hinweis: Im Beispiel wurde nur einen Bodenfeuchtesensor konfiguriert. Du kannst natürlich bis zu drei weitere Sensoren konfigurieren, die Platine bietet dir diese Möglichkeit.
Außerdem wichtig, dass du für jeden Sensor den min
und max
Wert ermittelst und ihn oben im Skript einsetzt. Stelle hierzu jeden Sensor abwechselnd in ein Wasserglas und lese in Tasmota den Analog-Wert entsprechend ab. Das gleiche machst du, wenn der Sensor absolut trocken ist.
Items
Nun kannst du die Channels mit neuen Items verbinden. Ich nutze hierfür das Model, um die Übersicht nicht zu verlieren:
Wie du siehst, habe ich zwei Items hinzugefügt, die nicht semantisch zugeordnet sind (Sensor 1 und Sensor 2). Diese beiden Items sind mit dem jeweiligen Channel eines Bodenfeuchtesensors verlinkt. Der ausgegebene Wert drückt die Trockenheit des Bodens aus, nicht jedoch seine Feuchte. Zeigt der Sensor 30% an, bedeutet dies eine Bodenfeuchte von 70%. Du benötigst also noch zwei weitere Items, die mittels einer Regel mit der erwarteten Bodenfeuchte befüllt werden.
Eine entsprechende Regel zur Umrechnung könnte wie folgt aussehen:
Die Visualisierung
Dem Ganzen die Krone aufsetzen kannst du nun mit einer ansprechenden Visualisierung der Werte. Zu diesem Zweck habe ich ein passendes Widget entwickelt:
Die aktuelle Version des Widgets findest du auf Github. Neue Widgets bindest du in openHAB über den Menüpunkt ➜ ein.
Downloads
Hier findest du alle Dateien zu diesem Projekt:
- Platine: Soil Moisture Sensor – PCB v2.2
- Gehäuse: Soil Moisture Sensor – Case v1.0
- Widget: Soil Moisture