Problème création template sensor

Bonjour à tous,

Je cherche à faire un template sensor pour récupérer l’etat d’ouverture de mes ouvrants.
Je suis tombé sur ce sujet, excatement ce qu’il me faut :

Je n’arrive pas a creer le sensor, je pense que c’est un problème de syntaxe.
Ma configuration est en partie splittée; voila mon configuration.yaml:

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include_dir_merge_list sensor/
binary_sensor: !include_dir_merge_list binary-sensor/
counter: !include counters.yaml
ipx800v4: !include ipx800v4.yaml
template: !include_dir_merge_list template/
rest_command: !include_dir_merge_named rest_commands/
light switches: !include light-switches.yaml
input_number: !include input-number.yaml
shell_command: !include_dir_merge_named shell_command/
utility_meter: !include_dir_merge_list utility_meter/

ensuite j’ai un dossier template/ avec mes fichiers .yaml dedans.
J’ai donc créé le fichier ouvrant.yaml et j’ai mis ca dedans:

sensor:
  - platform: template
    sensors:
      tous_les_capteurs_ouvrants:
        friendly_name_template  : >
          {% set domain = 'binary_sensor' %}
          {% set state = 'on' %}
          {# Définition du `namespace` afin de pouvoir récupérer la valeur définie dans la boucle #}
          {% set binary_sensor = namespace(is_binary_sensor=0, is_on=0) %}
          {%- set entities = (states[domain]| map(attribute='entity_id') | list ) -%}
          {%- for entity in entities -%}
            {% if not ( is_state_attr(entity,'type','browser_mod') or is_state(entity,'unavailable')) %}
              {% set binary_sensor.is_binary_sensor = binary_sensor.is_binary_sensor + 1 %}
              {% if is_state(entity,'on') %}
                {% set binary_sensor.is_on = binary_sensor.is_on + 1 %}
                {%- if loop.last %}
                  {{ state_attr(entity,'friendly_name') }}
                {% else %}
                  {{ state_attr(entity,'friendly_name') }},
                {%- endif %}
              {%- endif %}
            {%- endif %}
          {%- endfor -%}
          {{binary_sensor.is_on}}/{{binary_sensor.is_binary_sensor}}
        value_template: >
          {% set domain = 'binary_sensor' %}
          {% set state = 'on' %}
          {%- set entities = (states[domain] | selectattr('state','eq', state) | map(attribute='entity_id') | list ) -%}
          {%- for entity in entities -%}
            {% if not is_state_attr(entity,'type','browser_mod') %}
              {%- if loop.last %}
                {{ state_attr(entity,'friendly_name') }}
              {% else %}
                {{ state_attr(entity,'friendly_name') }},
              {%- endif %}
            {%- endif %}
          {%- endfor -%}

Je n’ai pas de message d’erreur, j’ai redémarré HA mais le sensor « tous_les_capteurs_ouvrants » ne se crée pas…
J’ai testé différentes syntaxe, mais rien…
Merci pour votre aide!

Ma configuration


[center]## System Information

version core-2024.8.0
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.4
os_name Linux
os_version 6.6.33-haos
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 4325
Installed Version 1.34.0
Stage running
Available Repositories 1458
Downloaded Repositories 41
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 12.4
update_channel stable
supervisor_version supervisor-2024.08.0
agent_version 1.6.0
docker_version 26.1.4
disk_total 27.9 GB
disk_used 22.3 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization
board odroid-n2
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.14.0), File editor (5.8.0), TasmoAdmin (0.30.4), Mosquitto broker (6.4.1), ESPHome (2024.7.3), Z-Wave JS UI (3.10.0), SQLite Web (4.2.0), Studio Code Server (5.15.0), Samba Backup (5.2.0), MetersToHA (dev), Zigbee2MQTT (1.39.1-1), Z-Wave JS (0.6.2), SomfyProtect2MQTT (2024.3.0)
Dashboards
dashboards 6
resources 28
views 17
mode storage
Recorder
oldest_recorder_run 1 août 2024 à 15:32
current_recorder_run 10 août 2024 à 15:29
estimated_db_size 2468.42 MiB
database_engine sqlite
database_version 3.45.3
Sonoff
version 3.7.3 (e240aaf)
cloud_online 0 / 2
local_online 2 / 2
debug failed to load:
[/center] Comment récupérer ma configuration : Dans votre HA, Menu latéral `Paramètres` > `Système` > `Corrections` puis les trois petits points en haut a droite > `Informations Système` puis une fois en bas `Copier` ___

Salut, Tu utilises une ancienne nomenclature qui n’est plus d’actualitée

sensor:
  - platform: template
    sensors:
      tous_les_capteurs_ouvrants:

Il est maintenant demander d’utiliser ce type de structure dans ton fichier template.yaml (ou ouvrant.yaml dans ton cas)

- sensor:
    - name:
      unique_id:
      state: 
      icon:
      unit_of_measurement:
      ........

J’ai mis ca dans mon .yaml:

- sensor:
    - name : "tous les capteurs ouvrants"
      friendly_name_template  : >
        {% set domain = 'binary_sensor' %}
        {% set state = 'on' %}
        {# Définition du `namespace` afin de pouvoir récupérer la valeur définie dans la boucle #}
        {% set binary_sensor = namespace(is_binary_sensor=0, is_on=0) %}
        {%- set entities = (states[domain]| map(attribute='entity_id') | list ) -%}
        {%- for entity in entities -%}
          {% if not ( is_state_attr(entity,'type','browser_mod') or is_state(entity,'unavailable')) %}
            {% set binary_sensor.is_binary_sensor = binary_sensor.is_binary_sensor + 1 %}
            {% if is_state(entity,'on') %}
              {% set binary_sensor.is_on = binary_sensor.is_on + 1 %}
              {%- if loop.last %}
                {{ state_attr(entity,'friendly_name') }}
              {% else %}
                {{ state_attr(entity,'friendly_name') }},
              {%- endif %}
            {%- endif %}
          {%- endif %}
        {%- endfor -%}
        {{binary_sensor.is_on}}/{{binary_sensor.is_binary_sensor}}
      value_template: >
        {% set domain = 'binary_sensor' %}
        {% set state = 'on' %}
        {%- set entities = (states[domain] | selectattr('state','eq', state) | map(attribute='entity_id') | list ) -%}
        {%- for entity in entities -%}
          {% if not is_state_attr(entity,'type','browser_mod') %}
            {%- if loop.last %}
              {{ state_attr(entity,'friendly_name') }}
            {% else %}
              {{ state_attr(entity,'friendly_name') }},
            {%- endif %}
          {%- endif %}
        {%- endfor -%}

Apres redémarrage j’ai ce message d’erreur :

Invalid config for 'template' at template/ouvrants.yaml, line 23: 'value_template' is an invalid option for 'template', check: sensor->0->value_template Invalid config for 'template' at template/ouvrants.yaml, line 2: required key 'state' not provided Invalid config for 'template' at template/ouvrants.yaml, line 3: 'friendly_name_template' is an invalid option for 'template', check: sensor->0->friendly_name_template

Oui evidemment Value_template et friendly_name_template ne sont pas des valeurs valide
Je te renvois vers la page de template de Homeassistant :wink:

Merci; ca fonctionne :

  - sensor:
      - name: "tous_les_ouvrants"
        state: >-
          {% set domain = 'binary_sensor' %}
          {% set state = 'on' %}
          {%- set entities = (states[domain] | selectattr('state','eq', state) | map(attribute='entity_id') | list ) -%}
          {%- for entity in entities -%}
              {% if ( is_state_attr(entity,'device_class','opening') or is_state_attr(entity,'device_class','door') or is_state_attr(entity,'device_class','window')) %}
              {%- if loop.first or loop.last %}
                  {{ state_attr(entity,'friendly_name') }}
              {% else %}
                  {{ state_attr(entity,'friendly_name') }},
              {%- endif %}
              {%- endif %}
          {%- endfor -%}
1 « J'aime »