HA-Compteur de service (utility meter)

Intro

Le comptage d’énergie est souvent évoqué sur les réseaux sociaux, qu’il s’agisse de kWh ou autres grandeurs physiques et semble être l’objet d’interrogations récurrentes.

Récemment HA, dans sa version 2022-04 a ajouté des intégrations directement configurables depuis l’interface utilisateur, simplifiant de fait leur déclaration, c’est ce que je vous invite à découvrir dans cet article. J’ai déjà abordé le sujet avec l’intégration « entrées threshold » dans cet article .

Un des avantages est qu’il n’est besoin de rebooter le système pour leur prise en compte.

Un des inconvénients, est qu’une fois créé et c’est regrettable, tous les paramètres ne sont pas modifiables et à ma connaissance la seul solution est de les supprimer puis de recréer une entité avec le même nom, de fait vous ne perdrez pas l’historique.

Conversion de la puissance en énergie

Comme pré requis il faut commencer par déclarer l’entité que vous souhaitez comptabiliser. En général nous nous intéressons au kWh mais c’est également valable pour des m3 d’eau ou de gaz.

Rappelons qu’un kilo watt heure correspond à une consommation de 1000 W ou 1 kW pendant 1 heure, il s’agit d’une énergie et non d’une puissance. Si votre capteur fournit uniquement une puissance en W ou kW, vous devez convertir la convertir en Wh ou kWh avec l’une des deux méthodes suivantes:

Methode de Riemann

HA dispose d’une intégration « intégration par le méthode de Riemann » configurable depuis une interface utilisateur.

Pour cela vous allez dans « paramètres/appareils et service/entrées » puis « Ajouter un capteur d’intégrale de Riemann ».

Vous saisissez:

  • le nom que vous souhaitez donner à l’entité
  • le capteur qui vous délivre des W.
  • la méthode de calcul de l’intégrale:
    • Trapézoïdal si la grandeur physique mesurée évolue régulièrement dans le temps.
    • Left ou right si votre grandeur évolue avec des alternance de pics de puissance et de valeurs plus faibles voir nulles, une machine à laver par exemple.
  • la précision
  • le préfixe métrique (k en général)
  • l’unité de temps (h en général).

HA définit automatiquement les attributs de l’entité indispensable à sa classification (state_class, device_class,..)

Autre méthode de calcul

Vous trouverez dans ce lien, un script python, qui d’après l’auteur calcule plus précisément les kWh,. J’ai testé, il fonctionne, mais plus compliqué à mettre en oeuvre, perso je ne cours pas après le kWh au 100 eme pret.

Configuration des compteurs de service.

Votre entité en kWh (ou Wh) est maintenant créée, vous pouvez configurer votre compteur de service via une interface utilisateur.

Pour ce faire, allez dans « paramètres/appareils et service/entrées », puis ajouter « un compteur de services publics (eau, gaz, électricité…) ».

Vous saisissez:

  • le nom que vous souhaitez donner à l’entité
  • le capteur que vous souhaitez comptabiliser (celui calculé avec l’intégrale de rieuman par ex)
  • le cycle de remise à zéro (15 mn, heure, semaine,mois,..)
  • le décalage de remise à zéro (laisser zéro par défaut sauf cas particulier)
  • les tarifs pris en charge, laisser vide si un seul tarif, sinon saisissez « hc » et hp » par exemple, ceux sont ces tarifs que vous utiliserez dans l’automatisme.
  • cocher « consommation nette » si la valeur évolue en positif/négatif
  • cocher « valeur delta » si les valeurs de la source sont des valeurs delta depuis la dernière lecture au lieu de valeurs absolues, Lorsque cette option est activée, chaque nouvelle valeur reçue sera ajoutée telle quelle au compteur au lieu d’ajouter la différence entre la nouvelle valeur et la valeur précédente. Par exemple, vous devez l’activer lorsque le capteur source renvoie des lectures telles que « 1 », « 0,5 », « 0,75 » contre « 1 », « 1,5 », « 2,25 »

Vous obtiendrez des informations complémentaires sur « utility meter » dans ce lien.

HA définit automatiquement les attributs de l’entité indispensable à sa classification (state_class, device_class,..)

A noter que vous devez déclarer autant de compteur que de cycles de remise à zéro (jour, semaine, mois année, ..) nécessaires.

Exploitation des compteurs

Une fois créé, HA ajoute une entité par compteur, par ex « linky » et, si vous les avez déclaré, une entité supplémentaire par tarif , « linky_hc » et « linky_hp ».

Si vous avez un seul tarif, vous n’avez rien à faire de plus, votre compteur sera remis à zéro en fonction de votre unité de temps (jour, semaine,..).

Si vous avez un double tarif, vous devez indiquer au compteur quel tarif est en cours, pour ce faire vous pouvez utiliser un automatisme.

Les déclencheurs peuvent être des plages horaires ou encore mieux le tarif en cours dans votre linky par exemple.

Selon une plage horaire fixe

Il faut créer un automatisme:

Les options « hc » et « hp » correspondent à celles que vous avez déclarées dans le compteur de service.

alias: 6_1_0 Energie Changement HP<->HC (Dupliquer)
description: ''
trigger:
  - platform: time
    id: tarif_hc
    at: '01:00:00'
  - platform: time
    id: tarif_hp
    at: '02:00:00'
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: tarif_hc
        sequence:
          - service: select.select_option
            data:
              option: hc
            target:
              entity_id:
                - select.linky_energie_jour
      - conditions:
          - condition: trigger
            id: tarif_hp
        sequence:
          - service: select.select_option
            data:
              option: hp
            target:
              entity_id:
                - select.linky_energie_jour
    default: []
mode: single

Si vous avez déclaré plusieurs compteurs avec les mêmes tarifs, vous les ajoutez les entités dans les « target: entity_id ».

Selon plusieurs plages horaires fixes

alias: 6_1_0 Energie Changement HP<->HC (Dupliquer)
description: ''
trigger:
  - platform: time
    id: tarif_hc1
    at: '01:00:00'
  - platform: time
    id: tarif_hp2
    at: '02:00:00'
  - platform: time
    at: '05:00:00'
    id: tarif_hc2
  - platform: time
    at: '06:00:00'
    id: tarif_hp2
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: tarif_hc1
          - condition: trigger
            id: tarif_hc2

        sequence:
          - service: select.select_option
            data:
              option: hc
            target:
              entity_id:
                - select.linky_energie_jour
                - select.linky_energie_mois
      - conditions:
          - condition: trigger
            id: tarif_hp1
          - condition: trigger
            id: tarif_hp2
        sequence:
          - service: select.select_option
            data:
              option: hp
            target:
              entity_id:
                - select.linky_energie_jour
                - select.linky_energie_mois
    default: []
mode: single

Selon une plage horaire paramétrable

Commencer par créer le deux « input_datetime » qui vont définir le début et la fin de la plage horaire des heures creuses.

Pour ce faire, allez dans « paramètres/appareils et service/entrées », puis ajouter « une date et/ou heure »:

Saisir

  • Le nom de l’entité que vous souhaitez
  • Cocher « heure »

J’ai ainsi créé deux entités:

  • input_datetime.debut_heure_creuse
  • input_datetime.fin_heure_creuse

que l’on va pouvoir exploiter dans un automatisme:

Les options « hc » et « hp » correspondent à celles que vous avez déclarées dans le compteur de service.

Si vous avez déclaré plusieurs compteurs avec les mêmes tarifs, vous ajoutez les entités dans les « target: entity_id ».

alias: 6_1_0 Energie Changement HP<->HC
description: ''
trigger:
  - platform: time
    id: tarif_hc
    at: input_datetime.debut_heure_creuse
  - platform: time
    id: tarif_hp
    at: input_datetime.fin_heure_creuse
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: tarif_hc
        sequence:
          - service: select.select_option
            data:
              option: hc
            target:
              entity_id:
                - select.linky_energie_jour
      - conditions:
          - condition: trigger
            id: tarif_hp
        sequence:
          - service: select.select_option
            data:
              option: hp
            target:
              entity_id:
                - select.linky_energie_jour
    default: []
mode: single

Avec l’information HP/HC du Linky

L’automatisme est déclenché par une information délivrée par le Linky, qui, rappelons le, peux fonctionner sous 2 modes:

Les options « hc » et « hp » correspondent à celles que vous avez déclarées dans le compteur de service

Si vous avez déclaré plusieurs compteurs avec les mêmes tarifs, vous ajoutez les entités dans les « target: entity_id ».

alias: 6_1_0 Energie Changement HP<->HC
description: ''
trigger:
  - platform: state
    entity_id: sensor.linky_n_tarif
    id: tarif_hc
    from: '2'
    to: '1'
  - platform: state
    entity_id: sensor.linky_n_tarif
    from: '1'
    id: tarif_hp
    to: '2'
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: tarif_hc
        sequence:
          - service: select.select_option
            data:
              option: hc
            target:
              entity_id:
                - select.linky_energie_jour
                  
      - conditions:
          - condition: trigger
            id: tarif_hp
        sequence:
          - service: select.select_option
            data:
              option: hp
            target:
              entity_id:
                - select.linky_energie_jour
                 
    default: []
mode: single

Calcul du cout de l’énergie

Il faut commencer par créer deux inputs permettant des saisir le prix du kWh HP et HC

input_number:
  # Calcul des coûts journaliers
  cout_kwh_hp:
    name: Cout du Kwh HP
    min: 0
    max: 10
    unit_of_measurement: €
    icon: mdi:currency-eur
    step: 0.00001
    mode: box

  cout_kwh_hc:
    name: Cout du Kwh HC
    min: 0
    max: 10
    unit_of_measurement: €
    icon: mdi:currency-eur
    step: 0.00001
    mode: box

Puis utiliser trois templates pour le calcul: HP+HC, HP, HC.

template:
  - sensor:
# Cout de l'Energie


    - name: "Cout Energy Total Jour HPHC"
      state: >-
        {% set hp = states('sensor.energy_total_usage_daily_hp') | float(default=0) | round(2) %}
        {% set hc = states('sensor.energy_total_usage_daily_hc') | float(default=0) | round(2) %}
        {% set chp = states('input_number.cout_kwh_hp') | float(default=0) | round(5) %}
        {% set chc = states('input_number.cout_kwh_hc') | float(default=0) | round(5) %}
        {{((hc*chc) + (hp*chp)) | round(2) }}
      unit_of_measurement: "€"
      device_class: "monetary"
      state_class: "total"  
      unique_id: "cout_energy_total_jour_hphc"

    - name: "Cout Energy Total Jour HP"
      state: >-
        {% set hp = states('sensor.energy_total_usage_daily_hp') | float(default=0) | round(2) %}
        {% set chp = states('input_number.cout_kwh_hp') | float(default=0) | round(5) %}
        {{(hp*chp) | round(2) }}
      unit_of_measurement: "€"
      device_class: "monetary"
      state_class: "total"  
      unique_id: "cout_energy_total_jour_hp"
      
    - name: "Cout Energy Total Jour HC"
      state: >-
        {% set hc = states('sensor.energy_total_usage_daily_hc') | float(default=0) | round(2) %}
        {% set chc = states('input_number.cout_kwh_hc') | float(default=0) | round(5) %}
        {{(hc*chc) | round(2) }}
      unit_of_measurement: "€"
      device_class: "monetary"
      state_class: "total"  
      unique_id: "cout_energy_total_jour_hc"

Tableau de bord

Exemple avec l’excellente intégration « mini-graph-card » disponible dans HACS.

type: custom:mini-graph-card
entities:
  - entity: sensor.linky_energie_jour_hp
    name: HP
    show_state: true
  - entity: sensor.linky_energie_jour_hc
    name: HC
    show_state: true
name: Conso Linky 7j
hours_to_show: 168
aggregate_func: max
group_by: date
show:
  graph: bar
icon: mdi:flash

Vous trouverez d’autres exemples dans mon article https://domo.rem81.com/index.php/2022/01/12/ha-teleinformation-linky-mode-standard/.

Conclusion

Tuto tout simple qui, je l’espère, vous aidera à définir vos compteurs.

9 Comments on “HA-Compteur de service (utility meter)”

  1. Approche intéressant (sympa l’application de l’intégrale de Riemann, ça montre comment HA est complet).
    Dans mon cas, j’ai tenté ma chance avec la clé Linky_TIC et les panneaux ‘énergie’ de HA, mais pas de bol : ça ne marche pas bien avec ZHA.

    1. Bonjour, merci pour ton retour. J’utilise aussi ZHA avec quelques capteurs SONOF, ça marche pas trop mal, ça dépend beaucoup de la stabilité du WIFI c’est pourquoi quand je peux je mets du fil, c’est moins pratique à mettre en oeuvre souvent plus chère mais une fois en fonctionnement on y revient pas.

  2. J’ai suivi cet article avec intérêt. Je débute avec Home assistant et j’ai du mal à tout comprendre. J’ai une pince ampèremètre owl cm180 que j’utilisais avant sous domoticz. Je l’ai mise sur mon jacuzzi pour savoir combien cette petite folie me coûte 🙂

    Elle me renvoie 2 données : une en watts « instantané » et une en kilowatts « cumulés ». Je suis parti sur ce deuxième sensor. J’ai donc sauté le paragraphe relatif à la méthode de Rieman puisque j’ai déjà un sensor en KwH (heureusement sinon on m’aurait définitivement perdu)

    J’ai donc créé un compteur spa_journalier et un compteur spa_mensuel. Puis j’ai créé l’automatisme « selon une plage horaire paramétrable ». J’ai renseigné le début de mes heures creuses à 22h et la fin à 06h.
    Ce que je ne comprends pas trop c’est la suite maintenant. Ou je renseigne mes prix HC et HP ? Et où est ce que je peux voir les données extraites ? Merci

    1. Bonjour, j’ai ajouté le mode de calcul des coûts dans l’article. Lorsque que tu as créé tes utili-meter tu retrouve deux entités (par exemple: « sensor.linky_energie_jour_hc » pour les HC et « sensor.linky_energie_jour_hp » pour les HP) et cela pour le journalier et autant pour le mensuel: donc quatre sensors. C’est ces sensors qu’ils faut exploiter voir « tableau de bord » dans mon article ou tu retrouve les deux entités. Pour le calcul des coûts, c’est pareil il faut exploiter ces sensors. J’espère avoir répondu à ta question. cdlt

  3. Hello, merci à toi ! Je n’arrive pas a adapter ton tuto pour avoir la consommation de prise electrique individuel à la place du linky. je voudrais calculer les cout individuellement pour chaque prise mais je ne comprend pas la logique. Je récupère bien les infos en KWh de mes prises, mais le cout n’évolue pas. J’ai rempli le prix des cout dans l’état des entités, mais je pas sur que ce soit la qu’il faille aller ! Tu peux m’éclairer sur la marche à suivre pour avoir les conso individuel de chaqune de mes prises, sachant que je récupère bien les valeures nécessaire

    1. Bonsoir, je comprends pas ton problème, as tu crée les utility-meter par prise ?, as tu crée les templates qui multiplie le coup par le utility-meter ? Regarde le commentaire précédent pour info.

  4. Bonsoir,
    tout d’abord merci pour ce travail !
    J’ai un petit soucis avec le code de cet article pour l’adapter à mes besoins.
    J’ai une clé Lixee ZLinky qui me remonte bien mes valeurs de compteur HC et HP avec laquelle j’obtiens bien des données différenciées HC HP selon les périodicités que j’ai déclaré pour chacun de mes compteurs.
    Je peux aussi obtenir le mode en court via la téléinfo en mode historique hp.. ou hc…
    Cependant pour mes autres prises connecté NOUS qui disposent que d’un unique compteur d’energie en Kwh .
    J’ai bien compris le code que je dois adapter et à peu prés comment,
    Mais j’ai une information essentiel qui me manque c’est sur quel fichier écrire ce code qui fait le switch de tarif hc ou hp pour changer le compteur de cumul.
    ça parait bête, mais je ne trouve pas.
    Peut être un automation.yaml ou autre.
    Est-ce qu’il est possible de le préciser ?
    Merci pour tous.
    Samuel

    1. bonjour
      Il faut creer un compteur de service avec ton sensor en kwh, voir chapitre « configuration des compteurs de service » puis activer le cumul HC ou HP en creant un automatisme comme décrit au chapitre « Exploitation des compteurs » « avec l’exploitation HP/HC du linky » en adaptant le « sensor.linky_n_tarif » avec le sensor qui te donne le tarif en cours et le id target « select.linky_energie_jour » avec ton ou tes compteurs de service » (tu peux en mettre plusieurs en parallèle), j’espère avoir été clair, bonne continuation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *