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:

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 ConfigurationConfigure Module 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 Generic MQTT Thing 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 Entwickler ToolsWidgets ein.

Downloads

Hier findest du alle Dateien zu diesem Projekt: