Režimy automatizace
První zásadní novinkou, která je v HomeAssistantovi dostupná od verze 0.113 jsou nové režimy automatizace – automation modes, která nám pomáhají definovat co se má stát pokud je automatizace vyvolána pomocí spouštěče, ale stále ještě běží akce z předchozího spuštění automatizace.
Můžeme definovat následující čtyři různá chování:
- jediné volání (single) – jedná se o výchozí chování, dokud nedoběhne akce z předchozího volání automatizace nová akce není spuštěna a zaloguje se pouze varování
příklad v logu:2020-07-26 17:12:48 WARNING (MainThread) [homeassistant.components.automation] Automation single: Already running
- restart – způsobí ukončení i ještě nedokončeného volání automatizace v případě, že je automatizace zavolána znovu
- fronta (queued) – nové volání automatizace je umístěno do fronty a spuštěno až jakmile je předchozí volání automatizace dokončeno
- paralelní (parallel) – určuje že mohou běžet dvě stejné automatizace paralelně, tj. v případě že již jedno volání automatizace běží a je zavoláno znovu tak bude stávající volání pokračovat k dokončení a zároveň je spuštěno o volání druhé
V případě možnosti fronta a paralelní máme navíc možnost nastavit maximální počet spuštění zařazených do fronty, resp. spuštěných paralelně. Výchozí hodnotou je 10.
Režim automatizace je možné kompletně nastavovat i přes UI:
V aktuální verzi obsahuje drobnou chybku – výchozím nastavením režimu by měla být hodnota Jediný
a ne Paralelní
– tento problém je pouze v překladu a už je pro budoucí verzi opravený.
Možnosti opakování – repeats
Tato funkcionalita bohužel zatím není dostupná v UI, takže pokud ji chcete nyní použít tak musíte použít YAML.
Možnost opakování obecně slouží k zavolání akce nebo její části vícekrát na základě počtu nebo podmínky.
1. s definovaným počtem opakování
Následující automatizace vyvolá celkem 5x spuštění služby light.toggle
(přepnutí stavu světla on/off) a mezi jednotlivými opakováními bude prodleva (delay) 2 sekundy.
automation:
- trigger:
...
condition:
...
action:
repeat:
count: 5
sequence:
- delay: 2
- entity_id: light.philips_hue_1
service: light.toggle
Blok můžeme nastavit i přes UI, ale prostřednictvím YAML bloku, který bude svítit jako nepodporovaná akce, ale funguje to.
2. while loop
Spuštění a opakování akce je definováno podmínkou, tj. v případě nesplnění podmínky není akce vůbec zavolána.
Následující automatizace způsobí přepínání stavu světla hue1 s prodlevou 2 sekundy pokud a pouze pokud bude v době zavolání automatizace svítit světlo hue2.
repeat:
sequence:
- delay: 2
- entity_id: light.philips_hue_1
service: light.toggle
while:
- condition: state
entity_id: light.philips_hue_2
state: 'on'
3. repeat until
Spuštění akce minimálně jednou a opakování jen v případě splnění podmínky tak dlouho dokud je podmínky splněna.
Pokud bychom použili velice podobnou automatizaci jako výše pro while loop tak jediným rozdílem je spuštění akce i v případě, že světlo hue2 nebude svítit. Ostatní chování zůstává stejné.
repeat:
sequence:
- delay: 2
- entity_id: light.philips_hue_1
service: light.toggle
until:
- condition: state
entity_id: light.philips_hue_2
state: 'on'
Jiná akce na základě podmínky – chooser
Velmi užitečnou novinkou, která je bohužel také přítomná pouze pomocí YAML, tj. nejde nastavit přímo v UI je chooser, který nám umožňuje spouštět různé akce na základě podmínek
První úspěšně vyhodnocená podmínka způsobí spuštění příslušné akce a další podmínky se pak už nevyhodnocují. V případě, že není splněna ani jedna podmínka můžeme definovat sekci default, která je v tomto případě zavolána.
Následující příklad je tak trochu spíše učebnicový – šel by vyřešit elegantněji. V případě pokud světlo Philips Hue 1 svítí pak je vypnuto, pokud je vypnuto tak je zapnuto a pokud stav není ani on/off pak je poslána notifikace, že světlo není dostupné.
automation:
- alias: "Chooser"
trigger:
- platform: event
event_type: deconz_event
event_data:
event: 1002
id: xiaomi_switch_1
action:
- choose:
- conditions:
- condition: state
entity_id: light.philips_hue_1
state: "on"
sequence:
- service: light.turn_on
entity_id: light.philips_hue_1
- conditions:
- condition: state
entity_id: light.philips_hue_1
state: "off"
sequence:
- service: light.turn_off
entity_id: light.philips_hue_1
default:
- service: notify.iphone
data:
message: Philips Hue neni dostupne
Delay s definici jednotky
Poslední novinkou, která už není tak významná, ale může být užitečná je možnost nastavit jednotku v případě použití delay – čekání.
Např. použití milisekund namísto výchozích sekund:
- delay:
milliseconds: 500
Jak vidíte s novou verzí se zase možnosti automatizací přímo v HomeAssistentovi o kus posunuli, nicméně stále je bohužel spousta změn dodávána pouze do YAML verze a definice přes UI je tak trochu stále na druhé koleji.
Já tak zatím zejména na složitější automatizace preferuji NodeRed. A jak jste na tom vy? Který způsob automatizací používáte nejčastěji a který vám nejvíce vyhovuje?
Kompletní minisérie o vytvoření domácí automatizace obsahuje následující články:
Ahoj, máš tam 2x „service: light.turn_off“
Ach pravda, opraveno… díky
Zdravím, mohl byste mi prosím dát odkaz, kde se dá nastudovat notifikace na iPhony ? Díky
Vše podstatné by mělo být myslím popsané zde: https://companion.home-assistant.io/docs/notifications/notifications-basic
Ano, děkuji,