====== Wasserstandsmesser ======
===== Motivation =====
Unsere Wasserversorgung hier in Thailand kommt aus dem Tiefbrunnen (120m) und wird in zwei Tanks (1000l + 2000l) gespeichert. Dazu gesellt sich ein 1000l Tank als Ausgleichsbehälter für den Pool.
Die Füllstände aller Tanks werden über mechanische Schwimmschalter gesteuert, die die jeweiligen Pumpen bei Bedarf einschalten. Das funktioniert meist zuverlässig aber eine aktuelle Füllstandsanzeige wäre schon hilfreich. Vor allem wenn man sich schon mit [[https://www.home-assistant.io|Home Assistant]] einem Smart Home annähert. Ein Füllstandsmesser muss her.
{{ :tech:water_tanks.png?nolink&200 |water tanks}}
===== Lösungsansatz =====
Fertige Lösungen sind wie immer sehr teuer und ausserdem ist ja auch der Weg das Ziel. Eine mechanische Lösung habe ich von vorne herein ausgeschlossen um wartungsfrei zu bleiben,
Auch wollte ich keine Lösung, wo ich die Tanks unterhalb der max. Wasserstandshöhe anbohren muss und dann die Abdichtung ein Problem werden kann.
Da die Geometrie der Tanks bekannt ist, bietet sich eine Ultraschall-Abstandsmessung der Wasseroberfläche an. Selbst während des Pumpvorganges ist die Wasseroberfläche nicht so rau, das es zu deutlichen Fehlmessungen kommen wird.
Beispiele für DIY Lösungen sind auch hier zu finden (teilweise nach meiner Implementierung in 2021 erschienen):
- [[https://markus-haack.com/watertank-esphome/|Water tank monitoring with ESPHome]]
- [[https://community.home-assistant.io/t/water-tank-level-and-water-volume-with-esphome/192666|Water Tank Level and Water Volume with ESPHome]]
Da wir es hier ja mit Wasser zu tun haben, scheidet das verbreitete, preiswerte Ultraschallmodul HC-SR04 aus. Aber es gibt ein ähnliches, wasserfestes Modul AJ-SR04M.
// AJ_SR04M_Sensor serial format:
// Trigger: 0x00
// Response: Byte1 Byte2 Byte3 Byte4 Byte5
// Start Byte=FF MSB LSB Checksum (LSB+MSB) 00
Das Ergebnis ist in Millimeter. Durch den seriellen Ansatz läßt sich der Sensor jetzt mit jedem PC (mit USB-Serial Adapter) oder einem Controller auslesen, der eine UART besitzt.
Bisher messen wir nur den Abstand zur Wasseroberfläche. Mit etwas Mathematik können wir den Abstand in eine Literangabe oder einen Prozentwert umrechnen.
Dank an [[https://community.home-assistant.io/t/water-tank-level-and-water-volume-with-esphome/192666|Omar Al-Janabi]] der die Berechnung schon detailliert beschrieben hat. Zur Berechnung brauchen wir die Tiefe des Tanks
esphome:
name: water-level-serial
comment: "Measure water level of water tanks by ultrasonic wave"
includes:
- AJ_SR04M_Sensor.h
Dann fügen wir die UART Schnittstelle hinzu. Falls wir keine Pins der Hardware UART verwenden wird automatisch eine Software UART implementiert. Da ich in meiner Lösung insgesamt 3 Module anschließe, gehen mir sowieso die H/W UARTs aus.
Zu guter Letzt die Implementierung der Sensoren. Der Sensor mit der ID ''dist1'' gibt die gemessene Distanz in Meter her. Mit //Template Sensoren// lässt sich dann der Wert wie oben beschrieben in eine Prozent- und Literangabe umrechnen.
uart:
- id: uart_dist1
tx_pin: GPIO14
rx_pin: GPIO12
baud_rate: 9600
sensor:
- platform: custom
lambda: |-
auto my_sensor = new AJ_SR04M_Sensor(id(uart_dist1));
App.register_component(my_sensor);
return {my_sensor};
sensors:
unit_of_measurement: m
accuracy_decimals: 3
name: "Water Tank Distance"
id: dist1
- platform: template
name: 'Water Tank Level'
unit_of_measurement: '%'
accuracy_decimals: 0
update_interval: 10s
icon: mdi:water-percent
lambda: |-
return (((175-20)-((id(dist1).state*100)-20))/(175-20))*100;
- platform: template
name: 'Water Tank Volume'
unit_of_measurement: 'l'
icon: mdi:cup-water
accuracy_decimals: 0
update_interval: 10s
lambda: |-
return (((175-20)-((id(dist1).state*100)-20))/(175-20))*1000;
===== Mechanik =====
Der Sensorkopf hat am Rand Klemmlaschen und ist so für eine Öffnung von ca. 20mm geeignet.
{{ :tech:size.png?direct&400 |Dimensions}}
In dünnwandigen Tankgehäusen kann man mit einem passenden Leerrohrverbinder den Sensor stabil einbauen und gleichzeitig das Kabel mit einem Kabelschlauch ummanteln.
{{ :tech:aj_conduit.png?nolink&300 |PVC Conduit}}
Hier die Montage oben auf unserem Dwell Tank. Der Sensor ist so gut gegen mechanischen Stress und Umwelteinflüsse geschützt. Bei uns hat er so jetzt schon mehr als 1 Jahr fehlerfrei überstanden.
{{ :tech:aj_mounted.jpeg?direct&200 |Mounted on top of the tank}}
In den meisten Fällen wird wahrscheinlich das 2.5m lange Sensorkabel ausreichen. Bei mir war die Entfernung zu zwei Tanks leider größer. Versuche das Sensorkabel zu verlängern zogen Messungenauigkeiten mit sich. Deshalb habe ich die AJ-Steuerplatine abgesetzt und in einem kleinen, wasserdichten Gehäuse verstaut. Das Bild zeigt nur das innere 3D-gedruckte Gehäuse.
{{ :tech:aj-adapter.png?direct&200 |3D printed inner housing}}
Das ESPHome Modul ist in einem etwas größeren, wasserfesten Gehäuse untergebracht. Das Innenleben ist auf einem 3D-gedruckten Träger untergebracht. Für zwei Wassertanks kommt das serielle Signal über ein 4-adriges Kabel an die Schraubklemmen (der oben gezeigte Adapter ist ja dazwischen)) und der näher gelegene Wassertank wird direkt an das Messmodul angeschlossen. Als Netzteil verwende ich übrigens immer diese Apple-ähnlichen [[https://www.amazon.de/gp/product/B082XG9Z31/ref=ppx_yo_dt_b_asin_image_o08_s00?ie=UTF8&psc=1|USB Netzteile]]. Der Eingang wurde von mir auf Schraubklemmen modifiziert. Diese Lösung ist recht zuverlässig, sehr preiswert und sicher da vollkommen gekapselt.
{{ :tech:aj_esp_module.png?direct&300 |ESPHome module}}
===== Ergebnisse =====
Nach getaner Arbeit kann man jetzt den Füllstand der Tanks beobachten und auch Aktionen daraus ableiten. Hier ein Blick auf das übersichtliche Panel von Home Assistant für den Aussenbereich. Dort werden die Füllstände der Tanks live angezeigt.
{{ :tech:aj_panel.png?direct&600 |Panel screen outdoor}}
Natürlich kann man sich auch den Verlauf ansehen:
{{ :tech:aj_history.png?direct&600 |Water level history}}
Der unterschiedliche Füllstand liegt am manuelle Auffüllen, da der mechanische Endschalter bei der Erstellung des Artikels defekt war.
=====Links=====
* [[https://www.home-assistant.io]] Home Assistant
* [[https://esphome.io]] ESPHome
* [[https://airbnb.com/h/villarollokohsamui]] Man kann bei uns Urlaub verbringen...
===== Spenden =====
Wenn ihr meine Arbeit unterstützen wollt, so könnt ihr mir gerne einen Cappuccino oder so spenden: .