Affichage Linky en temps réel

Compteur Linky
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.

Domoticz
Home Assistant

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.

Linky Standard

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é.

Cablage Linky vers ESP-32

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.

Hardware très réduit

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

Message reçu toutes les 2s sans le check-somme.

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

Affichage du Mode Historique sur le Linky

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

F1ATB André

Radio Amateur - Domotique - Photovoltaïque

Vous aimerez aussi...

239 réponses

  1. François dit :

    Bonsoir André, merci pour votre réponse.
    j’avais déjà consulté votre simulateur, mais :
    Quand la tension onduleur est inférieure au réseau, il devient récepteur, comment son électronique accepte le courant engendré par cette DDP ?
    Comment l’onduleur peut-il mesurer tension, fréquence et phase du réseau, pour se synchroniser quand il est émetteur ?
    La réponse se trouve-t-elle dans l’électronique de l’onduleur ?
    Si oui, quelle est-elle ?
    Je suis désolé, mais je ne comprends pas comment cela peut fonctionner, et pourtant cela fonctionne !
    Cordialement

    • F1ATB André dit :

      L’électronique de l’onduleur en partant de la tension continue fabrique une tension alternative, à tout instant légèrement supérieure à celle du secteur. Ainsi son courant de sortie va dans le bon sens, il n’est jamais récepteur.
      CDlt

  2. François dit :

    D’accord.
    Comment fait-il pour maintenir sa tension toujours légèrement supérieure au secteur et synchronisée ?
    Pour ajuster tension – fréquence – phase, il faut bien qu’il reçoive ces informations du secteur.?
    Cordialement

  3. yannblanc dit :

    Bonjour,
    Je souhaiterais savoir si une personne a essayé récupérer les données de ce montage sur un box JEEDOM ?
    Si oui, quelle est la manipe ?
    cordialement

  4. Ronnie dit :

    Bonjour,
    Très bon site, très technique (un peu trop pour moi 😄)
    Existe t’il un affichage en temps réel avec le mode standard ?
    Cordialement

  5. Paco dit :

    Bonjour André.
    J’ai quelques soucis lors de l’envoi du code sur mon ESP.
    Vous indiquez ESP32, je pense que je suis dans le thème, j’ai des ESP8266, reconnus en tant que NodeMCU1.0 avec Arduino IDE. (J’ai déjà envoyé du code avec succès grâce à cette configuration)
    En revanche, avec votre code, les librairies indiquées, WiFi.h WebServer.h, rien ne passe, et impossible de trouver ce qui correspond via le gestionnaire de librairies.
    Alors loin de moi l’idée de critiquer quoi que ce soit, mais a première vue, où est-ce que je m’égare pour faire fonctionner tout cela ?
    D’avance merci pour votre aide

    • F1ATB André dit :

      Il faut impérativement choisir la carte ESP32 Dev Module dans l’IDE Arsduino.
      Utilisez une carte ESP32 comme spécifiée sur le site et pas de 8266
      Cdlt

  6. Paco dit :

    Bien reçu et encore merci pour votre aide, en effet, pour moi ESP8266 et ESP32 étaient identiques, mais après quelques recherches suite à vos conseils je viens de m’apercevoir que non ! Bluetooth, un cœur de plus et des performances supérieures (moi qui trouvait qu’un 8266 était déjà top ! ) Je m’équipe de l’ESP32 et vous donne des nouvelles.
    A bientôt !

  7. sergez dit :

    bonjour
    j ai réalisé un module capteur linky en mode historique avec un opto suivi d un mosfet BS170 .avec le logiciel linky V1.10.cela fonctionne mais sur la page web la puissance apparente et le courant s affiche mais je n ai aucune courbe.
    de plus sur l afficheur a distance TTGO la puissance indiquée reste a 0
    j ai bien vérifié l’adresse IP source du capteur linky
    je soupçonne des données a paramétrer dans le fichier source V1.10
    merci de vos conseils.
    nb:j aurais bien essayé un capteur version 8.05 mais mon linky est en mode historique

    • F1ATB André dit :

      Si vous ne voyez pas de données brutes, baissez la résistance R3 de 1500ohm à 1200ohm voire 1000ohm.

      Cdlt

  8. 14 ZYG 31 dit :

    Bonjour,

    Je n’arrive pas à trouver la librairie qui correspond au fichier « PageWeb.h ». Pouvez vous m’indiquer la bonne librairie.
    Cordialement

    • F1ATB André dit :

      Il n’y a pas de librairie. PageWeb.h est un fichier qui fait parti du programme. Une fois dézippé, 3 fichiers sont dans le dossier dont Pageweb.h

      Cdlt

  9. Sergez dit :

    Bonjour
    En fait le montage fonctionne normalement.Je n avais pas attendu suffisamment pour l affichage des courbes.
    Mais la version V1.10 est elle compatible pou un afficheur à distante type maisonnette ,

    • F1ATB André dit :

      L’afficheur distant, ce n’est que pour le routeur exemple version 8.06

      • Sergez dit :

        Merci,je m en doutais un peu,reste à demander à mon fournisseur de passer le linky en mode standard et de construire des modules version8.06

  10. Cazo dit :

    bonjour
    Merci pour ces infos.
    peux t-on récupérer l’index d’injection des panneaux solaires?

    Merci

    • F1ATB André dit :

      Le routeur ne voit pas la puissance produite par les panneaux, sauf si vous mettez la deuxième sonde du système UxIx2 sur la ligne 230V des panneaux.

      Cdlt

      • Cazo dit :

        oui mais le compteur linky mesure la puissance injecté. donc est il possible de remonter cette valeur dans l’ ESP32?

        • F1ATB André dit :

          Si votre Linky est en mode standard producteur, le routeur vous affiche l’injection.

          Cdlt

  11. Go dit :

    Bonjour André, peux tu m’aider à résoudre ce problème concernant la mesure sur le Linky réglé en mode standart : Je constate sur la page web « donnée brutes » / Données brutes Linky en mode standard, que des informations arrivent régulièrement (affichage de chiffres et symbols) par contre sur la page accueil la puissance active et apparente restent désespérement à Zéro. Y a t il quelque chose à vérifier et controler ?

    • F1ATB André dit :

      A mon avis vous devez recevoir des valeurs incohérentes. Baissé à 1200 voir 1000ohm la résistance R1 qui alimente le convertisseur optique.

      Cdlt

  12. Go dit :

    re bonjour, je fais la mesure sur le Linky réglé en mode standart, l’affichage indique bien la puissance active (soutirée) tant quelle est supérieure ou égale à zéro, mais quand j’injecte dans le réseau, la puissance injectée reste à zéro. Peux-tu me dire pourquoi et si je dois modifier quelque chose ?

    • F1ATB André dit :

      Etes vous déclaré producteur? En faisant tourner l’affichage du linky, vous devez avoir un P qui s’affiche à la rubrique Mode TIC. Voir la page.
      Si pas producteur les injections ne s’affichent pas.

      Cdlt

  13. Raph dit :

    Bonjour,

    Je vous écris car je me demande si mon problème est « normal ». J’ai voulu rentrer les fils dans I1 et I2 mais je n’arrive plus à les enlever maintenant. Je ne comprends pas et je ne voudrais pas tirer trop fort (j’ai déjà l’impression de tirer fort). L’espèce de « bouton » blanc au dessus sert il à quelque chose ? Savez vous comment retirer/débrancher les fils d’I1 et I2 ? Merci d’avance 🙂

    • F1ATB André dit :

      Le bouton blanc sert à les décoincer. Sinon laissez les et mettez un domino en sortie. Vous ne risquez rien, la tension est basse.

      Cdlt

      • Raph dit :

        Merci à vous pour cette réponse rapide. J’ai essayé de trifouiller ce bouton blanc tout en tirant. Mal m’en a pris j’ai maintenant cassé le fil et donc un bout est coincé à l’intérieur mais inaccessible facilement 😅 Je sens que je vais finir par devoir appeler Enedis en plus c’est en location 😅

  14. NEGARET Jean-pierre dit :

    Bonjour, Bravo pour votre travail, je suis bluffé. J’installe en ce moment des panneaux solaire, et le routeur que vous proposez est génial. Comme je suis débutant dans ce domaine, je me suis dis qu’il serait peut être plus facile de commencer par une projet simple, ce que vous décrivez dans ce sujet  » affichage Linky en temps recel. Donc, je me suis lancé, mais je ne peut pas téléverser le code dans mon ESP32 ( ESPS32S) j’ai l’erreur suivante.

    File not found « executable »: « C:/Users\Sofiane\AppData\Local\Temp\arduino\sketches\13F77557D531861B16F37E864615EBFD\Lecture_Linky_Historique_v1_10.ino.elf ».

    J’ai cherché en vain ce fichier, sans aucun succes;

    Auriez vous une solution.
    Merci par avance CLDT

    • F1ATB André dit :

      Je ne connais pas cette erreur. Vous parlez d’utiliser un ESP32S, je ne vois pas avec quelle option de microcontrôleur, vous lancez la compilation sur l’IDE Arduino. Il faut choisir ESP32 DEV Module. Normalement, j’utilise un ESP32 de base, ou ESP32 Wroom et non un ESP32S.

      Cdlt

  15. NEGARET Jean-pierre dit :

    Merci pour votre réponse, comme option de microcontrôleur, j’utilise « ESP32 DEV Module » , j’ai vérifié le port de communication dans mon gestionnaire de périphérique, tout me semble être en ordre.. Je vais essayer une autre carte ESP32 au cas ou celle ci aurait un problème.

    Merci encore.

  16. NEGARET Jean-pierre dit :

    Avec une autre carte cela semble fonctionner un peu mieux, il me reste une erreur , je pense que cela doit être une bibliothèque manquante.

    C:\Users\Sofiane\Downloads\Lecture information Linky\Lecture_Linky_Historique_v1_10\Lecture_Linky_Historique_v1_10.ino:28:10: fatal error: .h: No such file or directory
    #include //Pour un Watchdog

    Je ne comprend pas le libellé de cette bibliothèque. si vous aviez une idée, cela dépannerai les novices comme moi

    cldt.

  17. Paco dit :

    Bonjour à tous,
    Montage réussi, et marche parfaitement, avec l’esp32 !
    Les données brutes linky sont plus fournies avec l’option TEMPO, voici les éléments supplémentaires :
    OPTARIF BBR (au lieu de HC pour votre exemple)
    Ensuite les compteurs pour les 6 cas possibles (Jour Bleu, Blanc, Rouge HP/HC)
    BBRHCJB
    BBRHPJB
    BBRHCJW
    BBRHPJW
    BBRHCJR
    BBRHPJR

    et aussi « DEMAIN —- » : j’ai fait ce test le soir donc je connais déjà la couleur du jour de demain donc je suis surpris de ne pas avoir l’info ici, mais avec domoticz et d’autres scripts on peut assez facilement se connecter à l’API RTE et récupérer ces infos.

    Ensuite les données brutes sont similaires à votre exemple.

    J’ai commencé à regarder les adaptations à faire dans le code, mais pour un début dans ce domaine, je suis un peu dépassé par l’ensemble assez fourni de ce programme !!

    André, si vous avez des suggestions sur les adaptations, je suis preneur !!

    Du coup j’ai bien la puissance en VA et l’intensité dans les graphes, par contre forcément, les 2 graphes HP / HC restent vides car aucune correspondance de ces valeurs n’est trouvée dans ma configuration avec mon abonnement en tempo.

    Encore merci 😉

    • F1ATB André dit :

      Pouvez-vous m’envoyer une copie d’écran du grand tableau blanc des données brutes que je regarde où sont les valeurs à récupérer.
      f1atb.fr@gmail.com

      Cdlt

      • Paco dit :

        Le mail vient de partir avec le tableau blanc des données brutes. Encore merci 😉

      • Sunn5000 dit :

        Bonjour et bravo pour le partage de votre savoir.
        Avez-vous trouvé un moyen d’exploiter les données brutes du linky en cas d’option Tempo?

  18. Go dit :

    Bonjour André, au niveau de la mesure Linky, j’ai ces messages de manière réccurentes:
    30/03/2024 16:02:03 : Erreur checksum code : SINSTS 850,-1
    30/03/2024 16:45:40 : Erreur checksum code : EAST 60,52
    30/03/2024 16:52:58 : Erreur checksum code : EAST 51,43
    31/03/2024 11:22:03 : Erreur checksum code : EAST 57,49
    31/03/2024 11:58:51 : Erreur checksum code : EAST 53,117
    31/03/2024 12:08:43 : Erreur checksum code : SINSTS 81,113
    Qu’en penses tu ?

  19. Pierre DL dit :

    Bonjour André
    J’ai découvert ton site qui m’a beaucoup intéressé. Je veux réaliser un affichage déporté de ma conso élec instantanée (en VA) car mon Linky est assez éloigné de mes pièces de vie.
    Je ne souhaite pas envoyer les infos sur un PC, Home Assistant ou Domoticz.. mais juste sur un afficheur OLED I2C SSD1306. Les modifications du programme sont elles compliquées à réaliser ? je suis un débutant en ESP32. J’ai acheté une carte ESP32 et un afficheur OLED 0.96″ (trop petit, à mon gout, il faudra que je trouve plus grand !) et j’ai déjà fait des petit bouts de programmes pour afficher des valeurs analogiques issues d’un potentiomètre mais j’avoue que j’ai du mal à voir comment envoyer la valeur PPAP récupérée depuis le Linky vers mon afficheur. Si tu peux me donner quelques tuyaux et conseils.
    Merci d’avance

    • F1ATB André dit :

      Inspirez-vous du programme du routeur fichier source_Linky.ino pour lire le Linky et inspirez-vous du programme de l’afficheur pour afficher les données.
      Cdlt

      • Pierre DL dit :

        Merci pour ces conseils. Je vais me mettre au boulot. Bonne continuation sur tes projets
        Cordialement

  20. Benoit dit :

    Bonjour André,
    merci pour tout ça 😉
    j’ai un petit souci, j’ai aucune remontée pourtant j’ai fait théoriquement tout ce que vous avez dit 😉
    quand je vais sur l’ip de mon esp32, j’ai bien les tableaux VA, A, HP et HC.
    où je me suis planté ?