Migrace template sensorů na moderní syntaxi
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ů:

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ší syntaxe | Moderní 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: |
| (implicitní) | default_entity_id: (pro zachování entity ID) |
Pokud chcete zachovat původní entity ID po migraci, musíte přidat parametr default_entity_id. Bez něj se entity ID vygeneruje automaticky z hodnoty name, což může způsobit změnu ID a nefunkčnost automatizací!
Příklad:
- Starý sensor:
sensor.teplota_venku_celsius(z klíčeteplota_venku_celsius:) - Nový bez
default_entity_id:sensor.teplota_venku_c(zname: "Teplota venku (°C)"- generováno automaticky) - Nový s
default_entity_id:sensor.teplota_venku_celsius(explicitně nastaveno)
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)"
default_entity_id: sensor.teplota_venku_celsius
unique_id: teplota_venku_celsius
unit_of_measurement: "°C"
state: "{{ (states('sensor.outside_temperature') | float - 32) * 5/9 | round(1) }}"
platform: template→ přesunuto do sekcetemplate:sensors:→ odstraněno (entity přímo v seznamu)friendly_name:→name:value_template:→state:- Přidán
default_entity_id(doporučené pro zachování entity ID) - 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"
default_entity_id: binary_sensor.okno_obyvak
unique_id: okno_obyvak
device_class: window
state: "{{ is_state('sensor.contact_living_room', 'open') }}"
binary_sensorsplatform: template→ sekcetemplate:sbinary_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"
default_entity_id: sensor.pocasi_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') }}"
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"
default_entity_id: sensor.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 %}
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 }}"
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.yamlruč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:
- Odstraňte starší definici z
sensor:nebobinary_sensor:sekce - Přidejte novou definici do sekce
template: - Změňte syntaxi podle tabulky výše
- Přidejte
default_entity_ids původním entity ID (důrazně doporučeno!) - Přidejte
unique_id(volitelné, ale doporučené)
- Statistics sensory (
platform: statistics) NEMIGRUJTE - ty používají vlastní platformu a zůstávají v sekcisensor:. - Vždy přidávejte
default_entity_id- bez něj může dojít ke změně entity ID!
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"
default_entity_id: sensor.pocet_svetel_zapnutych
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"
default_entity_id: sensor.prumerna_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"
default_entity_id: binary_sensor.nekdo_doma
unique_id: nekdo_doma
device_class: occupancy
state: >
{{ is_state('person.jiri', 'home') or is_state('person.anna', 'home') }}
- SNMP sensor zůstal v sekci
sensor:- není template - Template sensory byly přesunuty do nové sekce
template: - Entity ID zůstávají STEJNÉ díky
default_entity_id(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é pouze s
default_entity_id - ✅ Dopad: Minimální - žádné úpravy automatizací potřeba (při použití
default_entity_id)
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!
Pomohl vám tenhle návod?
Návody tu píšu ve volném čase a udržuju je aktuální. Když vám některý ušetřil čas, můžete přispět.
Jednorázově, kartou nebo Apple Pay. Částku lze na další stránce změnit.
Nechcete posílat peníze? Kupujte podle návodů přes moje odkazy na produkty. Cena je pro vás stejná a pomůže to taky.