Füllstandssensor (Zisterne) für HMIP selber bauen
Spätestens im Sommer bin ich immer wieder überrascht, wie schnell meine Zisterne leer ist. Dabei hat es doch vor wenigen Tagen noch geregnet. Beim Blick in die Zisterne fällt dann auf, dass die Blütenpollen oder der Saharastaub wieder den Filter zugesetzt haben, so dass ich diesen kurz reinigen muss.
Daher habe ich mich mit der Frage beschäftigt, wie ich ohne zu großen Kosten- und Installationasaufwand, den Füllstand einer Zisterne ermitteln und die Daten an eine CCU3 übermitteln kann.
Aufgabenstellung
Mir schwebt ein Sensor vor, der einfach installiert und kalibiriert werden kann. Dabei möchte ich so exakt wie möglich die Höhe des Wasserstandes in einer Zisterne ermitteln und die Daten per WLAN an eine CCU sowie einen MQTT Broker schicken. Aus den ermittelten Daten möchte ich die genaue Füllmenge in Litern sowohl als Wert als auch als Grafik anzeigen.
Lösungsfindung
Die Marktrecherche bzgl. Füllstandmesser war zwar erfolgreich, aber die angebotenen Lösungen teilweise richtig teuer. Da ich kein industrieller Anwender bin und mir ein kleines Steuergerät mit ein paar LEDs nicht ein paar Hundert Euro Wert sind (wahrscheinlich hätte ich auch gar nicht mehr durch die Tanköffnung gepasst), habe ich nach einem einfachen und robusten Sensor gesucht, der wie meine Bodenfeuchtesensoren einfach an einen D1 Mini angeschlossen werden können.
Bei der weiteren Recherche bin ich für die Nutzung mit einem D1 Mini immer wieder auf den SR04 Ultraschall Modul Entfernungsmesser gestoßen:
Der Sensor ist extrem günstig, einfach anzuschließen und soll relativ genaue Werte liefern. Allerdings hat er einen entscheidenden Nachteil: Die Platine mit dem Sensor ist nicht gegen Feuchtigkeit geschützt. Da es in einer Zisterne grundsätzlich naß ist und viel Kondenswasser durch die hohen Temperaturunterschiede zwischen außen und innen existieren ist die Wahrscheinlichkeit sehr hoch, dass die Platine nicht nur feucht sondern naß wird. Ebenso berichtete ein Nutzer im Netz, dass sich auf dem Drahtgitter des Sensors Kondenwasser absetzt, was eine Messung unmöglich machte. Den Sensor mit Heißkleber oder anderen Lacken zu schützen, halte ich für zu aufwendig und unsicher, wie auch andere Berichte aufzeigen.
Daher habe ich mich für den großen Bruder dieses Sensor den JSN-SR04T entschieden.
Der Sensor ist wasserdicht und trennt den geschützten Sensor von der Platine durch ein ca. 2 Meter langes 2-poliges Kabel. Damit kann ich diesen Sensor in einer feuchten Umgebung wie einer Zisterne installieren und die Elektronik außerhalb der Zisterne in einem Verteilergehäuse mit dem D1 Mini und dem Akku installieren. Den Sensor kann ich für die Messung mit 3 Volt versorgen.
Schaltung und Software
Für die Übermittlung von Daten an einen MQTT-Broker sowie eine CCU greife ich auf die bereits erläuterte Lösung mit einem D1 Mini sowie der Tasmota Firmware zurück: Bodenfeuchtesensor für Homematic IP bauen und nutzen (Teil 1, Grundlagen). Wichtig ist, die Tasmota_Sensors.bin zu verwenden.
Die beiden Kanäle des Sensors Sr04 Ech/RX und SR04 Tri/X werden auf zwei GPIOs des WEMOS gelegt, bei mir auf GPIO 5 (RX) und GPIO 6 (TX).
ACHTUNG: Bei meinem Sensor waren die beiden Kanäle entgegen der Beschriftung auf der Platine vertauscht.
Der Anschluss des Sensors ist widerum sehr einfach. Hierfür sind nur zwei digitale Kanäle des D1 Mini erforderlich, um die Daten zu empfangen. Ebenso versorge ich die Sensorplatine nur mit Strom, wenn der Sensor aus dem DeepSleep aufwacht. Hierzu verwende ich wieder den GPIO 8, der in Tasmota als Relay definiert wird und die Spannung bereitstellt.
In Tasmota erfolgt die Konfiguration wie folgt:
Ich lasse den Sensor ein Mal pro Stunde aufwachen (DeepSleepTime 3600) und dann folgende Programme ausführen:
Rule1 on Power1#Boot do Power ON endon // Einschalten des Relays
Rule2 on SR04#Distance!=%Var1% do Var1 %value% endon // Distanzwert ermitteln
Rule3 on Var1#state do WebSend [192.168.178.93:8181]/cuxd.exe?ret=dom.GetObject("SV_Zisternehoehe").State(%var1%) endon // CCU Variable anpassen, immer dann, wenn sich die Distanz geändert hat.
Die Telemetry Period (d.h. die Zeit, die der D1 Mini eingeschaltet bleibt) habe ich auf 10 Sekunden gesetzt.
Installation in der Tonne
Den Sensor habe ich in eine Feuchtraum Abzweigdose installiert, die man z.B. bei Bauhaus bekommt. Dazu habe ich ein Loch in den Deckel so gebohrt, dass der Sensor mit dem Außenring auf dem Gehäuse bündig sitzt.
Die Abzweigdose wurde dann von mir mit einem Verstellwinkel am oberen Tonnenrand befestigt, so dass der Sensor einen freien "Blick" auf das Wasser hat.
Die Installation des D1 Mini sowie der Sensorplatine mit dem Akku erfolgt in einer IP66 Abzweigdose. Hier habe ich bei Hornbach ein tolles Modell gefunden, welches auch für andere Sensoranwwendungen draußen genügend Platz bietet und schraubenlos verschlossen werden kann (hier ist der Link).
Für die Übermittlung von Daten an einen MQTT-Broker sowie eine CCU greife ich auf die bereits erläuterte Lösung mit einem D1 Mini sowie der Tasmota Firmware zurück, die ich im folgenden Artikel erläutert habe: Bodenfeuchtesensor für Homematic IP bauen und nutzen (Teil 1, Grundlagen).
Datenaufbereitung und -anzeige
Die erhaltenen Höhenwerte geben nun den Abstand vom Sensor zur Wasseroberfläche an. Tatsächlich benötige ich aber die Wasserhöhe, die ich dann auch in Liter umrechnen möchte.
Mihilfe der Tonnengeometrie (Durchmesser), maximaler Höhe bis zum Sensor, sowie der maximalen Füllmenge der Zisterne (z.B. 5000 Liter) lässt sich nun sehr einfach berechnen, wieviel Liter pro Zentimeter in eine Zisterne passen. Bei mir liegt dieser Wert bei ca. 32 Litern.
Hieraus kann nun durch folgende Formel die Literanzahl ermittelt werden:
("Höhe bis zum Sensor"-"Sensorwert")*"Liter pro Zentimeter"=Füllmenge in Litern
Ich habe diese Werte über den Mediola Automation Manager berechnet und lasse die Daten anschließend auch im AIO Creator NEO anzeigen:
Darüber hinaus protokolliere ich alle Höhen des Sensors über Grafana, so dass mit der Kombination der Regenmenge eine nette grafische Darstellung des Wasserzuflusses erhalte.
Bei den Auswertungen sind mir dann die Ausreißer des Sensors aufgefallen. Dabei hat sich herausgestellt, dass sich gerade bei großen Temperaturschwankungen außen immer wieder Kondenswasser in der Zisterne am Sensor bildet. Sobald ich diese Tropfen abwische, ist der Sensorwert anschließend wieder normal. Dennoch gibt es trotz dieses Effektes teilweise noch falsche Messungen zwischendurch. Hier werde ich noch versuchen, über ein am Sensor zu montierendes HT-Rohr, die Ultraschallmessung etwas zu verbessern. Insgesamt reichen die Ergebnisse aber für eine Nutzung vollkommen aus.
Nützliche Links
Bei der Lösungsfindung haben mir folgende Links geholfen:
[…] Artikel Füllstandssensor (Zisterne) für HMIP selber bauen habe ich beschrieben, wie ich mit einem D1 Mini und einem SR04T Distanzsensor eine […]
Hi, die Anleitung ist soweit echt gut hab alles genau wie beschrieben und 3 mal kontrolliert. Sofern ich alles via Kabel ohne Deep sleep (Strom) laufen lasse passt das. Sobald ich aber deepsleeo nutze schaltet der Wemos das relay nicht ein. Ich habe alle 3 Rules auf 1 gesetzt und habe den Tele Timer auch auf 30 sek erhöht, leider erfolglos.
Sobald ich mit Akku arbeite und deepsleep schaltet der Wemos den Gpio 8 nicht für den Sensor.
Aus der Ferne ist das schwer zu beurteilen, ohne den Code und die Anschlüsse zu sehen. Probiere für Rule 1 mal alternativ den Ausdruck „…on System#Init do …“
Gruß
Dieter
Hi Dieter kannst du mir deine Tasmota Sensor Version nennen, ich Versuchs mit der neusten 14. da kann man bei den Sensoren auch noch im Dropdown wie im Relay was ändern.
Hi sorry fürs Spam, aber vllt schreibst du die Version noch hin, hab die letzte aus 2021 genommen, damit funktioniert es wie von dir hier beschrieben. Mit der neusten Version 14 gibt es Anscheind ein Problem mit der Belegung des relays auf GPIO 15
Mit den Versionen 9-12 sollte es wie beschrieben funktionieren.
Gruß
Dieter
Hi Dieter, danke für die schnelle Rückmeldung. Ich denke das die Telemetry Timer mit 30 / 60 zu gering gewählt ist. Im Beitrag mit den Bodenfeuchtesensor heißt es das es mindestens 70 sein muss. Das hab ich aber nicht getestet und versuch alle Beiträge zusammenzufassen. Leider ist das meine erste Erfahrung mit Tasmota, sonst nutze ich Shellys =)
Hi nochmal, ich habs nun beobachtet, schalte ich den Wemos an mit Powerkabel nach Power reset dann liest er ganz normal die werte. sobald er einmal deepsleep durchführt passiert nicht mehr.hier der log after deep
00:00:00.001 HDW: ESP8266EX
00:00:00.050 CFG: Loaded from flash at F6, Count 94
00:00:00.077 RUL: POWER1#BOOT performs ‚Power ON‘
00:00:00.083 RSL: RESULT = {„POWER“:“ON“}
00:00:00.084 RSL: POWER = ON
00:00:00.089 Project tasmota – Zisterne Version 14.0.0(release-sensors)-2_7_6(2024-05-14T13:50:47)
00:00:01.001 WIF: Connecting to AP1 XXXXXXXXXChannel 1 BSSId XX:XX:XX:XX:XX:XXin mode 11n as tasmota-CB6871-2161…
00:00:02.340 SR4-1: Mode 0
00:00:03.140 WIF: Connected
19:56:04.106 HTP: Web server active on tasmota-CB6871-2161 with IP address 192.168.XXX.XXX
19:56:05.392 RSL: RESULT = {„POWER“:“ON“}
19:56:05.394 RSL: POWER = ON
19:56:10.260 RSL: STATE = {„Time“:“2024-05-27T19:56:10″,“Uptime“:“0T00:00:11″,“UptimeSec“:11,“Heap“:22,“SleepMode“:“Dynamic“,“Sleep“:50,“LoadAvg“:19,“MqttCount“:0,“POWER“:“ON“,“Wifi“:{„AP“:1,“SSId“:“XXXXXXXXXXX“,“BSSId“:“XX:XX:XX:XX:XX:XX“,“Channel“:1,“Mode“:“11n“,