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:).

2 « J'aime »

Bonjour et surtout merci pour ton partage.
Etant je recherche à faire exactement la même chose que toi, je viens d’ouvrir le port Modbus IP de mon onduleur et via Solaredge Modbus Multi je reçois bien toutes les infos de mon onduleur et du compteur sauf que moi aussi newbie dans la programmation de HA.
Peux-tu me donner quelques information sur la programmation YAML car il n’y a pas trop de documentions sur le sujet. J’imagige que ton code se trouve dans un fichier autre que celui de la conf, aller le chercher je sais faire, mais ce qu’il me manque et ce qu’il y a avant ton code, les différents conteneurs.
Merci pour ton retour ou si quelqu’un à un lien justement sur la programmation YAML pour HA

Hello
Moi je vais signer pour une installation solaredge. Du coup ce post est super intéressant
Quel composant /intégration a tu mis pour récupérer sur le modbus
As tu penser à mettre un routeur solaire sur ton chauffe eau?
Autre que solaredge qui est hors de prix
Merci

Non je n’ai pas de routeur solaire mais actuellement je pilote mon chauffe eau (contacteur J/N) via un module sur les plages horaires du tarif de nuit ou en commande manuel en passant par l’interface HA.
concernant le modbus IP, mon onduleur et connecté en ethernet, j’ai simplement demandé à Solaredge de m’ouvrir le port et les infos sont remontées sans aucun problème.
Reste juste à revoir au niveau de la programmation en y ajoutant quelques compteurs et relais connectés.
J’ai remplacé mon système (Domoticz) par home Assistant il y a quelques semaines et mon solaire n’a que quelques mois.
Après le problème est que je ne trouve pas trop de documentation sur les bonnes manières pour coder en yaml, mais j’ai bon espoir de trouver un peu d’aide ici!

Ok parfait
Par contre pour la remontée des infos sur HA tu as du installer un « truc » pour lier HA et le modbus
Y a cette integration

1 « J'aime »

Oui il y a bien une intégration

Juste une info, mais je pense que c’est OK de ton côté : pour récupérer les données via le Modbus TCP il faut l’activer dans le SolardEdge (dans la console d’administration).

1 « J'aime »

Bonjour,

Merci wd_newbie pour ce partage qui m’a permis de créer des compteurs EDF Tempo Bleu Blanc Rouge en HC et HC, par dérivation de la donnée de l’intégration SolarEdge ModBus" de l’onduleur SolarEdge (‹ sensor.solaredgem_m1_ac_power ›) et les données fournies par l’intégration « RTE Tempo » (‹ binary_sensor.rte_tempo_heures_creuses › et ‹ sensor.rte_tempo_couleur_actuelle ›) et son extension « input numbers » (‹ sensor.edf_tempo_prix_actuel ›) pour les tarifs.

Un compteur général Achat et Vente comme toi,
ici EE-Achat :

{% set imp_exp =  ((states('sensor.solaredgem_m1_ac_power') | float )) %}
{{ 0 if imp_exp > 0 else imp_exp*-1/1000 }}

ici EE-Vente :

{% set imp_exp =  (states('sensor.solaredgem_m1_ac_power') | float ) %}
{{ 0 if imp_exp < 0 else imp_exp/1000  }}

et enfin 12 EE-Achat Bleu/Blan/Rouges HP/HC similaires…
ici en exemple « EE-Achat Bleu HP » (à addapter pour les 11 autres) :

{% set imp_exp = ((states("sensor.ee_achat") | float)) %}
{{ imp_exp  if (is_state('binary_sensor.rte_tempo_heures_creuses', 'off') and is_state('sensor.rte_tempo_couleur_actuelle', 'Bleu'))  else 0 }}

et bien sur les 12 intégrations « Intégrale - Capteur d’intégrale de Riemann » correspondantes pour transformer les puissances en énergie kWh pour alimenter l’Intégration « Energie ».

Merci encore.

1 « J'aime »