Création d'un sensor via un fichier yaml

Je ne comprends pas comment créer un sensor à utiliser via un fichier Yaml

*Bonjour,
Je souhaite créer un sensor qui remonte le calcul de 2 sensors réels d’énergie.
J’ai donc créé un fichier Yaml que j’ai nommé « sensors.yaml » qui comporte ces lignes :

 - platform: template
        sensors:
          energie_solaire_disponible:
            friendly_name: "Energie Solaire Disponible"
            value_template: "{{ [0, (states('sensor.envoy_xxxxxxxxxxxxxx_current_power_production') | int - states('sensor.envoy_xxxxxxxxxxxxxxx_current_power_consumption') | int)] | max }}"
            unit_of_measurement: "W"
            icon_template: "mdi:flash"

Puis j’ai ajouté la ligne !include qui va bien dans le fichier de configuration.yaml.

A priori, le calcul s’effectue bien puisque si je le contrôle sous l’onglet « Modèle » de la rubrique « Outils de développement » il me donne le bon résultat.

Par contre, c’est à ce moment là que je ne sais pas comment faire pour récupérer ce calcul sous la forme d’un sensor virtuel. Car mon objectif est d’intégrer le résultat de ce calcul dans un déclencheur d’actions pour changer l’état d’un appareil.

Que faut-il que je fasse du coup ?

Merci pour votre aide à venir.
*

HA sous Raspberry Pi 4


Texte à remplacer par votre configuration

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


Bonjour @clerelus
Pourquoi passer par yaml alors que tu peux utiliser une entrée Template ?
J’avais de tel sensor en yaml que j’ai basculé vers des entrées Template.
Ensuite en fonction de ce capteur tu peux aussi ajouter une entrée Capteur de seuil ou l’utiliser directement.
Bob

Salut

A priori, ton sensor est créé.
Tu peux le vérifier dans « Outils de développement » → « ETATS » et ensuite, tu filtres par « Energie Solaire Disponible »

image

Tu devrais voir ton sensor.

Tu dois créer une automatisation dont le déclencheur est l’état de ton entité:

+1 avec @Bob, pourquoi vouloir passer par l’écriture en Yaml, alors que l’UI a maintenant bien progressé et permet de créer ces sensors directement.
Dans ton yaml, je vois par exemple qu’il y a de nombreux espaces avant sensors, alors qu’en yaml, les espaces vont par 2.
Ma recommandation serait pour toi de créer ton nouveau sensor en passant l’UI (Paramètres, Appareils et Services, entrées, créer une entrée.
Tu choisis ensuite le type Template, et tu n’as plus qu’à saisir les informations que ti as essayé de mettre dans ton yaml. Du coup, pas d’erreur de syntaxe.

Merci pour vos retours rapides.
Je vais me pencher sur les solutions que vous m’avez partagées.
Un grand merci pour votre aide.

Bonjour,
Les template par le UI c’est bien pratique, mais je ne retrouve pas toutes les options disponible en YAML par le UI.

@clerelus si tu veut faire des templates en YAML, faire attention qu’un nouveau format existe.
C’est plus avec mettre dans sensor , mais dans template.

Nouveau format.
exemple:

template:
  - sensor:
      - name: "Average temperature"
        unit_of_measurement: "°C"
        state: >
          {% set bedroom = states('sensor.bedroom_temperature') | float %}
          {% set kitchen = states('sensor.kitchen_temperature') | float %}

          {{ ((bedroom + kitchen) / 2) | round(1, default=0) }}

l’ancien format .
exemple:

sensor:
  - platform: template
    sensors:
      solar_angle:
        friendly_name: "Sun angle"
        unit_of_measurement: "degrees"
        value_template: "{{ state_attr('sun.sun', 'elevation') }}"

Il n’est plus recommendé >> This format still works but is no longer recommended. Use modern configuration.

Je retrouve bien l’entité suite à la création du fichier yaml. Cest ok.

Toutefois, alors que dans l’onglet « Modèle » de la rubrique « Outils de développement », le code utilisait dans le fichier yaml affiche bien une « valeur_template » qui correspond à l’énergie solaire disponible.

Or, lorsque je consulte l’entité dans la rubrique « Appareils et services », celle-ci m’indique aucune valeur. Elle indique « Indisponible ».

Je ne vois pas pourquoi la « valeur_template » ne remonte pas. Vous avez une réponse sur cette analogie ?

Pour info, voici le code revu suite au conseil de @WarC0zes :

template:
   - sensor:
        - name: "energie_solaire_disponible"
          friendly_name: "Energie Solaire Disponible"
          value_template: "{{ [0, (states('sensor.envoy_xxxxxxxxxxxxxx_current_power_production') | int - states('sensor.envoy_xxxxxxxxxxxxxxx_current_power_consumption') | int)] | max }}"
          unit_of_measurement: "W"
          icon_template: "mdi:flash"

Merci

Tu indiques au début que le calcul est bon en contrôlant dans les outils de dev. Donc si ton sensor est « indisponible », c’est qu’il y a une erreur de syntaxe qui empêche le calcul du template.
Comme indiqu" plus haut, contrôle le nombre d’espaces. A chaque indentation, il doit y en avoir 2, pas un de plus ou de moins.
… et comme suggéré, tu as fait le plus difficile en écrivant la partie calcul, donc créer to sensor en passant par l’UI te prendra maintenant 5 min max, avec la garantie qu’il n’y aura pas d’erreur.

Ta fais des erreurs de nom d’option.
value_template: est state:
friendly_name: est name:
icon_template: est icon:

correction:

template:
  - sensor:
      - name: "Energie Solaire Disponible"
        unique_id: energie_solaire_disponible        
        state: "{{ [0, (states('sensor.envoy_xxxxxxxxxxxxxx_current_power_production') | int - states('sensor.envoy_xxxxxxxxxxxxxxx_current_power_consumption') | int)] | max }}"
        unit_of_measurement: "W"
        icon: mdi:flash

Ok merci @WarC0zes .

Par contre, cela m’indique des erreurs au niveau de la vérification du fichier configuration.yaml notamment que le sensors.yaml n’est pas bon.

Pour contourner cette erreur, j’ai créé un fichier templates.yaml dans lequel j’ai remis le code du fichier sensors.yaml est cela passe mais l’entité n’est pas créée.
D’où peut venir cette erreur liée au fichier configuration ?

Ce code est a mettre dans le configuration.yaml.

Si tu veut le mettre dans template.yaml, faut ajouter la ligne dans ton configuration.yaml:

template: !include template.yaml

dans le fichier template.yaml ( dans /config ), tu met ce code sans le template: au début:

  - sensor:
      - name: "Energie Solaire Disponible"
        unique_id: energie_solaire_disponible        
        state: "{{ [0, (states('sensor.envoy_xxxxxxxxxxxxxx_current_power_production') | int - states('sensor.envoy_xxxxxxxxxxxxxxx_current_power_consumption') | int)] | max }}"
        unit_of_measurement: "W"
        icon: mdi:flash

Bonjour.
Pour organiser mes capteurs, j’essaie de mettre un code similaire dans un .yaml séparé et dans un répertoire nommé sensors.
Dans configuration.yaml j’ai bien l’instruction :
!include_dir_named

Pour être au nouveau format, je commence mon test.yaml par:

template:
  - sensor:
      - name: "Average temperature"

Mais seuls les capteurs déclarés avec l’ancien format sont reconnus. Exemple (inspiré par @herveaurel dans un autre sujet, merci au passage s’il lit celui-ci) :

  - platform: template
    sensors:
      pronote_hs:
        friendly_name: herveaurel comptes Pronote indisponibles          
        value_template: >-
          {%- set entities = expand('group.pronote') | selectattr('state', 'in', ['unavailable', 'unknown']) | map(attribute='name') | list -%}
          {{ entities | join(', ') }}

J’ai beau relire ce sujet, je ne comprends pas mon erreur.

1 « J'aime »

Résolu : solution trouvée !!!
J’avais juste « pas lu » attentivement ce que disait @WarC0zes

Je résume :

Pour séparer mes capteurs en plusieurs fichiers, je me suis basé sur ce vieux post de @McFly. C’est pratique, on peut mettre autant de fichier que l’on veut et surtout avec le nom que l’on veut, à condition de laisser l’extension .yaml.

Comme dit ici plus haut, et selon la documentation officielle, le nouveau format impose plusieurs choses :

1) Tout d’abord le format
il doit s’agir d’une liste et non d’un dictionnaire (voir ce post)

  • Une liste sont des lignes commençant au même niveau d’indentation commençant par un (un tiret et un espace) : -
---
# A list of tasty fruits
- Apple
- Orange
- Strawberry
- Mango
...
  • Un dictionnaire est représenté sous une forme simple (les deux points doivent être suivis d’un espace) : key: value
# An employee record
martin:
  name: Martin D'vloper
  job: Developer
  skill: Elite

2) La méthode de déclaration (dans quel fichier ?)

  • si on en fait la déclaration dans configuration.yaml, il faut commencer par :
template:
  - sensor:
      - name: "Average temperature"
  • si on en fait la déclaration dans le fichier template.yaml, il faut :
  1. déclarer ce fichier dans configuration.yaml en y saisissant la ligne template: !include template.yaml
  2. supprimer, ou au moins commenter la ligne qui indique template. Exemple :
#template: (ligne commentée qui peut être supprimée)
  - sensor:
      - name: "Average temperature"
  • si on en fait la déclaration dans un répertoire sous forme de multiples fichiers toto_x.yaml, il faut :
  1. déclarer ce fichier dans configuration.yaml en y saisissant la ligne template: !include_dir_merge_list template/ (ne pas oublier le / final)
  2. comme pour la déclaration dans le fichier template.yaml, supprimer ou commenter la ligne qui indique template. Exemple :
#template: (ligne commentée qui peut être supprimée)
  - sensor:
      - name: "Average temperature"

[edit] un petit oubli (car j’ai mis du temps à comprendre ça aussi) :
les id n’accepte pas les majuscules !!! Par exemple :

  • unique_id: sensor.duree_passee_dans_les_wc fonctionnera
  • unique_id: sensor.duree_passee_dans_les_WC ne fonctionnera pas

Et voilou, un petit récapitulatif pour les ceusses qui à mon instar ont les neuronnes en agitation molléculaire proche de celle au zéro absolu (je comprends vite mais il faut m’expliquer longtemps)

4 « J'aime »

Un grand merci à vous tous pour votre patience et vos explications pédagogiques.
J’ai réussi à faire remonter la puissance délivrée sur un sensor virtuel.

Bonne journée.