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:
(implicitní)default_entity_id: (pro zachování entity ID)
Důležité - 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íče teplota_venku_celsius:)
  • Nový bez default_entity_id: sensor.teplota_venku_c (z name: "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) }}"
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 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') }}"
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"
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') }}"
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"
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 %}
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 default_entity_id s původním entity ID (důrazně doporučeno!)
  5. 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:.
  • 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') }}
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É 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.

Komentáře