Création d'un template sensor dans le nouveau système de syntaxe (not legacy)

Mon problème

Bonjour a tous,
Je tiens a préciser que je suis nouveau sous home assistant bien que bricolant la domotique depuis de nombreuses années.

Voilà, j’ai un Home assistant de dev.
Je cherche a créer un template sensor qui reprend un sensor « compteur » de l’integration IPX800.
J’ai trouvé et réussit a faire deux sensors avec l’ancienne syntaxe (legacy).
Le problème c’est que cela ne supporte pas les paramètres « state-class » et « device-class »; et qu’il faut mieux commencer avec la nouvelle méthode.

J’ai choisit de splitter le fichier configuration.yaml.

Voilà les différentes directions que j’ai prises et les erreurs remontées :

configuration.yaml :

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

# Text to speech
tts:
  - platform: google_translate

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensors.yaml
counter: !include counters.yaml
ipx800v4: !include ipx800v4.yaml
template: !include_dir_merge_list template/

et fichier sensors.yaml :
(selon la nouvelle méthode : Difference between "sensor platform Template" and "Template sensor " - Configuration - Home Assistant Community)

template:
  - sensor:
      - name: "eau_ipx_litres"
        unit_of_measurement: "L"
        device_class: water
        state_class: total_increasing
        state: "{{ states('sensor.compteur_eau_2') | int / 4 }}"
  - sensor:
      - name: "eau_ipx_m3"
        unit_of_measurement: "m³"
        device_class: water
        state_class: total_increasing
        state: "{{ states('sensor.compteur_eau_2') | int / 4000 }}"

Me retourne l’erreur :

deplacement du fichier sensor.yaml dans le dossier template avec un « template: !include_dir_merge_list template/ » dans le fichier configuration.yaml

et le fichier /template/sensor.yaml :

- sensor:
    - name: "eau_ipx_litres"
      unit_of_measurement: "L"
      device_class: water
      state_class: total_increasing
      state: "{{ states('sensor.compteur_eau') | int / 4 }}"
- sensor:
    - name: "eau_ipx_m3"
      unit_of_measurement: "m³"
      device_class: water
      state_class: total_increasing
      state: "{{ states('sensor.compteur_eau') | int / 4000 }}"


La c’est OK.

si je veux integrer un sensor d’un autre type (- platform: systemmonitor, par exemple), cela ne fonctionne plus

- sensor:
    - name: "eau_ipx_litres"
      unit_of_measurement: "L"
      device_class: water
      state_class: total_increasing
      state: "{{ states('sensor.compteur_eau') | int / 4 }}"
- sensor:
    - name: "eau_ipx_m3"
      unit_of_measurement: "m³"
      device_class: water
      state_class: total_increasing
      state: "{{ states('sensor.compteur_eau') | int / 4000 }}"

systemmonitor:
  - sensor:
      - name : "resources"
        type: disk_use_percent
        arg: /home
        type: memory_use_percent
        type: swap_use_percent
        type: processor_use
        type: last_boot

erreur

Est ce que je dois crée un nouveau fichier pour chaque « type » de sensor?
Est ce juste un problème de syntaxe?

Je crois que je n’ai pas bien compris le système des « plateform » et « template »…

Merci pour vos lumières!

Ma configuration


System Information

version core-2023.2.3
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.7
os_name Linux
os_version 5.15.90
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4838
Installed Version 1.30.1
Stage running
Available Repositories 1261
Downloaded Repositories 7
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 9.5
update_channel stable
supervisor_version supervisor-2023.01.1
agent_version 1.4.1
docker_version 20.10.22
disk_total 27.9 GB
disk_used 3.7 GB
healthy true
supported true
board odroid-n2
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.6.1), File editor (5.5.0), TasmoAdmin (0.23.0), Studio Code Server (5.5.2)
Dashboards
dashboards 1
resources 2
views 1
mode storage
Recorder
oldest_recorder_run 9 février 2023 à 22:58
current_recorder_run 12 février 2023 à 18:29
estimated_db_size 24.56 MiB
database_engine sqlite
database_version 3.38.5

Salut,

Tu as pas mal de mélanges par rapport à la nouvelle syntaxe …
Dans ton fichier sensor.yaml

- platform: template
  sensors:
    eau_ipx_litres:
      unit_of_measurement: "L"
      device_class: water
      state_class: total_increasing
      value_template: "{{ states('sensor.compteur_eau') | int(0) / 4 }}"
- platform: template
  sensors:
    eau_ipx_m3:
      unit_of_measurement: "m³"
      device_class: water
      state_class: total_increasing
      value_template: "{{ states('sensor.compteur_eau') | int(0) / 4000 }}"

Et tu as l’exemple pour systemmonitor

1 « J'aime »

Merci pour ta reponse.

Dans l’exemple que tu m’envoies tu es dans la nou elle syntaxe ou l’ancienne?

Meme question pour le lien que tu me donne … nouvelle ou ancienne syntaxe ?

Ok , j’ai l’impression que le gars dans le lien que j’ai cité faisait un raccourci « generique ». (Difference between "sensor platform Template" and "Template sensor " - Configuration - Home Assistant Community).
Il faut donc toujours ( meme dans la nouvelle syntaxe) indiquer la « platform »…

Me trompe-je?

L’ancienne syntaxe n’a plus de sens d’être intégrée maintenant dans une configuration. Donc tout au format nouveau et évidemment avec les mots clés indispensables

Si je comprends bien, quand il ecrit

template:
  - sensor:
      - name: "energy_return"

il faut comprendre

- platform: template
  sensors:

ou bien

 - platform: systemmonitor
    resources:


parce que ton

- platform: template
  sensors:
    eau_ipx_litres:
      unit_of_measurement: "L"
      device_class: water
      state_class: total_increasing
      value_template: "{{ states('sensor.compteur_eau') | int(0) / 4 }}"
- platform: template
  sensors:
    eau_ipx_m3:
      unit_of_measurement: "m³"
      device_class: water
      state_class: total_increasing
      value_template: "{{ states('sensor.compteur_eau') | int(0) / 4000 }}"

ca m’a l’air d’etre de la syntaxe legacy…

Template:

Ça devient

platform: template

Mais c’est pas la seule variation…
Et accessoirement si les classes fonctionnent ça veut sans doute dire que c’est la nouvelle syntaxe :wink:

Ah bon? Je pensais que c’etait le contraire…

Salut @Pulpy-Luke ,

Sauf erreur de ma part je pense que tu te trompes si j’en crois la doc :

Salut.
Effectivement j’ai inversé.
Bon après j’ai pas très envie de basculer sur le nouveau format :
Dans l’ancien j’ai un fichier include par type d’entité (binary_sensor, sensor etc)… Je trouve facile d’y retrouver mes petits. Avec le nouveau découpage, je devrais me faire un ou plusieurs include de template en fonction du type… et mes sensors seront éclatés en 2

1 « J'aime »

Non
Tu as une solution simple d’éclater par device ou fonction…
Dans chaque fichier device_toto.yaml par exemple tu peux avoir n’importe quel type de capteur.
C’est ce qui est le plus propre…