Cilj
Moja boljša polovica prihaja iz družine profi vrtnarjev, zato so njena pričakovanja glede izgleda zelenica kar visoka :) Na srečo sem pred trenutno službo tudi jaz pomagal pri družinskem poslu, zato vem, da je prav suša tista, ki travo dovolj oslabi, da se plevel lažje prime.
Naš vrt je opremljen z namakalnim sistemom in 8 kubičnim zbiralnikom deževnice. Ker je to dokaj malo, mora biti urnik namakanja dovolj pameten, da prihrani čimveč vode. Statični urnik ne pride v poštev, saj v zakup ne vzame preteklih in prihodnih padavin. Zakaj bi zalival, če je en dan prej deževalo?
Prvi in vsaj zame idealen pristop bi bil z merjenjem vlage zemlje. To sem tudi izvedel z doma narejeno napravico, ki uporablja ESP8266 modul NodeMCU in generični namenski senzor “capacitive soil moisture sensor v1.2”, ki se ga dobi iz Aliexpressa za nekaj evrov. Izkazalo se je, da elektronske naprave ne prenašajo stalne prisotnosti vlage zelo dobro. Kdo bi si mislil. Nad tem pristopom sem obupal, a vseeno mislim, da je to najboljši pristop, saj bi zalival res samo takrat, ko nivo vlage v zemlji pade pod določeno vrednost. Mogoče je vseeno izvedljivo z dražjo, bolj profi napravo.
Na koncu sem se odločil za razvoj avtomatike, ki potrebo po zalivanju določi na podlagi količine preteklih padavin, vremenske napovedi in temperature zraka.
Strojna oprema
Ventile namakalnega sistema kontrolira naprava OpenSprinkler. Omogoča priklop 8 vej in kar nekaj programskih funcionalnosti, ki jih v resnici nikoli nisem zares uporabljal. Čeprav je celotni namakalni sistem od proizvajalca Rain Bird, se nisem odločil za njihov kontroler zaradi slabe podpore za zunanje sisteme kot je Home Assistant. Integracija bi bila v tem primeru izvedena preko njihove oblačne storitve. Odvisnosti od zunanjih storitev se poskušam izogniti, zato sem se odločil za OpenSprinkler, ki omogoča lokalno upravljanje preko Home Assistant.
Integracija v Home Assistant
Integracija je izvedena preko vgrajene integracije v Home Assistant in komunicira z OpenSprinkler preko lokalnega APIja.
Ker pa logika zalivanja potrebuje podatke o preteklem vremenu in vremenski napovedi, sem uporabil integracijo z OpenWeatherMap, ki ponuja podatke o trenutnem vremenu in napovedi. V prihodnosti bom verjetno nabavil vremensko postajo in delal spodnje z lastnimi podatki.
Implementacija logike
Pogoji, ki namigujejo potrebo po zalivanju so:
- povprečna temperatura zadnjih 4 dni je nad 20°C. S tem omejim zalivanje le ob najbolj vročih dnevih.
- padlo je manj kot 3 mm padavin v zadnjih 4 dneh. 1 mm padavin je enako 1 litru na kvadratni meter.
- namakalni sistem je namakal manj kot 15 minut v zadnjih 4 dneh. Ta pogoj prepreči zalivanje pogosteje kot vsake 4 dni.
Pogoji se preverijo vsak dan ob 6:00. Če vsi zgornji pogoji držijo in dež ni napovedan za ta dan, potem se sproži zalivanje zelenice za 25 minut.
Največ izzivov pri implementaciji zgornjega mi je delalo oblikovanje podatkov v ustrezno obliko.
Na primer, OpenWeatherMap beleži padavine v enoti mm/uro, ki predstavljajo intenziteto dežja, jaz pa sem potreboval skupno količino padlega dežja.
Količino zapadlega dežja predstavlja površina zgornjega grafa. Za izračun sem uporabil Riemannovo vsoto, ki je na voljo med Helpers v Home Assistant. Rezultat je skupna količina padlega dežja in se povečuje v nedogled vedno ko dežuje.
Ker nam skupna količina padavin ne pove veliko, moramo iz te metrike izluščiti statistiko za 4 dni. Vse kar rabimo je razlika med vrednostjo 4 dni nazaj in zdaj. Home Assistant omogoča izračun te statistike, tako izgleda pri meni:
|
|
V času razvoja sem naredil še spodnji dashboard, preko katerega spremljam, če so vsi vhodni podatki smiselni: