Pour mon premier article sur le blog, je vous propose de voir ensemble comment intégrer les informations de votre compteur électrique ( téléinfo ) dans Home Assistant pour environ 14€. Ce tuto est valable pour les anciens compteurs électroniques ainsi que pour les nouveaux compteurs communicants « Linky ». Pour récupérer les informations nous allons passer par une fonctionnalité utilisée par les fournisseurs d’énergie : la Télé-information.
Prérequis :
- Home assistant installé avec ESPHome à jour
- Un module ESP8266 du type Wemos D1 mini et son alimentation
- Un module PiTInfo
Programmation ESPHome
Le compteur électrique étant généralement distant de votre installation domotique je vous conseille de programmer et flasher d’abord votre ESP8266.
Récapitulatif des étapes d’intégrations à ESPhome:
- Pour commencer, rendez-vous dans ESPHome vous devez créer une nouvelle configuration en cliquant sur le bouton « + » vert situé en bas à droite de l’écran.
- Ensuite remplissez les différents champs avec le nom du device, le nom de votre réseau wifi (2.4 Ghz impérativement) ainsi que le mot de passe associé.
- la plateforme est bien-entendu ESP8266, pour un wemos d1 mini la board est d1_mini
- Cliquez sur le bouton « Next » et branchez votre Wemos D1 mini en USB sur votre PC, puis cliquez sur « Connect » et choisissez le port COM correspondant à votre Wemos.
Le flash peut durer quelques minutes, laissez la page ouverte en attendant la fin de l’opération.
Après cette opération votre nouvelle configuration apparaîtra sur le Dashboard d’ESPHome, cliquez sur « EDIT », nous allons compléter le fichier de configuration avec les éléments nécessaire à la remontée des informations du compteur.
En dessous de « logger » ajoutez les lignes suivantes :
Enfin, en dessous de la ligne « captive_portal » ajoutez le reste du code :
- Pour les abonnements Heures Pleines / Heures Creuses :
- Pour les abonnements au tarif de Base :
Vous pouvez maintenant téléverser le fichier en cliquant sur « INSTALL ».
Voilà pour la partie programmation, passons maintenant au branchement du montage.
Branchement au compteur

Nous allons dans cette partie voir comment brancher notre montage, voici le schéma de câblage :

- Rx du Wemos sur TXD du PiTInfo
- G du Wemos sur GND du PiTInfo
- 3v3 du Wemos sur VCC du PiTInfo
- Les deux bornes d’entrées du PiTInfo doivent être raccordées sur I1 et I2 sous le compteur (Ces bornes sont protégées par un cache), il n’y a pas de polarité de ce coté du montage
Compteur Linky : Pour que les infos remontent à Home Assistant le compteur doit être en mode « Historique ». Vous pouvez vérifier cette information en appuyant sur les touches « + » ou « -« .
Maintenant que le montage est réalisé, il ne reste plus qu’à mettre sous tension le Wemos et retourner sur HA pour configurer la carte Lovelace.
Lovelace
De retour dans Home Assistant rendez-vous dans « Intégrations ». Normalement votre nouveau Wemos devrait être reconnu par HA et vous être proposé à la configuration. Si ce n’est pas le cas, il vous faudra l’ajouter manuellement en cliquant sur « Ajouter l’intégration » en bas à droite. Puis chercher ESPHome dans la liste et enfin rentrer l’adresse IP du module.

Ainsi vous obtenez cette carte que vous pouvez ajouter directement à Lovelace ou créer une carte personnalisée.
Voilà c’est maintenant terminé, vous avez toutes les informations de votre compteur qui arrivent sur votre HA. Libre à vous maintenant de gérer ces données, de créer des graphiques, des automatisations… !
EDIT : Suite à un conflit dans Home Assistant au niveau de la configuration pour le tarif « Base », il est nécessaire de modifier la ligne id: index par id: « index_base » dans le code ESPHome :
- platform: teleinfo
tag_name: "BASE"
name: "Index"
unit_of_measurement: "Wh"
icon: mdi:gauge
id: "index_base" # <- Ligne à modifier
Super tuto merci !
J’ai une petite question, j’ai le module PiTInfo mais en modèle « usb » que j’avais commandé sur le même site d’ailleurs je crois…
Mais la diff c’est que je n’ai pas le Wemos dessus…
Je récupère bien les infos et actuellement j’insère les datas dans une base Influx… J’aimerai intégrer tes graphs dans une fresh install de HA.
Saurais-tu me dire quelles modifications je dois réaliser (sans modifier mon équipement) mais je peux changer ma base et mes interfaces… Car la je suis un peu perdu.
Merci à toi en espérant que tu ais la réponse 😉
Salut
Je débute dans HA j’ai la même problématique que toi mais je ne sais comment déclarer le dongle dans HA, j’ai installé Télé-information sur hacs
tu as avancé sur le sujet?
merci d’avance
Salut Jérôme, je suppose que le modèle que tu as est le MicroTéléinfo.
Il existe bien un moyen de récupérer les infos en provenance du dongle lorsqu’il est directement connecté sur la machine qui fait tourner HA, en passant par un custom component. Pour cela tu dois installer un dépôt personnalisé dans HACS -> https://github.com/ugomeda/serial-teleinfo-home-assistant, redémarrer HA et ensuite l’installer comme une intégration classique. Par contre n’ayant pas ce dongle je n’ai pas pu tester cette méthode là. J’espère que ca répond à tes attentes 🙂
super boulot 😉
je rencontre un soucis, le flas de weemos d1 mini se passe bien (avec la derniere version d’esphome et n’etant pas en ssl) je download le .bin pour ensuite l’uploader sur le weemos avec esphomeflasher : aucune erreur, le weemos remonte bien dans mes integrations et dans esphome.
Quand je rajoute la partie après ‘logger’ le ‘validate’ est OK et la compilation aussi.
En revanche lorsque je rajoute la partie pour l’abonnement tarif de base, le ‘Validate’ est OK mais j’ai des erreurs à gogo lors de la compilation :
Compiling /data/linky/.pioenvs/linky/src/main.cpp.o
src/main.cpp:30:27: error: ‘esphome::teleinfo::TeleInfoSensor* index’ redeclared as different kind of symbol
teleinfo::TeleInfoSensor *index;
^
In file included from /data/cache/platformio/packages/framework-arduinoespressif8266/tools/sdk/libc/xtensa-lx106-elf/include/wchar.h:4:0,
from /data/cache/platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include/c++/4.8.2/cwchar:44,
from /data/cache/platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include/c++/4.8.2/bits/postypes.h:40,
from /data/cache/platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include/c++/4.8.2/bits/char_traits.h:40,
from /data/cache/platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include/c++/4.8.2/string:40,
from src/esphome/core/component.h:3,
from src/esphome/components/api/api_connection.h:3,
from src/esphome.h:2,
from src/main.cpp:3:
/data/cache/platformio/packages/framework-arduinoespressif8266/tools/sdk/libc/xtensa-lx106-elf/include/string.h:54:8: error: previous declaration of ‘char* index(const char*, int)’
char *_EXFUN(index,(const char *, int));
^
src/main.cpp: In function ‘void setup()’:
src/main.cpp:364:9: error: assignment of function ‘char* index(const char*, int)’
index = new teleinfo::TeleInfoSensor(« BASE »);
^
src/main.cpp:364:9: error: cannot convert ‘esphome::teleinfo::TeleInfoSensor*’ to ‘char*(const char*, int)’ in assignment
src/main.cpp:365:10: error: request for member ‘set_component_source’ in ‘index’, which is of non-class type ‘char*(const char*, int)’
index->set_component_source(« teleinfo.sensor »);
^
src/main.cpp:367:28: error: no matching function for call to ‘esphome::Application::register_sensor(char* (&)(const char*, int))’
App.register_sensor(index);
^
src/main.cpp:367:28: note: candidate is:
In file included from src/esphome/components/api/api_connection.h:4:0,
from src/esphome.h:2,
from src/main.cpp:3:
src/esphome/core/application.h:68:8: note: void esphome::Application::register_sensor(esphome::sensor::Sensor*)
void register_sensor(sensor::Sensor *sensor) { this->sensors_.push_back(sensor); }
^
src/esphome/core/application.h:68:8: note: no known conversion for argument 1 from ‘char*(const char*, int)’ to ‘esphome::sensor::Sensor*’
src/main.cpp:368:10: error: request for member ‘set_name’ in ‘index’, which is of non-class type ‘char*(const char*, int)’
index->set_name(« Index »);
^
src/main.cpp:369:10: error: request for member ‘set_disabled_by_default’ in ‘index’, which is of non-class type ‘char*(const char*, int)’
index->set_disabled_by_default(false);
^
src/main.cpp:370:10: error: request for member ‘set_icon’ in ‘index’, which is of non-class type ‘char*(const char*, int)’
index->set_icon(« mdi:gauge »);
^
src/main.cpp:371:10: error: request for member ‘set_unit_of_measurement’ in ‘index’, which is of non-class type ‘char*(const char*, int)’
index->set_unit_of_measurement(« Wh »);
^
src/main.cpp:372:10: error: request for member ‘set_accuracy_decimals’ in ‘index’, which is of non-class type ‘char*(const char*, int)’
index->set_accuracy_decimals(0);
^
src/main.cpp:373:10: error: request for member ‘set_force_update’ in ‘index’, which is of non-class type ‘char*(const char*, int)’
index->set_force_update(false);
^
src/main.cpp:374:54: error: no matching function for call to ‘esphome::teleinfo::TeleInfo::register_teleinfo_listener(char* (&)(const char*, int))’
teleinfo_teleinfo->register_teleinfo_listener(index);
^
src/main.cpp:374:54: note: candidate is:
In file included from src/esphome/components/teleinfo/sensor/teleinfo_sensor.h:2:0,
from src/esphome.h:39,
from src/main.cpp:3:
src/esphome/components/teleinfo/teleinfo.h:25:8: note: void esphome::teleinfo::TeleInfo::register_teleinfo_listener(esphome::teleinfo::TeleInfoListener*)
void register_teleinfo_listener(TeleInfoListener *listener);
^
src/esphome/components/teleinfo/teleinfo.h:25:8: note: no known conversion for argument 1 from ‘char*(const char*, int)’ to ‘esphome::teleinfo::TeleInfoListener*’
In file included from src/esphome/components/api/api_connection.h:4:0,
from src/esphome.h:2,
from src/main.cpp:3:
src/esphome/core/application.h: In instantiation of ‘C* esphome::Application::register_component(C*) [with C = char*(const char*, int)]’:
src/main.cpp:366:31: required from here
src/esphome/core/application.h:109:5: error: static assertion failed: Only Component subclasses can be registered
static_assert(std::is_base_of::value, « Only Component subclasses can be registered »);
^
*** [/data/linky/.pioenvs/linky/src/main.cpp.o] Error 1
========================= [FAILED] Took 49.82 seconds =========================
si vous avez une idee, un coup de main, une solution, je suis preneur 🙂
de retour 😉 j’ai le message d’erreur lors de la compilation dès que je rajoute ces lignes :
– platform: teleinfo
tag_name: « BASE »
name: « Index »
unit_of_measurement: « Wh »
icon: mdi:gauge
id: index
j’ai testé paragraphe par paragraphe, un à un :/
Salut, j’ai fait le test chez moi, effectivement ca pose problème. La solution est de remplacer id: index par id: « index_base » et ca fonctionne, du moins plus d’erreurs au moment de compiler le firmware. je vais modifier l’article en ce sens.
Merci pour la remontée, ayant un abonnement au tarif HC/HP je n’ai pu tester cette configuration au moment d’écrire l’article 😉
oui effectivement j’avais mis en remarque # la ligne id. et c’est passé, j’ai renommé l’id comme tu le conseils et ca passe 🙂
mon montage est prêt !
je te tiens au courant.
je vais pouvoir explorer votre blog un peu plus en profondeur, je fais partie de l’équipe du forum HACF, j’aimerai bien parler de votre travail, si vous êtes inscrit sur le forum, je pourrais vous @tagger 😉
Retour plutot positif, j’ai la remonté des infos depuis 2 jours et cela me semble correct. 🙂
Je vais essayer de stocker les elements en base de données (dans influxdb par exemple)
En revanche j’ai les entités linky_intensite et linky_intensite_max qui reste en inconnu, du coup je ne sais pas si cela vient du code ou du compteur??? si tu as une idée je suis preneur 😉
et bonne année !
Salut et bonne année !
A partir du moment ou ton fichier ESPHome est bien renseigné, Il est possible que le mode du compteur y soit pour quelque chose(historique / Standard). Dans la doc officielle d’Enedis on peut lire « Certaines données du mode historique ne sont pas disponibles dans les compteurs Linky. C’est, entre autres, le cas de l’intensité souscrite, des intensités maximales ou de la zone de tarification (A, C, D, E, Y) ». Chez moi je n’ai pas de compteur Linky, il faudrait voir si d’autres personnes avec des Linky rencontrent ce souci.
Bonjour,
Merci pour cet article. J’ai réalisé le montage avec un SP32, et aucun problème en suivant tout le tutoriel.
Hélas, au final, je n’ai pas de remontée d’informations en provenance de teleinfo.
Je n’ai d’info que sur :
– Teleinfo status – Connecté
– Uptime sensor – xxxx s
– Wifi Signal sensor – -42db
– Uptime – xx mn
Etat indisponible pour tous les autres paramètres.
Mon compteur est un Linky. Su mon compte Enedis, tout les historiques sont bien activés et j’ai des données sur de nombreux mois.
Est il possible de tracer ce qui se passe dans le ESP32 ? En posant des log ?
Cdl.
Je me répond à moi même…
Si on se trompe dans le branchement sur le compteur LINKY et que l’on se connecte sur C1 et C2, cela ne fonctionne évidemment pas ! 😉
Bien veillez à se connecter sur L1 et L2
Tout est OK, merci !