Home Assistant: vlastní senzory, automatizace a další pomocníci

21. 9. 2023
Doba čtení: 19 minut

Sdílet

 Autor: Home Assistant
Chytrá domácnost už není jen prosté ovládání několika žárovek. Dnes se podíváme na automatizace, tvorbu vlastních senzorů a další součásti, o kterých možná ani nevíte. Nebudou chybět ani konkrétní ukázky a příklady kódu.

Pomocníci

Nejdříve začneme pomocníky, protože se nimi setkáme i v dalších kapitolách. Pomocníci nám umožňují definovat vlastní ovládací prvky či pomocné nástroje pro tvorbu skriptů, automatizací nebo vlastních senzorů. Nastavují se v menu Nastavení → Zařízení a služby Pomocníci → Vytvořit pomocníka. Na výběr máme ze 17 možných druhů a každý z nich má své specifické nastavení. Uvedu jen několik z nich, se kterými se pravděpodobně setkáme nejčastěji.

  • Číslo vytvoří vstupní pole, do kterého můžeme zadat jakékoliv číslo, např. aktuální stav elektroměru.
  • Text vytvoří vstupní textové pole pro uložení libovolného řetězce, podobně jako pomocník „Číslo“.
  • Datum a/nebo čas vytvoří pole pro zadání data a/nebo času. Takový pomocník je pak možné použít v automatizaci pro spuštění úlohy v konkrétním čase. Výhodou je, že pro budoucí úpravy nemusíme upravovat automatizaci, ale jen hodnotu v pomocníkovi.
  • Měřič vytvoří senzor, jehož vstup se bude na základě zadaného časového okna nulovat – např. každou hodinu, den, týden, měsíc apod. Typickým použitím je sledování spotřeby energie.
  • Počítadlo vytvoří senzor dle zadaného minima, maxima a s krokem pro přičítání hodnoty. Použít jej můžeme např. pro počítání počtu průchodů.
  • Přepínač nabývá hodnot zapnuto/vypnuto a jeho časté využití je právě v automatizacích, aby bylo možné zkontrolovat stav zařízení a nepouštět tak automatizace stále dokola. Tento pomocník se objeví v jedné z ukázkových automatizací.
  • Skupina vytvoří skupinový senzor pro zvolené zařízení dle konkrétního účelu (roleta, světlo, vypínač apod.) a následně umožní ovládat všechna zařízení najednou. Vhodné pokud máme např. více světel na chodbě nebo více okenních rolet v jedné místnosti.

Na následujícím obrázku můžeme vidět konkrétní použití pomocníků přepínač, datum a čas, číslo, skupina a měřič, které jsou zobrazeny na kartě „Entity“.

Scény

Scény, jak název napovídá, umožňují připravit vlastní scénáře, co se má v jednom okamžiku provést, např. zatáhnout rolety v pokoji, rozsvítit ambientní světla a zapnout TV. Scény se nastavují v menu Nastavení → Automatizace a scény → Scény → Přidat scénu. Vytvořit scénu je jednoduché, vše se zadává do již připravených polí vizuálního editoru. Stačí tedy zadat název a vybrat požadovaná zařízení nebo entity z rozbalovacích polí. Zde je však jedna záludnost. Každé zařízení je potřeba předem uvést do stavu, v jakém se mají nacházet pro danou scénu nastavit, resp. je možné tento stav v okamžiku přidání entity/zařízení přednastavit. Po uložení scény pak potřeba všechna zařízení uvést do původního stavu. Uložení scény totiž námi nastavené vlastnosti zařízení nedeaktivuje. Osobně dávám přednost pro definici a následné spouštění posloupnosti spíše skriptům (viz další kapitola), kde je k dispozici více možností a není vyžadována interaktivita se zařízeními.

Automatizace

Automatizace jsou velice mocný nástroj a troufnu si říci, že jsou tím hlavním důvodem, proč chceme používat Home Assistant či podobný software. Nastavují se v menu Nastavení → Automatizace a scény → Automatizace → Vytvořit automatizaci. Standardně se otevře vizuální editor, který velice pomůže s nastavením jednotlivých kroků. Pro pokročilé uživatele nebo pro předání celého kódu automatizace další osobě je možné celé rozhraní přepnout do YAML kódu. To se provede kliknutím na tři svislé tečky a zvolením položky „Upravit v YAML“. My zatím zůstaneme u vizuálního editoru.

Automatizace stojí na definici tří voleb – spouštěč, podmínka a akce. Pro každou z nich je k dispozici velké množství možností, proto si v této kapitole projdeme jen ty, z mého pohledu, nepoužívanější. Na závěr si ukážeme i několik reálných příkladů pro případnou inspiraci.

Spouštěč neboli trigger popisuje událost, na kterou má automatizace reagovat. Jedná se o povinnou volbu a k dispozici je celkem 17 možných spouštěčů. Uvedu opět jen několik z nich, se kterými se pravděpodobně setkáme nejčastěji.

  • Čas definuje pevný čas (nebo časový údaj z vytvořeného pomocníka), ve kterém se posloupnost akcí jednorázově spustí.
  • Časový vzorec je vlastně obdoba linuxového CRONu, tj. definuje hodinu, minutu nebo sekundu, ve které/kterých se má událost spustit. Je zde možné definovat interval, tj. spuštění např. každých 5 minut. Oproti CRONu se zapisuje bez hvězdičky – „/5“
  • Číselný stav definuje horní nebo spodní číselnou hodnotu pro zadanou entitu. Spustí se tedy např. v okamžiku, když klesne venkovní teplota pod 20 stupňů Celsia. Pro tento spouštěč je k dispozici ještě i volba „Po dobu“, která se zadává v hodinách, minutách nebo sekundách. Tato volba udává pevný čas, po který se číselný stav entity nesmí změnit, jinak nedojde k jeho spuštění. Toto typicky používám např. u sledování spotřeby pračky, neboť pokud je spotřeba menší než 5W po dobu dvou minut, pračka dokončila svoji práci. U tohoto spouštěče pozor na jednu záludnost. V některých případech se může stát, že nedojde ke spuštění, ačkoliv je vše nastaveno na první pohled správně. Tento spouštěč se totiž provede pouze za předpokladu, že předchozí stav nebyl v rozsahu prahové hodnoty. Konkrétně to tedy znamená, že pokud senzor teploty aktuálně udává 20 stupňů Celsia a do spouštěče nastavíme „menší než 25“, spouštěč se nespustí. senzor musí nejprve vrátit teplotu větší než 25 a poté se s klesající teplotou spouštěč aktivuje.
  • Slunce spustí události při východu nebo západu slunce podle toho, jakou polohu domácnosti jsme zadali při instalaci Home Assistant. Je to tedy spouštěč vhodný např. pro otevírání a zavíraní okenních rolet či jiných akcí spojených s denní dobou. Spouštěč nabízí ještě volbu „Posun“, ve které můžeme definovat o kolik hodin, minut nebo sekund se má čas východu/západu slunce posunout dopředu nebo dozadu. Na základě sledování spouštění automatizací s tímto spouštěčem tento čas posouvám o 20–30 minut, tj. v případě západu slunce „+00:20:00“ a v případě východu slunce „-00:20:00“, aby to více odpovídalo reálnému stavu.
  • Stav definuje hodnotu entity a spustí akce pokud ze změnil výchozí nebo cílový stav. Typicky se ale nepoužívá pro vyjádření číselných hodnot, k tomu je výše uvedený „číslený stav“. Konkrétní použití je např. pro sledování přítomnosti osob v blízkosti domova, tj. změna „Doma“ na „Pryč“ nebo opačně. I v tomto případě je zde možnost definovat volbu „Po dobu“, aby se eliminovali případné false-positive případy.
  • Zařízení je spouštěč, který na základě vybraného zařízení automaticky nabídne všechny jeho dostupné události, tedy např. změnu stavu, zapnutí/vypnutí či další reakce. Na rozdíl od výše uvedených spouštěčů se zde nepracuje s konrétní entitou (např. teplota), ale s celým zařízením. Do jisté míry zjednodušuje, hlavně v začátcích, definici spouštěče a často si vystačíme právě s tímto spouštěčem.

Pro každý spouštěč je možné volitelně definovat i jeho ID, pomocí kterého je pak možné rozlišit jeho spouštění v podmínce. K tomu, aby bylo možné ID zadat je nutné v pravém horním rohu spouštěče kliknout na tři svislé tečky a zvolit „Upravit ID“. Pojmenování spouštěčů je vhodné pro případy, že v jedné automatizace potřebujeme definovat více spouštěčů a nebo chceme dvě podobné automatizace sloučit do jedné. Typickým scénářem může být např. právě otevírání a zavírání okenních rolet na základě času. Vytvoříme dva spouštěče, oba vhodně pojmenujeme a poté v definici podmínky vybereme pojmenování spouštěče, pro který se má akce provést.

Podmínka se vztahuje pro celou automatizaci a jedná se o nepovinnou volbu, protože ne vždy je užitečné mít podmínku definovanou globálně. Jednotlivé podmínky je pak možné definovat přímo v Akcích (v dalším odstavci). K dispozici je celkem 11 různých podmínek, opět uvedu jen ty nejčastější.

  • A definuje standardní AND, tedy přítomnost dvou podmínek, kdy obě musí být splněné.
  • Ne definuje negaci podmínky.
  • Nebo definuje standardní OR, tedy přítomnost dvou podmínek, kdy musí být alespoň jedna z nich splněná.
  • Čas, Číselný stav, Stav, Zařízení mají stejné použití jako v případě spouštěčů a může se zdát, že jde o duplicitní nastavení. Použití v podmínkách má smysl v případech, kdy potřebujeme definovat nějakou kombinaci. Typickým příkladem může být zatažení okenních rolet v 10:00, pokud je venkovní teplota větší než 20 stupňů Celsia.
  • Spouštěč definuje pojmenování spouštěče (jeho ID, viz výše), pokud jich máme definováno více. Při globálním použití podmínek to ale nedává příliš smysl.

Akce provádí na základě definice spouštěče, případně podmínky, konkrétní posloupnost příkazů. Na výběr je celkem 15 různých akcí, ukážeme si ty nejpoužívanější.

  • Čekání na uplynutí času definuje, jak název napovídá, zpoždění v hodinách, minutách nebo sekundách.
  • Scéna spouští předem vytvořenou scénu.
  • Zařízení podobně jako u spouštěče automaticky nabídne všechny dostupné události, které se mohou provést. Např. rozsvícení světla, zapnutí termostatu apod.
  • Zavolat službu umožňuje spustit buď vlastní skripty a nebo připravené služby týkající se zařízení nebo samotného Home Assistanta. Např. provedení jakékokoliv akce zařízení, nastavení hodnoty pomocníka, spustění jiné automatizace, zaslání notifikace na mobilní zařízení, údržbu interní databáze apod. Seznam všech dostupnách služeb je k nalezení v menu Nástroje pro vývojáře → Služby.
  • Když-pak definuje podmínku pro konkrétní akci, jedná se o klasickou konstrukci „IF-ELSE“
  • Volby pak definuje více podmínek pro více akcí, jde o klasickou konstrukci „CASE“

Ke každé automatizaci je možné definovat v jakém běží režimu. Ten určuje, co se stane, pokud automatizace probíhá a je opakovaně spuštěna (např. z pohybového čidla). V pravém horním rohu stačí kliknout na tři svislé tečky a zvolit „Změnit režim“:

  • Single režim je standardně použit s novou automatizací a udává, že souběžné spuštění nesmí proběhnout.
  • Restart režim zajistí, že se zastaví původní běh automatizace a spustí se od začátku.
  • Queued režim spustí automatizaci znovu až po dokončení předchozího běhu, jedná se tedy o klasickou implementaci fronty. Současně je možné definovat maximální počet takových následných spuštění. Standardní hodnota je 10.
  • Parallel režim spustí automatizaci nezávisle/paralelně na současném běhu. Podobně jako u předchozího režimu, je možné definovat maximální počet souběžných spuštění.

Příklady automatizací

Připravil jsem několik ukázek automatizací, jak automatizace ve skutečnosti vypadají. Uvidíme, že to vlastně není tak složité, jak by to na první pohled vypadalo. Všechny tři níže uvedené vychází z mého reálného použití. Zápis je uveden v YAML kódu, takže stačí ve svém Home Asisstantu vytvořit novou automatizaci, přepnout do YAML a upravit názvy entit a zařízení dle svého nastavení.

1. Rozsvícení a zhasnutí světla (Philips Hue A60 bulb E27), když pohybový senzor (Philips Hue motion senzor) začne nebo přestane detekovat pohyb. Jsou definovány dva spouštěče (využívá se zde právě pojmenování pomocí ID). První spouštěč rozsvítí světlo na úroveň 10, pokud je aktuální světelnost menší než 8lx. Druhý spouštěč světlo zhasne. V této automatizaci je záměrně nastaven režim „restart“, aby se zajistilo spouštění automatizace i při opětovné detekci pohybu v průběhu již rozsvíceného světla. Doba, kdy je stále rozsvíceno, se tak vlastně prodlouží a vyhneme se nepříjemné situaci, kdy se pohybujeme okolo pohybového senzoru, to sice správně detekuje pohyb, ale světlo po uplynutí doby zhasne, protože se automatizace může spustit pouze jednou.

  alias: "Pohybový sensor - chodba"
  description: >-
    Při detekci pohybu rozsvítí světlo, po uplynují occupancy time + 5sec světlo vypne.
  trigger:
    - type: motion
      platform: device
      device_id: 3a5b6c9cb5b4669c2b96fa893761f59b
      entity_id: binary_sensor.sensor_occupancy
      domain: binary_sensor
      id: pohyb
    - type: no_motion
      platform: device
      device_id: 3a5b6c9cb5b4669c2b96fa893761f59b
      entity_id: binary_sensor.sensor_occupancy
      domain: binary_sensor
      id: klid
      for:
        hours: 0
        minutes: 0
        seconds: 5
  condition: []
  action:
    - choose:
        - conditions:
            - condition: trigger
              id: pohyb
            - type: is_illuminance
              condition: device
              device_id: 3a5b6c9cb5b4669c2b96fa893761f59b
              entity_id: sensor.sensor_illuminance_lux
              domain: sensor
              below: 8
          sequence:
            - type: turn_on
              device_id: 1a716d27aa79b4667579977f0a28c142
              entity_id: light.svetlo
              domain: light
              brightness_pct: 10
        - conditions:
            - condition: trigger
              id: klid
          sequence:
            - type: turn_off
              device_id: 1a716d27aa79b4667579977f0a28c142
              entity_id: light.svetlo
              domain: light
  mode: restart

2. Ovládání rolet podle pevně zadaného času a venkovní teploty. Jsou definovány dva spouštěče. První spustí akci v 9:30 a zavře vybrané okenní rolety na 40 %, pokud je venkovní teplota větší než 20 stupňů Celsia. Druhý v 16:30 okenní rolety zcela otevře. V tomto případě není vhodné podmínku pro test venkovní teploty nastavit jako globální, protože by se pak s poklesem teploty odpoledne nemusely okenní rolety opět otevřít.

  alias: "Rolety léto"
  description: V létě zavírá rolety dopoledne a odpoledne zase otevírá
  trigger:
    - platform: time
      at: "09:30:00"
      id: zatahnout
    - platform: time
      at: "16:30:00"
      id: roztahnout
  action:
    - choose:
        - conditions:
            - condition: trigger
              id:
                - zatahnout
            - condition: numeric_state
              entity_id: weather.openweathermap
              attribute: temperature
              above: 20
          sequence:
            - service: cover.set_cover_position
              data:
                position: 40
              target:
                entity_id:
                  - cover.mistnost1
                  - cover.mistnost2
    - choose:
        - conditions:
            - condition: trigger
              id:
                - roztahnout
          sequence:
            - service: cover.open_cover
              data: {}
              target:
                entity_id:
                  - cover.mistnost1
                  - cover.mistnost2
  mode: single

3. Notifikace o zapnutí a vypnutí pračky. Používá se zásuvka s měřením spotřeby (TuYa TS011F), do které je spotřebič trvale zapojen. Dále je vytvořený pomocník „přepínač“, který udržuje informaci, zdali je spotřebič spuštěn či nikoliv. Na základě předem zjištěné spotřebě konkrétního spotřebiče při zapnutém (více než 5W) nebo vypnutém (méně než 5W) stavu jsou opět definovány dva spouštěče. Při jejich aktivaci se zkontroluje, zdali je pomocník „Přepínač“ ve stavu „on“ nebo „off“ a na základě tohoto zjištění se pošle notifikace s vhodným textem.

  alias: "Spotřebiče: notifikace o dokončení"
  description: Podle měření spotřeby pošle notifikaci o zapnutí a vypnutí
  trigger:
    - platform: numeric_state
      entity_id: sensor.zasuvka_pracka_power
      for:
        hours: 0
        minutes: 2
        seconds: 0
      below: 5
      id: pracka_end
    - platform: numeric_state
      entity_id: sensor.zasuvka_pracka_power
      above: 5
      id: pracka_start
      for:
        hours: 0
        minutes: 2
        seconds: 0
  condition: []
  action:
    - if:
        - condition: trigger
          id: pracka_start
        - condition: state
          entity_id: input_boolean.zasuvka_pracka_stav
          state: "off"
      then:
        - service: input_boolean.turn_on
          data: {}
          target:
            entity_id: input_boolean.zasuvka_pracka_stav
        - service: notify.mobile_app
          data:
            title: Spotřebiče
            message: Pračka - zapnutí.
    - if:
        - condition: trigger
          id: pracka_end
        - condition: state
          entity_id: input_boolean.zasuvka_pracka_stav
          state: "on"
      then:
        - service: input_boolean.turn_off
          data: {}
          target:
            entity_id: input_boolean.zasuvka_pracka_susicka_stav
        - service: notify.mobile_app
          data:
            title: Spotřebiče
            message: Pračka - vypnutí.
  mode: single

Ladění

Nezmínil jsem ještě několik dalších podstatných možností či voleb. Každou automatizaci je možné po jejím vytvoření zakázat či povolit po kliknutí na „tři svislé tečky“ vpravo nahoře. Když automatizaci vložíme jako jakoukoliv jinou entitu přímo na dashboard, můžeme ji přepínačem také vypínat a zapínat. Je to jednoduší, než se proklikávat nastavením. Automatizaci můžeme samozřejmě spustit ručně, abychom ji mohli otestovat. Dokonce můžeme v rámci ladění spustit i jen dílčí část definovanou v akcích. Každá akce, podmínka i spouštěč mají pro každý svůj záznam také proklik na „tři svislé tečky“. Dílčí akci tak můžeme ručně spustit, ale také zakázat či povolit. Podmínku, a to i v rámci akcí pokud používáme „Když-pak“ nebo „Volby“, tímto způsobem můžeme otestovat a zjistit tak, zdali se opravdu má stát to, co očekáváme.

Konečně, pokud nám automatizace stále nefunguje a už nevíme kudy kam, klikneme vpravo nahoře na volbu „Trasy“. Ty slouží k podrobnějšímu ladění, kdy se dokážeme přesně podívat i zpět do historie, co se stalo nebo na čem se automatizace zastavila. Máme k dispozici jednoduchý vývojový diagram s jednotlivými kroky, časovou osu, stavy podmínek, ale také hodnoty proměnných apod.

Skripty

Skript je vlastně posloupnost akcí, kterou je možné následně použít kdekoliv nebo k jednorázovému spuštění. Výhodou je, že při použití voláme pouze jeden příkaz, což při složitějším použití vede k velkému zjednodušení. Ze sady skriptů můžeme dokonce vytvořit vlastní tlačítko volané z dashboardu Home Assistant. Skripty se vytváří v menu Nastavení → Automatizace a scény → Skripty → Přidat skript. Podobně jako v případě automatizací se otevře vizuální editor, ale je zde opět možnost přepnout do YAML editoru. Skripty nemají spouštěče ani podmínky, pouze posloupnost akcí. Zvolíme tedy pojmenování skriptu, které se automaticky použije i pro jeho označení. Dále můžeme zvolit ikonu, řežim a poté již definujeme požadované akce (resp. sekvence, abychom dodrželi správné názvosloví), opět zcela stejně jako u automatizací.

Pro ukázku jsem vytvořil dva skripty. Jeden rozsvítí dvě světla na úroveň 50, druhý je zhasne a oba mají navíc definovanou i ikonu. Současně nastavují pomocníka typu „přepínač“ input_boolean.svetla_dole_stav, kterého je potřeba definovat předem a bude nám signalizovat stav zapnutí nebo vypnutí. V další kapitole se k obou skriptům ještě vrátíme a vytvoříme z nich vlastní tlačítko.

  alias: Světla dole on
  sequence:
    - service: light.turn_on
      data:
        brightness_pct: 50
      target:
        entity_id:
          - light.svetlo_vstup
          - light.svetlo_predsin
    - service: input_boolean.turn_on
      data: {}
      target:
        entity_id: input_boolean.svetla_dole_stav
  mode: single
  icon: mdi:lightbulb
  alias: Světla dole off
  sequence:
    - service: light.turn_off
      data: {}
      target:
        entity_id:
          - light.svetlo_vstup
          - light.svetlo_predsin
    - service: input_boolean.turn_off
    data: {}
    target:
      entity_id: input_boolean.svetla_dole_stav
  mode: single
  icon: mdi:lightbulb-off

Šablony pro vlastní senzory

V poslední kapitole se podíváme na trochu pokročilější možnosti, tím jsou šablony nebo-li tzv. „Templates“, tedy možnost vytvořit vlastní typy objektů. Typicky to mohou být různé senzory, které vrací výsledky dle zadaných definicí nebo třeba i virtuální žárovky, rolety, tlačítka apod., které ve skutečnosti spouští připravené vlastní skripty. Základem je porozumět právě tomu, jak se šablony používají. Jedná se vlastně o Jinja2 engine, takže se není nutné se učit něco zcela nového. Díky Jinja2 máme k dispozici různé matematické operátory, porovnávací funkce a samozřejmě i logické operátory. Drobnou vadou na kráse je fakt, že pro definici vlastních objektů není k dispozici žádný interaktivní editor. Vše je nutné ukládat přímo do konfiguračního souboru a následně provést znovu načtení konfigurace. Pro usnadnění je alespoň k dispozici v menu Nástroje pro vývojáře → Šablony formulář, ve kterém si můžeme jednotlivé konstrukce vyzkoušet a spustit.

Nejdříve se podíváme na základní konstrukce, jak pracovat s výstupy a mít možnost je modifikovat. Vše budeme zkoušet právě ve výše uvedeném formuláři.

Každý senzor vrací svůj základní stav v konstrukci „state“, případně další hodnoty ukládá do „attributes“. Konkrétní hodnoty každé entity můžeme prohlídnout v menu Nástroje pro vývojáře → Stavy. První ukázka vrátí aktuální hodnotu teploty senzoru teploty a vlhkosti (SONOFF SNZB-02) jako číselný typ float, druhá ukázka pak hodnotu atributu, který udává jednotku měření:

{{ states('sensor.sensor_loznice_temperature') | float }}
{{ state_attr('sensor.sensor_vt_loznice_temperature','unit_of_measurement') }}

Pro jednotlivé výstupy můžeme použít již zmíněné matematické operátory a tak si např. sečíst spotřeby z jednotlivých elektrickýh zásuvek:

{{ states('sensor.zasuvka_pracka_energy') | int + states('sensor.zasuvka_susicka_energy') | int + states('sensor.zasuvka_mycka_energy') | int }}

Výstupy můžeme uložit i do proměnných a dále s nimi pracovat:

{% set CENA = states('input_text.cena') | float %}
{% set KURZ = states('input_text.kurz') | float %}
{{- (CENA * KURZ) | round(2) -}}

A konečně to celé můžeme propojit i s podmínkou IF-ELSE:

{{ states('input_text.cena') | float }}

{% if (states('input_text.cena') | float) > 20 %}
 cena je vyšší než 20
{% else %}
 cena je nižší než 20
{% endif %}

Vlastní senzory a tlačítko

Po lehkém úvodu do psaní šablon se podíváme, jak vytvořit jednoduchý senzor. Mějme konkrétní situaci – chytrý termostat k plynovému kotli měřící i teplotu v místnosti, kterou chceme zobrazovat na dashboardu. Jelikož jde o zařízení typu „climate“, jeho stavem je pouze informace, zdali je zapnuté topení či nikoliv. Teplota je uložena pouze v atributu. V úvodu jsem se zmiňoval, že veškeré vlastní senzory je nutné definovat přímo v konfiguraci, tj. v souboru configuration.yaml. Osobně doporučuji to kvůli přehlednosti zadávat pomocí direktivy „include“ do vlastních konfiguračních souborů. Do souboru „configuration.yaml“ přidáme další řádek s definicí „01_sensor.yaml“ a rovnou i „01_binary_sensor.yaml“ pro další ukázku.

sensor: !include 01_sensor.yaml
binary_sensor: !include 01_binary_sensor.yaml

A editujeme soubor „01_sensor.yaml“ ve stejné adresářové struktuře. Definujeme platformu template, že se jedná o senzor a že se bude jmenovat „obyvaci_pokoj_temperature“. Parametr „friendly_name“ uvádá jeho uživatelský název, dále nastavíme měrnou jednotku, ikonu a konečně jeho výstupní hodnotu jako template.

- platform: template
  sensors:
    obyvaci_pokoj_temperature:
      friendly_name: 'Teplota obývací pokoj'
      unit_of_measurement: '°C'
      icon: mdi:thermometer
      value_template: "{{ state_attr('climate.obyvaci_pokoj', 'current_temperature') }}"

Aby se změny projevily, musíme postupovat následovně. V menu Nástroje pro správu → Konfigurace YAML klikneme na „Zkontrolovat konfiguraci“. Pokud je vše OK, pak klikneme ve formuláři „Nové načtení XML konfigurace“ na „Všechny konfigurace YAML“. V některých případech je však nutné provést restart celého Home Assistanta. Poté můžeme zkusit náš první vlastní senzor zobrazit jako entitu v dashboardu.

Definici šablony nemusíme použít jen pro hodnotu, ale můžeme kombinovat i pro ikonu. Níže uvedená ukázka vytvoří nový server, který vrací informaci o stavu vytápení a současně podle tohoto výstupu nastavuje vhodnou ikonu:

- platform: template
  sensors:
    vytapeni_domu_stav:
    friendly_name: "Vytápění domu"
    value_template: "{{ state_attr('climate.obyvaci_pokoj', 'hvac_action') }}"
    icon_template: >-
      {% if is_state('sensor.vytapeni_domu_stav',"idle") %}
        mdi:power-on
      {% elif is_state('sensor.vytapeni_domu_Stav',"heating") %}
        mdi:fire
      {% else %}
        mdi:octagon
      {% endif %}

Vlastní senzory mají ještě jednu výhodu, také ukládají svojí historii. Konkrétně u výše uvedeného senzoru se můžeme podívat i do historie, kdy vytápění běželo a kdy ne.

Podobným způsobem můžeme definovat i binární senzory. To jsou senzory, které typicky vrací TRUE nebo FALSE dle zadané podmínky a použijeme je jako spouštěče v automatizacích. Editujeme tedy „01_binary_sensor.yaml“ ve stejné adresářové struktuře a definujeme jako v minulých případech platformu, typ, název. Podmínku uvedeme přímo do „value_template“ tak, jako se jednalo o běžný výstup. Tedy žádné kontrukce pro „IF-ELSE“ apod. V níže uvedeném případě definujeme jeden binární senzory, který vrátí TRUE v případě, že odběr pračky je větší než 5W a je tedy v provozu.

- platform: template
  sensors:
    power_pracka:
      friendly_name: "Pračka běží"
      value_template: "{{ states('sensor.zasuvka_pracka_power') |  int > 5 }}"

Konečně se dostáváme k vlastnímu tlačítku, které jsem sliboval při povídání o skriptech. Nejdříve opět upravíme konfigurační soubor „configuration.yaml“, do kterého přidáme nový řádek:

switch: !include 01_switch.yaml

Poté editujeme soubor „01_switch.yaml“ ve stejné adresářové struktuře a přidáme níže uvedenou definici. Není to nic jiného, než spuštění dvou připravených scriptů a podmínka se stavem pomocníka „přepínač“, která určitě stav tlačítka. Stejného pomocníka ještě využijeme i v podmínce pro nastavení ikonky.

- platform: template
  switches:
    svetla_dole:
    friendly_name: "Světla dole"
    value_template: "{{ is_state('input_boolean.svetla_dole_stav', 'on') }}"
    turn_on:
      service: script.svetla_dole_on
    turn_off:
      service: script.svetla_dole_off
    icon_template: >-
      {% if is_state('input_boolean.svetla_dole_stav','on') %}
        mdi:lightbulb
      {% else %}
        mdi:lightbulb-off
      {% endif %}

Příště budeme ukládat data

Jednotlivá témata, která jsou poměrně rozsáhlá, jsme prošli tak trochu letem světem. Snažil jsem se, abyste si odnesli alespoň dobrý základ a snad tomu pomohli i praktické ukázky.

Používáte nějaké zajímavé automatizace nebo skripty? Podělte se s ostatními v diskuzi. Pokud se přeci jen na programování automatizací zatím necítíte nebo jen hledáte inspiraci, podívejte se na již hotová řešení na stránkách Blueprints Exchange.

bitcoin školení listopad 24

K vlastním šablonám, neboli „Templates“ se ještě vrátím v některém z dalších pokračování, které se bude zabývat tvorbou vlastních dashboardů. Příští pokračování bude ale zaměřené na využití InfluxDB pro ukládání dat a jejich vizualizaci v Grafana, přesun sqlite do vhodnější relační databáze a další spíše interní záležitosti Home Assistant.

(Autorem obrázků je Václav Steiner.)

Autor článku

V minulosti vedl týmy systémových administrátorů ve společnosti IGNUM nebo sdružení CZ.NIC, nyní působí ve společnosti VSHosting.