Suivre sa consommation d’électricité avec Home Assistant

Dans la suite de l’article précédent, je vous propose d’intégrer le module Énergies de Home Assistant (v2023.1) pour suivre sa consommation d’électricité.

Collecte des données

Sur notre rapsberry Pi, en lançant picocom on obtient : (Ctrl A – Ctrl Q pour sortir)

teleinfo@cl:~$ picocom -b 1200 -d 7 -p e -f n /dev/ttyUSB0
picocom v3.1

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 1200
parity is      : even
databits are   : 7
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready
MAIN ---- "
IINST 008 _
IMAX 057 K
PAPP 01830 -
HHPHC Y D
MOTDETAT 000000 B
ADCO 031328250173 :
OPTARIF BBR( S
ISOUSC 45 ?
BBRHCJB 017468144 @
BBRHPJB 040687588 X
BBRHCJW 002541373 K
BBRHPJW 005984751 &
BBRHCJR 001100095 =
BBRHPJR 002776738 "
PTEC HPJW %
DEMAIN ---- "
IINST 009
IMAX 057 K
PAPP 01860 0
HHPHC Y D
MOTDETAT 000000 B
ADCO 031328250173 :
OPTARIF BBR( S
ISOUSC 45 ?
BBRHCJB 017468144 @
BBRHPJB 040687588 X
BBRHCJW 002541373 K
BBRHPJW 005984752 '
BBRHCJR 001100095 =
BBRHPJR 002776738 "
PTEC HPJW %
DEMAIN ---- "
IINST 009
IMAX 057
Terminating...
Skipping tty reset...
Thanks for using picocom

Mon abonnement EDF étant Tempo, j’ai 6 index de consommation correspondant au 3 couleurs et heure pleine, heure creuse. Ce sont les lignes qui commence par ‘BBR’ qui sont capturés par l’expression régulière en gras dans le script python. Il vous faudra l’adapter à votre abonnement.

Remplacer votre script teleinfo-enedis.py par ce qui suit:

#!/usr/bin/python3
# -------------------------------------
# Modif du 26 oct 2019
# ajout du relevé des index du compteur
# -------------------------------------

import time
import serial
import paho.mqtt.client as mqtt
import re

ser = serial.Serial(
        port='/dev/ttyUSB0',
        baudrate=1200,                  # 1200 bauds
        bytesize = serial.SEVENBITS,    # 7bits
        parity = serial.PARITY_EVEN,    # parité paire
        stopbits = serial.STOPBITS_ONE, # un bit de stop
        xonxoff = False,                # pas de contrôle de flux
        timeout = 1
        )
def on_disconnect(mqtc, obj, rc):
    print("reconnecte")
    mqttc.reconnect()

print("Lancement téléinfo")
#creation du client MQTT
mqttc = mqtt.Client(client_id="teleinfo")
#connexion au relai
mqttc.connect("mqtt-relai.dync.fr", 1883, 60)
#pour traiter les éventuels évènements
mqttc.loop_start()

#une expression reguliere pour choper l'index de compteur
# '?P<id> permet de récupérer le nom de l'index
# exemple : HPJW pour heure plein jour blanc (White)
exp_index = re.compile(r"BBR(?P<id>.*)")


#boucle infinie
while 1:
    #lecture d'une ligne de données
    x = ser.readline()
    #on transforme en chaine et un peu de nettoyage
    x = x.decode('utf-8').rstrip()
    #on sépare les champs"
    c=x.split(' ')
    #puis on sélectionne ceux qui nous intesse
    if c[0] == "PTEC":
        mqttc.publish("teleinfo/couleurJour",c[1])
    if c[0] == "DEMAIN":
        mqttc.publish("teleinfo/couleurDemain",c[1])
    if c[0] == "PAPP":
        #autant changer le type de données maintenant.
        mqttc.publish("teleinfo/puissance",int(c[1]))
    if exp_index.match(c[0]):
        # on recupere un index
        print (c[0][3:])
        mqttc.publish("teleinfo/index/"+c[0][3:],int(c[1]))

Relancer le service par

sudo systemctl restart teleinfo

Sur le relai mqtt, vous devriez voir défiler les nouvelles valeurs

marc@mqtt-relai:~$ mosquitto_sub -h localhost -t "#" -v
teleinfo/index/HCJB 17474431
teleinfo/index/HPJB 40710899
teleinfo/index/HCJW 2556072
teleinfo/index/HPJW 6036490
teleinfo/index/HCJR 1112803
teleinfo/index/HPJR 2820449
teleinfo/couleurJour HPJW
teleinfo/couleurDemain ----
teleinfo/puissance 810
teleinfo/index/HCJB 17474431
teleinfo/index/HPJB 40710899
teleinfo/index/HCJW 2556072
teleinfo/index/HPJW 6036491
teleinfo/index/HCJR 1112803
teleinfo/index/HPJR 2820449
teleinfo/couleurJour HPJW
teleinfo/couleurDemain ----
teleinfo/puissance 800
teleinfo/index/HCJB 17474431
teleinfo/index/HPJB 40710899
teleinfo/index/HCJW 2556072

Sur Home Assistant

Pour chaque index, dans /usr/share/hassio/homeassistant/mqtt.yaml nous ajoutons

  • Name : son nom
  • state_topic: le ‘topic mqtt’
  • device_class: energy pour spécifier que cela concerne l’énergie
  • state_class: total pour spécifier qu’il s’agit d’un index (contrairement à une valeur instantanée)
  • unit_of_measurement: Wh l’index est en Watt heure.

Ce qui nous donne pour notre mqtt.yaml (indentation importante)

sensor:
  - name: "teleinfo.couleurJour"
    state_topic: "teleinfo/couleurJour"
  - name: "teleinfo.couleurDemain"
    state_topic: "teleinfo/couleurDemain"
    device_class: power
  - name: "teleinfo.puissance"
    state_topic: "teleinfo/puissance"
    unit_of_measurement: "VA"
    device_class: power
  - name: "HPJB"
    state_topic: "teleinfo/index/HPJB"
    device_class: energy
    state_class: total
    unit_of_measurement: Wh
  - name: "HCJB"
    state_topic: "teleinfo/index/HCJB"
    device_class: energy
    state_class: total
    unit_of_measurement: Wh
  - name: "HPJW"
    state_topic: "teleinfo/index/HPJW"
    device_class: energy
    state_class: total
    unit_of_measurement: Wh
  - name: "HCJW"
    state_topic: "teleinfo/index/HCJW"
    device_class: energy
    state_class: total
    unit_of_measurement: Wh
  - name: "HPJR"
    state_topic: "teleinfo/index/HPJR"
    device_class: energy
    state_class: total
    unit_of_measurement: Wh
  - name: "HCJR"
    state_topic: "teleinfo/index/HCJR"
    device_class: energy
    state_class: total
    unit_of_measurement: Wh

Prenons en compte cette nouvelle configuration, en cliquant sur ‘outils de développement’, puis Vérifier la configuration, Redémarrer et confirmer.

Prise en compte de la configuration(copie d'écran)

Clic sur paramètres, puis tableaux de bord.

copie d'écran vers tableaux de bord


Clic sur Énergie

Clic sur Ajouter la consommation, sélectionner un index, clic sur ‘Utiliser un prix statique’ et renseigner le prix au kWh, et enfin enregistrer.

Copie d'écran ajouter une consommation

Recommencez pour tous les index, une fois cela fait clic sur Énergie

Au bout de 2h, le graphe en barre, devrait commencer à se peupler.

2 réponses sur “Suivre sa consommation d’électricité avec Home Assistant”

  1. Merci pour le tutoriel, si l’on se trompe sur le prix du kWh, le calcul est faux et c’est normal. Si on corrige le prix du kWh, le calcul est toujours faux. Peut on faire recalculer homeassistant ou corriger dans la base de données ?

    1. A partir de l’interface, on ne peut que mettre à jour les tarifs. J’aurai tendance à penser que leurs changements ne devraient pas être rétro actifs, afin de tenir compte des évolutions (trop souvent à la hausse). Un re-calcul devrait se faire sur une période. Quant à accéder directement à la base, théoriquement, rien ne l’empêche. Aucune idée si sa structure / son schéma sont documentés.

Répondre à Maurice Annuler la réponse

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