Bonjour,
avec la version du core 2025.12.0, vous aurez un avertissement que les anciens template (legacy) vont être supprimé. Il va vous falloir les convertir en nouveau format template.
Vous aurez un exemple de conversion. Vous avez 6 mois pour faire la migration, mais ne tardez pas
les legacy template sont supprimés de la doc :
il y a un sujet sur le forum anglais :
TLDR: Legacy template entities (alarm_control_panel, binary_sensor, cover, fan, light, lock, sensor, switch, vacuum, weather) are being deprecated in 2025.12. Legacy template entities will no longer work after 2026.6. I wanted to avoid the...
Reading time: 24 mins 🕑
Likes: 116 ❤
5 « J'aime »
Tu peux partager un exemple?
Genre Un template Avant vers ce vers quoi on doit migrer Apres?
comme dit, tu auras un exemple du nouveau format a changer dans le message d’avertissement.
avant :
sensor:
- platform: template
sensors:
humidity_garage:
friendly_name: "humdity garage"
unit_of_measurement: "g/m³"
device_class: humidity
icon_template: mdi:water
value_template: "{{ ((states('sensor.garage_absolute_humidity') | float(0)) - (states('sensor.aussensensor_absolute_humidity') | float(0)))|round(2) }}"
après
template:
- sensor:
- name: "humdity garage"
unique_id: humidity_garage
unit_of_measurement: "g/m³"
device_class: humidity
icon: mdi:water
state: "{{ ((states('sensor.garage_absolute_humidity') | float(0)) - (states('sensor.aussensensor_absolute_humidity') | float(0)))|round(2) }}"
6 « J'aime »
BBE
Décembre 4, 2025, 12:27
4
Attention, on ne peut avoir qu’une seule clef template dans configuration.yaml.
Donc si vous avez déjà une clef template dans configuration.yaml (ou un fichier templates.yaml avec un include template: !include templates.yaml dans le configuration.yaml ), il faudra ajouter ces template à la suite de la clef template existante et pas créer une nouvelle clef template (ou ajouter dans le fichier templates.yaml existant et ne pas créer ni une autre clef template, ni un autre fichier et un autre include ).
Exemples tirés du post anglophone:
Si vous avez ce template legacy:
sensor:
- platform: template
sensors:
my_jam:
value_template: "{{ 1==1 }}"
et si vous avez déjà ça dans configuration.yaml
template:
- triggers:
- trigger: state
entity_id: sensor.foo
sensor:
- name: abc
state: "{{ 'something' }}"
ce qu’il faut faire
template:
- triggers:
- trigger: state
entity_id: sensor.foo
sensor:
- name: abc
state: "{{ 'something' }}"
# ENTITE MIGREE
- sensor:
- default_entity_id: sensor.my_jam
state: '{{ 1==1 }}'
name: my_jam
Ce qu’il ne faut pas faire
template:
- triggers:
- trigger: state
entity_id: sensor.foo
sensor:
- name: abc
state: "{{ 'something' }}"
template: # <--- A ne sourtout PAS FAIRE, pas plus d'un - template:
# ENTITE MIGREE
- sensor:
- default_entity_id: sensor.my_jam
state: '{{ 1==1 }}'
name: my_jam
3 « J'aime »
Tochy
Décembre 4, 2025, 12:37
5
Salut
Il est aussi possible de recréer tous ces sensors (enfin 95% d’entre eux) à l’aide de l’interface utilisateur ce qui évite d’avoir des sensors qui traînent à droite et à gauche
5 « J'aime »
idjul
Décembre 4, 2025, 1:22
6
Y aurait-il un outil que je n’ai pas vu pour ça ?
Tochy
Décembre 4, 2025, 1:31
7
Parametres / appareils et services / entrées
Dans config.yaml j’ai :
binary_sensor:
- platform: template
sensors:
bt_stuck:
friendly_name: "BT"
value_template: >-
{% set btvalues = [
states.sensor.ble_temperature_salon.last_updated,
states.sensor.ble_temperature_chambre.last_updated]%}
{{ (as_timestamp(now())-as_timestamp(btvalues | max)) > 120 }}
device_class: problem
Devient dans l’ui:
3 « J'aime »
Salut
Comment ça ce passe dans le cas de packages ?
dans configuration.yaml j’ai cette ligne :
homeassistant:
customize: !include customize.yaml
## Chargement des packages
packages: !include_dir_named packages
puis j’ai un dossier packages avec ceci à l’intérieur :
exemple de code :
fichier xxxxx.yaml
template:
- sensor:
####### Prévisions Tempo OpenDPE #######
- name: "OpenDPE forecast J2"
unique_id: opendpe_forecast_j2
availability: > #Pour mettre à jours les capteurs sous-jacents lorsque le raw1 est mis à jour
{{ states('sensor.opendpe_raw_day1') not in ['unavailable', 'unknown', ''] }}
state: >
{% set target_date = (now() + timedelta(days=2)).strftime('%Y-%m-%d') %}
{% set ns = namespace(couleur='unknown') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.couleur = state_attr(sensor, 'couleur') | default('unknown') %}
{% endif %}
{% endfor %}
{{ ns.couleur }}
attributes:
date: "{{ (now() + timedelta(days=2)).strftime('%Y-%m-%d') }}"
probability: >
{% set target_date = (now() + timedelta(days=2)).strftime('%Y-%m-%d') %}
{% set ns = namespace(prob='') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.prob = state_attr(sensor, 'probability') | default('') %}
{% endif %}
{% endfor %}
{{ ns.prob }}
- name: "OpenDPE forecast J3"
unique_id: opendpe_forecast_j3
availability: > #Pour mettre à jours les capteurs sous-jacents lorsque le raw1 est mis à jour
{{ states('sensor.opendpe_raw_day1') not in ['unavailable', 'unknown', ''] }}
state: >
{% set target_date = (now() + timedelta(days=3)).strftime('%Y-%m-%d') %}
{% set ns = namespace(couleur='unknown') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.couleur = state_attr(sensor, 'couleur') | default('unknown') %}
{% endif %}
{% endfor %}
{{ ns.couleur }}
attributes:
date: "{{ (now() + timedelta(days=3)).strftime('%Y-%m-%d') }}"
probability: >
{% set target_date = (now() + timedelta(days=3)).strftime('%Y-%m-%d') %}
{% set ns = namespace(prob='') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.prob = state_attr(sensor, 'probability') | default('') %}
{% endif %}
{% endfor %}
{{ ns.prob }}
fichier yyyyy.yaml
template:
# compteur eau m³
- sensor:
############################
# Compteur Eau froide generale
- name: "EF litres"
unique_id: ef_litres
icon: mdi:counter
# device_class: water
state_class: measurement
state: >
{{ (states('counter.compteur_ef') | float(default=0) / 1) | round(3) }}
unit_of_measurement: "L"
availability: "{{ states('counter.compteur_ef')|is_number and states('counter.compteur_ef')|is_number }}"
- name: "EF mètres cubes"
unique_id: ef_metres_cubes
icon: mdi:counter
# device_class: water
state_class: measurement
state: >
{{ (states('counter.compteur_ef') | float(default=0) / 1000) | round(3) }}
unit_of_measurement: "m³"
availability: "{{ states('counter.compteur_ef')|is_number and states('counter.compteur_ef')|is_number }}"
############################
## Compteur ECS
- name: "ECS litres"
unique_id: ecs_litres
icon: mdi:counter
# device_class: water
state_class: measurement
state: >
{{ (states('counter.compteur_ecs') | float(default=0) / 1) | round(3) }}
unit_of_measurement: "L"
availability: "{{ states('counter.compteur_ecs')|is_number and states('counter.compteur_ecs')|is_number }}"
- name: "ECS mètres cubes"
unique_id: ecs_metres_cubes
icon: mdi:counter
# device_class: water
state_class: measurement
state: >
{{ (states('counter.compteur_ecs') | float(default=0) / 1000) | round(3) }}
unit_of_measurement: "m³"
availability: "{{ states('counter.compteur_ecs')|is_number and states('counter.compteur_ecs')|is_number }}"
je dois faire quoi ? regrouper tous les fichiers en un seul ?
Si c’est le cas ça va pas simplifier pour s’y retourver
Merci de votre aide
Mais tu n’as rien à faire, tu utilises déjà le nouveau format .
J’utilise package et un seul fichier template avec tout dedans.
homeassistant:
packages: !include_dir_named packages
BBE
Décembre 4, 2025, 4:27
10
Quelques uns que j’avais oublié… Du coup m’en vais ptet les faire par l’UI suivant le type de capteurs…
[edit] tout migré, sans soucis… tout propre…
1 « J'aime »
J’ai trois fichier dans packages qui utilise template:
garbage_sensor_template.yaml
previsions_tempo_template.yaml
compteur_ eau_template.yaml
J’ai mis une partie du contenu de deux d’entre eux ci dessus.
du coup je me demande si je dois les regrouper.
Comme tu veux, rien ne t’oblige.
Ok Merci
Donc pour le moment je vais pas y toucher, si Ha rouspète je corrigerai…
Tochy
Décembre 4, 2025, 5:03
14
Tu peux avoir 50 fichiers dans tes packages qui chacun contiennent, templates, binary etc… ça ne posera aucun soucis.
Le seul soucis de cette mise à jour est l’abandon (dans 6 mois) de la forme legacy des sensors écrits en yaml rien d’autre.
Donc tant que dans tes packages, tu n’as pas l’ancien format legacy pour décrire un sensor, pas de soucis.
Je n’en ai qu’un qui traine de mon coté, le tout premier que j’avais écrit et que je n’avais jamais pris le temps de transformer, du coup c’est chose faite.
2 « J'aime »
Slt moi je n’avais pas modifier les switch
31 à modifier, donc je vais passer directement par l’UI …
J’avais pas vu , aussi :
Les intégrations suivantes ont été supprimées car elles sont incompatibles avec les méthodes d'installation actuellement prises en charge :
Suivi Bluetooth
TASSES
Décora
dlib Détection de visage
dlib Face Identifier
Température d'Eddystone
GStreamer
Clavier
LIRC
Pandora
Caméra Raspberry Pi
SMS
Ciseaux
TensorFlow
Et du coup SMS notifications via GSM-modem ne fonctionne plus , va falloir trouver un autre truc
Bonjour, pour les SMS j’ai trouvé et cela fonctionne très bien.
“SMS Gammu Gateway Add-on”
Je vais regarder cet addon ?
Moi j’ai un warning, et lorsque je copie / colle ce qu’il me donne, il y a des erreurs !
Savez vous comment migrer ces sensors avec les nouveaux template et dans quel fichier le mettre ?
- platform: time_date
display_options:
- "time"
- "date"
- "date_time"
- "date_time_utc"
- "date_time_iso"
- "time_date"
- "time_utc"
Tochy
Décembre 5, 2025, 1:43
20
J’en ai un comme ça et il ne m’a pas demander de le migrer.
Sinon tu peux le faire directement depuis l’ui avec l’intégration date et time.
Mais j’ai une question par rapport à ce sensor car du coup hier j’ai fait du message sur ma config et je me demandais qu’elle était son utilité.
Je l’avais créé lors de mes tout premier pas sur HA car il était dit que j’en avais besoin pour un autre sensor. Hors hier je l’ai pour l’instant désactivé et j’ai l’impression que tout fonctionne correctement donc je m’interroge.