Mieux que Linky avec Home Assistant – 2023

Sans Linky, il est possible de relever sa consommation d’électricité. Les compteurs d’électricité électroniques délivre sur une interface série quelques informations utiles que nous allons collecter via un adaptateur µTeleinfo.

Disposant d’un abonnement EDF Tempo, il m’est important de savoir quand nous sommes un jour rouge au tarif 4 fois plus cher. Nous allons récupérer cette information et la présenter sur Home Assistant. Nous présenterons aussi la puissance consommée, parce qu’on peut le faire.

Cet article est une ré-édition de celui de 2019 et s’appuie sur l’article précédent

µTeleinfo

µTeleinfo est un dongle qui se raccorde au compteur et présente un connecteur USB. Son optocoupleur évite tout risque de faire cramer votre PC. Les plans sont disponibles, j’ai préférer l’acheter tout fait. Livré en une semaine, je l’ai brancher et en quelques secondes, avec picocom, j’ai vu défiler sur mon écran les informations de mon compteur. L’explication détaillée de ce qui s’affiche est . Je vais donc m’intéresser aux valeurs de PTEC (le tarif en cours), DEMAIN (la couleur du lendemain) et PAPP (la puissance apparente).

Le présent article a été rédigé avec la v2 de ce dongle. Sur la v3, l’auteur indique que le port USB change de nom devient /dev/ttyACM0 au lieu de /dev/ttyUSB0. Il faudra probablement adapter le script.

port série compteur EDF

Sur un Raspberry PI

Un Raspberry PI, à proximité de mon compteur, via un script Python va relayer vers mon relai MQTT les informations qui m’intéressent. En plus du package python3, il nous donc faut les packages python3-serial et python3-paho-mqtt.

Un utilisateur dédié

Comme, j’aime bien séparer les droits d’accès, nous allons créer un utilisateur dédié. De plus, je note que pour accéder au port série, il faut être membre du groupe ‘dialout’, nous ajoutons donc ce nouvel utilisateur à ce groupe.

pi@c:~ $ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 août  20 21:26 /dev/ttyUSB0
pi@c:~ $ sudo adduser teleinfo
Ajout de l'utilisateur « teleinfo » …
Ajout du nouveau groupe « teleinfo » (1002) …
Ajout du nouvel utilisateur « teleinfo » (1002) avec le groupe « teleinfo » …
Création du répertoire personnel « /home/teleinfo »…
Copie des fichiers depuis « /etc/skel »…
Nouveau mot de passe :
Retapez le nouveau mot de passe :
passwd: password updated successfully
Changing the user information for teleinfo2
Enter the new value, or press ENTER for the default
        Full Name []: Teleinfo
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Cette information est-elle correcte ? [O/n]O
pi@c:~ $ sudo usermod -G dialout teleinfo
pi@c:~ $

Un script pour pousser les données

Nous coupons la session en cours, pour nous reconnecter sous l’identité de ce nouvel utilisateur. Avec notre éditeur préféré, nous créons un joli script /home/teleinfo/teleinfo-enedis.py

#!/usr/bin/python3
import time
import serial
import paho.mqtt.client as mqtt
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.home", 1883, 60)
# pour traiter les éventuels évènements
mqttc.loop_start()
boucle infinié
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]))

Là, nous le transformons en exécutable avec un chmod +x et le lançons. Puis, nous regardons si cela fonctionne sur le relai MQTT.

marc@mqtt-relai:~$ mosquitto_sub -h localhost -t "#" -v
teleinfo/couleurJour HPJB
teleinfo/couleurDemain ----
teleinfo/puissance 780
teleinfo/couleurJour HPJB
teleinfo/couleurDemain ----
teleinfo/puissance 780
teleinfo/couleurJour HPJB
teleinfo/couleurDemain ----
teleinfo/puissance 780

\o/, youpi, cela fonctionne… dans un terminal.

Lançons-le au boot

Inspirons-nous d’un tutoriel. Dans /etc/systemd/system créons un fichier sous root dénommé teleinfo.service et contenant :

[Unit]
Description=Teleinfo compteur Enedis
After= multi-user.target
[Service]
ExecStart=/home/teleinfo/teleinfo-enedis.py
StandardOutput=inherit
StandardError=inherit
User=teleinfo
Group=dialout
[Install]
WantedBy=graphical.target

Toujours sous root, on lance le service et on l’inscrit pour un démarrage au boot.

teleinfo@c:~$ sudo systemctl start teleinfo.service
teleinfo@c:~$ sudo systemctl enable teleinfo.service

Il est conseillé de rebooter pour vérifier que le service démarre bien.

Pour la collecte des données, c’est terminé. Regardons la présentation de celle-ci côté Home Assistant

Home Assistant

Les capteurs dans la configuration.

Dans notre fichier de configuration mqtt.yaml, ajoutons les trois valeurs collectées.

marc@hass2:~$ cd /usr/share/hassio/homeassistant/
marc@hass2:/usr/share/hassio/homeassistant$ sudo vi mqtt.yaml

Le fichier mqtt.yaml ressemble à (l’indentation est 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

Redémarrez Home Assistant

Allez dans ‘outils de développement’, Vérifier la configuration, si tout est vert, clic sur ‘redémarrer’, puis valider la confirmation.

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

Ajout de la jauge

Pour la puissance apparente, une jauge convient parfaitement. Entrez en édition de l’interface et clic ‘ajouter une carte’. Puis clic sur ‘Par entité’, sélectionnez ‘teleinfo.puissance’, puis continuer.

Ajouter une carte (copie d'écran)

Choisissez une autre carte. Dans l’écran suivant clic sur la tuile Jauge.

Choisissez une autre carte (copie d'écran)

Configurez la jauge à votre gout. La valeur max à 9000 correspond à mon abonnement 9kW/45A.

configuration de la Jauge (Copie d'écran)

Après avoir cliqué sur ‘Enregistrer’, la jauge apparaît sur le tableau de bord.

Un « horizontal stack » / Pile horizontale

En lisant la doc de l’interface graphique de Home Assistant, nous constatons que la carte ‘picture’ permet de changer l’image de fond en fonction de la valeur d’une sonde. Pile ce qu’il nous faut, nous n’afficherons que des images aux couleurs des tarifs et supprimerons les autres paramètres. Avec Gimp j’ai crée une dizaine d’images de 200×200 correspondant aux différents états et les ai stockées dans /usr/share/hassio/homeassistant/www/icons (ces répertoires n’existent pas par défaut il faut les créer). Dans le paramétrage de l’image, le répertoire ‘www’ correspond à /local. Home Assistant doit être redémarrer pour que les images soit prises en compte.

Nous devons afficher le tarif en cours (bleu, blanc, rouge + HP/HC) et la couleur du lendemain. Nous assemblons les deux images dans un ‘horizontal stack’ pour les mettre côte à côte. Éditons l’interface et ajoutons une ‘pile horizontale’, puis clic sur éditeur de code et copions ce qui suit :

cards:
  - entity: sensor.teleinfo_couleurjour
    show_name: false
    show_state: false
    state_image:
      HCJB: /local/icons/bleuc.png
      HCJR: /local/icons/rougec.png
      HCJW: /local/icons/blancc.png
      HPJB: /local/icons/bleup.png
      HPJR: /local/icons/rougep.png
      HPJW: /local/icons/blancp.png
    type: picture-entity
  - entity: sensor.teleinfo_couleurdemain
    show_name: false
    show_state: false
    state_image:
      '----': /local/icons/inconnu.png
      BLAN: /local/icons/blanc.png
      BLEU: /local/icons/bleu.png
      ROUG: /local/icons/rouge.png
    type: picture-entity
type: horizontal-stack

Puis clic sur enregistrer

Vous devriez obtenir quelque chose qui ressemble à ceci

Copie écran résultat avec deux cartes, l'une affichant la puissance courante, l'autre la couleur du jour et celle prévue demain.

Suite au prochain épisode pour l’intégration du module énergie.

2 réponses sur “Mieux que Linky avec Home Assistant – 2023”

  1. Bonjour Marc,

    Je viens d’acheter sur les conseils d’un ami le boitier teleinfo USB de chez GCE electronic pour voir sur mon pc les données de mon compteur blanc edf.

    https://www.gce-electronics.com/fr/carte-electronique-oem-relais-usb/655-module-teleinfo-usb.html

    N’étant pas spécialiste en informatique je pensais que ce serait simple de récuperer sur un PC en win XP2 les données avec un petit logiciel, mais je ne trouve ni le driver du GCE ni d’un petit logiciel pour visualiser les data du compteur blanc EDF ?

    Est ce que les drivers proposés ici seraient compatibles ?
    https://www.domotique-store.fr/domotique/modules-domotiques/detecteurs-capteurs-mesure/mesure-consommation-energetique/672-module-teleinfo-usb-cartelectronic-usbticlc-win.html?search_query=modem+teleinfo+usb&results=68

    Voilà Marc, je ne sais pas si vous avez la possibilité de m’aider à la mise en route de mon boitier ?
    En vous remerciant bien par avance pour votre éventuel retour,
    Bien à vous
    Denis

    1. Je n’ai pas approché un windows XP depuis plus de 10ans. Il probable qu’une fois le module inséré, il se présente comme un port COM/série. De mémoire, il existait un programme terminal qui pouvait se brancher sur un port COM (Putty sait aussi le faire). Il faut le configuré avec les paramètres fournis : Vitesse de communication 1200/9600 Bauds, 7 bits, parité paire, 1 stop. Difficile de donner des conseils sur un module que je connais pas et un OS que je n’ai pas utilisé depuis plus 10ans.

Laisser un commentaire

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