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 là. 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.
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.
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.
Choisissez une autre carte. Dans l’écran suivant clic sur la tuile Jauge.
Configurez la jauge à votre gout. La valeur max à 9000 correspond à mon abonnement 9kW/45A.
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
Suite au prochain épisode pour l’intégration du module énergie.
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
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.