Budu vycházet z toho jak je automatizace pojatá v Home Assistantovi, jelikož se kolem něj točí i celý můj blog, ale věřím, že to bude možné aplikovat i v mnohem obecnější rovině automatizace, jako jedná z částí chytré domácnosti, neboli Smarthome.
Troufám si odhadnout, že automatizace je a bude jedním z největším článků skutečného přínosu chytré domácnosti a může nám přinést jak úsporu času a peněz, tak také kvalitnějšího a spokojenějšího života ve vaší domácnosti.
Podíváme se nejprve na základní pojmy a pak si na modelovém příkladu ukážeme konkrétní řešení ve dvou systémech – pomocí automatizací Home Assistanta a pomocí workflow v Red-Node.
Tyhle dva systémy jsem vybral záměrně, jelikož je to ukázkový příklad úplně jiných způsobů. Detailnější informace si k nim pak představíme v navazujících článcích později.
Základní kameny
Automatizace je (zatím stále ještě, v budoucnosti může být částečně nebo úplně nahrazena určitou formou AI) definice, kdy říkáme centru a nebo jednotlivých prvkům chytré domácnosti jak mají zareagovat (např. zapni světlo v místnosti) – ? AKCE – na určitou událost (např. někdo přišel domů) či změnu měřené veličiny (např. teplota v místnosti přesáhla určitou mez) – ? SPOUŠTĚČE.
Zároveň můžeme, ale taky nemusíme, mezi spouštěč a akci přidat omezující ?PODMÍNKY na aktuální stav jiných komponent chytré domácnosti (např. jen pokud nesvítí žádné světlo v místnosti?) či dalších stavů okolo nás (např. je už po západu slunce?).
Častým problémem na začátku bývá představit si rozdíl mezi spouštěčem a podmínkou a pravdou je, že hranice mezi těmito dvěma pojmy je velice tenká a často bývají mixovány.
Pro zjednodušení si můžeme představit ? SPOUŠTĚČ jako změnu mezi dvěma stavy – něco se mění z jedné hodnoty na druhé – kdežto ? PODMÍNKY obsahují pouze jednu hodnotu a to aktuální stav v době spuštění spouštěče.
Příklad modelové situace
? Mějme příklad situace, kdy chceme aby se nám po příchodu domů zapnuly automaticky všechny malé světla v pokoji, pokud je po západu slunce.
Pokud se zamyslíme máme dvě možnosti, které nám mohou tuhle situaci vyřešit.
1. varianta automatizace
V první možnosti budeme sledovat změny stavu slunce a jakmile dojde k západu slunce tak zkontrolujeme stav zda jsme doma – ? spouštěč je západ slunce a ? podmínka stav zda jsme doma či nikoliv.
2. varianta automatizace
V možnosti druhé si naopak budeme všímat změny stavu naší osoby, zda jsme doma či nikoliv a jakmile se stav změní, že jsme doma pak zkontrolujeme jestli je po západu slunce – ? spouštěč je stav naší osoby a ? podmínkou západ slunce.
Vyhodnocení variant z pohledu akce
A nyní pokud přijdeme po západu slunce 2x domů – během večera si někam odskočíme – pak:
- v prvním případě se ? akce zapnutí světel v pokoji provede pouze jednou
- v druhém případě se ? akce zapnutí světel provede 2x, jelikož stav naší osoby se změní právě 2x.
? Vidíte ten rozdíl? Proto je velmi užitečné se zamyslet nad tím co bude pro nás spouštěč a co naopak podmínky, jelikož konečné reakce mohou být jiné. Zároveň nemůžeme jednoznačně říct, že jedna z varianta je špatně – záleží jen na tom čeho chceme docílit.
A nyní abychom to neměli tak teoretické, pojďme se zatím jen pro představu podívat jak by takové automatizace vypadaly ve dvou reálných řešeních.
Řešení pomocí HomeAssistanta
Aby to nebylo úplně jednoduché v HomeAssisstantovi máme hned dvě možnosti jak definovat automatizaci. Buď použijeme UI, které je stále v rané fázi a nebo použijeme YAML konfiguraci. Já pro tento případ použiji variantu druhou a nastavení přes UI si ukážeme na druhém řešení pomocí Node-Red.
1. varianta – spouštěčem je změna stavu slunce
id: lampicky_po_zapadu
alias: Zapnout lampičky po západu slunce pokud je Pepa doma
trigger:
- platform: sun
event: sunset
condition:
- condition: state
entity_id: device_tracker.josef_novak
state: 'home'
action:
- service: light.turn_on
data:
entity_id:
- light.myroom_small_lights
2. varianta – spouštěčem je změna stavu osoby
id: lampicky_po_prichodu_josef_novak
alias: Zapnout lampičky při příchodu Pepy pokud je po západu slunce
trigger:
- platform: state
entity_id: device_tracker.josef_novak
to: 'home'
condition:
- condition: sun
after: sunset
action:
- service: light.turn_on
data:
entity_id:
- light.myroom_small_lights
Jak můžete vidět kód je v obou případech hodně podobný a mění se pouze jednotlivé bloky, kde jednotlivé stavy použijeme.
Řešení pomocí Node-Red
O Node-Red jsem žádný článek ještě nenapsal, takže opravdu zatím jen pro představu. Pokusím se alespoň ve stručnosti – Node-Red je webové rozhraní pro definování workflow s téměř neomezenými možnostmi. Existuje i jako Hass.io addon, který obsahuje spousty užitečných prvků přímo pro HomeAssistanta.
V našem jednoduchém příkladu nám počet použitých prvků – tzv. uzlů – přesně odpovídá kombinaci – Spouštěč -> Podmínka -> Akce.
1. varianta – spouštěčem je změna stavu slunce
Uzel Západ slunce
2. varianta – spouštěčem je změna stavu osoby
Uzel Příchod domů
Uzel Zapni lampičky
Jak jste mohli vidět definice automatizací nemusí být až tak složitá jak to možná někdy vypadá. Důležité je však vždy se na začátku zamyslet.
V dalších článcích se podíváme na detaily obou řešení a do budoucna bych rád přidal i možnost automatizace přímo na koncových zařízeních, tj. například s firmware Tasmota či ESPHome.
Pokud máte už nyní nějaké dotazy či náměty na další díly neváhejte se ozvat a můžete tak ovlivnit i o čem to vlastně celé nakonec bude 🙂 Věřím, že to může být příjemná změna oproti někdy poněkud nudné dokumentaci.
Dobrá práce !
Paráda!
Jsem zvědav kde se to bude vyvíjet. Do HA pronikám už dva roky a stále jsem někde na začátku.
Vynikající práce.
Chvíli jsem si hrál s Domoticz a teť jsem přešl na HA a ESPHome a stále si připadám, že nic neumím. 🙂
U yaml prikladu je prohozene ID a popis, takze to muze mast jak to funguje.
A u node-red je popis x trigger taky obracene.
Ondřeji díky moc za upozornění! Jsem se do toho koukám sám zamotal 🙂
Ještě k podmínce „po západu slunce“. Nejspíš v realitě chceme docílit toho, aby se lampičky rozsvítily po západu slunce, ale zároveň i druhý den ráno, pokud vstaneme před východem, to už vlastně tato podmínka neplatí nebo?
To bychom pak museli použít asi něco jako…
condition:
– condition: or
conditions:
– after: sunset
after_offset: -01:00:00
condition: sun
– before: sunrise
condition: sun
..Ale to jen vařím z vody. Ještě jsem to nezkoušel v reálu 🙂