Bodenfeuchte messen mit dem Capacitive Soil Moisture Sensor v2.0
Heute will ich euch zeigen wie ihr einen Sensor zur Bodenfeuchtigkeitsmessung an einem, mit Tasmota geflashten Node MCU ESP 8266 anschließt, ihn konfiguriert und im ioBroker weiter verwendet.
Voraussetzungen
Ich will die Bodenfeuchtigkeit in meinem Garten ermitteln um meine Gießautomatik (siehe Kapitel F3) zu optimieren.
Da der Sensor im Garten fern ab der Stromversorgung seinen Dienst tun soll muss er mittels einer Batterie oder Akkus versorgt werden. Dies stellt mich vor die erste Herausforderung. Würde ich den ESP einfach an eine Batterie anschließen und dieser würde ständig Daten erfassen und ins WLAN-Netz senden, wäre die Batterie vermutlich nach nicht einmal 3 Tagen am Ende. Ich brauche also eine Lösung, die da lautet Deep Sleep. Das heißt, ich kann den ESP für eine Zeit einschlafen lassen und erst für eine kurze Messung aufwecken. In der Schlafphase erfasst der ESP weder Daten noch sendet er sein WLAN-Signal. Es wird also nur ein minimaler Strombedarf benötigt.
Da die Bodenfeuchte sich nur sehr langsam verändert würden drei Messungen täglich genügen. Der ESP bräuchte somit nur dreimal am Tag für ca. 30 Sekunden arbeiten, was sehr wenig Energie verbraucht und meine Batterie entsprechend lange hält. Ich hoffe auf ein halbes Jahr.
Die Schaltung
Ich muss meinen ESP mit einigen zusätzlichen Bauteilen beschalten. Eine LED soll anzeigen zu welchem Zeitpunkt der ESP arbeitet und somit ansprechbar ist. Denn ist er im Tiefschlaf kann ich nicht mehr auf den ESP zugreifen und die Einstellungen verändern. Ich muss also immer warten bis er auch sendet. Um dennoch auf ihn zuzugreifen kann ich ihn neu booten (kurz vom Strom trennen). Dann ist er zunächst wach. Nun schnell den Schalter schließen und einen Masseschluß nach D5 herstellen. Damit bleibt der ESP im Wach-Modus solange der Schalter geschlossen bleibt und ich kann ihn in aller Ruhe konfigurieren.
Ich baue also folgende Schaltung auf.
Um die Schaltung zu testen empfehle ich sie zunächst auf einem Steckbrett aufzubauen, was dann in etwa so aussehen könnte. Den Schalter lasse ich weg, da der ESP auch über die Konsole in den Wachzustand versetzt werden kann, wie ich weiter unten beschreibe.
Damit kann ich nun arbeiten und konfigurieren bis alles nach meinen Wünschen läuft.
Die Konfiguration
Da der Node MCU ESP 8266 bereits mit Tasmota geflasht wurde kann ich mit der Konfiguration weiter machen (sonst siehe C4a).
Nachdem ich die IP des ESP in meinem Router gefunden und fixiert habe, rufe ich dies im Internetexplorer auf.
Unter Einstellungen gelange ich in die Gerätekonfiguration.
Gerät konfigurieren lässt mich die GPIO-Schnittstellen einstellen. Was dann entsprechend meiner Schaltung wie folgt aussieht.
Unter Logging konfigurieren stelle ich die Telemetriezeit ein. Diese wähle ich mit 30 Sekunden, was ausreicht um die WLAN-Verbindung aufzubauen und den Sensor abzufragen.
30 Sekunden ermöglicht auch die Einschlafzeit (Deep Sleep Time) ggf. auf Null zu setzen damit ich den ESP konfigurieren kann. Was ich unter Deep Sleep noch näher beschreibe.
Zurück im Hauptmenü zeigt mir nun oben eine Zahl. Es handelt sich hierbei um keinen speziellen Messwert. Lediglich eine Größe die der Sensor im trockenen Zustand liefert. Was ich noch benötige ist der Wert, den der Sensor im feuchten Zustand maximal liefert. Dazu tauche ich den Sensor bis zur Markierung in ein Glas mit Wasser. Nun wird ein geringerer Wert angezeigt. Ich weiß damit was der Sensor meldet wenn er im trockenen liegt und was er bei 100% Feuchtigkeit liefert. Meine Bodenfeuchte wird wohl irgendwie dazwischen liegen. Zur weiteren Verarbeitung der Werte später mehr.
Deep Sleep
Bisher kann ich den Sensor in irgendeiner Form auslesen. Aber er soll wie oben erwähnt sich auch schlafen legen können. Dazu wechsle ich im Hauptmenü auf die Konsole. Und gebe in die Befehlszeile das Wort: “deepsleeptime“ ohne Leerzeichen ein und es wird mir nach Bestätigung mit ENTER die aktuelle DeepSleepTime von “0“ angezeigt. Mein ESP schläft also nie.
Im nächsten Schritt gebe ich “deepsleeptime 120“ ein und sie da, der Wert 120 wird nach ENTER übernommen. Wenn ich nun meinen ESP beobachte erlischt die LED nach ca. 30 Sekunden und bleibt für ca. 100 Sekunden aus. Die Laufzeit eines Durchgangs beträgt somit ca. 2 Minuten und kann etwas variieren.
Damit ist der Deep Sleep Modus eingerichtet. Ich möchte meine Messung jedoch nur dreimal am Tag vornehmen. Also etwa alle 8 Stunden soll eine Messung erfolgen. Demzufolge muss ich 8×3600 = 28800 eingeben.
ESP aufwecken.
Aber was ist, wenn ich die Konfiguration ändern möchte? Muss ich dann immer warten bis der ESP aufwacht? Natürlich nicht. Ich boote ihn neu (Strom trennen/schließen), dann ist er zunächst aktiv. In dieser kurzen Zeit kann ich den Schalter schalten oder schnell auf die Konsole wechseln und “deepsleeptime 0“ eingeben und mit ENTER bestätigen. Hat er den Befehl erkannt zeigt die Konsole dies im oberen Fenster und der ESP bleibt dauerhaft wach. Da ich meinen ESP für 30 Sekunde wach halte reicht die Zeit für gewöhnlich aus. Sonst bereite ich beim ersten Durchgang die Konsole mit deepsleep 0 vor und boote neu. Jetzt ein wenig warten und mit ENTER bestätigen. Den Schalter habe ich mir gespart. Probiert selbst was euch besser gefällt.
Im ioBroker
Werte verarbeiten.
Nun ist es etwas unhandlich mit den Werten des Sensors zu arbeiten, deshalb erstelle ich mir in Blockly ein kleines Skript, welches mir den Wert als Prozentwert darstellt. Zwar ist dies nicht der tatsächliche Wert der Bodenfeuchte gemäß irgendwelchen Richtlinien, aber es erlaubt mir eine leicht verständliche Übersicht.
Achtung! Die Werte variieren von Sensor zu Sensor und sind bei jedem Sensor neu zu erstellen.
Zunächst muss ich die Differenz zwischen den Unteren Wert (UW) und den Oberen Wert (OW) der Sensoranzeige bilden.
OW-UW = (ich runde die Werte) also 740 – 290 = 450.
Um den 1%-Schritte (p) zu ermittel teile ich durch 100.
450 / 100 = 4,5.
Im Nächsten Schritt lege ich eine Variable “MW“ fest, die den eigentlich zu verarbeitenden Messwert (MW) darstellt und aus dem OW – Anzeigewert (AZ) besteht. Dabei ist AZ = der Wert den der Sensor augenblicklich ermittelt.
740 – AZ = MW.
Nun muss ich eine weitere Variable “PW“ erstellen in die ich den Prozentwert (PW) schreibe. Dieser errechnet sich aus MW / p.
MW / 4,5 = PW.
Dabei bedeutet 1% = trocken und 100% absolute Nässe.
Den PW runde ich in der Variablen “rund“ um nicht ewig viele Nachkommastellen angezeigt zu bekommen.
Und zu guter letzt gebe ich die Variable „rund“ an den von mir erzeugten Datenpunkt (siehe Kapitel T7) “Test_A“.
Das Blockly-Skript
Dies will ich nun in einem kleinen Blockly Skript verarbeiten.
Das Ergebnis lasse ich mir in einen von mir erstellten Datenpunkt (Feuchtsens1) übertragen, den ich dann später in VIS weiter verarbeiten kann. Wie ihr einen Datenpunkt erzeugt habe ich in Kapitel T7 beschrieben.
So verhält sich dann mein Datenpunkt unter Objekte wenn der Sensor trocken ist und wenn er ins Wasserglas getaucht wird.
Zum Test setze ich meinen Feuchtesensor gleich einmal in einem Blumentopf ein.
Damit muss ich nur noch den Wert beobachten und weiß wann ich meine Pflanze gießen sollte. Oder, wenn ich ein Bewässerungssystem habe bekommt dieses die Daten für dei Bewässerung.
Ein kleiner Tipp am Rande.
Der Sensor ist zwar mit einer Lackschicht überzogen und somit bis zur Einstecktiefe vor Feuchtigkeit geschützt, jedoch weisen die Kanten eine Schwachstelle auf. Da die Sensoren in großer Stückzahl auf einer Platine hergestellt und nachträglich ausgestanzt werden sind die Ränder i.d.R. nicht mit einer Lackierung versehen. Hier kann im Laufe der Zeit Feuchtigkeit über die Platine eindringen. Um die Lebensdauer zu erhöhen kann ich nur empfehlen hier etwas nachzubessern. Nagellack von der Frau / Freundin sind hier schon mal ein guter Ansatz.
Empfehlen kann ich auch die Elektronik im oberen Bereich vor Wasser zu schützen. Das obere Ende mit der Elektronik mit Heißkleber zu ummanteln könnte hier ein guter Schutz sein.
Nicht nur euer Sensor braucht Schutz, auch der ESP und die Batterie / Akku. Ein Wetterfestes Gehäuse mit entsprechender Abdichtung ist im Außenbereich unerlässlich.
Somit ist mein Sensor bestens für den Außendienst präpariert.
Hier ist jedoch die Kreativität jedes einzelnen gefragt wie er seine Elektronik und den Sensor vor der Witterung schützen will. Auch kommt es auf den jeweiligen Einsatz an wie groß der Schutz ausfallen muss. Im Haus für die Überwachung eines Blumentopfes kann ich sicher weniger aufwendig arbeiten als im Garten bei Wind und Wetter.