Je vous propose de découvrir dans cet article comment j’ai réussi à lire et à exploiter les données fournis par mon compteur communiquant Linky. Le petit programme Python nécessaire associé à cet article est Open Source et disponible sur Github (https://github.com/SebastienReuiller/teleinfo-linky-with-raspberry).
Attention: il n’est pas question ici d’ouvrir le boîtier Linky en faisant sauter le plomb, nous utiliserons l’USB en façade du compteur Linky.
1) Reliez le câble blanc aux GPIO 10 du Raspberry
2) Reliez le câble noir aux GPIO 6 du Raspberry
3) Reliez l’USB mâle à la prise USB de la façade du compteur Linky
Pour que le Raspberry soit réceptif, il faut qu’il puisse communiquer en série afin de lire les données transmises par le compteur Linky.
Pour cela, faites un rasp-config
et procédez à l’activation du serial (P6)
mais sans shell (Rubrique 5. Interfacing Options
). Profitez-en ici pour activer le SSH
si ce n’est pas déjà fait, ce n’est pas obligatoire mais bien plus simple pour la suite des opérations. Pensez à redémarrer le Raspberry avant de poursuivre.
Pour tester le montage, vous pouvez installer screen
et lire ce que vous recevez sur le port série:
sudo apt update
sudo apt install screen
sudo screen /dev/ttyS0 1200,cs7
Vous devriez avoir ce genre de sortie :
OPTARIF HC.. <
ISOUSC 45 ?
HCHC 040177099 \
HCHP 035972694 (
PTEC HC.. S
IINST 014 \
IMAX 020 A
PAPP 03400 (
HHPHC A ,
MOTDETAT 000000 B
ABCO 123456789123 G
Il a parlé!! Voici donc le genre de données que le compteur Linky nous crache en continu. Le script Python vous permettra d’interpréter ces informations et de les envoyer dans une base de donnée InfluxDB mais pour votre information, voici à quoi elles correspondent :
'OPTARIF': 'HC..', # option tarifaire
'IMAX': '007', # intensité max
'HCHC': '040177099', # index heure creuse en Wh
'IINST': '005', # Intensité instantanée en A
'PAPP': '01289', # puissance Apparente, en VA
'MOTDETAT': '000000', # Mot d'état du compteur
'HHPHC': 'A', # Horaire Heures Pleines Heures Creuses
'ISOUSC': '45', # Intensité souscrite en A
'ADCO': '000000000000', # Adresse du compteur
'HCHP': '035972694', # index heure pleine en Wh
'PTEC': 'HP..' # Période tarifaire en cours
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt update
sudo apt install influxdb
sudo systemctl enable influxdb.service
curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray | sudo apt-key add -
echo "deb https://dl.bintray.com/fg2it/deb stretch main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install grafana
sudo systemctl enable grafana-server.service
sudo apt install python3-pip
sudo pip3 install pySerial influxdb
wget https://raw.githubusercontent.com/SebastienReuiller/teleinfo-linky-with-raspberry/master/teleinfo.py
python3 teleinfo.py
Évidement, il vous faudra démoniser ce script pour que ça tourne en continu.
Après quelques minutes, vous devriez avoir votre influxdb qui se remplit, pour en avoir le cœur net :
pi@raspberrypi:~ $ influx
Connected to http://localhost:8086 version 1.7.9
InfluxDB shell version: 1.7.9
> show DATABASES;
name: databases
name
----
teleinfo
_internal
> USE teleinfo
Using database teleinfo
> SHOW SERIES;
key
---
HCHC,host=raspberry,region=linky
HCHP,host=raspberry,region=linky
HHPHC,host=raspberry,region=linky
IINST,host=raspberry,region=linky
IMAX,host=raspberry,region=linky
ISOUSC,host=raspberry,region=linky
MOTDETAT,host=raspberry,region=linky
OPTARIF,host=raspberry,region=linky
PAPP,host=raspberry,region=linky
PTEC,host=raspberry,region=linky
C’est le moment d’afficher tout ça dans de beaux graphes.
Pour cela, connectez-vous à l’interface de Grafana disponible sur le port 3000 avec le login admin
et le mot de passe admin
.
Il ne vous restera plus qu’à ajouter une datasource
InfluxDB avec une base de données « teleinfo » et d’importer le dashboard
présent sur le dépôt Github.
7 Comments
Bonjour ,
Peux tu confirmer que tu as en façade une prise uSb femelle sur le compteur ?
Si oui , quel est le type de compteur ?
Car sur un Sagecom pas de prise usb.
Mci
Bonjour, effectivement, certains compteurs n’ont apparemment pas d’USB en façade. Il semblerait cependant qu’il y ait un bornier qui permette d’accéder au téléinfo de la même manière mais je n’ai pas eu l’occasion de tester. Si vous le pouvez, merci de nous votre retour d’expérience.
Voici une note pour tous ceux qui essaieront. A la dernière étape, vous devez importer le dashboard json. Il faut pas simplement créer un tableau de bord et ensuite coller le json. Vous devez…
Cliquez sur le + (à gauche de la page d’accueil de Grafana), puis cliquez sur Importer.
Et un grand merci à Sébastien pour ce grand projet.
Merci pour votre contribution!
Bonjour, j’ai suivi et déroulé votre procédure mais j’ai le message d’erreur suivant lors de l’exécution du script python ?
FileNotFoundError: [Errno 2] No such file or directory: ‘/var/log/teleinfo/releve.log’
Merci pour ce super tuto 🙂
sur mon raspberry pi 2 avec rasbian buster, j’ai du faire une petite adaptation pour que le support du port série soit correctement pris en compte :
1) dans /boot/cmdline.txt :
supprimer console=serial0,115200 et ajouter enable_uart=1
Ce qui donne :
console=tty1 root=PARTUUID=738a4d67-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait enable_uart=1
Penser à rebooter après la modif.
2) le tty ne s’appelle pas /dev/ttyS0 mais /dev/ttyAMA0
j’ai donc du modifier ton script python pour remplacer ttyS0 par ttyAMA0
Sinon, nickel tout fonctionne.
Merci encore!
Bonjour,
Je n’ai effectivement pas de port usb en facade mais sous le cache un connecteur pour a priori connecter de quoi récupérer la téléinformation. Toutefois, j’ai vu par ailleurs qu’il y avait plusieurs modes (historique et standard) et qu’il fallait mettre en amont du rpi un petit montage a base d’optocoupleur. (qui change en fonction du format) (https://blog.bigd.fr/suivre-sa-consommation-electrique-edf/)
rien besoin de tout ca avec le port usb ?
merci