Díl 9: Chytré zásuvky
Úvod
V dnešním díle se podíváme na chytré zásuvky a pár automatizací a nápadů, co se s nimi dá provádět.
Chytré zásuvky nám přinášejí několik výhod. Můžeme díky nim na dálku pomocí libovolných automatizací vypínat a zapínat jakékoliv zařízení chceme. Druhou výhodou je, že každá zásuvka se v naší Zigbee síti chová jako router. To znamená, že nám poměrně efektivně rozšiřuje pokrytí. Pokud tedy máte na nějakých místech problém se signálem, tak stačí „v půlce cesty“ zapojit chytrou zásuvku a problém se dost často vyřeší. V neposlední řadě si můžeme pomocí zásuvky měřit spotřebu energie.
Zásuvek existuje na trhu nepřeberné množství, všechny fungují víceméně stejně. Ale jeden velký rozdíl tam přece jenom je, a to ve způsobu měření spotřeby. Některé zásuvky měří spotřebu okamžitou a jiné takzvaným pollingem (sbírá se hodnota vždy v nějakém časovém okně, např. 1 minuta). Výrazně přesnější je první varianta.
Co budeme potřebovat
- nainstalovaný a nastavený HA a Zigbee2MQTT addon
- chytrou zásuvku (např. Zigbee Smart Plug 20A EU)
Integrace zásuvky
Pro integraci využijeme náš Zigbee2MQTT addon, který jsme si nainstalovali a nastavili v předchozím dílu. V levém menu tedy klikneme na Zigbee2MQTT (pokud ho v levém menu nemáme, tak přes Settings->Addons->Zigbee2MQTT-> Open WEB UI). Zásuvku si zapojíme do zásuvky a na 5 sekund podržíme tlačítko na boku. Tlačítko by se mělo modře rozblikat, což indikuje, že jsme v párovacím módu. V Zigbee2MQTT povolíme připojení nových zařízení klepnutím na „Povolit připojení (Vše)“ a po pár sekundách by se nám zásuvka měla objevit v addonu.

Nyní klepneme na modrou tužku vlevo, zásuvku si pojmenujeme a zaškrtneme „Aktualizovat ID entity v Home Assistant“.

Tím máme zásuvku integrovanou a můžeme se pomalu vrhnout na promýšlení a programování automatizací. Ještě si ukážeme jaké hodnoty nám zásuvka reportuje:
- State on/off – signalizuje, zda je zásuvka vypnutá nebo zapnutá.
- Countdown – čas, za který se zásuvka vypne.
- Power outage memory – co se stane po výpadku proudu – zda se zásuvka zapne/vypne nebo obnoví do stavu před výpadkem.
- Indicator mode – nastavení LED na tlačítku.
- Power – okamžitý naměřený výkon.
- Current – okamžitý naměřený proud.
- Voltage – naměřená hodnota elektrického potenciálu.
- Energy – součet spotřebované energie.
- Child lock – povolí/zakáže fyzický vstup do zařízení (vypne/zapne tlačítko).
- Linkquality – síla signálu.

Automatizace a reálná využití
Zásuvek mám doma celkem deset. Používám je primárně na monitoring spotřeby elektrického proudu a pro vypínání/zapínání spotřebičů. U většiny používám pouze základní automatizaci pro vypnutí/zapnutí a to ve dvou variantách. První varianta je po 15 minutách. Tu používám např. pro rychlovarnou konvici, Nespresso, mlýnek na kávu a další podobné přístroje. Zásuvku před použitím zapnu fyzickým tlačítkem a po 15 minutách se sama vypne. Druhá varianta: při odchodu všech členů domácností se ověří, zda jsou potřebné zásuvky vypnuté a pokud ne, tak se vypnou. To je taková pojistka, kdyby náhodou selhala 15minutová automatizace.
Dále mám nastavenou ještě jednu speciální automatizaci pro lampičku, kde je žárovka od Hynka Medřického. Žárovka má celkem tři módy a ty se aktivují vypnutím/zapnutím lampičky (žárovky). První zapnutí rozsvítí bílé světlo, druhé zapnutí večerní žluté světlo a třetí zapnutí oranžové noční světlo. Dle času, kdy se lampička rozsvítí se buď zapne jednou, dvakrát a nebo třikrát.
Jednu zásuvku také používám před rackem, kde je zapojeno Raspberry Pi, router, NAS, UPSka a počítač, ale ta je pouze pro měření spotřeby.
Vypnutí po 15 minutách
Tato základní automatizace je velmi jednoduchá. Vše nastavíme v Settings->Automations & Scenes -> Create automation. V položce When klepneme na Add Trigger -> Device a vyhledáme naši zásuvku. Jako trigger zvolíme „turned on“, tj. akci, která se má stát při zapnutí zásuvky a v sekci for si nastavíme čas po jaké době se automatizace spustí.
Poté v sekci Then do klepneme na Add Action -> Other actions -> Perform action. Vyhledáme Switch: Turn off a potvrdíme. V sekci Targets klepneme na Choose entity a vyhledáme naši zásuvku.

Případně můžete využít kód níže, jen si musíte přepsat názvy entit, které se u vás budou lišit.
Kód automatizace
alias: Smart Plug - Toaster & Kettle
description: ""
mode: single
triggers:
- type: turned_on
device_id: cb1513908e01136edd4d91eb9b45bc0d
entity_id: 1e063bd8d38b42ae720cfd88d2178112
domain: switch
for:
hours: 0
minutes: 15
seconds: 0
trigger: device
conditions: []
actions:
- target:
entity_id: switch.smart_plug_toaster_kettle
data: {}
action: switch.turn_off
Vypnutí při odchodu z domácnosti
Tato automatizace je trochu složitější, ale není to nic hrozného. Potřebujete mít zadané jednotlivé obyvatele domácnosti v HA (jejich telefon), mít přístup k jejich GPS poloze a definovat si v aplikaci domácí zónu a její perimetr.
Definici zóny si nastavíme v Setting->Area, labels & zones a přesuneme se do záložky Zones, poté dole klikneme na Create zone. Vyplníme si název (já jsem si zvolil „Home“) a potom buď vyhledáme adresu na mapě a klikneme do mapy, a nebo můžeme zadat přesné souřadnice. Nakonec upravíme Radius tak, aby byl kruh co nejblíže našemu domu.

Dále v aplikaci na telefonu ověříme, zda je povolená poloha. Přesuneme se tedy do Settings -> Companion App->Správa senzorů a zde vyhledáme Senzory polohy a ujistíme se, že je zapnuto Jedno přesné umístění, poloha na pozadí a poloha zóny.

Teď máme vše připravené a můžeme se vrhnout na automatizaci.
V políčku When klepneme na Add trigger, vybereme Entity a poté State. V políčku Entity si vyhledáme osobu, dle které se má automatizace řídit. Dále v políčku To (optional) vybereme Away (pokud bychom chtěli akci opačně, tj. když osoba přijde domů, tak vybereme Home). Pokud chceme přidat ještě další osoby, tak využijeme And if (optional) jako další podmínku. V mém případě se tedy automatizace spustí, když odejdu ze zóny Home a dále se ověří, zda je manželka doma. Pokud ano, tak se nestane nic, pokud doma není, tak se automatizace spustí. Volitelně si ještě můžeme nastavit položku For a vyplnit čas, jak dlouho musí být daná osoba mimo zónu pro spuštění automatizace.

V posledním kroku si nastavíme, co se má stát po spuštění automatizace. V tomto případě je to jednoduché: vypnou se tři zásuvky. V položce Then do tedy klepneme na Add action, vyhledáme Switch: Turn off a poté klepnutím na Choose entity přidáme entity (zásuvky), které chceme vypnout.

Kód automatizace
alias: Kettle & Nespresso & Grind turn off when nobody home
description: ""
mode: single
triggers:
- entity_id:
- person.domov
to: not_home
trigger: state
conditions:
- condition: state
entity_id: person.majda
state: not_home
actions:
- target:
entity_id:
- switch.smart_plug_nespresso
- switch.smart_plug_coffee_grinder
- switch.smart_plug_toaster_kettle
data: {}
action: switch.turn_off
Automatizace pro lampičku
Automatizace pro lampičku se spouští na základě kliknutí na tlačítko, které mám přilepené v pracovně. Integraci a automatizace si ukážeme v příštím díle, v domácnosti mám totiž více tlačítek pro různá využití, takže si tlačítka zaslouží vlastní díl :). Jak už jsme si řekli, žárovka v lampičce funguje podle počtu zapnutí a vypnutí, v automatizaci tedy blikneme s chytrou zásuvkou za kterou je lampička připojena buď jednou, dvakrát a nebo třikrát a to dle denní doby:
- Pokud je čas mezi 8:00 – 19:00h = bílé světlo – klikneme 3x
- Pokud je čas mezi 19:00 – 00:00h = žluté světlo – klikneme 2x
- Pokud je čas mezi 00:00 – 8:00h = oranžové světlo – klikneme 1x
Pro tlačítko jako takové mám samostatnou automatizaci, kterou si taky ukážeme v příštím díle. Tato automatizace se spustí na základě zapnutí lampy, tj. nejdříve se spustí první automatizace po kliknutí na tlačítko, tím se lampa (zásuvka) zapne a poté se vypíná/zapíná dle denní doby, aby svítilo to správné světlo.
V políčku When mám tady jako Trigger nastaveno Device, a to je chytrá zásuvka, a v Triggeru je vyplněno Smart Plug – Desk Lamp turned on, automatizace se tedy spustí po zapnutí zásuvky.
V políčku Then do mám Block Choose (ten už jsme používali i v předešlých dílech). Na základě denní doby se tedy spustí možnost 1,2 nebo 3.
Automatizace by se ještě dala rozšířit například o to, aby se již zapnutá lampička sama v určitých časech přepnula do správného módu.




Kód automatizace
alias: Smart Plug - Desk Lamp - general
description: ""
mode: single
triggers:
- type: turned_on
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
trigger: device
conditions: []
actions:
- choose:
- conditions:
- condition: time
after: "08:00:00"
before: "19:00:00"
sequence:
- type: turn_on
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 500
- type: turn_off
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 500
- type: turn_on
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 500
- type: turn_off
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 500
- type: turn_on
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 1
milliseconds: 0
- conditions:
- condition: time
after: "19:00:00"
before: "00:00:00"
sequence:
- type: turn_on
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 500
- type: turn_off
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 500
- type: turn_on
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 1
milliseconds: 0
- conditions:
- condition: time
after: "00:00:00"
before: "08:00:00"
sequence:
- target:
entity_id: switch.smart_plug_desk_lamp
data: {}
action: switch.turn_on
Automatizace pro pračku a sušičku
Sušičku i pračku přes zásuvku vzdáleně nevypínám, ale posílám si notifikace na můj a manželčin telefon. Princip automatizace je jednoduchý. Pokud odběr na zásuvkách klesne pod určitou úroveň a po určitou dobu, přijde nám na telefon notifikace. Hodnoty je lepší si vysledovat na svých přístrojích, každá pračka a sušička funguje jinak a má jiné cykly a odběry. Doporučuji pustit pračku a sušičku a po dokončení praní/sušení se podívat na graf entit výkon (naleznete ho v Setting->Devices->Vyhledáte své zařízení->Klepnete na entitu výkon) a dle toho si nastavit hodnoty pro spuštění automatizace.
Notifikace posílám jak po spuštění praní/sušení, tak i po ukončení. Začátek se hodí například proto, že pokud jsem chtěl něco vyprat a zrovna nejsem doma, můžu ještě domů poslat zprávu a praní se dá pozastavit a přihodit prádlo :).
Nejprve si potřebujeme vytvořit dva helpery, jeden pro pračku a jeden pro sušičku. Helpery už jsme používaly v minulých dílech, takže jen ve zkratce. Najdeme je v Settings->Devices & services-> záložka Helpers. Klepneme na Create Helper, vyhledáme Toggle, zvolíme si nějaký název (v mém případě washing_machine_running a dryer_running), pokud chceme, ještě si nastavíme ikonku a máme hotovo. Helpery nám pak poslouží na dashboardu k signalizaci, zda je pračka nebo sušička v provozu.
Nyní k automatizaci jako takové. V sekci When si tedy přidáme Trigger a entitu nastavíme na výkon naší zásuvky. Já jsem si pro spuštění nastavil hodnotu Above = 10, tj. výkon je větší než 10 W. Dále využijeme Trigger ID, které jsme už používali i v minulých dílech. Tím se pak můžeme v Then do bloku odkázat na tento trigger a provést příslušnou akci. To samé uděláme i pro sušičku. A triggery pro spuštění praní/sušení máme hotové!

Dále si přidáme další dva triggery pro ukončení praní/sušení. Princip je podobný, akorát místo Above použijeme Below, v tomto případě Below = 3 pro pračku a Below = 1 pro sušičku. Dále doplníme For, tedy čas, jak dlouho tam má být tato hodnota pro spuštění automatizace, v tomto případě For = 1:30 pro pračku a 8:00 pro sušičku. Je to z toho důvodu, že moje pračka má po ukončení praní téměř nulový odběr. Sušička se ještě v různých intervalech spouští i po ukončení, tj. má stále nějaký odběr.

Teď se přesuneme do sekce Then do, kde si opět vytvoříme Building Block a zvolíme Choose. Budeme mít celkem čtyři Options. Dva pro poslání notifikací při začátku praní/sušení a dva pro notifikace při konci praní/sušení.
Nejprve si přidáme Condition – Triggered By a vybereme washing-machine-start (to je naše Trigger ID, které jsme nastavovali v sekci When), dále přidáme další Condition a to Entity->State a vyhledáme náš helper. V State nastavíme Off. Tím předejdeme tomu, že by se nám znovu poslala notifikace na již běžící pračku/sušičku. Tím máme Conditions pro Option 1 hotové.


Nyní klikneme na Add Action, vyhledáme Send a vybereme Notifications: Send a notification message via (zde bude název našeho telefonu). Do políčka message napíšeme zprávu, která se nám pak zobrazí v notifikaci a do políčka title nadpis notifikace. Do pole data vyplníme následující text:
Pro Android:
tts_text: Washing process started.
media_stream: alarm_stream_max
ttl: 0
priority: high
Pro Apple zařízení nemusíme vyplňovat nic. Teoreticky nemusíme nic vyplňovat ani pro Android, ale já jsem měl na svém telefonu občas problém s přijímáním notifikací, proto jsem raději přidal do pole data tento text.
Pokud chceme notifikaci posílat na více telefonů, pouze přidáme další stejnou akci, akorát zvolíme jiný telefon.

V posledním kroku si přepneme náš helper do stavu On, přidáme tedy další akci, vyhledáme Input boolean a vybereme Input boolean: Turn on.

Pro další Option na ukončení praní budeme postupovat úplně stejně, jen vybereme jiné příslušné Trigger ID, změníme si zprávy a nadpisy u notifikací a náš helper budeme přepínat do stavu Off. Úplně stejně vytvoříme další dva Options pro sušičku, jen opět změníme Trigger ID, názvy entit, zprávy, nadpisy a helper.
Jako poslední klepneme na tři tečky v pravém horním rohu, vybereme Change mode a nastavíme Queued. Tím zajistíme, že pokud by se pračka nebo sušička zapnuly/vypnuly ve stejném okamžiku, přijdou nám obě dvě notifikace. V módu Single by se mohlo stát, že by přišla pouze jedna.
Tím máme automatizaci hotovou a měly by nám začít chodit notifikace na telefon. Otestovat si to můžete v Developer tools, které naleznete v levém menu. Klepnete na ně, nahoře v záložce vyberete States, ve Filter entities si vyhledáte svoji entitu pro výkon zásuvky a klepnete na ni. V políčku State si vyplníte hodnotu, která bude nižší/vyšší než hodnota v trigger v automatizaci a klepnete na Set State. Do pár sekund by vám měla přijít notifikace.

Developer tools je velmi užitečný nástroj pro testování a ladění automatizací, takže pokud chcete cokoliv testovat, ladit a nebo vám jen něco nefunguje, určitě ho využijte!
Přidání entit do dashboardu
V posledním kroku si přidáme naše helpery a stavy zásuvek do dashboardu. Využijeme k tomu Mushroom Template Card, kterou jsme si instalovali a ukazovali v tomto díle. Konfigurace je trochu složitější, takže níže máte celý kód, který si případně upravte dle libosti. Samozřejmě jako vždy musíte minimálně změnit názvy entit

Náhled dahboardu pro stavy pračky a sušičky
type: vertical-stack
cards:
- type: horizontal-stack
cards:
- type: custom:mushroom-template-card
entity: input_boolean.washing_machine_running
primary: |-
{% if is_state('input_boolean.washing_machine_running', 'on') %}
Washing machine: running
{% else %}
Washing machine
{% endif %}
icon: mdi:washing-machine
icon_color: |-
{% if is_state('input_boolean.washing_machine_running', 'on') %}
green
{% else %}
grey
{% endif %}
layout: horizontal
fill_container: true
tap_action:
action: more-info
- type: custom:mushroom-template-card
entity: switch.smart_plug_washing_machine
primary: Plug
icon: mdi:power-socket-eu
icon_color: |-
{% if is_state('switch.smart_plug_washing_machine', 'on') %}
yellow
{% else %}
grey
{% endif %}
layout: horizontal
fill_container: true
tap_action:
action: toggle
- type: horizontal-stack
cards:
- type: custom:mushroom-template-card
entity: input_boolean.dryer_running
primary: |-
{% if is_state('input_boolean.dryer_running', 'on') %}
Dryer: running
{% else %}
Dryer
{% endif %}
icon: mdi:tumble-dryer
icon_color: |-
{% if is_state('input_boolean.dryer_running', 'on') %}
green
{% else %}
grey
{% endif %}
layout: horizontal
fill_container: true
tap_action:
action: more-info
- type: custom:mushroom-template-card
entity: switch.smart_plug_dryer
primary: Plug
icon: mdi:power-socket-eu
icon_color: |-
{% if is_state('switch.smart_plug_dryer', 'on') %}
yellow
{% else %}
grey
{% endif %}
layout: horizontal
fill_container: true
tap_action:
action: toggle
Kód automatizace
alias: Washing machine & Dryer notification
description: ""
triggers:
- trigger: numeric_state
entity_id:
- sensor.smart_plug_washing_machine_power
above: 10
id: washing-machine-start
- trigger: numeric_state
entity_id:
- sensor.smart_plug_washing_machine_power
for:
hours: 0
minutes: 1
seconds: 30
below: 3
id: washing-machine-end
- trigger: numeric_state
entity_id:
- sensor.smart_plug_dryer_power
above: 15
id: dryer-running
- trigger: numeric_state
entity_id:
- sensor.smart_plug_dryer_power
for:
hours: 0
minutes: 8
seconds: 0
below: 1
id: dryer-end
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- washing-machine-start
- condition: state
entity_id: input_boolean.washing_machine_running
state: "off"
sequence:
- action: notify.mobile_app_pixel_7_pro
metadata: {}
data:
message: Washing has been started.
data:
tts_text: Washing process started.
media_stream: alarm_stream_max
ttl: 0
priority: high
title: Washing machine
- action: notify.mobile_app_iphone_magdalena
metadata: {}
data:
message: Washing has been started.
title: Washing machine
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.washing_machine_running
- conditions:
- condition: trigger
id:
- washing-machine-end
sequence:
- action: notify.mobile_app_pixel_7_pro
metadata: {}
data:
title: Washing machine
message: Washing process ended.
data:
tts_text: Washing process ended.
media_stream: alarm_stream_max
ttl: 0
priority: high
- action: notify.mobile_app_iphone_magdalena
metadata: {}
data:
message: Washing process ended.
title: Washing machine
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.washing_machine_running
- conditions:
- condition: trigger
id:
- dryer-running
- condition: state
entity_id: input_boolean.dryer_running
state: "off"
sequence:
- action: notify.mobile_app_pixel_7_pro
metadata: {}
data:
title: Drying
message: " Drying process started."
data:
tts_text: Drying process started.
media_stream: alarm_stream_max
ttl: 0
priority: high
- action: notify.mobile_app_iphone_magdalena
metadata: {}
data:
message: Drying process started.
title: Drying
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.dryer_running
- conditions:
- condition: trigger
id:
- dryer-end
sequence:
- action: notify.mobile_app_pixel_7_pro
metadata: {}
data:
title: Drying
message: Drying process ended.
data:
tts_text: Drying process ended.
media_stream: alarm_stream_max
ttl: 0
priority: high
- action: notify.mobile_app_iphone_magdalena
metadata: {}
data:
message: Drying process ended.
title: Drying
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.dryer_running
mode: queued
Závěr
V dnešním díle jsme si ukázali sílu chytrých zásuvek a jak se dají využít v domácnosti. Různých druhů použití existuje nespočet a každý doma používá jiné zařízení, takže pro něj využití budou jiná. V budoucnu ještě plánuji dát jednu chytrou zásuvku před 3D tiskárnu, aby se vypnula po ukončení tisku a vychladnutí trysky a podložky.
Pokud by vás zajímalo pokročilejší monitorování energie, dejte mi vědět v komentářích a můžeme si o tom více povědět v nějakém z dalších dílů. Notifikace na telefon v budoucnu ještě využijeme např. pro senzor detekce kouře, protože pokud vám doma hoří, je dobré to vědět :).
No comments to display
No comments to display