Template sensor énergie

Bonjour,

Je sollicite l’aide de la communauté afin de complèter mon dashboard énergie.
J’ai un onduleur PV SMA dont l’intégration fonctionne, j’ai également un énergimètre Aeotec Gen5 que je peux configurer pour me fournir l’energie consommée, l’énergie produite ou une somme des deux.

Ce que je voudrais :

  • Une entité qui me fournit la puissance (W) et l’énergie produite (Wh) => Ok, j’ai cette information via l’intégration SMA
  • Une entité qui me fournit la puissance (W) et l’énergie consommée (Wh)
  • Une entité qui me fournit la puissance (W) et l’énergie réinjectée (Wh)
    Pour ces deux dernières, je vais devoir créer des sensors via des templates et c’est là que je coince.

Mon idée est de configurer mon énergimètre pour qu’il me fournisse la somme de la consommation et production. Je pourrais donc en déduire que :

  • Si la puissance est négative,
  1. la valeur de réinjection est cette puissance en valeur absolue
  2. la valeur de consommation est égale la puissance produite par l’onduleur - la valeur de l’énergimètre
  • Si la puissance est positive
  1. la réinjection est nulle
  2. la valeur de consommation est égale à la puissance produite par l’onduleur + la valeur de l’énergimètre

Si un as du template passe par ici et qu’il peut m’aider à mettre ça en forme, ce serait sympa. J’imagine quelque chose comme ça.

{% set PV = states('sensor.sn_3011199525_grid_power') | float %}
{% set Compteur = states('sensor.home_energy_meter_gen5_electric_consumption_w') | float %}
Solaire = {{PV}} W
Compteur = {{Compteur}} W
Consommation = {{PV+Compteur if Compteur > 0 else Compteur+PV }} W
Réinjection = {{Compteur*-1 if Compteur <= 0 else 0}} W

Il y a une solution plus propre que le *-1 pour le calcul de la valeur absolue?
Pour le calcul des énergies, je passerai par une intégration :wink:

Bonjour,

Peut être quelque chose comme ça ?

- platform: template
  sensors:
    solaire:
      friendly_name: "Solaire"
      value_template: >
        {{ states('sensor.sn_3011199525_grid_power') | float }}
      device_class: power
      unit_of_measurement: "W"

    compteur:
      friendly_name: "Compteur"
      value_template: >
        {{ states('sensor.home_energy_meter_gen5_electric_consumption_w') | float }}
      device_class: power
      unit_of_measurement: "W"

    puissance_consommee:
      friendly_name: "Consommation"
      value_template: >
        {% set PV = states('sensor.sn_3011199525_grid_power') | float %}
        {% set Compteur = states('sensor.home_energy_meter_gen5_electric_consumption_w') | float %}
        {{PV+Compteur if Compteur > 0 else Compteur+PV }}
      device_class: power
      unit_of_measurement: "W"

    puissance_reinjectee:
      friendly_name: "Réinjection"
      value_template: >
        {% set Compteur = states('sensor.home_energy_meter_gen5_electric_consumption_w') | float %}
        {{Compteur | abs if Compteur <= 0 else 0}}
      device_class: power
      unit_of_measurement: "W"

J’ai juste « mis en forme » vos calculs.

Ca semble fonctionner :wink:

J’ai un petit problème par contre… les entités n’étant pas rafraichies selon le même cycle, j’ai de temps en temps des valeurs complètement farfelues.

Si quelqu’un a une idée…elle est la bienvenue

Peut être (Pas dit que ça fonctionne mais c’est l’idée):

- platform: template
  sensors:
    solaire:
      friendly_name: "Solaire"
      value_template: >
        {{ states('sensor.sn_3011199525_grid_power') | float }}
      device_class: power
      unit_of_measurement: "W"

    compteur:
      friendly_name: "Compteur"
      value_template: >
        {{ states('sensor.home_energy_meter_gen5_electric_consumption_w') | float }}
      device_class: power
      unit_of_measurement: "W"

  trigger:
    platform: time_pattern
    minutes: 5
  sensors:
    puissance_consommee:
      friendly_name: "Consommation"
      value_template: >
        {% set PV = states('sensor.sn_3011199525_grid_power') | float %}
        {% set Compteur = states('sensor.home_energy_meter_gen5_electric_consumption_w') | float %}
        {{PV+Compteur if Compteur > 0 else Compteur+PV }}
      device_class: power
      unit_of_measurement: "W"

    puissance_reinjectee:
      friendly_name: "Réinjection"
      value_template: >
        {% set Compteur = states('sensor.home_energy_meter_gen5_electric_consumption_w') | float %}
        {{Compteur | abs if Compteur <= 0 else 0}}
      device_class: power
      unit_of_measurement: "W"

L’idée est de définir des capteurs qui se rafraîchissent non plus dès qu’un des états change, mais plutôt suivant un déclencheur.
Ici, on suppose que chaque 5 minutes, vous avez des données mises à jour pour vos deux entités.

Note: Apparemment, pour définir les capteurs, j’ai utilisé un ancien format qui est toujours supporté mais n’est plus recommandé. Plus d’info ici.