>> Go to the English version of this post
Regenwasser ist mittlerweile ein kostbares Gut. Im letzten Jahr haben wir eine 5.000 Liter Regenwasserzisterne von Rewatec bekommen. So etwas extra und nachträglich nur wegen des Regenwassers einbauen zu lassen, dürfte sich eher selten lohnen, da Aufwand und Kosten beträchtlich sind.

Beim Umbau unserer Terrasse stellten wir jedoch fest, dass die Ableitungen unserer Regenrinnen marode waren und der Bagger war ohnehin schon da, sodass die Zisterne mit geringem Aufwand umsetzbar war. In sie fließen nun die Niederschläge, die auf die 75 qm Südseite des Dachs fallen – sofern es überhaupt regnet …
Aus der Zisterne speisen wir unsere Gardena Sprinkler, die durch eine Renkforce Tauchpumpe (welche schon seit 5 7 Jahren ihren Dienst verrichtet) versorgt werden. Man will natürlich wissen, wie viel Wasser in der Zisterne ist, um danach die Bewässerung steuern zu können. Zudem benötigt die Tauchpumpe mindestens 8 cm Füllstand, damit sie nicht trocken läuft.
DIY-Lösungen meist unzuverlässig
Für die Wasserstandsmessung gibt es einige DIY-Ansätze, die aber oft eher schlecht als recht funktionieren. Ultraschallsensoren, die auf die Wasseroberfläche gerichtet sind, leiden nicht nur unter der feuchten Umgebung und fallen dann aus, sondern messen durch Reflexionen oft nicht korrekt. Gleiches gilt für optische TOF (Time of Flight) Sensoren. Kapazitive Fühler messen eher ungenau, da Verunreinigungen die Dielektrizitätskonstante des Wassers verändern. Ich habe damit auch experimentiert, bin aber schnell wieder davon abgekommen.

Kaskaden mit Reed-Relais und Widerständen und einem Schwimmer mit Magnet funktionieren gut und sind robust, lösen aber nur sehr grob auf. Für eine Zisterne, die ein Maximallevel von 1,05 Metern erreichen kann, ist das eher unbefriedigend.
Schwimmer mit Umlenkrollen und Seil an einem Potenziometer sind zu abenteuerlich.
Sehr genau sind hingegen Drucksensoren. Kleine Drucksensoren, wie sie in Blutdruckmessgeräten eingebaut sind, wären für die Anwendung ausreichend und sind recht preiswert. Allerdings berücksichtigt man damit nicht den veränderlichen Luftdruck, der auf die Wassersäule wirkt und man erhält keine genauen Messwerte, zudem verstopft der Schlauch zum Sensor gerne.
TL-136 Drucksensor als Lösung
Nicht ganz so preiswert, dafür aber robust und genau, sind piezoelektrische Drucksensoren, den TL-136 Flüssigkeitsstand-Messumformer. Diese haben in der Zuleitung auch ein kleines Rohr, das den Außendruck in die Messung in die Messung einfließen lässt. Diese Sensoren sind für verschiedene Füllhöhen für ungefähr 50 Euro erhältlich. Dafür erhält man ein massives Edelstahlgehäuse samt recht einfacher Ansteuerung. Der Sensor wird einfach auf den Grund der Zisterne oder des Tanks gelegt. Ich habe das 0-1 Meter Modell gewählt, da bei meiner Zisterne der Überlauf bereits bei 105 cm ist. Auch für die beliebten IBC-Container dürfte das 0-1 Meter Modell geeignet sein, lässt man diese ja nicht bis auf den letzten Zentimeter volllaufen.

Der Sensor wird mit 24 Volt versorgt und wandelt den Druck im Bereich 0-20 mA um. Daher muss man den Strom messen, um daraus Füllhöhe und später die Füllmenge zu berechnen. Es gibt günstige kleine Module, mit Transkonduktanzwandler, also der Umwandlung eines Stroms in eine Spannung. Man kann aber auch einfach einen Widerstand nehmen, an dem die abgefallene Spannung abgreift.

Mit einem 150 Ohm Widerstand kann man den Bereich bis 100 cm so abgreifen, dass daraus eine Spannung mit maximal 3,2 Volt wird – ideal für den ADC eines ESP8266 oder ESP32. Mit einem 27 kOhm Widerstand in Reihe zum Analogeingang des ESP, hat man einen zusätzlichen Schutz, da dieser maximal 3,3 Volt verträgt. Ich nutze noch immer sehr gerne die praktischen und preiswerten WeMos D1 Mini.

Für die 24 Volt des Sensors muss man auch nicht ein zusätzliches Netzteil bemühen. Ein Stepup-Konverter tut es hier auch und kann die 24 V aus dem 5 Volt Pin des ESP erzeugen. Den Step-Up-Konverter stellt man VOR dem Einbau auf die erforderlichen 24 V Ausgangsspannung ein.

Um herauszufinden, welche Spannung bei welchem Füllstand ausgegeben wird, habe ich ein 100 mm HT-Rohr mit einem Stopfen verstehen, mit Wasser befüllt, den Sensor unterschiedlich tief eingetaucht und die Spannung gemessen. Der hydrostatische Druck ist in einem solchen Rohr in gleicher Tiefe ebenso groß, wie in einer 5.000 Liter Zisterne.

Der ESPHome Code für die Wasserstandsmessung
Der Code für den ESPHome Sensor ist ziemlich selbsterklärend. Es wird der A0 Pin, also der Analog-Digital-Wandler ausgelesen. Beim ESP8266 wird hier übrigens nicht 0 – 3,3 Volt ausgegeben, sondern 0 – 1 V. Darum habe ich einen Filter mit – multiply: 3.3 eingebaut. Die id: levelraw ermöglicht, dass ich später auf den Füllstand in Zentimetern noch einmal in einer anderen Funktion zugreifen kann.
esphome:
name: waterking
platform: ESP8266
board: d1_mini
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
ota:
password: !secret ota password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Waterking Fallback Hotspot"
password: !secret fallback password
captive_portal:
sensor:
- platform: adc
pin: A0
name: "Wasserstandcm"
id: levelraw
update_interval: 2s
filters:
- multiply: 3.3
- sliding_window_moving_average:
window_size: 30
send_every: 30
- calibrate_linear:
- 0.61 -> 0.0
- 0.76 -> 0.075
- 0.8 -> 0.09
- 0.81 -> 0.1
- 0.8411 -> 0.12
- 0.99 -> 0.172
- 1.04 -> 0.22
- 1.2 -> 0.25
- 1.8 -> 0.5
- 2.4 -> 0.75
- 2.66 -> 0.9
- 2.983 -> 1.0
- 3.2 -> 1.19
- multiply: 100
accuracy_decimals: 1
unit_of_measurement: cm
icon: "mdi:car-coolant-level"
- platform: adc
pin: A0
name: "Zisterne Volt"
update_interval: 5s
filters:
- multiply: 3.3
- median:
window_size: 7
send_every: 4
send_first_at: 3
- platform: template
name: "Zisterne Liter"
lambda: |-
return id(levelraw).state;
filters:
- calibrate_linear:
- 4 -> 80
- 10 -> 200
- 12.5 -> 300
- 15 -> 400
- 17.5 -> 500
- 20 -> 600
- 25 -> 850
- 27.5 -> 1000
- 40 -> 1700
- 45 -> 2000
- 60 -> 3000
- 70 -> 3600
- 80 -> 4000
- 85 -> 4400
- 90 -> 4700
- 95 -> 4900
- 100 -> 5100
unit_of_measurement: l
accuracy_decimals: 0
- platform: template
name: "Idraw"
lambda: |-
return id(levelraw).state;
Code-Sprache: YAML (yaml)
Der Median glättet die Werte, da das Signal etwas rauscht. Warum habe ich noch nicht herausgefunden. Die Spannungsversorung des Step-Up-Wandlers ist stabil. Allerdings bewegt sich das Rauschen im Bereich von 0,5 cm Füllhöhe, was vernachlässigbar ist. Die Genauigkeit des Sensors selbst ist mit 0,2 – 0,5 % FS angegeben. Bei einer Füllhöhe von 0 – 1 Meter sind die 0,5 cm Rauschen genau 0,5 % …
[Update] Ein 1 uF Kondensator zwischen Masse und A0 schafft etwas Abhillfe gegen das Rauschen und ist im Schaltplan berücksichtigt.
[Update 2] Der A/D-Wandler des ESP8266 ist nicht für solche Messungen geeignet und arbeitet auch nicht linear. Das sagen auch die Datenblätter von Espressif. Darum habe ich jetzt einen ADS1115 AD-Wandler im Einsatz und damit ist das Rauschen weg. Allerdings muss ich die Werte neu erfassen und die Zisterne ist gerade voll. Ein Update dazu kommt demnächst.
Der calibrate_linear Filter wandelt die Spannung in die tatsächliche Füllhöhe um, denn der Sensor arbeitet nicht völlig linear. Ich habe die ersten Werte mit meinem Testaufbau ermittelt und korrigiere nun nach und nach mit den Werten aus der Zisterne. Der – multiply: 100 Filter sorgt dafür, dass die Ausgabe in Zentimetern erfolgt.

Ich frage den ADC dann ein weiteres Mal ab, um eine Ausgabe in Volt zu erhalten, mit der ich nach und nach den Linear-Filter mit den echten Füllständen korrigieren kann.
Die zweite Funktion startet mit – platform: template
Hier hole ich mir mit return id(levelraw).state; den Wert in Zentimetern, um ihn dann mit einem weiteren – calibrate_linear Filter auf den Füllstand in Litern umzurechnen.
- Mehrschichtiger wasserdichter Schutz IP68, 45-Grad-Schrägwinkel-Anti-Schock, abnehmbarer Anti-Blocking-Schutz.
- Eingangspegelgeber, hochpräzise Diffusion von Silizium, genauere Überwachung des Wasserstandes.
- Das gemessene Medium ist Wasser, Öl und andere Flüssigkeiten, die Edelstahl nicht angreifen.
- Es handelt sich hierbei um ein Step-UP, Spannungsregler Aufwärtswandler oder Boost-Converter.
- Die Ausgangsspannung ist nach dem Umwandlung immer größer als die Eingangsspannung.
- Die Platine wandelt Spannungen von 3V-32V, einstellbar an dem Potentiometer in 5V – 35V Volt um.
- batteriebetriebene füllstandanzeige
- misst füllstände von wassertanks wie regenwasser, klärkammern oder gülletanks
- anzeige erfolgt nach knopfdruck über 10 led’s
- BREITER AUSGANGSVOLATFE-BEREICH – Der Strom-Spannungs-Wandler hat einen weiten Versorgungsspannungsbereich und die Ausgangsspannung unterstützt mehrere Bereiche
- EINSTELLBAR – Der Strom-Spannungs-Wandler verwendet eine ausgeklügelte Produktionstechnologie, der 0-Punkt und der Vollbereich können selbst eingestellt werden
- KUNSTSTOFFMATERIAL – Das Konvertermodul besteht aus hochwertigem Kunststoff und hat eine hohe Stabilität, gute Linearität und Industriequalität
Füllhöhe mit Füllstandskurve in Volumen umrechnen
Meine Rewatec-Zisterne hat ja eine recht komplexe Form, sodass die Füllstände in Litern über die Füllhöhe nicht linear sind. Rewatec schickte mir auf Anfrage eine Füllstandskurve. Damit lässt sich der Füllstand in Abhängigkeit der Füllhöhe umrechnen. Wie zuvor erwähnt: Bei 5.000 Litern ist es egal, ob da 20 Liter mehr oder weniger angezeigt werden. Der Rest ist nur eine Hilfsfunktion, die man weglassen kann.

Momentan ist es auch bei uns sehr trocken, sodass sich der Wasserstand in der Zisterne auf einem sehr niedrigen Level von 10 – 25 Zentimetern und damit 150 – 1000 Litern bewegt.

Man sieht jedoch wunderbar Zu- und Abflüsse und kann damit auch feststellen, wie viel Liter etwa 5 Minuten Rasenbewässerung sind. In unserem Fall kommen wir auf etwa 150 Liter pro Bewässerung. Ebenso erkennt man Regenfälle und damit den recht schnellen Anstieg des Levels ausgezeichnet.

Da wir auch noch zwei eingelassene und verbundene Regentonnen mit jeweils 1.500 Litern haben, werde ich hier demnächst auch noch einen Sensor einbauen.

Insgesamt ist die Lösung mit den TL-136 Flüssigkeitsstand-Messumformer eine einfache und hinreichend genaue Lösung für die Messung von Füllständen. Die Sensoren sind robust und einfach anzusteuern. Mit den Linear-Filtern der ESPHome-Plattform lassen sie sich einfach korrigieren, sodass eine Genauigkeit im Bereich von 1 % möglich ist. Für die Anwendung in Regenwassertonnen und Zisternen ist das mehr als ausreichend.

Mit den gewonnenen Werten kann man die Bewässerungsdauer dynamisch steuern, also etwa die Bewässerungszeit verkürzen, wenn nur noch wenig Wasser in der Zisterne ist.
Update 2023 – zuverlässiger und genauer messen
Wie letztes Jahr angekündigt, habe ich den Wasserstandsensor optimiert. Das Problem beim ursprünglichen Projekt war der schlechte ADC des ESP8266, der sehr stark rauscht. Zudem war die Schaltung mit dem einfachen Messwiderstand nicht besonders sicher, was auch hier in den Kommentaren richtigerweise angemerkt wurde. Wegen der Wintersaison und anderen Projekten, hat es mit dem Update etwas länger gedauert, als geplant.
Wie bereits beschrieben, habe ich nun einen ADS1115 4-fach ADC im Einsatz. Man benötigt nur einen der 4 Kanäle des ADS1115, hat also noch 3 ADC für andere Aufgaben übrig.
Nach einigen Tests habe ich mich auch für den günstigen Stromwandler / Messwertumformer entschieden. Dieses kleine Modul hat nicht nur den Vorteil, dass der Eingang des ADS1115 nie mehr als 3,3 Volt sieht. Dazu entfernt man alle Jumper auf dem Modul. Außerdem kann man den Nullpunkt (Sensor nicht eingetaucht) und die maximale Ausgangsspannung einstellen. So lässt sich der Messbereich maximieren, auch wenn man etwa bei einem 0-1 Meter Sensor nur bis maximal 70 cm messen muss. Ich habe die Klemmen ausgelötet, damit ich das Modul auf meine Streifenrasterplatine löten kann.

Nach einem Hinweis in den Kommentaren musste ich mein Wissen über 4-20 mA Stromschleifen wieder auffrischen (das ist dann doch schon knapp 30 Jahre her und ich hatte das nicht mehr parat): Diese Stromschleifen sind sehr robust gegen Störungen und können 100 m und mehr lang sein. So kann man den TL136 Sensor bis ins Haus verlängern, wo die zugehörige Elektronik im Warmen und Trockenen montiert ist
Die Beschaltung ist denkbar einfach. Der ADS1115 wird per I2C-Bus an den Wemos angebunden, der Ausgang des Messwertumformers kommt an einen Eingang (bei mir ADC0) des ADS1115.

Mit dem im Schaltplan „Zero“ bezeichneten Trimmer, stellt man die Ausgangsspannung des Moduls (grünes Kabel im Plan) auf nahe 0 Volt ein, wenn der Sensor nicht eingetaucht ist. Nun taucht man den TL136-Sensor bis zur maximalen Tiefe bei maximalem Füllstand ein und stellt mit dem „Span“ Trimmer die Spannung am Ausgang (grünes Kabel im Plan) auf knapp 3,3 Volt ein. Damit hat man den möglichen Messbereich optimal ausgenutzt und erhält somit die maximale Auflösung.
Ich habe wieder eine Messreihe mit 10 cm Schritten gemacht und die entsprechenden Spannungen notiert. Daraus wird, wie vorher auch, erst die Füllhöhe in Zentimetern errechnet und von dieser wieder die Füllmenge nach dem vorliegenden Fülldiagramm des Herstellers.
Dank des Messwertumformers und des ADS1115 wird man mit einer sehr präzisen (wenngleich für die Anwendung schon übertriebenen Genauigkeit) und rauschfreien Messung belohnt. Das Restrauschen beträgt maximal 0,1 % und entspricht damit der Toleranz des TL136 Sensors.
Hier ein Vergleich der alten Methode mit der neuen, was wohl für sich spricht:


Stark hineingezoomt sieht man, dass die Abweichung nun nur noch +- 1mm beträgt:

Die übrigen ADC-Kanäle des ADS1115 kann man z. B. für einfache Bodenfeuchtesensoren etc. nutzen.
Da ohnehin noch GPIOs am Wemos frei waren, habe ich auch noch einen Eingang für 1-Wire-Sensoren vorgesehen. Mit den günstigen DS18B20 Temperatursensoren kann man z. B. die Bodentemperatur, Termperatur im Gerätehaus oder die Wassertemperatur der Zisterne erfassen. Mehrere dieser 1-Wire-Sensoren lassen sich parallel an einem Eingang betreiben.

Stückliste:
- 1x Wemos Mini Pro (natürlich gehen auch ESP32 NodeMCU usw., dann aber mit anderen Pins)
- 1x Step-Up (Boost-) Konverter Typ XL6009 oder LM2596
- 1x ADS1115 ADC-Modul
- 1x 4-20mA Messwertumformer
- 1x TL136 Sensor mit der benötigten Maximalfüllhöhe
Der neue Code mit ADS1115 und 1-Wire (die 1-Wire-Beschaltung ist aber im Schaltplan nicht enthalten – das schafft ihr selbst, wenn ihr es benötigt 😉 !) sieht bei mir so aus:
esphome:
name: zisterne
platform: ESP8266
board: d1_mini
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
ota:
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
use_address: zisterne.local
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Waterking Fallback Hotspot"
password: !secret fallback_password
captive_portal:
# i2c Bus auf D1 und D2 konfigurieren
i2c:
id: bus_a
sda: D2
scl: D1
scan: True
# 1-Wire-Sensoren am Pin D4
dallas:
- pin: D4
# ADC einrichten, ADDR-Pin ist auf VCC gelegt, daher Adresse 0x49
ads1115:
- address: 0x49
id: ads1115_49
# ADC Kanal A0 zur Messwerterfassung
sensor:
- platform: ads1115
multiplexer: 'A0_GND'
gain: 4.096
name: "Wasserstand Zisterne cm"
id: levelraw
update_interval: 2s
unit_of_measurement: cm
accuracy_decimals: 1
icon: "mdi:car-coolant-level"
# Messwerte glätten:
filters:
- sliding_window_moving_average:
window_size: 20
send_every: 20
# Spannungen nach Messreihe in Füllhöhe umrechnen
- calibrate_linear:
- 0.0 -> 0.0
- 0.3 -> 10
- 0.69 -> 20
- 1.0 -> 30
- 1.35 -> 40
- 1.75 -> 50
- 2.03 -> 60
- 2.42 -> 70
- 2.7 -> 80
- 3.1 -> 90
# Füllmenge nach Füllstandskurve berechnen
- platform: template
name: "Zisterne Liter"
lambda: |-
return id(levelraw).state;
filters:
- calibrate_linear:
- 4 -> 80
- 10 -> 200
- 12.5 -> 300
- 15 -> 400
- 17.5 -> 500
- 20 -> 600
- 25 -> 850
- 27.5 -> 1000
- 40 -> 1700
- 45 -> 2000
- 60 -> 3000
- 70 -> 3600
- 80 -> 4000
- 85 -> 4400
- 90 -> 4700
- 95.5 -> 4980
unit_of_measurement: l
accuracy_decimals: 0
# 1-Wire Temperatursensor
- platform: dallas
address: 0xef0516905a21ff28
name: "Zisterne Sens1"
unit_of_measurement: °C
accuracy_decimals: 1
Code-Sprache: YAML (yaml)
Wer will, kann über den I2C-Bus oder die Wemos SPI-Bus Pins D5, D6 und D7 auch noch ein Display zur Anzeige des Wasserstands, der Temperatur etc. anbinden. Hier bieten sich ein LC-Display vom Typ 1602/HD44780 oder ein MAX7219 7-Segment-Display an. Letzteres habe ich auch in meiner Bewässerungssteuerung „Waterking“ im Einsatz, die auch bereits den Wasserstand der Zisterne anzeigt.
Letzte Aktualisierung am 12.07.2025 / Affiliate Links / Bilder von der Amazon Product Advertising API
Schreibe einen Kommentar