Home Assistant seriál s Jakubem: Díl 14: Chytrý detektor kouře
V dnešním díle se podíváme, jak funguje chytrý detektor kouře a jak ho můžeme využít v domácnosti. Také si nastavíme notifikace na telefon, aby nám v případě požáru nebo detekce kouře přišla zpráva na telefon. K detekci využijeme senzor Heiman HS1SA, který má (alespoň podle dostupných zdrojů) platnou CE certifikaci. Proto by v případě pojistné události neměl být problém s plněním z pojištění.
Senzor bychom měli každý měsíc testovat, zda opravdu funguje. Testování je jednoduché – stačí na senzoru stisknout velké tlačítko s LED diodou a měl by se ozvat velmi hlasitý zvuk (doporučuji testovat se sluchátky).
Senzor je poměrně citlivý – spolehlivě zachytí i hustý kouř ze smažení, pokud je ho v místnosti dost. Na druhou stranu nereaguje na páru z MTL e‑cigarety, pokud mu ji nefouknete přímo do mřížky.
Baterie by v senzoru měla vydržet více než pět let, ale doporučuje se ji po 5 letech preventivně vyměnit.
Co budeme potřebovat
- nainstalovaný a funkční HA
- senzor Heiman HS1SA
- 1x baterie CR123A, popřípadě lze použít i CR17335
- kancelářskou sponku nebo jehlu na SIM kartu

Oživení senzoru a přidání do HA
Nejprve do senzoru vložíme baterii a přikryjeme ji štítkem, aby pak šel senzor vložit do držáku.


Po vložení baterie otevřeme náš HA a přejdeme do Zigbee2MQTT v levém menu. Pokud jej v menu nevidíme, můžeme přejít přes Settings → Add-ons → Zigbee2MQTT → Open Web UI.
Na boční straně senzoru najdeme malý otvor a připravíme si kancelářskou sponku nebo jiný vhodný nástroj. Lze použít také například jehlu na SIM kartu nebo na paměťovou kartu.

V Zigbee2MQTT klikneme na „Povolit vše“ a na senzoru stiskneme tlačítko na 2 sekundy. Hlavní velké tlačítko s LEDkou by pak mělo začít rychle blikat. Aby zařízení nezapadlo do režimu spánku, je potřeba hlavní tlačítko s LED diodou opakovaně stisknout přibližně každé dvě sekundy. Přestat můžeme ve chvíli, kdy se nám zařízení objeví v Zigbee2MQTT jako napárované.

Kliknutím na modrou tužku dole zařízení pojmenujeme podle umístění, například „Living Room – Smoke Detector“. V záložce „Vystavuje“ se můžeme podívat na entity, které nám senzor nabízí.
- Smoke – pravda/nepravda – udává, zda senzor detekuje kouř
- Battery low – pravda/nepravda – udává zda je baterie téměř vybitá
- Battery – % – udává procento baterie (může trvat až 24 h, než se aktualizuje)
- Test – udává, zda je zařízení právě testováno
- Linkquality – udává kvalitu spojení s naší Zigbee bránou

Nyní máme zařízení úspěšně přidané do našeho HA a můžeme se vrhnout na automatizace. Ukážeme si jak poslat notifikaci na telefon v případě požáru a jak si připomenout, že máme senzor otestovat, zda funguje. K tomu by se mohla hodit entita Test, ale v Home Assistantu bohužel není možné její stav načíst. My si však poradíme i jinak.


Automatizace
Notifikace na telefon(y)
Přejdeme do Settings → Automations a klikneme na Create Automation. Nejprve přidáme Trigger tlačítkem Add Trigger, vyhledáme položku Entity a přidáme ji. V poli Entity vyhledáme entitu detekce kouře a vybereme ji. V poli To (optional) nastavíme hodnotu Detected. Díky tomu notifikace dorazí vždy, když senzor zaznamená kouř nebo požár.

Nyní se přesuneme do sekce Then do, klikneme na Add action a vyhledáme Send a notification message. Zde budou dvě různá nastavení pro Android a iOS.
Android
Pro Android používám dvě notifikace. První je TTS (Text to Speech) – hlasová zpráva, kdy se text převede na zvuk a přečte nahlas, takže ji nepřehlédnu. Druhá je klasická vizuální notifikace, která se zobrazí v notifikační liště.
Pro TTS vyplníme políčko message textem „TTS“, zaškrtneme políčko u data a vyplníme následující kód (tts_text si upravte dle libosti :)).
tts_text: Fire in Bedroom
media_stream: alarm_stream_max
ttl: 0
priority: high
Parametry pro TTS notifikaci
tts_text:text, který má zařízení vyslovit (nutné!)media_stream:typ audio kanálu (alarm_streamnebo silnějšíalarm_stream_max)ttl:0→ oznámení okamžitě zastaví ostatní, pokud jsou v řaděpriority:high→ přepíše Do Not Disturb a další omezení

Tím máme první notifikaci hotovou. Nyní si vytvoříme i klasickou notifikaci, která se nám zobrazí v notifikační liště. Klepneme tedy znovu na Add action, opět vyhledáme Send a notification message a přidáme ji.
Do message vyplníme text notifikace, do title vyplníme nadpis notifikace a do data vložíme následující kód:
sticky: "true"
notification_icon: fire
color: red
ttl: 0
priority: high
Parametry pro textovou notifikaci
sticky:"true"→ notifikace zůstane v liště, dokud ji uživatel ručně neodstranínotification_icon:fire→ zobrazí ikonu ohně v notifikacicolor:red→ nastaví červený akcent (proužek/ikona) v notifikacittl:0→ okamžité doručení, propadne pokud zařízení není dostupnépriority:high→ okamžité doručení, snaha obejít Do Not Disturb

iOS
Stejným způsobem jako u Androidu vytvoříme i notifikaci pro iOS (například iPhone). Zde nám bude stačit pouze jedna. Opět tedy klepneme na Add action, vyhledáme Send a notification message a přidáme ji. Do message vložíme text notifikace, do title její nadpis a do pole data vyplníme následující kód:
push:
sound:
name: US-EN-Alexa-Smoke-Detected-Generic.wav
critical: 1
volume: 1
Parametry pro zvukové upozornění v iOS
name:US-EN-Alexa-Smoke-Detected-Generic.wav→ název zvukového souboru, který se má přehrát (musí být podporovaný systémem), seznam všech předinstalovaných zvuků naleznete zde.critical:1→ označí upozornění jako kritické – přehraje se i při zapnutém Do Not Disturb nebo ztlumeném telefonuvolume:1→ nastaví hlasitost přehrávání na maximum (hodnota1= 100 %)
Možná se divíte, proč má Android dvě notifikace, zatímco iOS pouze jednu.
Je to kvůli odlišným možnostem obou platforem při práci s upozorněními.
Na Androidu lze TTS (text‑to‑speech) spustit přímo v rámci oznámení, takže se používá samostatná TTS notifikace a k ní ještě klasická vizuální notifikace.
Naopak iOS přímé TTS nepodporuje. Místo toho lze vybrat některý z předinstalovaných zvuků, případně nahrát vlastní přes iTunes nebo cloudové úložiště. Tento zvuk se pak přehraje spolu s textovým upozorněním jako součást jedné notifikace.
Celý kód automatizace
alias: Fire in Bedroom notification
description: ""
mode: single
triggers:
- entity_id:
- binary_sensor.0x3410f4fffe07d955_smoke
to: "on"
trigger: state
conditions: []
actions:
- data:
message: TTS
data:
tts_text: Fire in Bedroom
media_stream: alarm_stream_max
ttl: 0
priority: high
enabled: true
action: notify.mobile_app_pixel_7_pro
- data:
message: Fire in Bedroom
title: FIRE !!!
data:
sticky: "true"
notification_icon: fire
color: red
ttl: 0
priority: high
action: notify.mobile_app_pixel_7_pro
- data:
data:
push:
sound:
name: US-EN-Alexa-Smoke-Detected-Generic.wav
critical: 1
volume: 1
title: FIRE !!!
message: Fire in Bedroom
action: notify.mobile_app_iphone_magdalena
Testování senzoru
Pro pravidelné testování můžeme využít několik přístupů:
- Grocy
- Helper + Script + Mushroom Template card s tlačítkem na reset
- Kalendář
- jistě něco dalšího, co mě nenapadlo 🙂
Kalendář mi nevyhovoval, takže si popíšeme zbývající možnosti. U všech přístupů se bohužel musíme spoléhat na to, že neodstraníme všechny notifikace a senzor opravdu zkontrolujeme a následně odklikneme, že jsme ho zkontrolovali :).
Grocy
Addon Grocy jsme si ukazovali v díle o NFC tazích. Celý postup instalace addonu a přidání Chores najdete zde. Buď můžete použít NFC tag a po kontrole ho jen naskenovat anebo si pouze přidat Chore a ručně ho každý měsíc odklepnout přímo v Grocy jako splněný.
Helper
Pro vytvoření helperu se přesuneme do Settings -> Devices & services -> Helpers a klikneme na Create Helper. Vyhledáme Date and/or time, vyplníme název (v mém případě Bedroom – Last Smoke Sensor Test, volitelně si zvolíme vhodnou ikonku a ujistíme se, že v dolní části je zvoleno Date.

Po vytvoření helperu pro datum opět klikneme na Create Helper, vyhledáme Template a vybereme Template a sensor. Vyplníme name (v mém případě Bedroom Smoke Detector – days to test a do State template vložíme kód níže. Zde změníte pouze jedinou věc, a to je název vašeho helperu (název naleznete tak, že klepnete na helper, poté v horním pravém rohu na ozubené kolečko a zkopírujete Entity ID).

Kód do State template:
{% set last_test = states('input_datetime.bedroom_last_smoke_sensor_test') %}
{% if last_test not in ['unknown','unavailable','none'] %}
{{ 30 - (now().date() - strptime(last_test, '%Y-%m-%d').date()).days }}
{% else %}
unknown
{% endif %}

V dalším kroku si ještě potřebujeme vytvořit script, který nám po klepnutí na tlačítko vyresetuje náš helper. Přesuneme se do Settings -> Automations & scenes -> Scripts, klikneme na Create script a zvolíme Create new script.
Dále klikneme na Add action, vyhledáme Perform action a potvrdíme. V políčku Search vyhledáme Set time a vybereme Set (sets the date and/or time).
V poli Targets vybereme Choose entity a vyhledáme náš helper.
V poli Date vyplníme následující kód:
{{ now().strftime('%Y-%m-%d') }}
Tento kód zajistí, že se vždy použije aktuální datum, takže tlačítko bude fungovat kdykoli bez ručního nastavování.

Teď můžeme klepnout na Save script a script si libovolně pojmenovat, např. Bedroom Smoke Sensor – reset helper.
Poslední část je poskládání všech dílků dohromady a vytvoření karty s tlačítkem na dashboardu. Přesuneme se tedy na naši hlavní stránku s dashboardy a buď si vytvoříme úplně novou stránku nebo kamkoliv chceme přidáme novou kartu. Jak na to už jsme řešili v předchozích dílech.
Já jsem využil Mushroom Template card, kterou jsme si instalovali a nastavovali v tomto díle. Nebudeme si zde popisovat krok po kroku jak kartu vytvořit, to už jsme si ukazovali v předchozích dílech. Níže naleznete hotový kód, kde pouze stačí změnit názvy entit, popř. si pak přes UI můžete doladit cokoliv chcete :).
type: custom:mushroom-template-card
primary: 🔥 Bedroom Smoke Sensor
secondary: "{{ states('sensor.bedroom_smoke_detector_days_to_test') }} days to next test"
icon: mdi:smoke-detector
icon_color: |
{% if states('sensor.bedroom_smoke_detector_days_to_test')|int <= 0 %}
red
{% elif states('sensor.bedroom_smoke_detector_days_to_test')|int <= 5 %}
orange
{% else %}
green
{% endif %}
tap_action:
action: call-service
service: script.bedroom_smoke_sensor_reset_helper

Po kliknutí na tlačítko se pomocí scriptu vyresetuje helper a začne se počítat nových 30 dní. Případně si můžete helper ještě rozšířit o automatizaci, která vám pošle notifikaci na telefon, např. když do dalšího testu bude zbývat jen X dní, např. takto:
alias: Reminder - Bedroom Smoke Detector Test
description: Sends a notification when it’s time to test the smoke detector
trigger:
- platform: numeric_state
entity_id: sensor.bedroom_smoke_detector_days_to_test
below: 1
condition: []
action:
- service: notify.mobile_app_pixel_7_pro
data:
title: "Smoke Detector Test"
message: "It’s time to test the bedroom smoke detector!"
- service: notify.mobile_app_iphone_magdalena
data:
title: "Smoke Detector Test"
message: "It’s time to test the bedroom smoke detector!"
mode: single
Závěr
V dnešním díle jsme si přidali detektor kouře Heiman HS1SA do našeho HA a nastavili si na dva mobilní telefony (Android a iPhone) notifikace, pokud senzor detekuje kouř. Také jsme si ukázali několik způsobů, jak si připomenout, abychom otestovali, zda senzor funguje. Tak snad se vám teď bude klidněji spát, když HA hlídá i jestli vám doma nehoří :).
V příštím díle se podíváme na chytré LED pásky a integraci WLED, s kterou se dají dělat zázraky (no skoro :)).
Tak klidnému spánku zdar!
