Pflanzenkontrolle mit dem Raspberry Pi

pflanzenKürzlich habe ich einen sehr günstigen Sensor in den weiten des Internets entdeckt, mit dem sich auf einfache Art und Weise die Bodenfeuchtigkeit von Pflanzen am Raspberry messen lässt. Nachdem das sofort bestellte Zehnerpack nach einigen Wochen aus Fernost bei mir eintraf, war ich erstaunt, wie einfach diese einzurichten sind. Dieser kurze Artikel beschreibt das Anschließen sowie das Auslesen dieser Sensoren.

 

Einleitung

Der Fühler dieser Sensoren ist eigentlich nichts anderes, als ein günstiger Widerstandsmesser. Die mitgelieferte Logik liefert als Ausgabe wahlweise ein analoges oder digitales Signal am entsprechenden PIN. Wählt man den digitalen Ausgang, wie in diesem Artikel beschrieben, kann über ein Poti die Empfindlichkeit geregelt werden, wann der Feuchtigkeitswert eine 1 oder eine 0 zurückgibt. Es wird allerdings darüber berichtet, dass die Kontakte sehr leicht korrodieren. Aber für knapp über einen Euro für dieses Set wollte ich es gerne selbst ausprobieren.

 

Anschließen

Das Anschließen verläuft dank der mitgelieferten Jumperkabel sehr einfach. Den PIN “VCC” versorgen wir mit 3,3V, GND mit GND der Himbeere und DO (Digital Out) verbinden wir mit einem freien GPIO-Port.

 

Auslesen auf dem Raspberry

Falls noch nicht geschehen, installieren wir der Einfachheit halber die Bibliothek “wiringPi“, was ich in diesem Beitrag ausführlich beschrieben habe. Anschließend definieren wir unseren GPIO-Port in der wiringPi-Zählweise als Eingangsport:

gpio mode 7 in

 

Dies können wir auch in der Datei “/etc/rc.local” hinterlegen, so dass dieser Port direkt beim Systemstart als eingehender Port initialisiert wird.

Nun können wir den Messzustand des Sensors einlesen mit

gpio read 7

 

Eine “0” bedeutet in unserem Fall, dass der Widerstand zwischen den Kontakten unendlich ist und es Zeit ist, die Pflanze zu gießen. Eine “1” zeigt einen Stromfluss an, die Erde scheint also noch feucht genug zu sein. Die Empfindlichkeit kann, wie bereits erwähnt, auch noch angepasst werden.

 

Integration in OpenHAB

Script auf dem OpenHAB-Server

Zunächst erstellen wir ein neues Script, welches mittels SSH eine Verbindung zum jeweiligen Raspberry aufbaut und den angegeben GPIO-Port ausliest. Dieses Script könnte beispielsweise so aussehen:

#!/bin/bash

#Pruefen, ob Suffix angegeben
if [ -z "$1" -o -z "$2" ] ;then
    echo "So geht das nicht"
    exit 1;
fi

#Prüfen, ob Host erreichbar
ping -c 1 192.168.1.$1 &> /dev/null
if [ "$?" != 0 ] ; then
        echo "Offline"
        exit 1;
fi

# Wert des Sensors auslesen
INPUT=$(/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.1.$1 "/usr/local/bin/gpio read $2")

# Wert ausgeben
echo $INPUT

 

Natürlich erlauben wir auch diesmal die Ausführung des neuen Scripts mit

chmod +x /scripts/pflanzen.sh

und übergeben den Besitz an den Nutzer “openhab“:

chown openhab: /scripts/pflanzen.sh

 

Items definieren

Nun definieren wir für jeden einzelnen Feuchtigkeitssensor ein seperates Item:

Number PFLANZE_1 "Pflanze 1 [%s]" <plant> { exec="<[/scripts/pflanzen.sh 239 7:180000:REGEX((.*?))]" }

 

Das Icon “plant.png” habe ich mir übrigens wieder über die Bildersuche einer bekannten Suchmaschine besorgt und in der Größe 32 * 32 Pixel in den Ordner “/usr/share/openhab/webapps/images/” gespeichert.

 

Einbindung in die Sitemap

Die Einbindung in die Sitemap ist ebenfalls mit einer Zeile pro Sensor getan:

Text item=PFLANZE_1 valuecolor=[1="red",0="green"] label="Pflanze 1  [MAP(pflanzen.map):%s]"

 

Wer gerne auf der Hauptseite gewarnt werden möchte, wenn eine Pflanze Wasser benötigt, könnte an entsprechender Stelle eine solche Zeile einbinden:

Text item=PFLANZE_1 valuecolor=[1="red",0="green"] label="Pflanze 1  [MAP(pflanzen.map):%s]" visibility=[PFLANZE_1==1]

 

Transform-Datei erstellen

Auf unserer Sitemap hätten wir gerne sprechende Zustände, da ich persönlich mit 1 und 0 wenig anfangen kann. Daher erstellen wir im Verzeichnis “/etc/openhab/configurations/transform” die neue Datei “pflanzen.map” mit folgendem Inhalt:

1=zu trocken
0=optimal
undefined=unbekannt
-=unbekannt

 

Und schon erscheinen unsere Pflanzen in der OpenHAB-Sitemap:

 

pflanzenopenhab