Hladinovač kondenzu klimatizácie
V lete som riešil jednoduchý praktický problém s klimatizáciou. Kondenz z nej u mňa neodteká priamo do odpadu, ale zbiera sa do nádoby, ktorú treba pravidelne vylievať. Stačí na ňu zabudnúť a voda môže pretiecť. Namiesto pravidelného kontrolovania nádoby som si preto postavil vlastný hladinovač, ktorý stav vody sleduje za mňa a pri zmene mi pošle správu na Telegram.
Štyri vodiče namiesto zložitého senzora
Nechcel som merať presnú výšku hladiny v milimetroch. Na tento účel mi úplne stačí vedieť, či je nádoba približne prázdna, naplnená na štvrtinu, polovicu, tri štvrtiny alebo úplne plná. Preto som zvolil jednoduché vodivé elektródy umiestnené v rôznych výškach nádoby.
Jedna elektróda je spoločná a ďalšie štyri predstavujú úrovne 25, 50, 75 a 100 percent. Keď kondenz dosiahne príslušný kontakt, voda uzavrie elektrický obvod a ESP8266 zistí, že daná hladina je aktívna. Platné stavy tak postupne vyzerajú ako 0000, 1000, 1100, 1110 a 1111.
Výhodou je, že na meranie nepotrebujem ultrazvukový ani iný špeciálny snímač. Zároveň sa dá ľahko odhaliť nezmyselný výsledok. Ak by napríklad horná elektróda hlásila vodu, ale elektróda pod ňou nie, fyzicky to nedáva zmysel a systém taký stav označí ako chybu merania.
ESP8266 meria iba chvíľu
Elektroniku riadi ESP8266, pričom projekt je pripravený aj pre ESP32. Spoločnú elektródu som nepripojil na napätie trvalo. ESP ju zapne iba počas samotného merania, počká 50 ms na ustálenie, prečíta štyri vstupy a spoločnú elektródu opäť vypne. Tým sa obmedzuje elektrochemická korózia kontaktov ponorených vo vode.
V produkčnom režime sa zariadenie zobudí, zmeria hladinu, pripojí sa na WiFi, odošle hodnoty na server a následne WiFi vypne a prejde do deep sleep. Ďalšie meranie vykoná po 1800 sekundách, teda po 30 minútach. Na kontrolu nádoby s kondenzom je takýto interval viac než dostatočný.
Malý server namiesto ďalšej aplikácie
Nechcel som kvôli takému malému projektu stavať databázu ani samostatnú aplikáciu. ESP preto odošle cez HTTP POST štyri hodnoty level1 až level4 jednoduchému PHP endpointu. Server vstup skontroluje a každé meranie uloží ako jeden JSON objekt do JSONL súboru rozdeleného podľa rokov.
JSONL mi na tento účel vyhovuje: nový záznam sa jednoducho dopíše na koniec súboru, dáta sa dajú čítať po riadkoch a prípadný poškodený riadok neznamená stratu celého logu. Na takto malé množstvo dát by databáza bola skôr ďalšou zbytočnou závislosťou.
Telegram ma upozorní iba vtedy, keď sa niečo deje
Ak by mi ESP každých 30 minút poslalo správu, monitorovanie by som veľmi rýchlo začal ignorovať. Server preto porovná nové meranie s predchádzajúcim a Telegram notifikáciu odošle iba pri zmene hladiny. Dostanem tak napríklad správu Nádržka kondenzu klimatizácie: 75%, ale pri ďalších rovnakých meraniach už nič.
Samostatne sa kontrolujú aj neplatné kombinácie elektród. Ak príde napríklad stav, v ktorom je aktívna tretia úroveň, ale druhá nie, dostanem upozornenie s konkrétnymi hodnotami všetkých vstupov. Tak viem, že problém nemusí byť v množstve vody, ale v elektróde, vodiči alebo samotnom meraní.
A čo keď prestane fungovať celý hladinovač?
Pri monitoringu nestačí sledovať iba hodnotu. Potrebujem vedieť aj to, že monitorovanie stále funguje. Ak by ESP zamrzlo, vypadla WiFi alebo sa zariadenie vyplo, posledná známa hladina by síce vyzerala v poriadku, ale nové údaje by už neprichádzali.
Preto na serveri beží cez CRON kontrolný skript. Ak je posledné meranie staršie ako 45 minút, upozorní ma, že nové dáta neprišli. Upozornenie však neposiela donekonečna. Pri hodinovej kontrole príde maximálne trikrát a potom sa systém odmlčí. Ak som klimatizáciu alebo senzor vypol zámerne, nechcem dostávať rovnakú správu každú ďalšiu hodinu.
Malý projekt, ktorý rieši konkrétny problém
Hladinovač je presne ten typ hobby elektronického projektu, ktorý ma baví: nevznikol preto, aby som si vyskúšal konkrétnu súčiastku, ale preto, že som mal doma konkrétny problém. Hardvér zostal jednoduchý a väčšinu inteligencie som presunul do softvéru: kontrola platnosti stavov, história meraní, upozornenia iba pri zmene a watchdog na výpadok celého merania.
Celý projekt vrátane Arduino zdrojového kódu, PHP serverovej časti, zapojenia pinov a fotografií reálnej inštalácie som zverejnil v repozitári TPsoft.org/Hladinac. Je to malé zariadenie, ale odvtedy už nemusím chodiť kontrolovať nádobu a premýšľať, či som ju náhodou nezabudol vyliať.