Mieux que Linky sans Linky. 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.
µ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).
L’intégration est disponible ici
Il suffit de déposer le dossier dans custom_components de son installation, redémarrer Home Assistant et ajouter l’intégration Télé-information.
Il existe 2 modes :
J’ai branché mon microteleinfo v3 sur mon linky et l’usb sur mon RPi3 ca clignote bleu et rouge.
J’ai déposé le dossier « teleinformation » dans le dossier « custom_components » puis redémarrer le RPi et homeassitant.
En voulant ajouté l’intégration « Télé-information » en mode local (car je suis en USB direct sur le RPi), je saisi le port USB de la microtelev3 : /dev/ttyACM0
j’obtiens l’erreur suivante: « Connection réussie au port série, mais impossible de décoder les trames. Vérifiez que vous tentez de vous connecter à un service Téléinformation. »
il faudrait dans un 1er temps vérifier en manuel (sans HA) et regarder ce que sort le port /dev/ttyACM0
il y a tout un tas d’outils pour cela y compris au plus simple avec la commande de picocom si tenté que le port soit bien le ACM0
Tester le module
# picocom -b 9600 -d 7 -p e -f n /dev/tty/ACM0
Exemple parfait : https://haade.fr/fr/blog/domotise-linky-µteleinfo-homeassistant-20-5minutes
Il y a de nombreuses façons de récupérer la téléinfo du compteur Edf, l’un des derniers modules en date est le Lixee mais il a le désavantage de n’être compatible qu’avec certains compteurs. Je vais te montrer comment faire remonter la téléinfo dans home assistant pour 20€ sans modules wifi esp32/8266, avec un micro module usb fabriqué par Charles Hallard le dernier en date est le micro téléinfo v3.0, nommé aussi µtéléinfo.
Parlons un peu de l’installation: ce tuto permet de faire remonter les infos par l’intermédiaire du service mqtt. Il te faudra installer le module complémentaire officiel mosquitto, ensuite je vais te montrer comment installer le module complémentaire téléinfo2mqtt développé par fmartinou celui-ci est fonctionnel avec tous les TIC usb du marché donc avec le micro téléinfo V3 de Charles Hallard.
1 Installe le module complémentaire MQTT, Mosquitto
paramètres > Modules complémentaires > Boutiques des modules complémentaires ou clic sur le lien ci-dessous
Homeassistant supervisor addons
2 Ensuite crée un compte utilisateur dans home assistant pour mosquitto, en général je met en nom d’utilisateurs mqtt plus facile à reconnaitre 😏
Homeassistant users
3 Retourne dans la configuration mosquitto
Homeassistant supervisor addons
et rajoute ces lignes dans l’onglet logins comme sur la capture d’image ci-dessous.

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.
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.
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:~ $
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
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
Edit du 11/09/2018 : En recopiant le tuto, j’avais mis after=network.target. À ce moment du boot, l’interface réseau est « up », mais n’a pas encore d’adresse IP. Du coup, le démarrage du service était aléatoire.
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
Dans notre fichier de configuration global ou de « sensors » (si nous avons un fichier séparé), ajoutons les trois valeurs collectées
- platform: mqtt
name: "teleinfo.couleurJour"
state_topic: "teleinfo/couleurJour"
- platform: mqtt
name: "teleinfo.couleurDemain"
state_topic: "teleinfo/couleurDemain"
device_class: power
- platform: mqtt
name: "teleinfo.puissance"
state_topic: "teleinfo/puissance"
unit_of_measurement: "VA"
device_class: power
Pour la puissance apparente, une jauge convient parfaitement. Entrons en édition de l’interface, ajoutons une carte « gauge ». J’ai mis 9000 comme valeur maximale, cela correspond à mon abonnement 9kW/45A. Pour ajouter de la couleur activons « define severity » et saisissons des valeurs intermédiaires.

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.
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 un ‘horizontal-stack’ comme suit :

Au final nous avons ceci :

On peut aussi ajouter une automatisation envoyant sur une messagerie, une notification lorsque la couleur du lendemain passe au rouge.