Přeskočit na hlavní obsah

Migrace template sensorů na moderní syntaxi

Důležité upozornění

Stará syntaxe platform: template přestane fungovat ve verzi Home Assistant 2026.6 (červen 2026). Home Assistant vás již nyní varuje a je potřeba provést migraci na moderní syntaxi.

Jak poznat, že je potřeba migrovat

Home Assistant vás na problém upozorní dvěma způsoby:

1. Upozornění v sekci Opravy

Nejviditelnější je upozornění v sekci Nastavení → Systém → Opravy, kde uvidíte seznam všech zastaralých template sensorů:

Upozornění na zastaralé template sensory v sekci Opravy

Každý zastaralý sensor je zde veden samostatně s textem "Zastaralá šablona sensor" nebo "Zastaralá šablona binary_sensor".

2. Varování v logu

Druhá možnost je najít varování přímo v logu Home Assistantu (Nastavení → Systém → Protokoly), kde uvidíte konkrétní detaily o problému.


Pokud vidíte některé z těchto varování, jste na správném místě. V tomto článku si ukážeme, jak jednoduše migrovat starou syntaxi na moderní.

Co se mění a proč

Home Assistant postupně modernizuje způsob, jakým se definují template entity. Stará syntaxe byla zavedena před mnoha lety a měla svoje limity. Moderní syntaxe přináší:

  • Čitelnější kód - lépe strukturovaný a srozumitelný
  • Více možností - trigger-based sensory, lepší kontrola nad aktualizacemi
  • Unique ID - možnost editace přes UI
  • Konzistence - stejná syntaxe pro všechny typy template entit
  • Lepší výkon - efektivnější zpracování

Kdy je potřeba migrovat

Pokud ve svých konfiguračních souborech (typicky configuration.yaml nebo v packages/) máte tuto syntaxi, je potřeba provést migraci:

sensor:
- platform: template
sensors:
# ... vaše definice sensorů

nebo

binary_sensor:
- platform: template
sensors:
# ... vaše definice binary sensorů

Základní pravidla migrace

Starší syntaxeModerní syntaxe
friendly_name:name:
value_template:state:
icon_template:icon:
sensors: (seznam)Přímo definice bez vnořené úrovně
V sekci sensor:V sekci template:

Příklad 1: Jednoduchý sensor - Převod teploty

Nejjednodušší příklad - sensor, který převádí teplotu z °F na °C.

Starší syntaxe (ZASTARALÁ)

sensor:
- platform: template
sensors:
teplota_venku_celsius:
friendly_name: "Teplota venku (°C)"
unit_of_measurement: "°C"
value_template: "{{ (states('sensor.outside_temperature') | float - 32) * 5/9 | round(1) }}"

Moderní syntaxe (DOPORUČENÁ)

template:
- sensor:
- name: "Teplota venku (°C)"
unique_id: teplota_venku_celsius
unit_of_measurement: "°C"
state: "{{ (states('sensor.outside_temperature') | float - 32) * 5/9 | round(1) }}"
Co se změnilo?
  • platform: templatepřesunuto do sekce template:
  • sensors:odstraněno (entity přímo v seznamu)
  • friendly_name:name:
  • value_template:state:
  • Přidán unique_id (volitelné, ale doporučené)

Příklad 2: Binary sensor - Je okno otevřené?

Binary sensor, který detekuje, zda je okno otevřené na základě kontaktního senzoru.

Starší syntaxe (ZASTARALÁ)

binary_sensor:
- platform: template
sensors:
okno_obyvak:
friendly_name: "Okno v obýváku"
device_class: window
value_template: "{{ is_state('sensor.contact_living_room', 'open') }}"

Moderní syntaxe (DOPORUČENÁ)

template:
- binary_sensor:
- name: "Okno v obýváku"
unique_id: okno_obyvak
device_class: window
state: "{{ is_state('sensor.contact_living_room', 'open') }}"
Co se změnilo?
  • binary_sensor s platform: templatesekce template: s binary_sensor:
  • value_template:state:
  • Syntaxe je téměř identická jako u běžného senzoru

Příklad 3: Sensor s atributy - Počasí

Sensor, který zobrazuje informace o počasí s dalšími atributy.

Starší syntaxe (ZASTARALÁ)

sensor:
- platform: template
sensors:
pocasi_souhrn:
friendly_name: "Počasí - souhrn"
value_template: "{{ states('weather.home') }}"
attribute_templates:
teplota: "{{ state_attr('weather.home', 'temperature') }}"
vlhkost: "{{ state_attr('weather.home', 'humidity') }}"
tlak: "{{ state_attr('weather.home', 'pressure') }}"

Moderní syntaxe (DOPORUČENÁ)

template:
- sensor:
- name: "Počasí - souhrn"
unique_id: pocasi_souhrn
state: "{{ states('weather.home') }}"
attributes:
teplota: "{{ state_attr('weather.home', 'temperature') }}"
vlhkost: "{{ state_attr('weather.home', 'humidity') }}"
tlak: "{{ state_attr('weather.home', 'pressure') }}"
Co se změnilo?
  • attribute_templates:attributes:
  • Atributy se definují stejně, jen změna názvu klíče

Příklad 4: Sensor s dynamickou ikonou - Baterie

Sensor, který mění ikonu podle stavu baterie.

Starší syntaxe (ZASTARALÁ)

sensor:
- platform: template
sensors:
baterie_senzor:
friendly_name: "Baterie senzor"
unit_of_measurement: "%"
device_class: battery
value_template: "{{ states('sensor.xiaomi_sensor_battery') }}"
icon_template: >
{% set battery_level = states('sensor.xiaomi_sensor_battery') | float(0) %}
{% if battery_level > 90 %}
mdi:battery
{% elif battery_level > 70 %}
mdi:battery-70
{% elif battery_level > 50 %}
mdi:battery-50
{% elif battery_level > 30 %}
mdi:battery-30
{% elif battery_level > 10 %}
mdi:battery-10
{% else %}
mdi:battery-alert
{% endif %}

Moderní syntaxe (DOPORUČENÁ)

template:
- sensor:
- name: "Baterie senzor"
unique_id: baterie_senzor
unit_of_measurement: "%"
device_class: battery
state: "{{ states('sensor.xiaomi_sensor_battery') }}"
icon: >
{% set battery_level = states('sensor.xiaomi_sensor_battery') | float(0) %}
{% if battery_level > 90 %}
mdi:battery
{% elif battery_level > 70 %}
mdi:battery-70
{% elif battery_level > 50 %}
mdi:battery-50
{% elif battery_level > 30 %}
mdi:battery-30
{% elif battery_level > 10 %}
mdi:battery-10
{% else %}
mdi:battery-alert
{% endif %}
Co se změnilo?
  • icon_template:icon:
  • Template kód zůstává stejný, jen se změní název klíče

Příklad 5: Trigger-based sensor - Počítadlo

Moderní syntaxe umožňuje vytvářet trigger-based sensory, které se aktualizují pouze na základě triggerů (ne každou změnu stavu).

Nová funkčnost (TRIGGER-BASED)

template:
- trigger:
- platform: state
entity_id: binary_sensor.motion_sensor
from: "off"
to: "on"
sensor:
- name: "Počet pohybů dnes"
unique_id: pocet_pohybu_dnes
state: "{{ states('input_number.motion_counter') | int + 1 }}"
action:
- service: input_number.set_value
target:
entity_id: input_number.motion_counter
data:
value: "{{ states('input_number.motion_counter') | int + 1 }}"
Nové možnosti

Trigger-based sensory umožňují:

  • Přesnější kontrolu nad aktualizacemi
  • Spouštění akcí při aktualizaci
  • Přístup k datům z triggeru (trigger.to_state, trigger.from_state)
  • Lepší výkon (méně zbytečných aktualizací)

Jak migrovat krok za krokem

1. Zálohujte konfiguraci

Než začnete, vždy si zálohujte svou konfiguraci:

  • Settings → System → Backups (vytvořte zálohu)
  • Nebo nakopírujte soubor configuration.yaml ručně

2. Najděte všechny template sensory

Hledejte v souborech (typicky configuration.yaml nebo packages/):

grep -r "platform: template" /config/

3. Proveďte migraci

Pro každý sensor:

  1. Odstraňte starší definici z sensor: nebo binary_sensor: sekce
  2. Přidejte novou definici do sekce template:
  3. Změňte syntaxi podle tabulky výše
  4. Přidejte unique_id (volitelné, ale doporučené)
Důležité

Statistics sensory (platform: statistics) NEMIGRUJTE - ty používají vlastní platformu a zůstávají v sekci sensor:.

4. Zkontrolujte konfiguraci

V Home Assistant:

  • Developer Tools → YAML → Check Configuration
  • Zkontrolujte, zda nejsou žádné chyby

5. Restartujte nebo reloadujte

Můžete použít:

  • Plný restart (Settings → System → Restart)
  • Nebo Template Entities Reload (Developer Tools → YAML → Template Entities)

6. Ověřte funkčnost

Po restartu zkontrolujte:

  • Entity stále existují se stejným entity ID
  • Hodnoty se aktualizují správně
  • Varování v logu zmizelo

Časté problémy a řešení

❌ Entita má unknown stav

Problém: Po migraci má entita stav unknown.

Řešení: Zkontrolujte, zda template vrací platnou hodnotu. Použijte funkci states() místo states.sensor.xxx.state:

# ❌ ŠPATNĚ
state: "{{ states.sensor.temperature.state }}"

# ✅ SPRÁVNĚ
state: "{{ states('sensor.temperature') }}"

❌ Entita se neaktualizuje

Problém: Entita se přestala aktualizovat po migraci.

Řešení: Zkontrolujte, zda template obsahuje všechny potřebné entity. State-based sensory se aktualizují automaticky, když se změní referenced entity.

❌ Duplicitní template: sekce

Problém: Máte v configuration.yaml více sekcí template:.

Řešení: V souboru může být jen JEDNA sekce template:. Slučte všechny definice pod jednu:

# ❌ ŠPATNĚ
template:
- sensor:
- name: Sensor 1

template: # ← duplicitní!
- sensor:
- name: Sensor 2

# ✅ SPRÁVNĚ
template:
- sensor:
- name: Sensor 1
- sensor:
- name: Sensor 2

Komplexní příklad migrace

Ukážeme si migraci celého package souboru s více sensory.

Před migrací (configuration.yaml)

sensor:
# SNMP sensor - PONECHAT BEZ ZMĚNY
- platform: snmp
host: 192.168.1.32
baseoid: 1.3.6.1.4.1.2021.10.1.3.1

# Template sensory - MIGROVAT
- platform: template
sensors:
pocet_svetel_zapnutych:
friendly_name: "Počet zapnutých světel"
unit_of_measurement: "světel"
value_template: "{{ states.light | selectattr('state', 'eq', 'on') | list | count }}"

prumerna_teplota:
friendly_name: "Průměrná teplota"
unit_of_measurement: "°C"
device_class: temperature
value_template: >
{% set bedroom = states('sensor.bedroom_temp') | float %}
{% set kitchen = states('sensor.kitchen_temp') | float %}
{{ ((bedroom + kitchen) / 2) | round(1) }}

binary_sensor:
- platform: template
sensors:
nekdo_doma:
friendly_name: "Někdo doma"
device_class: occupancy
value_template: >
{{ is_state('person.jiri', 'home') or is_state('person.anna', 'home') }}

Po migraci (configuration.yaml)

sensor:
# SNMP sensor - BEZ ZMĚNY
- platform: snmp
host: 192.168.1.32
baseoid: 1.3.6.1.4.1.2021.10.1.3.1

# Moderní template syntaxe
template:
- sensor:
# Počet zapnutých světel
- name: "Počet zapnutých světel"
unique_id: pocet_svetel_zapnutych
unit_of_measurement: "světel"
state: "{{ states.light | selectattr('state', 'eq', 'on') | list | count }}"

# Průměrná teplota
- name: "Průměrná teplota"
unique_id: prumerna_teplota
unit_of_measurement: "°C"
device_class: temperature
state: >
{% set bedroom = states('sensor.bedroom_temp') | float %}
{% set kitchen = states('sensor.kitchen_temp') | float %}
{{ ((bedroom + kitchen) / 2) | round(1) }}

- binary_sensor:
# Někdo doma
- name: "Někdo doma"
unique_id: nekdo_doma
device_class: occupancy
state: >
{{ is_state('person.jiri', 'home') or is_state('person.anna', 'home') }}
Důležité poznámky
  • SNMP sensor zůstal v sekci sensor: - není template
  • Template sensory byly přesunuty do nové sekce template:
  • Entity ID zůstávají STEJNÉ (např. sensor.pocet_svetel_zapnutych)
  • Automace a scripty budou fungovat BEZ ÚPRAV

Užitečné odkazy


Závěr

Migrace na moderní template syntaxi může vypadat na první pohled komplikovaně, ale ve skutečnosti je to jednoduchá změna názvů klíčů a přesunutí do nové sekce. Moderní syntaxe je čitelnější, výkonnější a umožňuje využít nové funkce jako trigger-based sensory.

Důležité termíny:

  • Deadline: Verze 2026.6 (červen 2026)
  • 🔄 Zpětná kompatibilita: Entity ID zůstávají stejné
  • Dopad: Minimální - žádné úpravy automatizací potřeba

Pokud máte problémy s migrací, neváhejte se zeptat v komentářích pod tímto článkem. Většina problémů je snadno řešitelných a komunita ráda pomůže!

Komentáře