Home Assistant seriál s Jakubem: Díl 10: Chytrá tlačítka
Úvod
V minulém díle jsme se lehce dotkli chytrých tlačítek. Chytrá tlačítka si určitě zaslouží vlastní díl – i když bude asi trochu kratší než ostatní. V předešlých dílech jsme si už ukázali vypínač od Sonoffu, který ale sloužil primárně k ovládání světel. Dnes si ukážeme bezdrátová WiFi tlačítka, která můžete nalepit nebo přivrtat kamkoli chcete a k jejich provozu stačí jen baterie, WiFi a špetka automatizace.
Chytrá tlačítka můžete použít pro sepnutí/zapnutí/vypnutí prakticky čehokoliv. Obrovskou výhodou je, že k tomu nepotřebujete jen chytrý telefon.
Tlačítek a vypínačů existuje na trhu velké množství, níže máte odkazy na ty, které mám vyzkoušené několik měsíců a fungují bez problémů.
Co budeme potřebovat:
- nainstalovaný a funkční HA
- Zigbee Chytrý vypínač – Tuya
- Zigbee Chytrý vypínač s dvojitým relé – Tuya
- Zigbee Chytrý vypínač s trojitým relé – Tuya
- Zigbee Chytré tlačítko
- 1x CR2032 baterie
Krátce o tlačítkách a vypínačích
Jak jsme si už řekli, tlačítek a vypínačů najdete na internetu nepřeberné množství. V současnosti mám jeden vypínač s třemi tlačítky, jeden se dvěma tlačítky a dva malé jednotlačítkové spínače („buttony“) a využívám je pro poměrně jednoduché vypínání/zapínání spotřebičů, zásuvek a světel.
Vypínače Moes
Všechny tři typy (jedno, dvou nebo třítlačítkový) se integrují naprosto stejně. Každé tlačítko podporuje tři typy akcí (stisk, dvojstisk, podržení), ke kterým můžeme přiřadit automatizace. Nemusíme tedy tlačítka používat jen k zapínání/vypínání jednoho spotřebiče, ale můžeme si nastavit až tři různé akce na jedno tlačítko. Třítlačítkový vypínač se hodí do větších místností nebo pro ovládání více spotřebičů. Můžete si třeba nastavit ovládání rolet, světel nebo klimatizace – a to vše díky automatizacím pouze v rámci jednoho vypínače.
Vložení baterie
Vypínač nejprve rozebereme. Plastovým otevíračem, trsátkem nebo – v horším případě – šroubovákem odcvakneme postupně levou a pak pravou západku na spodní části vypínače. Já už mám vypínač přilepený na stěně, takže to mám trochu složitější – ale na stole se to dělá mnohem snáz.

Poté do vypínače vložíme CR2032 baterii.

Integrace do HA
Nyní si otevřeme náš HA a přesuneme se do Zigbee2MQTT addonu. Instalaci jsme si ukazovali zde. Nahoře klepneme na „Povolit připojení (Vše)“. Podle typu vypínače nyní podržíme příslušné tlačítko: u třítlačítkového prostřední, u dvoutlačítkového levé – po dobu delší než 10 sekund, dokud všechny diody nezačnou modře blikat. Do pár sekund by se nám měl vypínač objevit v HA (já už jsem si ho pojmenoval – modrá tužka), pak je potřeba vyplnit název a zaškrtnout „Aktualizovat ID entity v Home Assistant“ :)).

V záložce „Vystavuje“ si můžeme zobrazit tři entity: Stav baterie, Akce a Kvalitu signálu. Někdy se stane, že v automatizaci později nefungují nebo se nezobrazují všechny akce tlačítka. Doporučuji tlačítko promačkat (každé tlačítko jednotlivým klikem, dvojklikem a podržením), poté by měly být k dispozici všechny akce.
Automatizace pro pračku a sušičku
Dvoutlačítkový vypínač mám umístěný v šatně nad pračkou. Pračka i sušička jsou zapojeny za chytrými zásuvkami, ke kterým se špatně dostává, takže je díky chytrému vypínači mohu jednoduše zapínat a vypínat jedním stiskem tlačítka.
Více o automatizaci a notifikacích jsme psali zde.
Automatizaci zásuvky by šlo ještě rozšířit – například o automatické vypnutí po delší době nečinnosti. To ale zatím nepoužívám.
Jak tedy nastavit chytrý vypínač? Přesuneme se do Settings->Automations & Scenes a klepneme na Create automation. Přidáme trigger, tj. v sekci When klepneme na Add Trigger a vybereme Device. V položce Device vyhledáme náš vypínač a vybereme Trigger, např. stisk tlačítka 1. Dále klepneme na tři tečky vpravo u triggeru, vybereme Edit ID a vyplníme např. „1-single-action“. Pro další tlačítka nebo druhy stisků je postup stejný: opět přidáme Trigger, vybeme v Device náš vypínač, vybereme trigger pro spuštění a přidáme si Trigger ID. Výsledné triggery pro dvě tlačítka by mohly vypadat takto:

Nyní se přesuneme do sekce Then do, vybereme Add action, vyhledáme Choose a přidáme jej. Klepneme na Add condition, vyhledáme Triggered by, přidáme a zaškrtneme příslušné ID, které jsme vytvářeli v předchozím kroku.
V posledním kroku přidáme akci, v mém případě se bude po klepnutí na tlačítko pomocí Toggle přepínat stav zásuvky na on/off. Vybereme tedy Add Action, vyhledáme „Perform action“ a přidáme ho. V poli Action vyhledáme „Switch: Toggle“ a přidáme. Jako target vybereme entitu naší zásuvky.

Stejný postup zopakujeme i pro další tlačítka. V bloku „Choose“ můžeme vytvořit kolik akcí se nám jen zlíbí :). Níže máte celý kód automatizace, jako vždy je potřeba si přepsat názvy entit.
Fantazii se ale meze nekladou, protože stiskem tlačítka můžete ovládat jakoukoliv entitu v HA :).
Celý kód automatizace
alias: Hallway - 2 gang switch (control plugs)
description: ""
mode: single
triggers:
- domain: mqtt
device_id: f821e039364abfa2af4b2022903e9176
type: action
subtype: 1_single
id: 1-single-action
trigger: device
- domain: mqtt
device_id: f821e039364abfa2af4b2022903e9176
type: action
subtype: 2_single
id: 2-single-action
trigger: device
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- 1-single-action
sequence:
- target:
entity_id:
- switch.smart_plug_washing_machine
data: {}
action: switch.toggle
- conditions:
- condition: trigger
id:
- 2-single-action
sequence:
- target:
entity_id:
- switch.smart_plug_dryer
data: {}
action: switch.toggle
Automatizace pro lampičku, zásuvky a LEDky
Třítlačítkový vypínač mám nalepený na knihovně v ložnici a používám ho pro tři akce: zapnutí lampičky, přepínání zásuvky s pájkou a 3D tiskárnou, a zapnutí LED pásků v knihovnách. Prozatím mi stačí jen jednoduché kliknutí, ale do budoucna se jistě najde další zařízení, které budu chtít ovládat a nastavím si pro něj na nějakém z tlačítek třeba podržení nebo dvojklik :).
Princip automatizace je stejný – tři triggery s přiřazeným Trigger ID a blok Choose, který podle zvoleného tlačítka spouští konkrétní akci. U LEDek se vždy přednastaví předvolba s oranžovou barvou a poté se zapne controller. V tomto případě nejde o chytré zásuvky, ale o chytré controllery, které lze rovnou integrovat do Home Assistantu a použít pro řízení adresovatelných LED pásků. Více o LEDkách si řekneme v některém z budoucích dílů :). Pro tiskárnu s pájkou a lampičku se přepínají klasické chytré zásuvky.
Celý kód automatizace
alias: Bedroom - 3 gang switch (control plugs)
description: ""
triggers:
- domain: mqtt
device_id: e8e9602493f5f0824b850845531e5794
type: action
subtype: 1_single
id: 1-single-action
trigger: device
- domain: mqtt
device_id: e8e9602493f5f0824b850845531e5794
type: action
subtype: 2_single
id: 2-single-action
trigger: device
- domain: mqtt
device_id: e8e9602493f5f0824b850845531e5794
type: action
subtype: 3_single
id: 3-single-action
trigger: device
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- 1-single-action
sequence:
- metadata: {}
data: {}
target:
entity_id: switch.smart_plug_desk_lamp
action: switch.toggle
- conditions:
- condition: trigger
id:
- 2-single-action
sequence:
- target:
entity_id: switch.smart_plug_bedroom_soldering
data: {}
action: switch.toggle
- conditions:
- condition: trigger
id:
- 3-single-action
sequence:
- device_id: 3a9d17cbd38373ba932a5f2451a4ad1a
domain: select
entity_id: 3ba4cd9e6b415fc041500de4d4b04713
type: select_option
option: Solid - Orange
- type: toggle
device_id: 3a9d17cbd38373ba932a5f2451a4ad1a
entity_id: 34d2a0e235eabe7902fcc6f510b4d7d8
domain: light
- device_id: 66a9647dff925f86cf0fdde140319fde
domain: select
entity_id: b71966880024865498c082407e471e3d
type: select_option
option: Solid - Orange
- type: toggle
device_id: 66a9647dff925f86cf0fdde140319fde
entity_id: 12193e4c5bff49e7e95d8da357fac400
domain: light
mode: single
Jednotlačítkový „button“ Loginovo
„Buttony“ mám v domácnosti celkem dva. Jeden je v koupelně a jeho delší podržení nastaví termostat na 30°C a po dvaceti minutách jej automaticky vypne. Tlačítko používám např. po sprchování na usušení ručníku :). Na RPishopu najdete Chytré tlačítko Tuya, které se od mého Loginovo liší pouze tím, že má modou diodu místo červené, vzhled i funkce jsou stejné. 🙂
Druhý „button“ mám v ložnici a říkám mu „Tlačítko na dobrou noc“. Delším podržením tlačítka se začnou v 700ms intervalech vypínat světla, zásuvky a počítač. Využívám ho prakticky každý den a nemusím myslet na to, že jsem nechal rozsvícenou lampičku nebo zásuvku s pájkou. Jen podržím tlačítko a jdu spát :).

Integrace do HA
Nejprve tlačítko rozebereme otočením přední a zadní části proti sobě o několik stupňů a vložíme CR2032 baterii.

Nyní se přesuneme do Settings->Zigbee2MQTT a klepneme na „Povolit připojení (Vše)“. Tlačítko zmáčkneme na cca 10-12 sekund a uvnitř by měla zablikat červená dioda. Během několika sekund by se mělo tlačítko objevit v Home Assistantu. Tlačítko si pojmenujeme a nezapomeneme zaškrtnout aktualizaci ID entity v HA.
Tlačítko má navíc jednu specifickou entitu – Operation mode, která umožňuje přepínat mezi režimy command a event. Command se hodí např. na ovládání světel (vypnutí/zapnutí/změna jasu) a event je lepší pro jednotlivé události. V našem případě využijeme event.
Více informací o jednotlivých entitách naleznete zde.

Automatizace pro Tlačítko na dobrou noc
Tlačítko mám přilepené na posteli nad hlavou a když jdu spát, jen ho podržím a vše potřebné se vypne. V automatizaci mám pouze jeden jediný trigger, a to je podržení tlačítka.

V Sekci Then do máme několik po sobě jdoucích If-then akcí, kdy nejprve zkontrolujeme, zda je zařízení zapnuté a pokud ano, tak ho vypneme, pak vždy vyčkáme 700ms a pokračujeme na další akci. Zpoždění mezi akcemi by se dalo vynechat, ale je poměrně pěkné, jak se postupně zhasínají světla a vypínají zásuvky a díky zpoždění funguje celá automatizace spolehlivěji. Vy si samozřejmě můžete nastavit zpoždění kratší nebo delší a provádět úplně jakékoliv akce :).

Celý kód automatizace
alias: Bedroom - Good Night Button
description: ""
triggers:
- domain: mqtt
device_id: f2ee93f98a6965eec2b91c6c83ce8700
type: action
subtype: hold
trigger: device
conditions: []
actions:
- if:
- condition: state
entity_id: switch.bedroom_switch_2
state: "on"
then:
- metadata: {}
data: {}
target:
entity_id: switch.bedroom_switch_2
action: switch.turn_off
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 700
- if:
- condition: state
entity_id: switch.bedroom_switch
state: "on"
then:
- metadata: {}
data: {}
target:
entity_id: switch.bedroom_switch
action: switch.turn_off
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 700
- if:
- condition: device
type: is_on
device_id: 800bf0d404107fcb2e734d2657c56514
entity_id: 76a061f0da988273de6db8795187be35
domain: light
then:
- type: turn_off
device_id: 800bf0d404107fcb2e734d2657c56514
entity_id: 76a061f0da988273de6db8795187be35
domain: light
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 700
- if:
- condition: device
type: is_on
device_id: 3a9d17cbd38373ba932a5f2451a4ad1a
entity_id: 34d2a0e235eabe7902fcc6f510b4d7d8
domain: light
then:
- type: turn_off
device_id: 3a9d17cbd38373ba932a5f2451a4ad1a
entity_id: 34d2a0e235eabe7902fcc6f510b4d7d8
domain: light
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 700
- if:
- condition: device
type: is_on
device_id: 66a9647dff925f86cf0fdde140319fde
entity_id: 12193e4c5bff49e7e95d8da357fac400
domain: light
then:
- type: turn_off
device_id: 66a9647dff925f86cf0fdde140319fde
entity_id: 12193e4c5bff49e7e95d8da357fac400
domain: light
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 700
- if:
- condition: device
type: is_on
device_id: df4d817a247dd803d0eb59befa9068f9
entity_id: 11a1e6f02a59d8a70c3d15f3bf22295a
domain: switch
then:
- type: turn_off
device_id: df4d817a247dd803d0eb59befa9068f9
entity_id: 11a1e6f02a59d8a70c3d15f3bf22295a
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 700
- if:
- condition: device
type: is_on
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
then:
- type: turn_off
device_id: dbe4d34c1ec125bac5990adeca017197
entity_id: 44ebbac021c2ebea2d6d25caddfb360f
domain: switch
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 700
- metadata: {}
data: {}
target:
entity_id: button.desktop_desktop_hibernate
enabled: true
action: button.press
mode: single
Automatizace pro nastavení termostatu
Poslední případ využití, který si ukážeme, bude pro jednoduché nastavení teploty na termostatu pomocí MQTT protokolu. Využívám k tomu hlavici od Tuya, protože není úplně nejspolehlivější, co se týče automatického vytápění, tak našla uplatnění alespoň tady. Zapnout se, chvíli běžet a pak zase vypnout – to zvládne obstojně.
V automatizaci využívám externí skript, což není nutností, ale spíše mojí pohodlností. Vše by mělo jít napsat pomocí klasické automatizace, ale aspoň si rovnou můžeme ukázat, jak takový script vytvořit a spouštět. Hodí se to hlavně v případech, kdy občas chcete něco ve skriptu upravit, ale nechcete zasahovat do celé automatizace.
V Settings -> Automations & Scenes -> Scripts si nejdříve vytvoříme skript, klepneme tedy na Create Script. Příkazy budeme do hlavice posílat pomocí MQTT protokolu. Klepneme tedy na Add Action a vyhledáme „MQTT: Publish“ a přidáme ho.
Nastavíme si Topic na akci, kterou chceme provést a Payload na entitu, kterou chceme ovládat. V poli QoS nastavíme hodnotu 2 – tedy akce se provede přesně jednou.

Dokumentaci k hodnotám Topic a Payload najdete vždy u daného zařízení přímo na stránkách Zigbee2MQTT. V sekci Exposes je vždy popsáno, zda se daná entita dá číst nebo nastavovat.
V další části mám nastavenou akci Delay na 20 minut. To znamená, že automatizace dál běží, ale zároveň 20 minut čeká. Tím se nastaví teplota na 30 °C, která zůstane aktivní po dobu 20 minut.
V posledním kroku opět použijeme MQTT: Publish a nastavíme teplotu na 6°C stejným způsobem jako předtím. Tím se topení vypne, ručník bude krásně suchý – ale ne připálený :).

Skript uložíme, vrátíme se do sekce s automatizacemi a vytvoříme novou automatizaci. Triggerem bude stisknutí tlačítka a akcí bude náš skript. Tím zajistíme, že se při každém stisku tlačítka spustí skript a topení se zapne na 20 min.

Celý kód skriptu
alias: Bathroom Thermostat
sequence:
- data:
topic: zigbee2mqtt/Bathroom Thermostat/set
payload: "{\"current_heating_setpoint\": 30}"
qos: "2"
action: mqtt.publish
- delay:
hours: 0
minutes: 20
seconds: 0
milliseconds: 0
- data:
topic: zigbee2mqtt/Bathroom Thermostat/set
payload: "{\"current_heating_setpoint\": 6}"
qos: "1"
action: mqtt.publish
mode: restart
icon: mdi:thermostat-cog
Celý kód automatizace
alias: Bathroom Thermostat 30 min. script
description: ""
triggers:
- domain: mqtt
device_id: 2017031bd71a35fbee3426f113c3624c
type: action
subtype: single
trigger: device
conditions: []
actions:
- metadata: {}
data: {}
action: script.bathroom_thermostat
mode: restart
Závěr
V dnešním díle jsme si ukázali sílu jednoduchých malých tlačítek, která nevyžadují stálé napájení – vystačí si s baterií a WiFi signálem. Spínat s nimi můžete prakticky cokoliv, co vás napadne. V příštím díle se pravděpodobně podíváme na nějaký pájecí projekt a ESP32 desky.
Tak tlačítkům zdar!
