Dešťovka v Home Assistantu: měření hladiny vody v nádrži
Když jsme dělali nádrž na dešťovku, počítal jsem rovnou s tím, že ji časem napojím do Home Assistantu. K nádrži jsem proto nechal dotáhnout síťový kabel cat7 S/FTP, abych nemusel řešit Wi-Fi někde venku, baterky ani samostatné napájení.
Samotné měření hladiny tak pro mě nebylo nouzové dodělávání, ale spíš třešnička na dortu celé instalace dešťovky. Nádrž fungovala i bez toho, ale pořád chyběla jedna praktická věc: vědět, kolik vody v ní opravdu je.
Hlavně před blížícím se deštěm.
Když má přijít větší srážka, je dobré vědět, jestli je v nádrži ještě dost volné kapacity, nebo jestli má smysl předem extra zalít zahradu a udělat v nádrži místo. Bez měření jsem musel ven a oddělat poklop. S měřením vidím stav rovnou v Home Assistantu a můžu se podle toho rozhodnout.
Momentka při instalaci. Vypadá to celkem OK, ne?
Princip
Použil jsem ponorné tlakové čidlo pro měření hladiny vody. Čidlo je dole v nádrži a podle tlaku vodního sloupce dává analogové napětí. Čím víc vody nad čidlem, tím vyšší tlak a tím vyšší výstupní napětí.
Na AliExpressu se podobná čidla prodávají v několika variantách: 4–20 mA, 0–10 V, RS485, 0–5 V nebo 0–3.3 V. Pro ESP32 je zásadní použít variantu s výstupem vhodným pro jeho ADC vstup. Na ADC vstup ESP32 nesmí přijít víc než 3,3 V, jinak hrozí poškození desky.
Já tedy používám analogovou variantu vhodnou pro přímé čtení ESP32 a napětí čtu přes ADC vstup.
Hardware
Základ je deska Olimex ESP32-POE. Hlavní důvod je jednoduchý: když už mám k nádrži dotažený Cat7 S/FTP kabel, dává smysl po něm řešit komunikaci i napájení. Jeden kabel, žádná Wi-Fi a žádný zdroje.
Zapojení čidla je jednoduché:
| ESP32-POE | Tlakové čidlo |
|---|---|
+5V |
VCC |
GND |
GND |
GPIO35 |
OUT |
Mezi výstup čidla a ADC vstup ESP32 jsem dal sériový odpor 4.7 kΩ a na vstup kondenzátor 100 µF proti zemi. Ne proto, že bych to měl nějak dokonale spočítané jako referenční návrh, ale hlavně proto, že jsem zrovna jiné vhodné součástky neměl po ruce.
U měření hladiny vody mi to nijak nevadí. Hladina se nemění skokově po milisekundách, takže pomalejší a klidnější měření je spíš výhoda. Zbytek vyhlazení pak ještě řeší filtry přímo v ESPHome.
Zapojené ESP32 s kondenzátorem na signálu proti GND, který řeší napěťové špičky a rezistorem jako ochrana ESP32
ESPHome
Celou konfiguraci jsem dal na GitHub:
https://github.com/honza-kasik/water-cistern
Po přidání do Home Assistantu vzniknou hlavně tyto entity:
Napětí čidlaHladina vodyZaplnění nádrže
První hodnota je filtrované napětí z čidla. To je užitečné hlavně při kalibraci a kontrole, jestli čidlo dává rozumné hodnoty.
Druhá hodnota je přepočtená výška vodního sloupce v metrech.
Třetí hodnota je už praktické zaplnění nádrže v procentech.
Konfigurace používá Ethernet a nativní ESPHome API, takže není potřeba MQTT. První nahrání firmware je potřeba udělat typicky přes USB, další aktualizace už můžou běžet přes Ethernet.
Hurá, funguje to! Zatím jen v konvi s vodou. Výška hladiny sedí.
Přidání do Home Assistant už byla otázka doslova dvou kliků. ESPHome integrace vše našla a automaticky přidala.
Kalibrace
Kalibrace je nejdůležitější část celého měření. Nestačí jen připojit čidlo a věřit číslům.
V konfiguraci jsou tři hlavní hodnoty:
v_empty: "0.142"
v_full: "2.50"
tank_height_m: "2.194"
Použitý HW
- Olimex ESP32-POE
- Ponorné čidlo
- IP67 krabice, DIN lišta a průchodky z Hornbachu