Avtor: dr. Simon Vavpotič
Vsestranska aplikacija za upravljanje doma omogoča veliko funkcionalnosti, za katere bi potrebovali dneve načrtovanja in programiranja. Omogoča ne le priklop številnih senzorjev, ampak tudi obdelavo in hrambo podatkov ter nadzor in upravljanje doma prek spletnega oblaka.
V preteklem delu smo spoznali osnovne gradnike Home Assistanta in raziskali, nekatere vidike njegovega delovanja in upravljanja. Tokrat se lotimo avtomatizacije, na osnovi katere bo Home Assistant lahko samodejno izvajal akcije, kot je denimo vklop ogrevanja, če temperatura v prostoru, ko nas ni doma, pade pod 10 °C, ali pa ogrevanje dnevne sobe na prijetnih 22 °C, preden se vrnemo iz službe. Pisali bomo tudi skripte in opredelili scene. Do prihodnjič si lahko z dvoklikom na posamezen prostor v domu že sedaj ogledate funkcionalnosti, ki jih lahko vežemo nanj…
Ta vsebina je samo za naročnike
Avtomatizacija in pisanje skript
Je poleg enostavnih možnosti povezovanja komponent zagotovo ena od najpomembnejših funkcij Home Assistanta, saj omogoča samodejno izvajanje postopkov upravljanja doma, še posebej odzivanje na različne dogodke. Osnova za avtomatizacijo je skriptni podatkovni jezik Yaml, v katerem definiramo vhodne pogoje na osnovi izmerjenih parametrov (npr. temperatura v prostoru, osvetlitev prostora, prisotnost oseb v prostoru itn.) in izhodnih parametrov različnih naprav, denimo preklopnega stikala ali tipke za vklop/izklop luči ali senzorja za detekcijo prisotnosti v prostoru.
Home Assistant omogoča pisanje avtomatizacijskih skript v grafični obliki ali neposredno v zapisu v yaml, v katerem jih tudi shranjuje. Skripto lahko prek grafičnega vmesnika dodamo v meniju Settings/Automations&scenes, v zavihku Scenes. V spodnjem delu okna je gumb Create Automation, s katerim ustvarjamo nove avtomatizacijske skripte, od katerih so nekatere že ponujene (denimo: prižiganje luči na osnovi zaznave gibanja, Motin-activated light), druge pa lahko prek opcije Create new avtomation ustvarimo sami.
Ročno pisanje skripte dodatno olajša čarovnik, ki na ekranu odpre osnovno strukturo odločitvenega stavka, ki ga sestavljajo vhodni sprožilci, oz. kdaj naj se zažene (When) in dodatni pogoji (And if), ki dodajamo z gumbom Add condition in Add bulding block, s katerim dodajamo ugnezdene pogoje.
Zadnji del odločitvenega stavka predstavlja akcija (potem naredi, Then do), s katero spremenimo stanje neke naprave, izpišemo obvestilo, izvedemo kompleksnejšo programsko strukturo (Add Building Blocks), denimo programsko zanko, ali pa izvedemo druge akcije (Other actions), med katerimi lahko na primer zaženemo izbrano avtomatizacijsko skripto iz že omenjenega menija Settings/Automations&scenes. Med ponujenimi akcijami so tudi beležka (Logger), ki omogoča izdelavo sistemskih zapisov o delovanju naše konfiguracije Home Assistanta, pa tudi snemalnik, s katerim lahko zabeležimo vsako spremembo stanja izbrane naprave, vključene v Home Assistant.
Med posebne akcije sodijo tudi tiste iz skupine Kamera (Camera), s katerimi lahko na primer zaznamo gibanje v prostoru (Enable motion datection), snemamo živo sliko, zajamemo fotografijo, predvajamo živo sliko s kamere na drugi napravi. Med mogočimi odzivi je celo (po)govorni odziv. Za pogovor s človekom moramo v House Assistant vključiti tudi storitvi razpoznavanja in sinteze govora, ki nista del zastonjskega Home Assistanta, ampak se moramo nanju naročiti (npr. na Amazon Alexa ali na Google Assistant).
Kompleksne skripte
Daljše skripte, ki jih lahko pokličemo iz avtomatizacijskih skript, lahko vnesemo pod zavihkom Scripts, ki si ga lahko predstavljamo tudi kot nekakšno zbirko krmilnih podprogramov. Skripta je sestavljena iz ene ali več krmilnih akcij in ukaznih gradnikov (Building blocks), ki jih zlagamo v zaporedje. Poleg enostavnih programskih stavkov, ki smo jih omenili pri avtomatizacijskih skriptah, lahko definiramo in uporabljamo tudi spremenljivke in klasične vejitve (if-then). Pri tem je mogoče s posebnimi programskimi strukturami opredeliti, kateri programski stavki, se lahko izvajajo vzporedno, medtem ko lahko za nekatere zahtevamo tudi strogo zaporedno izvajanje. Podatkovni jezik Yaml gre tako v korak z vsemi splošnimi programskimi jeziki.
In kaj, če programa ne želimo urejati v grafiki? Preprosto! V desnem zgornjem kotu oken za urejanje skript lahko vselej pritisnemo na 3 navpično razporejene pikice, s čemer odpremo meni z naprednimi funkcijami, med katerimi čisto na koncu najdemo tudi opcijo za tekstovno urejanje, Edit in Yaml. Ko kliknemo nanjo, se grafični prikaz programa v hipu spremeni v urejevalnik s klasičnim vrstičnim besedilnim zapisom programske kode.
Poganjanje programske kode in razhroščevanje
Tudi vsak programski stavek v Yamlu ima v grafičnem urejevalniku na koncu tri navpične pikice. Če kliknemo nanje, v spustnem meniju opazimo tudi opcijo Run action, s katero jih lahko posamično zaženemo, medtem ko lahko celotno skripto zaženemo tako, da v zgornjem desnem kotu okna skripte prav tako poiščemo tri pike in v spustnem meniju izberemo opcijo Run script.
Sledenje toku programa v skripti lahko vidimo, če v desnem zgornjem kotu skripte kliknemo na besedilo Traces (sledi). V novem oknu se poleg programske kode posameznega programskega stavka pokaže tudi njegovo mesto v izrisanem odločitvenem drevesu (zavihek Step details). Pogoj, za delovanje Traces je, da skripto saj enkrat poženemo.
Poleg zavihka Step details so še trije: Trace timeline (časovni potek sledi), v katerem vidimo časovni potek izvajanja programskih stavkov, Related logbook entries (Povezani vpisi v beležko), kjer vidimo časovni potek proženja akcij, ter Script config (nastavitve skripte), v katerem lahko vidimo in spreminjamo začetne nastavitve za poganjanje skripte.
Vrnimo s zavihku Step details (podrobnosti o koraku), ki ima spodaj še tri podzavihke: Step config (nastavitve koraka) prikazuje začetno konfiguracijo izbranega programskega stavka, Changed variables (spremenjene spremenljivke) vsebuje zapise od spremembah vrednosti spremenljivk med delovanjem programa, in Related logbook entries (povezane entitete v beležki), v katerem lahko vidimo, katere naprave so bile vklopljene/izklopljene, ali so spremenile stanje zaradi učinkovanja programskega stavka.
Omenimo še to, da moramo pri razhroščevanju programske kode le to pogosto spreminjati, s čemer jo izboljšamo in odpravimo napake. Dobro je vedeti, da lahko vrstni red programskih stavkov v grafičnem urejevalniku spreminjamo, če v omenjenem spustnem menijo posameznega programskega stavka izberemo opcijo premakni gor (Move up) ali premakni dol (Move down). Tako nam ni potrebno uporabljati klasičnih metod, kot je izreži in prilepi (angl. cut and paste).
Razširitve in optimizacije
Home Assistant okolje omogoča številne razširitve in optimizacije, med katerimi je ena najbolj priljubljenih Home Assistant Community Store (HACS). Omogoča namestitev številnih uporabniških razširitev funkcionalnosti, med drugim tudi Persistance Simulation, oziroma simulacijo prisotnosti, ki jo lahko uporabimo tudi za preverjanje pravilnosti nastavitev Home Assistanta.
HACS lahko namestimo po navodilih iz spletne strani: https://github.com/hacs na več načinov, odvisno načina namestitve Home Assistanta. Slednjega lahko v računalnik namestimo neposredno kot program v programskem jeziku Python 3 (glej SE340), kot navidezni računalnik s prednameščenim Dockerjem, ali pa kot aplikacijo za Docker, pri čemer moramo slednjega predhodno ročno namestiti. Pri tem je dobro vedeti, da je Home Assistant Docker aplikacija na voljo za arhitekture x86, x64 in ARM64, medtem ko jo lahko na ostalih arhitekturah (npr. RISC-V64) poganjamo, če predhodno prevedemo izvorno kodo, a za to potrebujemo kar nekaj programskih knjižnic, pri katerih prav tako utegnemo naleteti na podobne probleme.
HACS najenostavneje namestimo iz spletne strani na lokalnem Home Assistant strežniku (za tega sem tokrat uporabil Orange Pi 5, lahko pa bi tudi katerikoli drug – tudi navidezni računalnik), ki jo odpremo s povezave my link v navodilu na spletni strani https://www.hacs.xyz/docs/use/download/download. Vendar tovrstna namestitev deluje le v računalniku, v katerega smo namestili Docker. Podrobnejša navodila najdete na spletni strani https://www.hacs.xyz/docs/use/configuration/basic.
Če hočemo HACS namestiti prek odjemalskega računalnika, moramo ubrati drug pristop. Sam sem najprej namestil Portainer (o katerem ste že lahko prebrali v SE337 v 3. delu članka Programiranje ESP32 modulov v Tasmota razvojem okolju), ki omogoča upravljanje Docker virtualizacijskega okolja prek spletne strani na lokalnem strežniku, nakar sem namestil Home Assistant vsebnik (angl. container), iz tega pa odprl konzolno okno, kar je omogočilo njegovo neposredno upravljanje.
Naslednji korak je prenos HACSa v vsebnika z ukazom ‚‘wget -O – https://get.hacs.xyz | bash –‘‘ v imenik custom_components, tako da sem najprej v mapi config ustvarimo podmapo custom_components, če že ne obstaja, se z ukazom cd /config/custom_components preselimo vanjo in nato iz vedemo zgoraj omenjeni ukaz wget. Namesto slednjega lahko datoteke HACS preprosto prekopiramo iz https://github.com/hacs.
Po namestitvi HACS, je namestitev Presence simulation enostavna, saj jo lahko preprosto poiščemo iz novega pregleda HACS, ki je zdaj na voljo iz pregleda na levi strani. Če namestitev Presence simulation spodleti, se lahko lotimo tudi ročne namestitve po pravkar omenjenem postopku za namestitev HACS, le da tokrat ustvarimo imenik presence_simulation. Izvorne datoteke Presence simulation in navodila za namestitev najdemo na github.com/slashback100/presence_simulation.
Simulacija prisotnosti
Osnovni namen simulacije prisotnosti je posnemanje našega običajnega obnašanja, ko smo doma tudi, kadar nas ni. Denimo, Presence simulation si lahko, medtem ko smo doma, zapomni zaporedje prižiganja luči, tudi spuščanja in dviganja senčil, v enem ali več dnevih. Ko nas ni doma, lahko temu zaporedju doda naključno komponento, s čemer lahko zelo dobro posnema naše obnašanje. Zato bo naključni nepridiprav, ki se bo potepal okoli naše ga stanovanja, še posebej, če je v samostojni hiši, verjel da smo doma.
Presence simulation omogoča enostavno dodajanje novih navideznih komponent z gumbom Add entry. Vsaki komponenti iz spustnega seznama določimo tip (denimo stikalo), ki ga lahko po potrebi tudi spremenimo (denimo v luč ali v drugo napravo), ki jo potrebujemo za simulacijo. Avtomatizacijo nato izvedemo z navideznimi napravami, namesto s pravimi.
Lahko pa delovanje simulacije prisotnosti vsekakor preverimo tudi na pravih napravah, ko smo doma, s čemer s prepričamo, da bo res delovalo…
Prihodnjič
Tokrat smo spoznali pomen avtomatizacij in simulacij, s katerimi lahko testiramo Home Assistant tudi, če še nismo namestili strojne opreme. Prihodnjič se lotimo izmišljenega praktičnega primera avtomatizacije doma, v katero bomo vključili več prostorov doma (npr. dnevna soba, kuhinja, spalnica, otroška soba, hodnik, garaža itn.) in več naprav (npr. luči, senčila, klimatska naprava, rekuperator, garažna vrata, tipala za prisotnost, … ). Vključili bomo tudi razumevanje in sintetizacijo govora.