Puissance énergie (kWh / Prix) - Intégrale de Riemann

Bonjour,

J’utilise un contacteur Legrand 412171 pour ma prise Green’Up pour la recharge de ma voiture.
J’aimerais savoir la consommation en kWh de cette prise ainsi que le prix que ça me coûte.

J’ai été voir ce sujet : Puissance énergie contacteur Legrand 412171

J’ai donc créé une intégrale de Riemann avec calcul des rectangles a gauche.
Une minute pour sous intervalle maximum.
Modifié le Zigbe2mqtt => activePower est par defaut a 65000, mis à 60 secondes.

Est-ce que ça va marcher ?
C’est possible d’avoir la consommation mois par mois par exemple ? Et sur un an ?

Je suis abonné au tarif Tempo EDF, et en ça, j’ai une intégration qui me donne à tout instant le prix du kWh dans la journée (qui change en fonction des jours et des heures).

J’aimerais maintenant (je ne sais pas comment faire) utiliser cette consommation calculé multiplié par le prix au kWh à chaque instant. Comment faire ?

Et comme la consommation, avoir un récapitulatif par mois / par année.
Le mieux serait aussi par tarif mais c’est certainement plus compliqué (6 tarifs => bleu / blanc / rouge en HC et HP).

Des idées ?
Merci.

Bon… C’est compliqué.

Voilà ce que j’ai fais, je ne suis pas certain que cela soit correct :

#╔══════════════════════════════════════════════════════════════════════════════════╗
#║               Calcul des consommations et des prix de la Green'Up                ║
#║                                                                                  ║
#║ Le calcul est basé sur :                                                         ║
#║   - Le capteur de puissance la Green'Up 412171 : sensor.0x0004740001246658_power ║
#║   - Le calcul du prix courant à tout instant   : sensor.edf_prix_courant         ║
#║                                                                                  ║
#║   - Pour l'éngergie : le calcul de la consommation est une intégral de Riemann   ║
#║                       sur le capteur  sensor.0x0004740001246658_power            ║
#║   - Pour le prix    : le produit de la consommation énergétique par son prix mis ║
#║                       à jour en temp réel. Puis une intégrale                    ║
#╚══════════════════════════════════════════════════════════════════════════════════╝
# Intégrale pour calculer la consommation de la Green'Up
- name: Consommation de la Green'Up
  unique_id: consumption_green_up
  icon: mdi:chart-histogram
  state_class: energy
  unit_of_measurement: kWh
  platform: integration
  source: sensor.0x0004740001246658_power
  round: 2
  unit_prefix: k
  unit_time: s
  method: left
# Variable temporaire pour calculer le prix instantané par rapport à la consommation de la Green'Up
# Attention, cette donnee ne sert qu'à calculer le coût de la consommation, valeur d'entrée de l'intégrale en dessous.
- name: Coût instantané de la consommation de la Green'Up
  unique_id: instantaneous_consumption_green_up_price
  icon: mdi:currency-eur
  state_class: measurement
  state: >-
    {{ (states['sensor.0x0004740001246658_power'].state | float) * (states['sensor.edf_prix_courant'].state | float) }}
# Intégrale pour calculer le prix de la consommation de la Green'Up
- name: Coût de la consommation de la Green'Up
  unique_id: consumption_green_up_price
  icon: mdi:currency-eur
  state_class: monetary
  unit_of_measurement: EUR
  platform: integration
  source: sensor.instantaneous_consumption_green_up_price
  round: 2
  unit_prefix: k
  unit_time: s
  method: left

Je fais une intégrale sur le capteur de puissance de la Zoé.
Ensuite, pour calculer le prix je fais le produit de la puissance par le prix à l’instant T et fait une intégrale.
Pas certain que ça soit bon.

J’aurais pu faire :
Je fais une intégrale sur le capteur de puissance de la Zoé.
Ensuite, pour calculer le prix je fais le produit de ce résultat d’intégral par le prix à l’instant T.
Pas certain que ça soit bon non plus.

C’est quoi la bonne méthode ?

Si le Legrand 412171 ne te donne pas la consommation en kWh directement, il te faut en effet:

  • tout d’abord calculer l’énergie consommée (transformation de la consommation en kW en énergie en kWh, en utilisant un template Intégrale de Riemann
  • Utiliser ce nouveau sensor dans le dashboard énergie par exemple, qui te permettra d’avoir l’énergie par heure, par jour, par mois, par année.
  • Si tu veux avoir un suivi des coûts, tu peux le faire dans le dashboard énergie en utilisant le sensor que tu as avec le prix, qui cahnge en fonction des heures.

Le dashboard énergie est déjà utilisé de cette façon pour la consommation de la maison tout entière.
J’ai mis en source, une puissance instantanée, somme des consommations des 3 phases remontées par mes panneaux photovoltaïques et ça a l’air de fonctionner. Il utilise peut-être les unités pour savoir s’il fait une intégrale ou pas. Mais là n’est pas la question.

J’aimerais le gérer dans une vue à moi.

Visiblement c’est pas trop con ce que j’ai fais, voir :
https://www.reddit.com/r/homeassistant/comments/142ebgx/comment/jn46ibi/

Visiblement ça ne fonctionne pas !
J’ajoute le fichier avec cette commande : il y a un truc qui déconne, il ne prend pas en compte les intégrales (ni si dans le dossier YAML/integrations, ni le dossier YAML/templates (qui contient plein d’autres fichiers qui fonctionnent).

# Integrales
sensor: !include_dir_merge_named /config/YAML/integrations

ou

# Chargement des fichiers YAML personnels (templates)
template: !include_dir_list /config/YAML/templates

j utilise le template suivant pour suivre le cout de mes prises connectées avec tempo, si ca peux aider:

{% set consumption = states('sensor.seche_linge_energy') | float(default=0) %}
          {% set cost_per_kwh = states('sensor.edf_tempo_prix_actuel') | float(default=0) %}
          {{ (consumption * cost_per_kwh) | round(2) }}

Je ne comprend pas comment ça marche. En plus le prix change au cours du temps.

C’est horrible, j’ai fais des trucs et j’ai des valeurs à la con.
Impossible de supprimer l’historique des valeurs de ces capteurs !!!

j utilise sensor.edf_tempo_prix_actuel qui est créé par https://github.com/delphiki/hass-tarif-edf…modifie le nom sensor seche linge par le tien…

je me melange un peu les pinceaux…desolé suis novice:

en installant https://github.com/delphiki/hass-tarif-edf tu obtiendras tous les tarifs tempo et l’entité qui nous interresse: sensor.tarif_actuel_tempo_6kva_ttc dans mon cas…

ensuite le template qui va bien :

{% set consumption = states('sensor.seche_linge_energy') | float(default=0) %}
          {% set cost_per_kwh = states('sensor.tarif_actuel_tempo_6kva_ttc') | float(default=0) %}
          {{ (consumption * cost_per_kwh) | round(2) }}

chez moi ca roule…

Je trouve très bizarre que ça roule sans intégration. Sauf si ton tarif ne bouge pas.
Je l’utilise cette intégration : edf.
Pour le calcul du prix courant, j’utilise :

#╔══════════════════════════════════════════════════════════════════════════════════╗
#║                    Calcul du prix de l'énergie en temps réel                     ║
#║                                                                                  ║
#║  Sensors qui permettent de connaitre à chaque instant le prix de l'électricité   ║
#╚══════════════════════════════════════════════════════════════════════════════════╝
sensor:
  # Prix courant, en €/kWh, utilisé un peu partout
  - name: edf_prix_courant
    icon: mdi:currency-eur
    unique_id: edf_prix_courant
    state_class: measurement
    unit_of_measurement: "EUR/kWh"
    state: >-
      {% set color = states['sensor.rte_tempo_couleur_actuelle'].state %}
      {% if (color == 'unavailable') %}
      0.0
      {% elif is_state('binary_sensor.rte_tempo_heures_creuses', "off") %}
      {{ states['sensor.tarif_' + color.lower() + '_tempo_heures_pleines_ttc'].state }}
      {% else %}
      {{ states['sensor.tarif_' + color.lower() + '_tempo_heures_creuses_ttc'].state }}
      {% endif %}

Impossible d’ajouter un sensor de type intégration (intégrale de Riemann): HA ne voit pas le capteur.
J’ai essayé plein de choses, plein d’includes, rien à faire, HA ne voir pas ce capteur !
Pourtant, pas d’erreur dans le log.

Il y a un truc qui cloche et je ne comprend pas quoi !

Vous avez déjà intégré un sensor de type intégrale de Riemann dans un fichier yaml ?

Bonjour,
Je pense que j’ai un peu la même chose mais pour suivre la production solaire de mes panneaux via un module sur une prise.
J’ai créé un sensor via l’intégrale :
image
Et après j’ai fait 3 sensors compteur d’énergie :


Chacun me permet de collecter jour / mois / année.
Ils sont basés sur mon sensor « intégral » et je change juste l’intervalle de temps.
C’est basique mais efficace, il y a je pense mieux à faire. :slight_smile:

Ps : j’ai aussi le legrand mais pour mon cumulus (donc je suis passé par le calcul d’intégrale pour avoir les kwh)
et après je pense que tu peux utiliser ces sensors pour y coller un calcul avec le prix…

Merci pour ta réponse.

Déjà, je tente de le faire en yaml. Ça me permet d’avoir tous mes capteurs sous forme texte.
Et déjà, ça je n’y arrive pas. Lorsque j’y arrive, (en tout cas pas d’erreur de config ou de log) je ne sais pas ou passe ce capteur !
Le code est le suivant :
Inclus avec : sensor: !include_dir_merge_list /config/YAML/integrations
Dans ce répertoire /config/YAML/integrations j’ai un fichier yaml qui contient ça :

- platform: integration
  name: "Consommation de la Green'Up"
  unique_id: consumption_green_up
  source: sensor.0x0004740001246658_power
  round: 2
  unit_prefix: k
  unit_time: s
  method: left

Impossible de trouver consumption_green_up ni avec sensor.consumption_green_up ni autre chose.
EDIT : Bon, j’ai trouvé la solution ; contrairement aux autres capteurs, il FAUT redémarrer HA à chaque changement. Recharger la configuration ne suffit pas !

Autre chose :
Multiplier le résultat d’une intégrale qui somme les consommations par un prix en € / kWh ne fonctionne que si le prix n’évolue pas. Or là, le prix est différent entre les jours bleu / blanc / rouge et en fonction de HP / HC.
Il doit y avoir aussi un calcul d’intégrale pour le prix. C’est pour ça qu’il faut calculer un prix instantané en multipliant la consommation instantanée par le prix à ce moment puis faire un calcul d’intégrale.

EDIT : Je pens(ais)e utiliser le sensor compteur d’énergie. C’est un peu con je pense (pas certain qu’on puisse faire sans). En fait il suffit d’avoir un compteur global, le reste c’est du calcul et de l’affichage (pas compliqué de faire des différences entre deux périodes). Je ne sais pas si ça existe sinon je ferais comme toi certainement.

Bon, déjà je vais vous montrer où j’en suis :
J’ai donc réussi à mettre sous forme yaml, un calcul Intégral de Riemann.
J’ai fais des essais avant et c’est un échec. L’intégrale ayant déjà calculé des valeurs, IMPOSSIBLE de la remettre à 0 et j’avais des valeurs complètement aberrantes !
Voir le sujet ici :

Dans configuration.yaml :

# Sensers (dont Integrales)
sensor: !include_dir_merge_list /config/YAML/sensors

Dans le répertoires sensors j’ai le fichier template_compute_greenup_price_consumption.yaml qui contient :

#╔══════════════════════════════════════════════════════════════════════════════════╗
#║               Calcul des consommations et des prix de la Green'Up                ║
#║                                                                                  ║
#║ Le calcul est basé sur :                                                         ║
#║   - Le capteur de puissance la Green'Up 412171 : sensor.0x0004740001246658_power ║
#║   - Le calcul du prix courant à tout instant   : sensor.edf_prix_courant         ║
#║                                                                                  ║
#║   - Pour l'éngergie : le calcul de la consommation est une intégral de Riemann   ║
#║                       sur le capteur  sensor.0x0004740001246658_power            ║
#║   - Pour le prix    : le produit de la consommation énergétique par son prix mis ║
#║                       à jour en temp réel. Puis une intégrale                    ║
#╚══════════════════════════════════════════════════════════════════════════════════╝
# Intégrale pour calculer la consommation de la Green'Up
- platform: integration
  name: Consommation de la GreenUp
  source: sensor.0x0004740001246658_power
  round: 2
  unit_prefix: k
  unit_time: h
  method: left
  # max_sub_inteval:
  #   seconds: 10
# Variable temporaire pour calculer le prix instantané par rapport à la consommation de la Green'Up
#  Attention, cette donnee ne sert qu'à calculer le coût de la consommation, valeur d'entrée de l'intégrale en dessous.
- platform: template
  sensors:
    instantaneous_consumption_green_up_price:
      friendly_name: "Coût instantané de la consommation de la Green'Up"
      unit_of_measurement: "€"
      unique_id: instantaneous_consumption_green_up_price
      value_template: >-
        {% if states['sensor.0x0004740001246658_power'].state == "unavailable" or states['sensor.edf_prix_courant'].state == "unavailable" %}
        {{ 0.0 }}
        {% else %}
        {{ (states['sensor.0x0004740001246658_power'].state | float) * (states['sensor.edf_prix_courant'].state | float) | float }}
        {% endif %}
# Intégrale pour calculer le prix de la consommation de la Green'Up
- platform: integration
  name: Coût de la consommation de la GreenUp
  source: sensor.instantaneous_consumption_green_up_price
  round: 2
  unit_prefix: k
  unit_time: h
  method: left

Il reste à gérer l’IHM et les graphiques.

Bon, j’ai fais un graphique et c’est plutôt prometteur. J’utilise un graphique basé sur :
custom:apexcharts-card

Seulement voilà, il semble pas mal bogué et le dernier commit a eu lieu il y a 8 mois, ça sent pas bon.
EDIT : J’ai corrigé des trucs, ça marche mieux

type: custom:grid-layout
path: consommation-green-upx
title: Consommation Green'Up
icon: mdi:home-lightning-bolt
cards:
  - type: custom:layout-card
    layout_type: custom:grid-layout
    layout:
      grid-template-columns: 10% 80% 10%
      grid-template-rows: auto
      grid-template-areas: |
        "left middle right"
    cards:
      - type: custom:gap-card
        view_layout:
          grid:area: left
      - type: custom:apexcharts-card
        graph_span: 1d
        span:
          end: day
        apex_config:
          legend:
            position: top
          chart:
            height: 300px
        yaxis:
          - id: cumulative_conso
            show: false
          - id: left2
            decimals: 2
            min: ~0
            max: ~4
          - id: right2
            decimals: 2
            opposite: true
            min: ~0
            max: ~0.6
        header:
          show: true
          title: Consommation / Coût de la Green'Up (jour)
          show_states: true
          colorize_states: true
        series:
          - entity: sensor.consommation_de_la_greenup
            name: Consommation
            yaxis_id: left2
            stroke_width: 2
            unit: " kWh"
            float_precision: 2
            color: orange
            type: column
            group_by:
              func: diff
              duration: 1h
          - entity: sensor.consommation_de_la_greenup
            name: Consommation totale
            yaxis_id: cumulative_conso
            unit: " kWh"
            float_precision: 2
            color: red
            group_by:
              func: diff
              duration: 1d
            show:
              in_chart: false
          - entity: sensor.cout_de_la_consommation_de_la_greenup
            name: Prix totale
            yaxis_id: cumulative_price
            unit: " €"
            float_precision: 2
            color: green
            group_by:
              func: diff
              duration: 1d
            show:
              in_chart: false
          - entity: sensor.cout_de_la_consommation_de_la_greenup
            name: Coût
            yaxis_id: right2
            stroke_width: 2
            color: darkblue
            unit: " €"
            float_precision: 2
            type: column
            group_by:
              func: diff
              duration: 1h
      - type: custom:gap-card
        view_layout:
          grid:area: right
  - type: custom:layout-card
    layout_type: custom:grid-layout
    layout:
      grid-template-columns: 10% 80% 10%
      grid-template-rows: auto
      grid-template-areas: |
        "left middle right"
    cards:
      - type: custom:gap-card
        view_layout:
          grid:area: left
      - type: custom:apexcharts-card
        graph_span: 1w
        apex_config:
          legend:
            position: top
          chart:
            height: 300px
        span:
          end: week
        yaxis:
          - id: left
            decimals: 2
            min: ~0
            max: ~25
          - id: right
            decimals: 2
            opposite: true
            min: ~0
            max: ~5.0
          - id: cumulative_conso
            min: 0
            max: 0
            show: false
          - id: cumulative_price
            min: 0
            max: 0
            show: false
        header:
          show: true
          title: Consommation / Coût de la Green'Up (semaine)
          show_states: true
          colorize_states: true
        series:
          - entity: sensor.consommation_de_la_greenup
            name: Consommation
            yaxis_id: left
            unit: " kWh"
            float_precision: 2
            color: orange
            type: column
            group_by:
              func: diff
              duration: 1d
          - entity: sensor.consommation_de_la_greenup
            name: Consommation totale
            yaxis_id: cumulative_conso
            unit: " kWh"
            float_precision: 2
            color: red
            group_by:
              func: diff
              duration: 1w
            show:
              in_chart: false
          - entity: sensor.cout_de_la_consommation_de_la_greenup
            name: Prix totale
            yaxis_id: cumulative_price
            unit: " €"
            float_precision: 2
            color: green
            group_by:
              func: diff
              duration: 1w
            show:
              in_chart: false
          - entity: sensor.cout_de_la_consommation_de_la_greenup
            name: Coût
            yaxis_id: right
            color: darkblue
            unit: " €"
            float_precision: 2
            type: column
            group_by:
              func: diff
              duration: 1d
      - type: custom:gap-card
        view_layout:
          grid:area: right
layout:
  layout:
    max_cols: 1
    cols: 1
    grid-template-columns: 100%
    place-content: center

Ça devrait me permettre de faire un graphique sur 1 jour / 1 semaine / 1 mois / 1 an assez facilement.

Par contre, j’ai 4 courbes dont 2 invisibles qui sont le cumul sur la journée / semaine.
Ça fonctionne bien mais par contre les axes c’est la merde, ça ne devrait pas faire ça !
J’ai modifié :

span:
  end: isoWeek

par

span:
  end: week

Mais ce n’est pas ce que je veux. Si je mets isoWeek, la barre bleue est sur plusieurs jours, il y a des bugs.
Idem pour l’axe : je veux à gauche les kWh basés sur le graphe orange (et pas le rouge) et à droite l’axe des € basés sur le graphe bleu (et pas le vert).