Calcul de l'énergie produite et consommée

Mon problème

Bonjour,

J’aimerais utiliser le TdB « Energie » de HA, il parait que c’est assez actuel :slight_smile:
Le truc c’est que mon SolarEdge me remonte une tripotée de valeurs (production totale, import, intensité, etc.) , mais les seules valeur d’énergie en kWh et non en kW sont des compteurs totaux.
Le module d’HA me demande d’entrer une valeur de consommation d’énergie en wh / kWh , mais je n’ai que de la puissance à lui offrir en kW.

Est-ce qu’il faudrait passer par la mise en place d’un compteur journalier pour la production / import-export et utiliser ces valeurs pour le module énergie ?

J’ai pas mal parcouru le forum pour essayer de comprendre, mais la majorité des personnes remontent les infos du compteur qui est déjà en énergie kWh et non puissance kW…

J’ai vu qu’il existe un « Utility Meter », faudrait-il calculer l’énergie pour pouvoir l’utiliser dans le TdB « Energie » ce serait dans ce sens qu’il faudrait aller, ou je suis complètement à côté de la plaque ?

Ma configuration


System Information

version core-2023.9.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.5
os_name Linux
os_version 6.1.45
arch x86_64
timezone Europe/Zurich
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content pending
GitHub Web pending
GitHub API Calls Remaining 5000
Installed Version 1.32.1
Stage running
Available Repositories 1293
Downloaded Repositories 4
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth pending
can_reach_cloud pending
Home Assistant Supervisor
host_os Home Assistant OS 10.5
update_channel stable
supervisor_version supervisor-2023.09.2
agent_version 1.5.1
docker_version 23.0.6
disk_total 30.8 GB
disk_used 5.0 GB
healthy true
supported true
board ova
supervisor_api ok
version_api pending
installed_addons Terminal & SSH (9.7.1), File editor (5.6.0), Let’s Encrypt (4.12.9), Samba share (10.0.2), RPC Shutdown (2.4)
Dashboards
dashboards 1
resources 0
views 1
mode storage
Recorder
oldest_recorder_run 18 septembre 2023 à 17:37
current_recorder_run 28 septembre 2023 à 09:13
estimated_db_size 248.18 MiB
database_engine sqlite
database_version 3.41.2
Sonoff
version 3.5.2 (2ad1cd7)
cloud_online 1 / 1
local_online 1 / 1
___

Salut

pour faire cela tu va devoir passer par une intégrale

en effet des W ou des kW c’est une mesure instantanée ( un peu comme une vitesse)
pour avoir des Wh ( la distance ) il te faut faire une intégrale

une fois obtenu tes Wh ou tes kWh tu pourra aussi bien a l’aide d’un utility metter avoir une nouvelle entitée
mais aussi l’utiliser pour alimenter ton tableau energie

voila un exemple

et un autre

Hello,

merci pour la réponse , j’ai potassé un peut mes intégrations et si j’ai bien compris, j’ai dû recréer deux templates qui m’affiche l’export et l’import du réseau, j’ai mis ceci en place :

(sachant que « sensor.solaredge_m1_ac_power » est l’import / export en kW)


- name: "EE - Importation"
  unit_of_measurement: "kW"
  state_class: total_increasing
  device_class: "energy"
  state: >
          {% if ((states("sensor.solaredge_m1_ac_power") | float) / 1000) < 0 %}
            (((states("sensor.solaredge_m1_ac_power") | float) / 1000)*-1) 
          {% else %}
            0
          {% endif %}

- name: "EE - Exportation"
  unit_of_measurement: "kW"
  state_class: total_increasing
  device_class: "energy"
  state: >
          {% if ((states("sensor.solaredge_m1_ac_power") | float) / 1000) > 0 %}
            ((states("sensor.solaredge_m1_ac_power") | float) / 1000) 
          {% else %}
            0
          {% endif %}

donc avec ces deux templates je devrait avoir l’export et l’import (juste ?) , en kW et ensuite je fait une intégration pour avoir deux entités sensor.en_importation et sensor.en_exportation.

J’ai mis ces deux entité dans un tableau de bord, mais j’ai cette infos : « inconnu » a la place de la valeur …

Salut,

il y a quelques soucis dans tes entités template.

  1. C’est des kW, donc la classe c’est « power ». Ca ne peut pas être « energy » qui est en kWh.
  2. « total_increasing ». Ce n’est pas possible non plus et va te sortir des erreurs car là ce n’est pas un total c’est une valeur instantanée.
  3. Pourquoi le faire en kW et pas en W comme ça a l’air d’être d’entrée…? cette division par 1000 va te donner des résultats assez imprécis. Il est possible de garder ça en W et si tu veux l’afficher sur une carte changer l’unité, juste pour l’affichage.

Une de c’est 3 raisons, surement la 2ème, est la cause de ta valeur ‹ inconnue ›

Il y a une intégration faite pour cela dans HA
Riemann Sum
Phil

Bon, je crois que me mélange les pinceaux … je reprends depuis le début :

J’ai modifié mes entités production … import/export … etc en :

      state_class: measurement
      device_class: "power"

ça semble plus logique (ces templates venaient d’un tuto…) , voila ce que ça donne pour l’import export :

    - name: "EE - Export/Import"
      unit_of_measurement: "kW"
      state_class: measurement
      device_class: "power"
      state: '{{ (states("sensor.solaredge_m1_ac_power") | float) / 1000}}'

Ensuite, si j’ai bien compris, pour avoir les valeurs de sortie vers le réseau et celles de l’importation du réseau, comme je n’ai pas les valeurs du compteur mais uniquement celles de l’onduleur, soit l’import/export, je dois créer deux templates : un export, un import (juste ?)

pour le faire j’ajoute des deux templates :

    - name: "EE - Importation"
      unit_of_measurement: "W"
      state_class: measurement
      device_class: "power"
      state: >
              {% if ((states("sensor.solaredge_m1_ac_power") | float)) < 0 %}
                (((states("sensor.solaredge_m1_ac_power") | float))*-1) 
              {% else %}
                0
              {% endif %}

    - name: "EE - Exportation"
      unit_of_measurement: "W"
      state_class: measurement
      device_class: "power"
      state: >
              {% if ((states("sensor.solaredge_m1_ac_power") | float)) > 0 %}
                ((states("sensor.solaredge_m1_ac_power") | float)) 
              {% else %}
                0
              {% endif %}

ensuite, sur ces deux templates, je crée deux intégrations « Integrales de Riemann » qui elles vont me donner deux valeurs d’énergie, en Wh (vu que me templates sont en W), toujours juste ?

Bon, voilà pour la téhorie, si j’ai bien tout capté, mais …

  • Ma valeur du template « EE - Importation », semble rester à 0 … et celle de : « EE - Exportation » affiche « indisponible » …

@ AlexHass Il est possible de garder ça en W et si tu veux l’afficher sur une carte changer l’unité, juste pour l’affichage.

heu … ça se fait comment ? ,je n’ai pas trouvé comment le faire pour un template tels que ceux-ci.

Bon en gros je patauge :thinking:

Question subsidiaire : quand on modifie un template, doit-on redémarrer tout HA ou si simplement le rechargement rapide suffit ?

Ca a l’air plutot ok. Mais faut encore que ton « sensor.solaredge_m1_ac_power » ait bien des valeurs négatives et positives…

Normalement, il faut au moins redémarrer les « entités de modèles » dans le première section des outils de développement.

Sinon autre chose, qui est assez récente dans HA. Les sensor template, peuvent être déclarés directement en passant pas l’interface, donc plus de yaml et d’indentations… et plus de redémarrage ou de rechargement, c’est directement pris en comptes.
Ca se passe dans « paramètres>appareils et services>entrées. »
Suffit de choisir « ajouter un entrée » puis choisir « template », puis « modéliser un capteur ».

Ca permet de choisir la config dans des listes déroulantes.
On ajoute la même logique que ce qui est après « state : » et on prévisualise directement le résultat calculé.
Suffit de sauver et le sensor est disponible.

Bonjour,

au final, en en testant un peu (et grâce a vos réponses…) , j’ai réussi a mettre en place ce que je voulais.
Je mets ci-dessous ce que j’ai mis en place, si ça peut aider quelqu’un … et si quelqu’un y voit des erreurs ou améliorations possibles … :grinning:

Ce que j’ai fait :

1 - récupération des valeur de vente et achat , en puissance sur les kW : valeur positives pour la vente et négative pour l’achat. Les valeurs remontées par le SolarEdge étant de - x kW à + x kW

    - name: "EE - Vente "
      unit_of_measurement: "kW"
      device_class: "power"
      state: >
          {% set imp_exp =  (states("sensor.solaredge_m1_ac_power") | float /1000) %}
          {{ 0 if imp_exp < 0 else imp_exp }}      
      
    - name: "EE - Achat "
      unit_of_measurement: "kW"
      device_class: "power"
      state: >
          {% set imp_exp =  ((states("sensor.solaredge_m1_ac_power") | float /1000)) %}
          {{ 0 if imp_exp > 0 else imp_exp*-1}}  

Je me retrouve donc avec deux valeurs : la puissance « achetée » et la puissance « vendue ».

Afin de récupérer les valeurs d’achat et de vente d’énergie, en kWh, j’ai créé deux intégrations « Intégrale - Capteur d’intégrale de Riemann » , que j’ai nommé « EN - Vente » et « EN - Achat » (EN pour énergie) , après tests la méthode « rectangles à gauche » semble la plus juste. J’ai laissé l’unité de temps en heure , pour bien avoir des kWh. A ce stade, j’ai bien deux senseurs qui me récupèrent ma vente et mon achat en kWh.

Idem pour la production, à partir de ma valeur de production photovoltaïque, j’ai créé une intégration de Riemann pour la convertir en kWh (mais qui au final ne me sert pas).

Ensuite , le TdB Energie est simple a mettre en place,

Consommation du réseau : « EN - Achat »
Retourné au réseau : « EN - Vente »

Production photovoltaïque : ici il y a un entité « AC Energy kWh », directement depuis l’onduleur qui transmet la production en kWh, et il est possible de le reprendre directement.

Si je compare les infos de mon application SolarEdge et celles de HA … c’est juste dans le tir.

Pour le prix de l’électricité, comme je suis en contrat « heures pleines et heures creuses », j’ai créé une entité qui change le prix du kWh acheté selon la période : du lun-ven = HP de 06h-22h , sinon HC de 22h-06h et également HC du ven 22h → lun 06h. J’ai utilisé cette entité pour renseigner le prix d’achat dans le TdB Energie pour « Utiliser une entité avec le prix actuel »

    - name: "Prix du Kwh"
      unit_of_measurement: "CHF/kWh"
      unique_id: 'prix_kwh_bleu'
      state_class: 'measurement'
      state: >
          {% set prix_hp  = 0.3363 %}
          {% set prix_hc  = 0.223 %}
          {{ prix_hp if (now().hour >= 6 and now().hour <22 and now().weekday()<5 )  else prix_hc}}  

En paralèlle de ça, par rapport à la production et surtout la revente, j’ai placé un switch SonOff sur mon ballon d’eau chaude (que j’ai passé de 380V → 220V - de 3kW → 1kW) qui est piloté par une automatisation :

  • si la prévision de production Forecast.Solar du lendemain est < 40kWh, je permet au ballon de chauffer entre 23h - 05h.
  • en journée, si la vente dépasse 1400 W pendant deux minutes, je mets en service le ballon
  • en journée, si la vente passe < 200 W pendant 30 sec. je le coupe.

J’attends du matériel pour y ajouter la température du ballon (il y a un « doigt-de-gant » pour y glisser un capteur de température) pour piloter encore plus finement … j’ai eu des menaces de mon épouse en cas d’eau froide pour la douche du matin :roll_eyes:

Mais pour l’instant ça me permet de consommer au max la production (+ 10 % d’autoconsommation)

J’ai encore de la marge sur ce que je revends au réseau, la suite sera de piloter mes chauffages électriques à accumulation pour les utiliser comme « batteries » de chaleur … si quelqu’un à déjà fait l’exercice, je suis preneur pour les retours et les astuces

Je suis assez bluffé du résultat (… bon OK ça fait deux semaines que je me suis mis à HA, chaque truc qui fonctionne me met sur un nuage :stuck_out_tongue_winking_eye:).

1 « J'aime »