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. fayollle thierry dit :

    bonjour superbe réalisation je trouve les application sur l esp très pro je suis novice dans le codage mais passion pour mon hobby l électronique depuis 1975 j en est fait mon métier maintenance industriel je suis en train de tester le routeur j ai une question sur la lecture direct du linky il se televerse sans pb et la connexion est fluide comment se comporte t il sur un abonnement tempo ? je pense que je vais le raccorder et voir les effet comme c est temporaire je vais le brancher sur une power bank ou je prélevé l alim avec un pont filtrage et régulation 78l05 directement sur le bus tic I1 A avec un en protégeant par un polyswitch calibrés merci encore
    ps ou bien un projet pour les utilisateur tempo ??

    • F1ATB André dit :

      Affichage Linky en temps reel tourne avec un Linky Historique.
      Le logiciel du routeur tourne avec un Linky en mode standard. Il affiche en première page la couleur du Tempo

  2. marc dit :

    Bonjour André, Comment faire pour récupérer l’adresse du serveur web une fois la carte paramètrée en mode DHCP automatique ?
    Cela fonctionne différemment que sur le projet Routeur…

    Merci de votre réponse

    • F1ATB André dit :

      3 possibilités
      – elle s’affiche sur le moniteur série
      – elle s’affiche sur le Debugger de Jao Lopez
      – elle s’affiche sur votre Box internet à la rubrique LAN / DHCP

      Cdlt

      • marc dit :

        Ok opération réussie,
        Mon installation est en tri, pouvez vous m’indiquer s’il serait possible de récupérer les données par phase, notamment je recherche un moyen de visualiser en temps réel l’équilibrage des phases.
        Merci

        • F1ATB André dit :

          Il faudrait afficher la trame complète à l’arrivée du LINKY. pour en extraire les 3 données.

          Cdlt

          • marc dit :

            Ok, c’est donc une évolution logicielle du programme, mais là il faut être doué…..

            Cordialement

  3. David dit :

    Bonjour André, merci pour ce tuto.
    J’ai un problème, lors de la compilation, j’ai un message m’indiquant :
    error: ‘Serial2’ was not declared in this scope

    Une idée ?

    Merci

    • F1ATB André dit :

      Avez vous bien chargé les bibliothèques demandées. En particulier celle de l’ESP32 chez Expressif.

      Cdlt

  4. Gesbert dit :

    Bonjour André
    Je suis débutant avec le esp32,J’ai besoin de votre aide !.
    je suis en train d’installer la version Linky en direct
    le logiciel plante avec le message suivant
    c:\Users\rgesb\Documents\Arduino\libraries\RemoteDebug\src\utility\WebSockets.cpp:42:10: fatal error: hwcrypto/sha.h: No such file or directory
    #include
    ^~~~~~~~~~~~~~~~
    compilation terminated.
    exit status 1

    Compilation error: exit status 1

    Bravo et Merci pour ce que vous faites
    René

  5. Claude dit :

    Bonjour André
    Un grand merci pour toutes ces réalisations. Je suis un jeune débutant de 64 ans .J’ai eu plusieurs problémes pour téléverser mon sketch,mais enfin ça fonctionne .En modifiant la valeur de la résistance R3 j’ai enfin eu mes graphes.
    Par contre sur le tableau
    Courant Efficace: les valeurs en ampères ne s’affichent pas (même apres plusieurs heures de fonctionnement)
    Et là, je ne comprends plus.
    Peux-tu m’aider pour résoudre ce petit probléme.
    merci

  6. Claude dit :

    Dans le tableau : J’ai la Puissance Apparente qui s’affiche en VA.. La valeur du Courrant Efficace en ampères ne saffiche pas. La Conso .(heure pleine ou basse) s’affiche en Wh.la Conso (heure creuse): s’affiche en Wh.Les graphes rouge ,vert,bleu, jaune s’affichent. Et le tableau données brutes linky en mode historique sont ok