Affichage Linky en temps réel
Nouvelle Version V1.10
Sur Smartphone, PC, Home Assistant ou Domoticz (DIY)
Le compteur Linky, installé dans les foyers français, est équipé d’une sortie d’informations numériques, couramment appelée TIC (Télé-Information Client). Celle-ci donne au client la possibilité de se renseigner en temps réel sur sa consommation électrique.
Nous allons lire ces informations et les envoyer à la demande vers un smartphone ou un système de domotique comme Home Assistant ou Domoticz.
Le projet technique est simple à réaliser avec très peu de composants.
Branchement à la TIC
Il faut retirer le boitier jaune et la prise TIC se trouve dans la partie inférieure droite. 3 sorties la composent : A pour alimentation que nous n’utiliserons pas et I1 et I2 qui fournissent une sortie série asynchrone.
Le Linky à 2 modes de fonctionnement :
– historique : liaison à 1200 bauds, équivalent à d’anciens compteurs qui fait l’objet de cet article
– standard : 9600 bauds, plus riche en informations qui est décrit sous forme plus complète de routeur ici. Dans sa version minimum avec le même harware qu’ici, il fournit toutes les informations en temps réel.
Le mode de votre Linky s’affiche sur l’écran. Le passage d’un mode à l’autre se fait par demande auprès du service client de votre fournisseur d’électricité et non pas Enedis. C’est gratuit.
Le Linky fourni un signal sinusoidal à 50kHz pour transmettre un zéro, et pas de signal pour un 1 (courbe bleu).
Un coupleur optique LTV-814 permet de s’isoler électriquement du Linky et démoduler le signal en une suite de 0 et 1 envoyée sur l’entrée GPIO 26 (courbe verte) d’un micro-contrôleur ESP-32. Le format de la liaison série est :
– 7 bits de données
– parité paire
– 1 stop bit
Un logiciel de serveur Web permet de transmettre par Wifi sur le réseau de la maison les données, lisibles sur une page Web depuis un Smartphone ou un PC.
Schéma de câblage
Au niveau du Linky connectez 2 fils sur les broches I1, I2. Fils assez gros pour rester coincé. Si vous avez une longueur de plusieurs mètres ver l’ESP32, utilisé du fil torsadé de téléphone ou mieux du fil de réseau informatique torsadé et blindé.
En entrée du système, une résistance de 1.5kΩ permet de respecter la charge recommandée par ENEDIS > 1kΩ et le courant nécessaire au coupleur optique pour bien démoduler en 0 le signal à 50kHz. Dans certains cas le fonctionnement est meilleur acec une résistance de 1200Ω. Cela fournit un bon signal en sortie du coupleur vers l’ESP32 dont une résistance de 10kΩ rappel le signal au +3.3V quand le coupleur ne conduit plus. Sur internet, vous trouverez d’autres schémas avec un transistor MosFet en sortie du coupleur. Je n’en ai pas eu besoin. Ce schéma d’entrée simple fonctionne pour une liaison à 1200 bauds ou 9600 bauds.
Une LED et une résistance en série branchées sur le GPIO19 clignote à chaque arrivée de trame du Linky. Cela fourni un contrôle visuel de bon fonctionnement.
Le nombre de composants est réduit au minimum :
- ESP32, 2*19 broches (<10€ chez Aliexpress en chine)
- R1 : 470Ω à 1kΩ, 1/4W ou 1/8W
- D1 : LED de la couleur de votre choix
- R2 : 10 kΩ, 1/4W ou 1/8W
- R3 : 1.5kΩ, 1/4W ou 1/8W
- Coupleur optique LTV-814 (1€ les 10 chez Aliexpress)
- Alimentation (type pour smartphone) 230V 5VDC 0.5A ou 1A sortie USB
Format des données en mode Historique
Pour chaque donnée envoyée par le Linky, il y a un formatage facile à comprendre et décoder. Il y a un nom, la valeur, et un check-somme. La séquence démarre par le caractère ‘STX’ et termine par ‘ETX’. Le document ENEDIS décrit parfaitement les messages.
Tout n’est pas intéressant, comme ADCO, l’adresse du compteur. On s’intéresse principalement à:
– HCHC : la consommation heure en Wh
– HCHP : la consommation heure pleine en Wh
– IINST : le courant efficace instantané en A
– PAPP : la puissance apparente en VA
On note que les valeurs sont des entiers et la puissance apparente PAPP est un multiple de 10. De plus, on n’a pas la puissance active instantanée en W. En prenant la variation de consommation sur 5 min, on peut calculer la moyenne de la puissance active sur la période.
En faisant tourner les différents messages sur l’afficheur du Linky, il est possible de vérifier que ce dernier envoi sur la prise TIC les données au format Historique. Le mode standard n’est pas traité ici. Pour changer de mode, il faut le demander au service client de votre fournisseur d’électricité et non ENEDIS.
Code Source du mode Historique
L’ensemble du code est écrit en utilisant l’IDE Arduino. Il est injecté dans un premier temps par la liaison série, puis une fois en place, on peut le modifier si besoin par le WIFI comme décrit ici.
Dezipper l’ensemble et ouvrez dans l’IDE Arduino (version 2.xx) le fichier Lecture_Linky_Historique_v1.10.ino
Vérifiez que vous avez les bibliothèques installées sur votre IDE Arduino :
– RemoteDebug
– PubSubClient
La version V1.1 s’adapte aux contrats de « Base » ou « Heures creuses ou pleines »
La programmation de la carte se fait à l’aide de l’outil de développement IDE d’Arduino. Il faut dans les préférences faire appel au gestionnaire de carte de « Espressif » qui développe l’ESP32. Allez dans Fichier / Préférences et mettez l’adresse : https://dl.espressif.com/dl/package_esp32_index.json
Pour la compilation du fichier Lecture_Linky_Historique_v1.10.ino, veuillez sélectionner la carte ESP32 Dev Module.
Attention, si vous n’arrivez pas à communiquer entre votre PC et l’ESP32, c’est qu’il vous manque le driver pour l’interface USB. En général, c’est le CP2102 qui se trouve sur la carte ESP32. De nombreux Tutos sur internet expliquent comment l’installer. Exemple: https://techexplorations.com/guides/esp32/begin/cp21xxx/
Paramétrage du WIFI
Dans le code source, vers la ligne 30, rentrez le nom du réseau (SSID) ainsi que le mot de passe :
const char* ssid = "NomDuWifi"; // Nom du Wifi (SSID)
const char* password = "MotDePsse"; // WIFI password - Mot de passe
Si vous choisissez une adresse IP automatique, mettez IPfixe à false. Dans le cas contraire, remplissez les champs comme ci-dessous :
const bool IPfixe = true;
IPAddress local_IP(192, 168, 0, 245); //IP à donner à cet ESP
IPAddress gateway(192, 168, 0, 254); //passerelle, adresse IP de la box réseau
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8); //optional
IPAddress secondaryDNS(8, 8, 4, 4); //optional
Paramétrage Domoticz
Si vous souhaitez envoyer à un système domotique comme Domoticz, le bilan de puissance Heure Pleine et Heure Creuse, remplissez les champs suivant autour de la ligne 45 du programme :
// -- A renseigner si - Client of Domoticz --
const bool Domoticz_On = true; //A mettre true ou false si on souhaite du reporting vers Domoticz
const char* host = "192.168.0.99";
const int httpPort = 8080;
const int idxPowerHP = 1015; //Numéro Dispositif Domoticz
const int idxPowerHC = 1016;
Paramétrage Home Assistant – MQTT
Si vous souhaitez envoyer à un système domotique comme Homme Assistant via le broker MQTT, le bilan de puissance Heure Pleine et Heure Creuse, remplissez les champs suivant autour de la ligne 45 du programme :
// ** A renseigner si - Client of Homeassistant - MQTT **
const bool MQTT_On = true; //A mettre true ou false si on souhaite du reporting vers Homeassistant ou autre via Broker MQTT
const char* mqtt_server = "192.168.0.98"; //Adresse IP du Broker Mqtt
const int mqttPort = 1883; //port utilisé par le Broker
const char* Mqtt_user = "UtilisateurMQTT"; //Utilisateur MQTT
const char* Mqtt_password = "MotDePasseMQTT"; //Mot de passe MQTT
Les messages envoyés sont au nombre de 4. Voir autour de la ligne 415 du programme.
mqtt_publish("linky/pva", Papp); //Topic puissance apparente pour MQTT
mqtt_publish("linky/ieff", Iinst); //Topic courant instantané pour MQTT
mqtt_publish("linky/pwhp", PWHP); //Topic puissance active Heure Pleine pour MQTT
mqtt_publish("linky/pwhc", PWHC); //Topic puissance active Heure Creuse pour MQTT
Bugs Soft
REMOTEDEBUG
Sur certaines configurations, lors de la compilation, il y a une erreur de librairie inexistante :…..include <hwcrypto/sha.h>
Avec un éditeur de texte, ouvrez le fichier dans vos bibliothèques Arduino C:/Users/Utilisateur/Documents/Arduino/libraries/RemoteDebug/src/utility/Websockets.cpp
Le début de l’adresse peut changer suivant l’utilisateur. Retrouvez le dossier Arduino pour localiser le fichier dans les sous-dossiers.
A la ligne 42, remplacez :
#include <hwcrypto/sha.h>
par
#include <esp32/sha.h>
Ne me demandez pas pourquoi, sur mon PC de bureau, je n’ai pas besoin de faire cette modification, sur mon PC portable, j’ai besoin.
Version carte ESP32
Depuis une mise à jour récente de la librairie de carte ESP32, il y a un bug à la compilation « WiFiClient’ does not name a type) ….. »
En attendant que ce problème de bibliothèque se résolve, Dans l’IDE Arduino allez dans « Outils –> Carte ESP32 Dev Module –> Gestionnaire de carte
Sélectionnez l’ancienne version V2.0.17 et non la version 3.00
Bonjour,
Merci, c’est toujours un régal de venir sur votre site. Tellement de choses à apprendre.
J’ai une question, cette méthode de lecture des données du compteur linky peut remplacer la méthode de lecture de la puissance entrante ou sortante au niveau du compteur pour la réalisation du router solaire
Le Linky en mode historique, ne donne pas la puissance sortante. Par contre en mode standard, il donne la valeur soutirée et la valeur injectée. La version du programme en mode standard est actuellement en test chez moi, je la publierai prochainement.
Cdlt
Bonjour André,
suis toujours impressionné par vos réalisations Bravo.
mais comment faire cohabiter ma clef ConsoLive (Atome) de Total Énergie et une autre connexion sur ma Prise TIC??
On peut faire cohabiter 2 capteurs. Éventuellement augmenter un peu la R3 de 1500 ohm.
Cdlt
Bonjour André, je possède un ESP 32 avec seulement 15 brôches de chaque côté peut-il faire l’affaire ou me faut-il un ESP 32 de 19 brôches de chaque côté merci pour votre avis à bientôt
Oui, il peut faire l’affaire. Suivant les fabricants de cartes, on a pas toujours les mêmes pins.
On peut même faire ca avec un ESP-01 … qui est gros comme un timbre poste !
Bonjour,
Projet intéressant…
J’´ai une particularité, on est en 60 Hz au lieu de 50…
Faut-il changer qqchose?
Merci
Oui, il faut reprogrammer le retard à l’ouverture du Triac après le passage à zéro de la sinusoïde de tension. Avec du 50Hz, on a 100 pas de retards de 100 micro seconde pour couvir de 0 à 10ms (1/2 sinusoide). Avec du 60Hz, la demis sinusoide fait 8.333 ms. Il faut limiter à 83 pas de retard.
Cdlt
Si vous pouvez me dire ou je trouve cela dans le code. Merci…
Chercher la variable Retard (valeur entiere entre 0 et 100) dans le code et retardF (même valeur en flottant). Elle donne le retard à l’ouverture du Triac par pas de 100 micro seconde.
Cdlt
Pas trouvé ces deux variables… On parle bien dans le fichier « Lecture_Linky_Historique v1.00 »?
J’ai pas bien fait attention en lisant votre question. Dans cet article, on parle du Linky qui est un compteur utilisé en France avec du 50Hz. Dans quel pays êtes-vous pour avoir un Linky à 60Hz? Votre première question.
Cdlt
André
Je suis dans un territoire outre mer alimenté par EDF 220v mais 60 Hz
Maxime
J’ai fait des recherches sans succès sur le Linky en 60Hz. Je n’ai que la documentation d’Enedis pour la métropole qui ne parle que de 50Hz.
Dans le programme, il n’y a rien de spécifique au 50Hz. Si on suppose que les messages envoyés par votre Linky en mode historique sont les mêmes, cela devrait fonctionner.
Excusez-moi encore pour mon erreur d’interprétation de votre première question.
Cordialement
André
Et équipé en Linky, j’oubliais…
Bonjour André et encore merci pour ce partage. Mon compteur Linky étant à l’extérieur de la maison j’aurai souhaité mettre l’ESP32 à l’intérieur de mon garage. Pensez vous qu’une longueur de 10 mètres de câble torsadé/blindé (câble RJ45) en sortie de l’optocoupleur soit gênante ?
Cela passera. Chez moi, j’ai sur 7m du simple torsadé de téléphone. Un RJ45 blindé sera parfait.
Cdlt
Bonjour, bravo pour votre partage, ayant mon linky a 40 m de ma maison avec 4 départ de celui-ci bâtiment agricole, je pensais pour faire le router récupérer mon module Pit info , après avoir téléchargé dans l’esp et branché le module à l’esp et au linky, mais cela ne fonctionne pas,c’est ce moi qui est fait une erreur ou il faut votre branchement ? Je pense que je vais devoir trouver un esp avec antenne car j’ai des coupures, merci de votre avis encore félicitations.
Dans un premier temps, avez vous rentrez les infos du Wifi comme écrit sur la page?
Ensuite installé à porté de votre Wifi, vous vérifiez que vous pouvez vous connecter à l’adresse IP qui à été donné par votre box internet ou que vous avez forcé dans le programme. Vous avez la page qui s’affiche.
Puis vous allez à votre Linky et faite le branchement. Si vous n’êtes plus à porté du Wifi, il va falloir faire quelque chose.
Cdlt
Bonjour André, prévoyez vous une mise à jour pour avoir les données en mode standard ?
La version existe. Allez sur la page du routeur V3.00Linky, câblez la version mini avec le coupleur optique, l’ESP32 (câblage identique au mode historique) et une ou 2 LED . Vous aurez toutes les infos en mode standard et même des historiques.
https://f1atb.fr/index.php/fr/2023/05/18/realisez-un-routeur-solaire-avec-un-linky-diy/
Cdlt
André
bonjour,je ne suis pas du bricoleur dans ce genre de truc .est ce que vous le vendez tous pret a etre connecter
Désolé. Je n’ai pas le temps à consacrer à une fabrication en série.
Cdlt
Bonjour,
Est-il possible d’utiliser une résistance R3 de 2k Ω plutôt que 1.5k Ω ?
Merci de votre article.
Oui, je pense qu’avec une 2k ohm ce sera toujours bon.
Bonjour,
Merci pour tout ce que vous faites et partagez, c’est passionnant
Je voulais juste savoir comment traiter les données avec un pc, sans home assistant ou domitcz.
bonne journée
Je vois pas bien ce que vous voulez faire. Avec le serveur web implanté sur l’ESP vous pouvez dans un navigateur web tout visualiser. Si vous installez le programme pour le routeur V3.00_Linky, vous pouvez programmer des actions.
Bonjour,
Merci pour la rapidité de votre réponse.
Je m’excuse, j’ai mal formulé ma question mais vous avez su y répondre qd même. 🙂
En fait je voulais juste accéder aux donnée relevée par l’ESP avec mon PC, mais je n’avait pas compris comment faire, la page du routeur V3 m’a permis de comprendre pour l’accès via le navigateur web.
Encore merci pour tout.
Bonjour,
Merci pour le partage de toutes ces infos, c’est super intéréssant !
Pour ma part, j’habite dans une copro où le Linky est au milieu de la résidence. Le Wifi fonctionnera correctement à cette distance mais je ne veux pas utiliser le courant de la copro pour alimenter mon ESP32 raccordé à mon Linky. J’ai regardé pour le faire fonctionner de manière autonome avec des piles Lithium 18650, de capactié 2000 mAh. Cependant, l’ESP32 fonctionnera 24h/24 en Wifi, quelle est sa consommation en Ampère? Si c’est du 100 mA, je vais devoir recharger mes piles tous les jours… Qu’en pensez-vous?
Merci d’avance.
Sans hésiter, je ferai la version V2 actuelle du routeur avec la sonde de courant près du disjoncteur de la maison.
https://f1atb.fr/index.php/fr/2022/12/03/realisez-un-routeur-solaire-pour-gerer-la-surproduction/
Prochainement, avec le même matériel, elle passera en version V3.00_Sonde pour y inclure les fonctionnalités de la version V3.00_Linky.
Cdlt
Bonjour André. Pour visualiser les infos avec un téléphone, faut il passer par une box ou peut on directement connecter le téléphone sur l’esp32. Car en fait je n’ai pas de box… Merci beaucoup
Sans box, il faut modifier légèrement le programme pour le passer en point d’Accès Wifi. C’est ce que le programme fait au premier lancement pour récupérer le nom de wifi de la box.Après il passe en mode station (client) du Wifi de la Box.
Cdlt
André
Bonsoir André. Je n’avais pas vu que vous m’aviez répondu. Je vous en remercie. Quand vous dites « légèrement », ce serait quand même des changements en profondeur dans le programme non ? Pas simplement une ligne ou deux ? Merci beaucoup pour votre travail. Je me régale à vous suivre. C’est passionnant pour un débutant comme moi.
Oui c’est vrai, la modification ne serait pas si simple et on perdrait toutes les fonctionnalités liées à l’heure. Démarrage d’une action à telle heure etc.
Cdlt
Je m’en doutais. C’est pas grave. Un jour, quand j’aurais plus de connaissances, je m’inspirerais de votre programme pour essayer d’en faire un tout simple qui affiche juste un minimum d’information directement sur un téléphone. C’est pas demain la veille mais… Merci beaucoup en tout cas.
bonjour,
pensez vous qu’il soit possible d’utiliser cet optocoupleur sur carte pré assemblée : https://a.aliexpress.com/_EwMnXYd
merci
Si c’est pour traiter le signal du Linky, la réponse est non. L’optocoupleur dont on a besoin doit conduire dans les 2 sens pour traiter la sinusoide d’entrée. Apparemment dans celui que vous proposez, il y a un seul coupleur dans un sens de branchement.
merci pour la réponse l’idée était d’avoir du plug and play mais si ce n’est pas possible tampis 😉 je n’ai pas trouvé avec un 814 mais peut être pas assez cherché
bonjour,
J’ai fait un montage filaire:, et ça fonctionne
Bonsoir,
J’ai profité de la chaleur de l’après midi pour me lancer dans cette réalisation. C’est super, ça me remonte des informations :
Sauf les 2 derniers graphiques …
Cdlt
yannblanc
Bonsoir,
Je pense que je n’ai pas de remonté de puissance car j’ai un compteur de BASE sans « heures creuses ».
Avez vous une version pour compteur Linky de BASE sans heures creuses
Cdlt
yannblanc
Heure creuse ou pas n’influe pas. Par contre, il faut savoir si vous avez un Linky en mode historique ou en mode standard. C’est écrit sur l’affichage du Linky.
Ensuite installez la version correspondante de mon lecteur ou routeur V3.
Cordialement
Bonjour,
Merci pour le réponse, j’ai un compteur Linky en « mode Historique » mais pas de calcul de la « Puissance Heure Pleine W »
Cdlt
yannblanc
Pouvez vous m’envoyez une copie du tableau en bas d’ecran « Données brutes Linky en mode historique », que je voye le contenu brute du message du Linky.
Cdlt
ADCO 031961905203
OPTARIF BASE
ISOUSC 30
BASE 014034313
PTEC TH..
IINST 003
IMAX 090
PAPP 00700
HHPHC A
MOTDETAT 000000
Je vous adresse par mail une version 1.1 du logiciel prenant en compte le mode BASE.
Dites-moi si c’est OK afin de la publier officiellement. Je ne peux pas tester ce mode avec mon Linky.
Merci
Une nouvelle version V1.1 est disponible. Elle prend en compte les contrats « BASE » en plus des contrats « Heures pleines / Heure Creuses »
Merci André. je viens d’installer l’ESP32. cela m’a permis d’apprendre à le programmer (avec l’aide s’un super collègue). très intéressant, je suis en permanence ma production solaire et la consommation, c’est top !
La prochaine étape, c’est le routage sur le chauffe eau 🙂
Bonne journée
Erik
Bonjour,
Une fois que j’ai rentrer les mot de passe sur une page web 192.168.4.1, j’ai ce message avec le n° de mon ESP :
Basculez vers le réseau WiFi : Linky-ESP32-……..
Que faut-il faire ensuite, j’ai lu tous les descriptif mais je ne comprends pas exactement comment ouvrir la page web de lecture des données de l’ESP.
Merci pour votre Aide
Vous avez rentré, je suppose sur la page 192.168.4.1 le nom du WIFI de votre habitation et le mot de passe.
L’ESP a alors redémarré et il va chercher à se connecter au WIFI de la maison.
Votre Box internet qui gère le WIFI, va lui attribuer une adresse IP comme 192.168.x.x
Si votre ESP est branché à votre PC dans le moniteur série de l’IDE Arduino, il y a de nombreux messages qu’envoi l’ESP. Redémarrez l’ESP si besoin.
Dans ces messages il y a l’adresse IP qui lui a été attribué par votre box.
Ouvrez un navigateur Web, tapez cette adresse et vous aurez accès à l’ESP.
Si vous n’êtes pas branché au PC, regardez à la rubrique DHCP ou LAN de votre box, il y a la liste des périphériques branchés à votre réseau parmi lesquels votre ESP.
Cdlt
Je suis sur le programme RouteurSolaire_V_3_10_Linky
Merci pour votre réponse super rapide Mr André.
Moi, je rentre le nom de l’ESP avec le mot de passe de 1234567890 comme indiqué sur votre page web, et non celui de ma box => donc ça peut pas marcher, forcément.
J’essaie ça tout de suite et vous tient au courant.
Merci. A bientôt.
Ca marche, trop excellent. Reste plus qu’à finir mon installation solaire.
Merci encore, vous êtes au TOP !!!!
Bonne soirée.
🙂
Bonjour André. Merci pour votre pédagogie, votre esprit de partage. On apprend beaucoup auprès de vous..
J’ai eu le même souci que yannblanc mais avec l’option TEMPO de mon contrat chez EDF. Pas d’affichage de la puissance en W pour les HP et HC..
Ma trame Linky (Historique) est :
ADCO 812064646743
OPTARIF BBR(
ISOUSC 30
BBRHCJB 008232534
BBRHPJB 000335082
BBRHCJW 000017289
BBRHPJW 000024778
BBRHCJR 000000000
BBRHPJR 000000000
PTEC HCJB
DEMAIN —-
IINST 001
IMAX 090
PAPP 00460
HHPHC A
MOTDETAT 000000
J’ai ajouté ceci à votre programme (mais en mettant en commentaire les lignes initiales # 346 et #349 :
//if (code.indexOf(« HCHP ») == 0 || code.indexOf(« BASE ») == 0) {
if (code.indexOf(« BBRHPJB ») == 0) {
HCHP = val.toInt();
}
//if (code.indexOf(« HCHC ») == 0) {
if (code.indexOf(« BBRHCJB ») == 0) {
HCHC = val.toInt();
}
if (code.indexOf(« BBRHPJW ») == 0) {
HCHP = val.toInt();
}
if (code.indexOf(« BBRHCJW ») == 0) {
HCHC = val.toInt();
}
if (code.indexOf(« BBRHPJR ») == 0) {
HCHP = val.toInt();
}
if (code.indexOf(« BBRHCJR ») == 0) {
HCHC = val.toInt();
}
Chez moi cela fonctionne pour les jours bleus actuels (HP et HC) mais à valider pour les jours blancs ou rouges. Je vous laisse confirmer si cela est correctement écrit. L’idéal aurait été de garder un même version pour toutes les options de contrats EDF mais j’ai pas assez de compétences en programmation.. j’ai du commenter vos lignes 🙂
Encore merci André et bonne continuation.
Serge B.
Merci pour votre remarque. Je la garde pour l’introduire dans une prochaine version.
Cordialement