Watmonitor je univerzálne webové rozhranie hladinomera, ktoré umožňuje zbierať dáta zo senzorového uzla, ktorý v pravidelnom intervale zasiela rozdielovú, alebo celkovú výšku hladiny vody a to v závislosti od použitého senzora (ultrazvukový, radarový, tlakový, kapacitný, optický, doppler, indukčný). Každý senzor má svoje výhody a nevýhody z hľadiska použitia pre túto aplikáciu s ohľadom na typ studne, mernú vzdialenosť. Vďaka REST API na strane servera môže senzorový uzol zasielať dáta rôznymi spôsobmi a to priamo: Priamo zo zariadenia je vykonaný HTTPS POST request s dátami a to akoukoľvek prenosovou technológiou, napríklad Ethernet, PHY Ethernet, WiFi, GSM, LTE, NB-IoT a iné.
Druhým spôsobom môže byť distribúcia dát cez prostredníka, ktorý sa vyžaduje vzhľadom na prenosovú technológiu, ktorá sama o sebe nie je pripojená do internetu. Pre mikrokontróler ESP32 môže byť najzaujímavejším spôsobom použitie ESP-NOW protokolu z dieľne jeho výrobcu - Espressif Systems, pričom zariadenia, ktoré ním komunikujú (podporuje ho aj ESP8266), môže byť dáta v meshi poslané až na prvé root zariadenie, ktoré môže dáta preposielať (Initiaters) už do internetu, ak má konektivitu (Responder).
Cez prostredníka ale komunikujú aj viaceré IoT technológie, najmä LoRaWAN, Sigfox IoT. Tieto služby majú najčastejšie priamo portál, cez ktorý sa nastaví Callback, ktorý je priamo spustený pri prijatí dát z kontroléra. Tieto siete sa vyznačujú tým, že sa nimi prenášajú malé objemy dát a preto musia byť enkódované a následne dekódované, aby sa s nimi dalo pracovať a vložiť ich do callbacku. Okrem LoRaWAN existuje aj LoRa na Point-to-Point komunikáciu, čo môže tiež fungovať medzi vlastnými zariadeniami, pričom jedno má konektivitu a na základe prijatých dát ich len prepošle do internetu.
Request v tomto prípade nemá zložitú štruktúru a obsahuje len dva parametre (URL-encoded data), ktoré definujú výšku hladiny vody a taktiež aj autorizačný token, ktorý oprávňuje zariadenie zapísať údaj do databázy. Dnes si preto priblížime, ako webové rozhranie systému Watmonitor nainštalovať. Návod bude písaný tak, aby ho pochopili aj laici.
Čo budeme potrebovať pred inštaláciou systému Watmonitor?
Webhosting. Máme na výber medzi lokálnym a externým. Lokálny webhosting si viete zriadiť na vlastnom počítači, alebo serveri, ktorý máte doma pripojený na svojej LAN sieti. Aby mohol mikrokontróler dáta zapisovať kedykoľvek, musí tento server bežať a byť trvalo napájaný.
Externý webhosting môže byť platený, alebo zdarma (freehosting) v závislosti od obmedzení, ktoré obnášajú (freehosting bude mať vždy zdarma iba doménu 3. rádu, ak to ale poskytuje, pretože niektoré freehostingy sú hostingom, ktorý doménu neposkytuje). Pri platenom hostingu nebudete z pohľadu náročnosti tejto aplikácie v ničom limitovaný, 99% hostingov vám aj na najnižšom balíku poskytne dostatočný výkon a priestor. Medzi použiteľné freehostingy môžeme zaradiť napríklad Endoru.
Uistite sa, že hosting, pre ktorý ste sa rozhodli poskytuje aj MySQL databázu, ak nie, bude potrebné tú databázu mať zriadenú inde, kam sa bude server pripájať, čo môže navýšiť odozvu celého webového portálu Watmonitora.
Ak sa rozhodnete pre lokálny hosting vami samými, potrebujete sa doinštalovať webserver a MySQL databázu. V jednom kroku to viete docieliť inštaláciou WAMP servera, ktorý nainštaluje webserver (Apache) a aj MySQL databázu, vrátane nástroj phpMyAdmin na jej správu. Taktiež je zaujímavým riešením aj XAMPP, ktorý poskytuje síce MariaDB databázu, ale z hľadiska použitia je to identické ako s MySQL databázou a aj celá PHP aplikácia bude fungovať bez zmeny aj s touto databázou.
Ak máme zvládnuté tieto kroky, môžeme pokročiť už k samotnému nasadeniu prostredia Watmonitor a importu súboru SQL databázy.
Modelová situácia validná pre webhosting lokálny, aj externý. Častokrát sa MySQL databáza spravuje cez phpMyAdmin. Táto aplikácia sa spúšťa cez prehliadač a poskytuje možnosť prihlásiť sa do administrácie MySQL databázy. V prípade lokálneho hostingu býva prihlasovacie meno root a heslo prázdne. Ak však budete mať externý webhosting, rozhodne to prihlasovacie meno a heslo bude iné, keďže celý systém je zdieľaný medzi používateľmi hostingu a každý v systéme vidí len svoje. Nástroj phpMyAdmin je aj v slovenčine a viete si ju v ponuke prihlásenia vybrať.
Keď sa prihlásite do prostredia správy databázy, je nutné vytvoriť prázdnu databázu. To sa realizuje kliknutím na ikonu + New v ľavom menu. Databázu môžete nazvať akokoľvek, jej názov neskôr použijete. Po vytvorení databázy si ju rozkliknite, znova cez menu naľavo a kliknite na ikonu Import. Z archívu projektu Watmonitor vyberte súbor export.sql, ktorý je v složke /sql/ a kliknite na Import. Tabuľka s názvom studna2 sa automaticky importuje do vami vytvorenej databázy a vytvorí jej štruktúru. Týmto je časť s databázou ukončená a potrebujeme údaje o názve databázy, prihlasovacom mene a hesle, ktoré bude potrebné nastaviť v súbore projektu.
Nahratie projektu na hosting:
V závislosti od hostingu, môžete webaplikáciu Watmonitora nahrať viacerými spôsobmi a to priamo cez prehliadač, alebo cez FTP službu, to už ale závisí od okolností. Štandardne sa projekt nahráva do priečinka www, kde si môžete urobiť samostatnú zložku, kam nakopírujete projekt, alebo priamo do www (tzv. root) zložky. K FTP dostanete údaje od poskytovateľa hostingu, kde bude určite definovaná aj doména, ktorú bude potrebné zadať. Na FTP vám stačí aj Total Commander, či skúsenejší používatelia preferujú napr. FileZillu, či WinSCP.
V ďalšom kroku budeme potrebovať nastaviť súbor connect.php. Tento súbor obsahuje viacero konfigurovateľných parametrov. Nachádzajú sa tu premenné pre používateľské meno a heslo pre HTTP Basic Auth, taktiež token pre zariadenie, ktoré bude posielať dáta na webové rozhranie Watmonitora. Nachádzajú sa tu aj údaje pre prístup k MySQL databáze, ktorú sme v predchádzajúcom kroku vytvárali.
Pre HTTP Basic Auth zvoľte meno a heslo, ktoré vám vyhovuje. Je však potrebné zdôrazniť, že ak váš web bude bežať na HTTP protokole, ktorý nie je šifrovaný, môže ktokoľvek v sieti tieto dáta vidieť v textovej podobe (plaintext). Nepoužívajte pre toto meno a heslo žiadne údaje, ktoré používate kdekoľvek inde. Pri HTTPS protokole sú dáta stále v plaintexte, ale prenášajú sa šifrovaným kanálom medzi vami a serverom. HTTP Basic Auth sa v projekte Watmonitor využíva pre autorizáciu používateľa k mazaniu záznamov z databázy priamo vo webaplikácii, či k sprístupneniu zdrojové kódu pre mikrokontróler, či vykonávanie nastavení (dáta o studni, názov studne).
Token pre mikrokontróler je reťazec znakov, ktorými sa mikrokontróler autorizuje voči serveru a tým mu server umožní dáta zapísať do MySQL databázy.Môžete použiť mix čísel a písmen. Pripojenie na MySQL databázu pozostáva z hosta, používateľského mena, hesla a názvu databázy. Host býva štandardne localhost, ak databáza beží na rovnakom počítači, ako webserver. V opačnom prípade je nutné zadať tam doménu, ktorú špecifikuje ten, kto hosting poskytuje. Meno, heslo a databáza je tá istá s ktorou sme používali phpMyAdmin. Taktiež môžete tieto parametre rozšíriť o piaty parameter a to port, ak sa využíva špecifický, ktorý uvediete ako ďalší parameter funkcie mysqli_connect()..
V prípade, ak ste aplikáciu nastavili správne, uvidíte na webe následujúci výstup. Webstránku si otvoríte zadaním webovej adresy do prehliadača. Konkrétny priečinok na doméne závisí od toho, kde a ako ste to nakopírovali:
Ak vidíte iba textový výstup rozsypaného textu v ktorom vidíte napr. nejaké funkcie, pravdepodobne vám server nedokáže vykonávať PHP kód. Vtedy skontrolujte, či vaša služba webservera (Apache, HTTPD alebo NGINX) funguje, prípadne ju reštartujte.
Taktiež môžete vidieť aj iné typy chýb, ak databáza nie je dosiahnuteľná, alebo nie sú zadané správne údaje k databáze, prípadne databáza neexistuje uvidíte výstup na štýl:
Prvé dáta do systému:
Ak chceme do webaplikácie Watmonitora poslať dáta, máme niekoľko možností. Môžeme si urobiť vlastný senzorový uzol, alebo data zapísať cez externý nástroj obdobným spôsobom, ako keby to posielal mikrokontróler. Samotný Watmonitor má podstránku Program. Systém automaticky vytvorí zdrojový kód na základe umiestnenia vášho webu (pozor na používanie localhost miesto IP adresy, ak používate lokálny hosting, pretože z iného zariadenia sa takto nepripojíte, keďže localhost je iba v rámci daného zariadenia, t.j. senzorový uzol má localhost svoj...).
Watmonitor automaticky vyráta cestu k .php súboru, ktorý je zodpovedný za zápis dát a správne cestu preddefinuje do zdrojového kódu mikrokontroléra. Zdrojový kód je vždy v dvoch prevedeniach pre ESP32 mikrokontróler, jeden kód pre pripojenie cez WiFi, druhý cez PHY Ethernet (RMII). Taktiež zohľadňuje aj prenosový protokol v závislosti od toho, či máte stránku otvorenú cez HTTP, alebo HTTPS protokol. Alternatívny HTTP port 8080 neaplikuje, len 80. Takýto zdrojový kód je tak pripravený na nahratie do mikrokontroléra, pričom si len upravíte v prípade WiFi verzie meno a heslo WiFi siete, na ktorú ho budete pripájať. Pri HTTPS protokole je nutné zdôrazniť, že Root CA certifikát, ktorý sa na HTTPS spojenie používa je natvrdo preddefinovaný a to ISRG Root X1 pre Let's Encrypt certifikáty. Teda ak používate iný Root CA pre vašu doménu, nebude vám pripojenie fungovať a senzorový uzol nič nezašle.
Zdrojový kód pre ESP32 je kompatibilný s knižnicou NewPingESP8266 a Arduino Core 3.0.X, ktoré je založené už na ESP-IDF v5.1.X. Zdrojový kód pre WiFi je kompatibilný aj s inými ESP32 modulmi, od WROOM, cez S a C verzie. Tento zdrojový kód sa viaže s ultrazvukovými senzormi RCW, US-XXX, IOE-SR0X, SR0X, HC-SR0X, HY-SRF0X, DYP-MEXXX, JST-SR0X a Parallax PING)))™ a pod. Pokročilejšie implementácie sú na Githube projektu, ale tam si treba cestu k vašej webaplikácii nastaviť manuálne. Tieto implementácie zahŕňajú aj Deep Sleep (ULP) režim prevádzky, či podporu OTA updatov. Pre ESP32 je k dispozícii aj viacero implementácii s FreeRTOS, medzi nimi aj vo frameworku ESP-IDF (Espressif IoT Development Framework). Štandardný senzorový uzol posiela dáta raz za 5 minút, respektíve na strane servera je možné posielať raz za 200 sekúnd.
Ak sa dáta do systému zapíšu, uvidíte ich priamo v hlavnom prehľade v reálnom čase. Budete tak hneď vedieť, či dáta z mikrokontroléra (senzorového IoT uzla) do systému rpešli, alebo nie. V tomto prípade ukážka zaslania rozdielovej výšky hladiny vody 30 cm, teda skutočná výška hladiny je 370 cm, nakoľko hĺbka studne je 400 cm. Priemer studne je 80 cm a tak objem tohto vodného stĺpca je skoro 1860 litrov. Hĺbka, názov a priemer studne je v systéme konfigurovateľný.
Ak senzorový uzol o 5 minút ďalšie dáta nepošle, stav Pripojené sa zmení na odpojené. Dáta ostanú v takej podobe, akej sú. Uvidíte tak aj čas posledného zápisu, kedy boli posledné dáta do Watmonitora reálne zapísané. Niekedy je nutné v databáze nastaviť aj čas, niektoré majú čas nastavený na UTC a nemusí sa tak čas zapísu v databáze zhodovať s vašim lokálnym časom. Práve ale na freehostingoch býva problém, že to nemôžete zmeniť.
Druhý spôsob, vhodný pre testovanie systému je využitie nástroja na testovanie API. Môj veľmi obľúbený je Postman, kde si budeme demonštrovať toto riešenie. Nástroj ponúka možnosť nastavenia requestov, vrátane dát, ktoré sa posielajú a podobne. Je tak možné vykonať plnohodnotný request príslušnou HTTP metódou. V našom prípade použijeme POST a dáta enkódované ako URL-Encoded, client-side hlavička application/x-www-form-urlencoded. To zaručí, že dáta prídu vo formáte, ktorému webserver porozumie.
Pripravil som Collection pre Postman, ktorý môžete jednoducho naimportovať a použiť. Všetky requesty sú tam dvojmo a to z dôvodu, že jedno rozhranie (moje testovacie) sa používa primárne na HTTP protokol a druhé na HTTPS protokol. Kliknutím na príslušný POST request siho vyberiete. Ten obsahuje v tele správy dva parametre a to hodnota, ktorá udáva číselne rozdielovú výšku hladiny vody a token (musí sa zhodovať s tým, ktorý ste zmenili v connect.php). Upravíte podľa potreby a kliknete na Send. Ak požiadavka prejde, uvidíte v odpovedi servera značku OK. Ak budete zasielať príliš často, uvidíte hlášku s počtom sekúnd, koľko ešte musíte počkať pred novou požiadavkou pre zápis dát. Taktiež môžete obdržať aj chybový kód HTTP 404, ak ste cestu nastavili zle. Rovnako tak server oznámi aj to, ak nie je klient autorizovaný so správnym tokenom a jeho dáta neuloží. Dáta sa zapisujú cez volanie súboru data.php. Súbor inú ako POST metódu nepodporuje.
Collection nájdete na:
https://github.com/martinius96/hladinomer-studna-scripty/blob/master/Postman/Dashboard_WaterWell_Monitor.postman_collection
Takýmto spôsobom je tak možné otestovať, či webserver prijíma dáta aj bez senzorového uzla. Webové rozhranie je univerzálne a bude akceptovať pripojenie od akéhokoľvek senzorového uzla bez ohľadu na použitý snímač záznamu výšky hladiny, riadiaci hardvér, či prenosovú technológiu.
Systém Watmonitor nie je striktne len na monitorovanie hladiny vody v studni. Určite nájde využitie aj v monitoringu vody v nádržiach žumpách, možno aj v aplikáciách s monitorovaním palív, či iných tekutín. Vedel by som si ho predstaviť aj na monitorovaní výšky produktu či osiva v silách a tiež aj pre monitorovanie výšky hladín riek, jazier.
Vyskúšajte Watmonitor. Môžete použiť preddefinované zdrojové kódy, ktoré zahŕňajú Arduino, ESP32, ESP8266, alebo si vytvorte vlastný senzorový uzol, ktorý bude tieto dáta posielať na webserver s vlastným firmvérom s rešpektovaním minimálne 200-sekundového okna medzi zápismi
HTTPS rozhranie: https://hladinomer.eu/
Viac o Watmonitore (v angličtine): https://your-iot.github.io/Watmonitor/
.