Abbiamo parlato ieri delle novità entusiasmanti di Home Assistant 2025.12: Home Assistant Labs con funzioni sperimentali, automazioni purpose-specific intuitive, Energy Dashboard potenziato con monitoraggio real-time e Winter Mode che fa nevicare sul dashboard. Un aggiornamento ricco di funzionalità che chiude il 2025 in bellezza.
Tuttavia, insieme alle novità, molti utenti stanno ricevendo un warning preoccupante nelle notifiche e nei log dopo l’aggiornamento:
⚠️ La sintassi obsoleta platform: template per sensor sta per essere rimossa. Si prega di migrare [nome_sensore] alla sintassi del modello moderna.
Se anche tu hai ricevuto questo avviso, non sei solo: migliaia di utenti con configurazioni template “legacy” (create prima del 2021) stanno vedendo questo messaggio. La buona notizia? Non è un bug, ma un avviso di deprecazione pianificato che ti dà tempo per agire prima che i tuoi template smettano di funzionare definitivamente.
Questa guida ti mostrerà esattamente come migrare dalla vecchia alla nuova sintassi template, con esempi pratici step-by-step per sensor, binary_sensor, switch e tutti i casi d’uso comuni. Non serve essere esperti YAML: seguendo questa guida, migliorerai anche l’organizzazione e le performance della tua configurazione Home Assistant.
Il warning che sta comparendo a molti utenti
Con l’aggiornamento a Home Assistant 2025.12, molti utenti stanno ricevendo un warning di deprecazione nelle notifiche e nei log:
Importante: Anche se i tuoi template funzionano ancora ora, smetteranno di funzionare in una release futura (probabilmente 2025.2 o 2025.3). È necessario migrarli subito per evitare che le automazioni si rompano improvvisamente.
Perché il cambio di sintassi?
Vecchia sintassi: limitata e poco chiara
La vecchia sintassi template (pre-2021) aveva diverse limitazioni:
Problemi sintassi legacy:
-
Un template = un sensore: dovevi ripetere
platform: templateper ogni sensore -
Configurazione dispersa: sensori template mescolati ad altri tipi sensor
-
Opzioni limitate: trigger e attributi custom difficili da implementare
-
Leggibilità scarsa: file
configuration.yamldiventavano caotici con 20+ template
Nuova sintassi: potente e organizzata
La sintassi moderna template (post-2021) risolve tutto:
Vantaggi sintassi moderna:
-
Organizzazione: tutti i template in sezione dedicata
template: -
Trigger-based: template che si aggiornano solo quando necessario (risparmio CPU)
-
Attributi custom illimitati: aggiungi metadati personalizzati facilmente
-
Leggibilità: struttura chiara e manutenibile
-
Performance: calcoli solo quando trigger scatta (vs polling continuo legacy)
Come identificare template da migrare
Controllo nei log
Developer Tools > Logs:
Cerca warning tipo:
WARNING (MainThread) [homeassistant.components.template.sensor] The platform: template configuration for sensor is deprecated
Controllo manuale configuration.yaml
Cerca nel tuo configuration.yaml (o file inclusi) questa struttura:
sensor:
- platform: template
sensors:
nome_sensore:
# configurazione sensore
Altri pattern da cercare:
-
binary_sensor:conplatform: template -
switch:conplatform: template -
cover:conplatform: template -
fan:conplatform: template -
light:conplatform: template
Migrazione passo-passo: Sensor Template
Esempio 1: Sensor semplice con value_template
VECCHIA SINTASSI (da eliminare):
sensor:
- platform: template
sensors:
stato_balcone:
friendly_name: "Temperatura Balcone"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.temperatura_esterna') | float }}"
device_class: temperature
NUOVA SINTASSI (corretta):
template:
- sensor:
- name: "Temperatura Balcone"
unit_of_measurement: "°C"
state: "{{ states('sensor.temperatura_esterna') | float }}"
device_class: temperature
Cambiamenti chiave:
-
sensor:→template:→- sensor: -
friendly_name:→name: -
value_template:→state: -
Rimuovi
platform: templateesensors:
Esempio 2: Sensor con attributi custom
VECCHIA SINTASSI:
sensor:
- platform: template
sensors:
potenza_casa:
friendly_name: "Potenza Casa Totale"
unit_of_measurement: "W"
value_template: >
{{ states('sensor.potenza_soggiorno') | float(0) +
states('sensor.potenza_cucina') | float(0) +
states('sensor.potenza_camera') | float(0) }}
attribute_templates:
costo_orario: >
{{ (states('sensor.potenza_casa') | float / 1000 * 0.30) | round(2) }}
aggiornato: "{{ now().strftime('%H:%M:%S') }}"
NUOVA SINTASSI:
template:
- sensor:
- name: "Potenza Casa Totale"
unit_of_measurement: "W"
state: >
{{ states('sensor.potenza_soggiorno') | float(0) +
states('sensor.potenza_cucina') | float(0) +
states('sensor.potenza_camera') | float(0) }}
attributes:
costo_orario: >
{{ (states('sensor.potenza_casa') | float / 1000 * 0.30) | round(2) }}
aggiornato: "{{ now().strftime('%H:%M:%S') }}"
Cambiamenti:
-
attribute_templates:→attributes: -
Resto sintassi identica a esempio 1
Esempio 3: Sensor con availability e icon_template
VECCHIA SINTASSI:
sensor:
- platform: template
sensors:
stato_finestre:
friendly_name: "Finestre Aperte"
value_template: >
{% set aperte = expand('group.finestre')
| selectattr('state', 'eq', 'on') | list | count %}
{{ aperte }}
unit_of_measurement: "finestre"
icon_template: >
{% if states('sensor.stato_finestre') | int > 0 %}
mdi:window-open
{% else %}
mdi:window-closed
{% endif %}
availability_template: "{{ states('group.finestre') != 'unavailable' }}"
NUOVA SINTASSI:
template:
- sensor:
- name: "Finestre Aperte"
state: >
{% set aperte = expand('group.finestre')
| selectattr('state', 'eq', 'on') | list | count %}
{{ aperte }}
unit_of_measurement: "finestre"
icon: >
{% if states('sensor.stato_finestre') | int > 0 %}
mdi:window-open
{% else %}
mdi:window-closed
{% endif %}
availability: "{{ states('group.finestre') != 'unavailable' }}"
Cambiamenti:
-
icon_template:→icon: -
availability_template:→availability:
Esempio 4: Sensor trigger-based (NUOVO, solo sintassi moderna)
Questa è una funzionalità esclusiva della sintassi moderna: sensor che si aggiorna solo quando trigger scatta, invece di ricalcolare continuamente.
SINTASSI MODERNA CON TRIGGER:
template:
- trigger:
- platform: state
entity_id: sensor.potenza_lavatrice
to: "0"
for:
minutes: 5
sensor:
- name: "Lavatrice Terminata"
state: "{{ now().strftime('%H:%M') }}"
attributes:
tempo_ciclo: "{{ (now() - trigger.from_state.last_changed).total_seconds() / 60 }}"
Vantaggi trigger-based:
-
Performance: calcolo solo al trigger (vs ogni 30 secondi legacy)
-
Variabile trigger disponibile: accedi a
trigger.from_state,trigger.to_state -
Logica evento: perfetto per tracking eventi discreti (lavatrice finita, porta aperta/chiusa)
Migrazione Binary Sensor Template
Esempio binary_sensor
VECCHIA SINTASSI:
binary_sensor:
- platform: template
sensors:
notte:
friendly_name: "È Notte"
device_class: light
value_template: >
{{ now().hour >= 22 or now().hour < 6 }}
NUOVA SINTASSI:
template:
- binary_sensor:
- name: "È Notte"
device_class: light
state: >
{{ now().hour >= 22 or now().hour < 6 }}
Cambiamenti:
-
binary_sensor:→template:→- binary_sensor: -
value_template:→state:
Migrazione Switch Template
Esempio switch con turn_on/turn_off
VECCHIA SINTASSI:
switch:
- platform: template
switches:
ventilatore_virtuale:
friendly_name: "Ventilatore"
value_template: "{{ is_state('fan.ventilatore_soggiorno', 'on') }}"
turn_on:
service: fan.turn_on
target:
entity_id: fan.ventilatore_soggiorno
turn_off:
service: fan.turn_off
target:
entity_id: fan.ventilatore_soggiorno
NUOVA SINTASSI:
template:
- switch:
- name: "Ventilatore"
state: "{{ is_state('fan.ventilatore_soggiorno', 'on') }}"
turn_on:
service: fan.turn_on
target:
entity_id: fan.ventilatore_soggiorno
turn_off:
service: fan.turn_off
target:
entity_id: fan.ventilatore_soggiorno
Migrazione multipla: più sensori insieme
Consolidare tutti i template in un’unica sezione
VECCHIA SINTASSI (dispersa):
sensor:
- platform: template
sensors:
temperatura_media:
value_template: "{{ ... }}"
- platform: mqtt
# altri sensori mqtt...
sensor:
- platform: template
sensors:
potenza_totale:
value_template: "{{ ... }}"
binary_sensor:
- platform: template
sensors:
giorno:
value_template: "{{ ... }}"
NUOVA SINTASSI (organizzata):
# Altri sensori rimangono dove sono
sensor:
- platform: mqtt
# sensori mqtt...
# TUTTI i template in UNA sezione dedicata
template:
- sensor:
- name: "Temperatura Media"
state: "{{ ... }}"
- name: "Potenza Totale"
state: "{{ ... }}"
- binary_sensor:
- name: "Giorno"
state: "{{ ... }}"
Vantaggio enorme: Tutti i template in un’unica posizione, facile da trovare e mantenere.
Procedura migrazione sicura
Step 1: Backup configurazione
# Backup manuale cd /config cp configuration.yaml configuration.yaml.backup cp -r packages packages.backup # Se usi packages
Oppure: Supervisor > Snapshots > Create Snapshot (salva tutto)
Step 2: Migra un template alla volta
Non fare:
Migrare tutti i 50 template in una volta
Fai invece:
- Migra 2-3 template
- Controlla configurazione: Developer Tools > YAML > Check Configuration
- Se OK → Riavvia HA
- Verifica sensori funzionano
- Migra altri 2-3 template
- Ripeti fino a completamento
Step 3: Verifica configurazione YAML
Prima di riavviare:
Developer Tools > YAML > Check Configuration
Cerca errori tipo:
Invalid config for [template]: required key not provided @ data['template'][0]['sensor'][0]['state']
Se errori presenti, correggi prima di riavviare.
Step 4: Riavvio e test
Dopo riavvio:
-
Vai su Settings > Devices & Services > Entities
-
Cerca entità template migrate
-
Verifica stato corretto e aggiornamento funzionante
-
Controlla automazioni che usano quei template
Step 5: Pulisci vecchia sintassi
Una volta verificato che tutto funziona, elimina completamente le vecchie definizioni platform: template.
Non lasciare codice commentato:
# sensor: # VECCHIO, da eliminare completamente # - platform: template # sensors: ...
Elimina tutto per mantenere configurazione pulita.
Troubleshooting problemi comuni
Errore: “required key not provided @ data[‘template’][‘sensor’][‘state’]”
Causa: Hai scritto value_template: invece di state:
Fix:
# SBAGLIATO
template:
- sensor:
- name: "Test"
value_template: "{{ ... }}" # ❌
# CORRETTO
template:
- sensor:
- name: "Test"
state: "{{ ... }}" # ✅
Errore: “template value should be a dictionary”
Causa: Indentazione errata YAML
Fix:
# SBAGLIATO (manca trattino prima di sensor)
template:
sensor: # ❌ Manca -
- name: "Test"
# CORRETTO
template:
- sensor: # ✅ Trattino presente
- name: "Test"
Template non si aggiorna più
Causa: Hai usato trigger-based ma dimenticato di specificare trigger
Fix:
Se usi trigger:, il template si aggiorna solo al trigger. Se vuoi aggiornamento continuo (come legacy), NON usare trigger:
template:
# SENZA trigger = aggiornamento continuo (ogni 30s)
- sensor:
- name: "Ora Corrente"
state: "{{ now().strftime('%H:%M') }}"
# CON trigger = aggiornamento solo a evento
- trigger:
- platform: time_pattern
minutes: "/1" # Ogni minuto
sensor:
- name: "Ora Corrente Trigger"
state: "{{ now().strftime('%H:%M') }}"
Entity_id cambiato dopo migrazione
Problema: Template legacy creava sensor.stato_balcone, ora crea sensor.temperatura_balcone
Causa: entity_id deriva da name: nella sintassi moderna
Fix opzione 1 (consigliato): Aggiorna automazioni con nuovo entity_id
Fix opzione 2 (workaround): Forza entity_id manualmente:
template:
- sensor:
- name: "Temperatura Balcone"
unique_id: stato_balcone_legacy # Forza entity_id specifico
state: "{{ ... }}"
Poi vai su Settings > Entities > cerca entità > Rename entity_id manualmente.
Migrazione automatizzata (script Python)
Se hai 50+ template da migrare, esiste uno script community che automatizza conversione:
# Installa script (richiede Python) pip install homeassistant-template-converter # Converti configuration.yaml ha-template-convert configuration.yaml --output configuration_new.yaml # Verifica output manualmente prima di usarlo!
Attenzione: Script automatici non sono perfetti. Verifica sempre output manualmente prima di usare configurazione convertita.
Timeline deprecazione
Home Assistant 2025.12 (dicembre 2025):
-
Warning deprecazione per tutti template legacy
-
Template legacy continuano a funzionare
Home Assistant 2026.1-2026.2 (gennaio-febbraio 2026 stimato):
-
Rimozione completa sintassi legacy
-
Template non migrati smetteranno di funzionare
Hai ~2 mesi per migrare prima della rottura definitiva.
La migrazione alla sintassi template moderna è obbligatoria per continuare a usare template in Home Assistant. Sebbene richieda lavoro iniziale (specialmente con decine di template), i vantaggi sono significativi: migliore organizzazione, performance superiori, trigger-based per logica evento, e struttura manutenibile a lungo termine.
Consiglio: Non aspettare l’ultimo momento. Migra gradualmente 2-3 template al giorno nei prossimi giorni/settimane. Quando arriverà la rimozione definitiva (febbraio 2026 stimato), sarai già pronto senza stress.
Ricorda: Backup prima di tutto, migra a piccoli passi, verifica dopo ogni batch. La tua configurazione Home Assistant ti ringrazierà!
