Quelle différence entre un sensor/plateform template et un template/sensor?

Bonjour
je pêche toujours par manque d’expérience, ou de savoir ou l’on doit trouver les infos.
J’ai besoin de déclarer des sensors, alors à chaque fois je tatonne et au bout d’un moment on finit toujours par trouver sans jamais trop maitriser.
Ci dessous un extrait de mon fichier configuration.yaml ; dans lequel j’ai utilisé deux méthodes pour déclarer mes sensors ; la seconde générant des erreurs « duplacate key sensors »
Quelqu’un peut t’il m’expliquer quelle utilité d’une ou de l’autre méthode ? ou bien comment faire celà proprement ? merci la communauté

sensor:     
  - platform: template
    sensors:
      daikin_puiss_actuelle: # = image de l'input number du meme nom
        friendly_name: "DAIKIN puissance actuelle % (pour courbe)"
        unit_of_measurement: "%"
        value_template: >-
          {%- if  is_state('switch.shelly1_ext', 'on') -%}
             {{states('input_number.daikin_puissance')|round(0)}}
          {%- else -%}
             0
          {%- endif -%}
          
        
template:
    sensor:
      - state: "{% if ( ((now().strftime('%H:%M') >= '01:30') and (now().strftime('%H:%M') < '07:30'))or((now().strftime('%H:%M') >= '12:30') and (now().strftime('%H:%M') < '14:30')) ) -%} {{states.input_number.prix_heure_creuse_kwh.state | float(default=0)}} {%- else -%} {{states.input_number.prix_heure_pleine_kwh.state | float(default=0)}} {%- endif %} "     
        state_class: 'measurement'
        name: "Prix du Kwh en euros"
        unit_of_measurement: "EUR/kWh"
        unique_id: 'prix_kwh_bleu'
        icon: mdi:currency-eur 
    sensor:
      - state: "{{  (states.sensor.shellyem_garage_gen_energy.state | float)   -  (states.sensor.shellyem_garage_rdc_energy.state | float)  -  (states.sensor.shellyem_atel_pac_energy.state | float)   -  (states.sensor.shellyem_atel_eau_energy.state| float)   }}"
        state_class: 'measurement'
        name: "shellyem_maison_reste_energy"  # = image du reste de la conso calculée
        unit_of_measurement: "kWh"
        unique_id: 'shellyem_maison_reste_energyID'
        icon: mdi:battery-charging-100
    sensor:
      - state: "{{ ( (states.sensor.shellyem_garage_gen_power.state | float)   -  (states.sensor.shellyem_garage_rdc_power.state | float)  -  (states.sensor.shellyem_atel_pac_power.state | float)   -  (states.sensor.shellyem_atel_eau_power.state| float) )  |round(1)  }}"
        state_class: 'measurement'
        name: "shellyem_maison_reste_power"  # = image du reste de la puissance
        unit_of_measurement: "W"
        unique_id: 'shellyem_maison_reste_powerID'
        icon: mdi:flash-alert

Bonjour,
le premier c’est l’ancien format et le deuxième le nouveau format.
il est recommandé d’utiliser le nouveau format ( le deuxième ).

ancien format:

sensor:     
  - platform: template
    sensors:

Legacy binary sensor configuration format

This format still works but is no longer recommended. Use modern configuration.

This format is configured as a platform for the binary_sensor integration and not directly under the template integration.

# Example configuration.yaml entry
binary_sensor:
  - platform: template
    sensors:
      sun_up:
        friendly_name: "Sun is up"
        value_template: {{ state_attr('sun.sun', 'elevation') > 0 }}

nouveau format:

template:
  - sensor:
      - name: "Kettle"
        state: >
          {% if is_state('switch.kettle', 'off') %}
            off
          {% elif state_attr('switch.kettle', 'W')|float < 1000 %}
            standby
          {% elif is_state('switch.kettle', 'on') %}
            on
          {% else %}
            failed
          {% endif %}
1 « J'aime »

Bonjour @WarC0zes ; et merci de ta réponse ultra-rapide.
J’ai éffectivement ecrit les premiers il y a deux ans et les derniers cette année.
Maintenant saurais tu me dire pourquoi ca me crée des erreurs « duplicate key » ; alors que j’ai mis des unique-ID différents ?
Merci d’avance

2023-12-03 10:45:20.834 WARNING (SyncWorker_0) [homeassistant.util.yaml.loader] YAML file /config/configuration.yaml contains duplicate key "sensor". Check lines 445 and 452
2023-12-03 10:45:20.834 WARNING (SyncWorker_0) [homeassistant.util.yaml.loader] YAML file /config/configuration.yaml contains duplicate key "sensor". Check lines 452 and 459

ta des sensor: en trop dans le nouveau format, il apprécie pas.Faut mettre un seul fois sensor:

Convertie les anciens template, vers le nouveau format.

exemple:

template:
  - sensor:
      - name: "Kettle"
        state: >
          {% if is_state('switch.kettle', 'off') %}
            off
          {% elif state_attr('switch.kettle', 'W')|float < 1000 %}
            standby
          {% elif is_state('switch.kettle', 'on') %}
            on
          {% else %}
            failed
          {% endif %}

      - name: "Kettle"
        state: >
          {% if is_state('switch.kettle', 'off') %}
            off
          {% elif state_attr('switch.kettle', 'W')|float < 1000 %}
            standby
          {% elif is_state('switch.kettle', 'on') %}
            on
          {% else %}
            failed
          {% endif %}

Trop cool, merci
ca fonctionne mais j’ai cette erreur, je vais tout convertir ; mais pas aujourdhui
Affaire résolue, Merci la communauté

Merci pour cette explication, à vrai dire je m’y perds aussi. Je copie des trucs à droite et à gauche en crééant des fichiers dédiés sensor.yaml, template.yaml mais au final je m’aperçois que c’est la même chose. Des sensors dans les 2 avec les 2 méthodes ancienne et nouvelle.
Comment vous structurer vos fichiers, dédié sensors, binary… ou par utilisation, chauffage… ?

j’ai découper ma configue. A toi de voir comment tu veut organiser.

sensor: !include sensor.yaml
template: !include template.yaml
recorder: !include recorder.yaml
multiscrape: !include multiscrape.yaml
utility_meter: !include utility_meter.yaml
command_line: !include command_line.yaml
openhasp: !include openhasp.yaml

C’est ce que j’ai fait, mais cette semaine, je me suis m’y à mettre des platform: derivative dans mon sensor.yaml et créer un fichier template.yaml pour calculer un sensor d’une valeur max.
C’est pas encore très clair comment gérer la découpe de mes fichiers, mais je pense que c’est propre à chacun de s’y retrouver :sweat_smile:

@WarC0zes ; du coup j’ai encore une « dernière » question ;
C’est quoi la différence entre un sensor et un template ?

Moi j’ai déclaré des sensors directement, et des sensors dans des template mais sans trop savoir pourquoi ? le template c’est juste que quand il y a une équation pour calculer l’état ?

un template , c’est pour afficher un statut ( ou attribut ) d’une entité ou un calcul .
le sensor: permet d’utiliser des intégrations qui fonctionne quand YAML ou des templates ( avant que ca change ).

Maintenant les templates sont détacher de sensor:, pour une meilleur organisation.

Tu peut faire des templates directement du UI maintenant aussi.
Dans paramètres / appareils et services / Entrée .

OK je crois comprendre.
Un template est fait pour etre écrit (affecté) et un sensor est plutot un « appareil » qui se met à jour tout seul.

du coup lorsque tu ecris :

template:
  - sensor:
      - name: "Kettle"

Ce n’est pas un sensor mais un template que l’on crée , avec les caractéristiques d’un sensor.

c’est un template type sensor, pour les templates ta plusieurs type. Ta sensor, binary_sensor.
quand tu créer un template d’un type faut le déclarer en premier, suivie de ton entité que tu veut créer.

template:
  - sensor:
      - name: "Kettle"
        ...
      - name: "Kettle3"
        ...
  - binary_sensor:
      - name: "Kettle4"

ta d’autre type de template, cover, light, switch… mais cela ce déclarer différemment.
voir la doc.

1 « J'aime »