Bodenfeuchtesensor für Homematic IP bauen und nutzen (Teil 2, Schaltung)

Im zweiten Teil des Baus eines Bodenfeuchtesensors wird der Schaltplan erstellt, um die gefunden Hardwarekomponenten miteinander sinnvol zu verbinden. Im dritten Teil erfolgt dann die finale Konfiguration der Software zur automatisierten Datenübertragung.

Stromverbrauch und Laufzeit optimieren

Normalerweise benötigt ein D1 Mini ca. 70mA in Normalbetrieb im DeepSleep Modus ca. 0,17 mA. Der Sensor Truebner SMT50 braucht ca. 2,7mA.

Mit der Formel "ah(Akku) / a(Vebraucher) x 60" ergibt sich somit eine rechnerische Laufzeit mit einem Akku von ca. 46,5 Stunden, was sich auch mit meinen Messungen bestätigt hat.

Der D1 Mini mit dem Feuchtigkeitssensor funktionierte bei mir mit einer 3400 mAh Akku fast genau 2 Tage (ca. 46 Stunden). Dann stieg der Feuchtigkeitssensor aus, indem er keine Werte mehr lieferte. Der D1 hielt i.d.R. noch ein paar Stunden durch, aber das war ohne Messwerte irrelevant. Ich habe dabei die Messwerte ununterbrochen an den MQTT-Server sowie jede Minute ein Update an die CCU geschickt.

In der Praxis benötige ich allerdings maximal einen Messwert jede Stunde. Hieraus ergibt sich der Bedarf, den D1 Mini in der Zwischenzeit schlafen zu legen, um Strom zu sparen und damit die Laufzeit drastisch zu verlängern. Dazu kann man den DeepSleep Modus des D1 Mini verwenden.

DeepSleep Modus des D1 Mini

Der DeepSleep Modus des D1 Mini macht es möglich, den ESP für eine definierte Zeitspanne einfach zu deaktivieren und erst für die Messung und Datenübermittlung aufwachen zu lassen.

Im DeepSleepModus würde der D1 Mini nur noch 0,17 mA benötigen. Wenn ich ihn dann für ca. 60-70 Sekunden anlasse, um die Daten sicher an den MQTT Broker und die CCU zu übermitteln, würde sich eine theoretische Laufzeit von ca. 115 Tagen ergeben.

Um diese Funktion nutzen zu können, müssen die PINs D0 und RST miteinander verbunden werden.

Nun kann der D1 Mini durch den folgenden Befehl in einen Tiefschlaf für eine definierte Zeit  versetzt werden:

"DeepSleepTime <>"

Normalerweise sind nur bis zu 71 Minuten Schlafenszeit möglich, aber die Tasmota Firmware kann diese Grenzen durch kurze Aufwachzyklen (ohne  Programmausführung) auf bis zu 1 Tag verlängern. Details hierzu findet man z.B. unter diesem Tasmota Link.

Die Zeit, die der D1 Mini im DeepSleep Modus wach bleibt wird durch die Telemetry period  bestimmt, die in der WebUI unter "Configuration / Configure Logging" eingestellt werden kann.

Um aus dem Deepsleep herauszukommen (z.B. für Wartung, etc.) gibt es mehrere Möglichkeiten:

  • Warten bis die Schlafenszeit verstrichen ist und dann in der Console den Befehl DeepSleepTime 0 eingeben
  • Einbauen eines manuellen Schalters, der den DeepSleep unterbrechen kann. Die Schaltung hierzu ist ebenfalls unter dem Tasmota Link zu finden.
  • D1 Mini kurz resetten und nach dem Neustart wieder DeepSleepTime 0 eingeben

In der Praxis ist die Variante 2 am einfachsten umzusetzen. Hierzu konfiguriere ich den GPIO 7 einfach als "DeepSleep" und verbinde diesen anschließend mit GND. Nun bleibt der D1 Mini beim nächsten Aufwachen im aufgewachten Zustand, bis ich die GND Verbindung wieder löse (dies kann man auch über einen Schalter realisieren).

Abschalten des Feuchtigkeitssensors, wenn der D1 Mini im Schlafmodus ist

Normalerweise ist der Feuchtigkeitssensor direkt mit der Stromversorgung (Batterie) verbunden. Dies ist allerdings ungünstig, denn dieser zieht natürlich unabhängig vom D1 Mini permanent Strom aus dem Akku, obwohl der D1 Mini gar keine Werte empfangen kann. Daher muss erreicht werden, dass der Sensor erst dann mit Strom versorgt wird, wenn auch der D1 Mini aktiv ist.

Dies kann man einfach durch die Konfiguration eines GPIO Ports als Relay erreichen. Das Relay wird immer dann eingeschaltet, wenn der D1 mini aufwacht und liefert über diesen idealwerweise auch 3,3 Volt Spannung für ein weiteres Gerät. Bei mir ist dazu der GPIO Kanal 8 als Relay 1 definiert, an den ich nun den Pluspol des Sensors anschließe (Achtung, nicht alle GPIO Kanäle übertragen auch eine Spannung).

Leider wird bei einem Neustart der Eingang immer auf OFF gestellt, so dass ich hierzu später eine kleine Rule definiere, die den D1-Anschluss beim Start des D1 automatisch auf ON setzt (Siehe Teil 3). (Dies kann man wohl auch durch das Einschalten des Relay und der anschließenden Eingabe von "PowerPnState 4" erreichen, ich habe das aber nicht verifiziert und die Rule Lösung scheint mir sicherer). Man kann den Schalter auf der ersten Seite der Tasmota WebUI für die ersten Tests aber auch manuell aktivieren.

Nun liefert der Ausgang D8 immer nur dann Strom, wenn der D1 Mini eingeschaltet ist, so dass der Sensor ansonsten keine Leistung mehr verbraucht.

AD-Wandler anschließen

Da ich aufgrund des SMT50 Sensors zwei analoge Eingänge benötige, verwende ich den ADS1115 als AD-Wandler. Der Anschluss des AD-Wandlers ist recht simpel. Im Prinzip werden nur die beiden digitalen Ausgangsports des ADS1115 mit 2 digitalen Eingangsports des D1 Minis verbunden. Auf dem ADS2115 schließe ich an den Eingängen A0 und A1 die Bodenfeuchte- und Bodentemperaturssensoren, an den digitalen Ausgängen SDA und SDC führe ich diese auf die Ports D2 und D3 auf dem D1. Mini.

Der ADS1115 benötigt allerdings ebenso wie der Sensor Strom (3,3V). Dabei nutze ich auch hier jetzt die stromsparende Möglichkeit, den AD Wandler nur dann mit Strom zu versorgen, wenn der D1 Mini aufwacht. Dies erreiche ich - wie bereits oben beschrieben - durch ein Versorgung über den als Relais definiert D8 Port, der damit sowohl den Feuchtesensor als auch den AD-Wandler automatisch einschaltet.

Zusammenfassende Hardwarekonfiguration

Die eigentlich Verschaltung der Hardwarekomponenten ist recht simpel. Im folgenden Schaubild ist diese für den SMT50 Sensor dargestellt.

Im Configuration Menü von Tasmota stelle ich für diesen Schaltplan die GPIO-Ports des D1 Mini auf folgende Werte ein:

Das Ganze sollte man zuerst auf einem Breadboard zusammenstellen, um die Funktionsweise zu testen. Für erste Tests habe ich hierzu die DeepSleepTime auf 10 Minuten eingestellt (600 Sekunden). Wenn man einen MQTT Server angegeben hat, kann man in der Console wunderbar beobachten, wie das Ganze System funktioniert.Nach der weiteren Softwarekonfiguration (siehe Teil 3) habe ich die Schaltung anschließend auf eine Entwicklerplatine gelötet. Dazu empfehle ich, sowohl D1 Mini als auch ADS1115 auf Stiftleisten zu setzen und die Kabel des SMT50 über z.B. Schraubklemmen mit der Platine zu verbinden, so dass man alle Komponenten im Falle eines Defektes später ohne Aufwand austauschen kann.

Das Ergebnis kann dann in dem von mir vorgeschlagenen wasserdichten Spelsberg Gehäuse untergebracht und im Garten platziert werden.