Encore une question de template

bonjour,

j’ai un petit souci de template sensor

j’ai 5 entités ‹ binary sensor › renvoyées par un émetteur 433 via rflink

 - platform: rflink
   devices:
     BAL_A:
       name: BAL_A
       off_delay: 1
       aliases:
         - ev1527_020200_0a
 - platform: rflink
   devices:
     BAL_B:
       name: BAL_B
       off_delay: 1
       aliases:
         - ev1527_020200_0b
 - platform: rflink
   devices:
     BAL_C:
       name: BAL_C
       off_delay: 1
       aliases:
         - ev1527_020200_0c
 - platform: rflink
   devices:
     BAL_D:
       name: BAL_D
       off_delay: 1
       aliases:
         - ev1527_020200_0d
 - platform: rflink
   devices:
     BAL_E:
       name: BAL_E
       off_delay: 1
       aliases:
         - ev1527_020200_0e

chaque entité me renvoi un ‹ on › a chaque impulsion correspondante
chaque entité correspond a un niveau de batterie d’un appareil
j’ai une émission du niveau toutes les 30mn

maintenant je souhaiterais a partir de ces 5 impulsions créer une entité unique avec un niveau de batterie

j’ai essayé :

 sensor bal:
   - platform: template
     sensors:
       batterie_bal:
         friendly_name: "batterie bal"
         value_template: >-
           {% if is_state("binary_sensor.BAL_A", "on") %}
             0
           {% elif is_state("binary_sensor.BAL_B", "on") %}
             25
           {% elif is_state("binary_sensor.BAL_C", "on") %}
             50
           {% elif is_state("binary_sensor.BAL_D", "on") %}
             75           
           {% elif is_state("binary_sensor.BAL_E", "on") %}
             100
           {% endif %}
         device_class: battery

et en fait je n’ai qu’une impulsion avec le niveau au moment de l’impulsion correspondante mais le niveau ne reste pas mémorisé

j’ai aussi tenté cela :

template:
  - sensor:
      - name:  "batterie bal"
        unique_id: batterie_bal
        device_class: battery
        state: >
          {% if is_state("binary_sensor.BAL_A", "on") %}
            0
          {% elif is_state("binary_sensor.BAL_B", "on") %}
            25
          {% elif is_state("binary_sensor.BAL_C", "on") %}
            50
          {% elif is_state("binary_sensor.BAL_D", "on") %}
            75           
          {% elif is_state("binary_sensor.BAL_E", "on") %}
            100
          {% endif %}

mail cela ne marche pas du tout, pourtant je me suis inspiré de la fonction du site de HA

alors ce que je souhaiterais faire c’est simplement quand il y a une impulsion d’un niveau de batterie, il mette a jour mon entité niveau_batterie et reste sur le dernier niveau tant qu’il n’y a pas de changement

le plus serait d’avoir un ‹ unknown › si je n’ai plus d’impulsion pendant 2h … cela me permetterai de voir facilement que j’ai un problème sur mon appareil …

une idée ?

Stéphane

1 « J'aime »

Salut,

Je suis pas sur qu’un template ça puisse marcher sur le principe :

  • Dans HA les templates sont calculés toutes les minutes …
  • Tes signaux ON, sont envoyés toutes les 30 minutes mais pas forcément synchrones avec le recalcul du templates.

Par ailleurs, que se passe-t-il dans tes 5 entités quand tu as par exemple : un niveau max à HHMM puis un niveau différent à HHMM+30min … Pour moi, tes 2 entités concernées sont au mieux à 0 (ou unknown) lors du calcul, au pire toutes les 2 à ON

Ce qu’il faut réfléchir à faire, c’est combien de ON j’ai eu dans les 30 dernières minutes sur le canal 5, si c’est 0 alors sur le canal 4, etc et si tout à la fin j’ai pas trouver, compter le nombre de ON sur les 5 canaux pendant les 2 dernières heures…

Bref, point de départ, montre les graphs historiques de tes 5 canaux

Bonjour,chaque entité passe a ‹ on › un bref instant lors d’une impulsion 433, le reste du temps elles sont toutes a ‹ off ›

si j’ai un niveau de batterie a 50% à HHMM, j’ai une impulsion ‹ on › sur le BAL_C
si je n’ai pas de changement à HHMM+30, j’ai aussi une impulsion ‹ on › sur BAL_C
si je suis passé à 25% = HHMM+60, j’ai une impulsion ‹ on › sur BAL_B et rien d’autre

je suis parti de ce principe qui fonctionne parfaitement pour mes fenêtres et portes :

 - platform: rflink
   devices:
     porte_sam2_ouverte:
       name: porte sam2 ouverte
       off_delay: 1
       aliases:
         - ev1527_081417_03
     porte_sam2_fermee:
       name: porte sam2 fermée
       off_delay: 1
       aliases:
         - ev1527_081417_09
 - platform: template
   sensors:
     porte_sam2:
       friendly_name: Statut porte sam2
       value_template: >-
         {% if is_state("binary_sensor.porte_sam2_ouverte", "on") %}
           true
         {% elif is_state("binary_sensor.porte_sam2_fermee", "on") %}
           false
         {% else %}
           {{ is_state("binary_sensor.porte_sam2", "on") }}
         {% endif %}
       device_class: door

j’ai bien un ‹ on › quand j’ai une impulsion d’ouverture et un ‹ off › quand j’ai une impulsion de fermeture et mes états on/off restent tant qu’il n’y a pas d’autre changement

et voilà mon entité BAL_E

Soit surprenant mais après tout. A noter quand même que déterminer le position d’un porte avec 2 capteurs, c’est pas exactement que le niveau de batterie sur 5 snesors

Donc il faut tester ton template dans les outils de développement (=> modèle), tu pourrais aussi agir artificiellement sur les états des infos ( => etat, sans attendre les 30 min)