Intégration - Teleinfo : votre compteur Linky dans Gladys avec le module LiXee TIC

Bonjour à tous ! Je vous présente Teleinfo, une intégration externe qui lit la télé-information (TIC) de votre compteur Linky ou électronique avec le module LiXee TIC sur rail DIN (USB, environ 30 €). Code source : github.com/prohand/gladys-teleinfo.

Le point important : l’USB

Une intégration externe Gladys ne peut pas lire une clé USB série. C’est la première chose à savoir avant d’acheter le module.

  • Les intégrations externes tournent chacune dans leur propre conteneur Docker, isolé par Gladys (système de fichiers en lecture seule, pas d’accès au matériel).
  • Le manifest d’une intégration peut demander un accès matériel, mais seulement parmi 4 classes : coral-usb, coral-pcie, gpu et video. Il n’existe aucune classe pour un port série (/dev/ttyUSB0, /dev/ttyACM0…).
  • Ces classes ne sont accordées qu’aux sous-conteneurs, et jamais sous forme de chemin /dev libre.

Conséquence : brancher le module LiXee sur le serveur Gladys ne suffit pas. L’intégration ne le verra pas, même s’il est bien détecté par Linux.

Le ZLinky (la version Zigbee du LiXee) n’a pas ce problème : il passe par Zigbee2MQTT. Mais la version USB sur rail DIN, moins chère, a besoin d’un relais réseau.

La solution : ser2net

ser2net partage le port série du module sur le réseau (TCP brut), et l’intégration s’y connecte :

Compteur (I1/I2) -> module LiXee (USB) -> ser2net (TCP 2000) -> intégration Teleinfo -> Gladys

ser2net tourne sur la machine où le module est branché : le serveur Gladys lui-même, ou un Raspberry Pi près du tableau électrique (pratique, le câble USB est limité à environ 5 m).

sudo apt install ser2net
ls -l /dev/serial/by-id/

Puis /etc/ser2net.yaml :

connection: &teleinfo
  accepter: tcp,2000
  enable: on
  options:
    kickolduser: true
  connector: serialdev,/dev/serial/by-id/usb-XXXX-if00-port0,1200e71,local
  • 1200e71 pour le mode historique (compteurs électroniques, et la plupart des Linky par défaut).
  • 9600e71 pour un Linky en mode standard.
  • Puis sudo systemctl restart ser2net && sudo systemctl enable ser2net.

Attention : ser2net n’a pas de mot de passe. Gardez ce port sur votre réseau local, jamais ouvert sur Internet.

Ce qui remonte dans Gladys

Le mode (historique ou standard) est détecté tout seul. Un appareil est créé par compteur, avec seulement les valeurs que votre compteur envoie (mono ou triphasé, Base, HC/HP, Tempo, EJP).

  • Mode historique : index (Base, HC/HP, EJP, Tempo) en kWh, puissance apparente (PAPP), intensité instantanée et max, intensité souscrite, période tarifaire, dépassement (ADPS).
  • Mode standard : énergie soutirée totale et par index, énergie injectée, puissance apparente instantanée et max, courant et tension efficaces, tension moyenne, courbe de charge, tarif en cours.

Les catégories et unités sont les mêmes que celles utilisées par Gladys pour le ZLinky en Zigbee : un compteur s’affiche pareil dans les deux cas.

Les valeurs sont envoyées toutes les 60 s par défaut (réglable de 15 s à 1 h), seulement quand elles changent, pour ne pas remplir l’historique.

Scènes et tableau de bord (Gladys 5.1+)

L’intégration ajoute ses propres cartes dans l’éditeur de scènes (catégorie Intégrations) et un widget pour le tableau de bord.

  • Déclencheur « Changement de période tarifaire » : lance la scène au passage HC ↔ HP. Filtre possible sur la nouvelle période (heures creuses, pleines, base). Exemple : chauffe-eau en heures creuses.
  • Déclencheur « Dépassement de puissance souscrite » : prévient avant de disjoncter. Un seul déclenchement par dépassement, même si la puissance oscille autour de la limite.
  • Action « Lire le compteur » : renvoie puissance, période, index total et dépassement, pour une condition ou un message.
  • Widget « Compteur électrique » : puissance en direct, index, courbe sur 24 h, période tarifaire, dépassement et état de la réception.

Ces fonctions demandent Gladys 5.1 ou plus récent.

Installation

  1. Branchez le module LiXee sur les bornes I1 et I2 du compteur (sans polarité, courant coupé au tableau).
  2. Installez et configurez ser2net comme ci-dessus.
  3. Dans Gladys, installez l’intégration Teleinfo, puis renseignez l’adresse IP de la machine ser2net et le port (2000).
  4. Cliquez sur Tester la connexion : le numéro du compteur et la puissance actuelle s’affichent. Ajoutez ensuite le compteur depuis l’onglet Découverte.

Le statut de connexion dans l’écran Configuration indique clairement le problème : passerelle injoignable, ou connecté mais aucune trame valide (mauvaise vitesse ou câblage). Le guide détaillé est dans la documentation.

Ce que je cherche

  • Des testeurs avec un vrai compteur : l’intégration est testée avec des trames simulées, mais pas encore sur un vrai Linky. @mutmut, tu avais proposé de tester avec ton module LiXee TIC rail DIN ici : avec plaisir ! Si ton teleinfo2mqtt lit déjà le port, il faudra l’arrêter pendant le test (un seul programme à la fois sur le port série). Les retours en triphasé et en mode standard sont aussi bienvenus.
  • Un avis sur l’accès série : @pierre-gilles, une classe matérielle serial (pour /dev/ttyUSB* / /dev/ttyACM*), accordée par l’utilisateur comme coral-usb ou video, éviterait ser2net. Elle servirait aussi à d’autres intégrations sur clé USB, comme le RFPlayer qui est aussi demandé dans le fil. Est-ce envisageable côté Gladys ?

Merci pour vos retours !

Merci @prohand !
Je vois que ce n’est pas si simple dès qu’on doit brancher un truc en USB pour l’instant, je m’attendais a du plug&play comme je l’ai avec teleinfo2mqtt :frowning:

Tu l’installes sur le host ou dans le docker Gladys ou dans le docker de l’intégration externe ?

Ca veut dire que le jour où je passe de historique à standard, il faut modifier le yaml et restart le service ?

Comment est-il détecté tout seul ? par le code ci-dessus ?
Ce n’est pas possible de lire les trames, analyser le contenu et en déduire si historique ou standard ?
Les variables dedans sont bien distinctes pour l’un et l’autre, je pensais que c’était plus simple que ça :frowning:

Très bien car teleinfo2mqtt renvoie toutes les informations à chaque polling (10s actuellement car trop de données sinon), même si certaines ne changent pas (Tempo jour rouge par exemple).
Par contre pour le PAPP (puissance instantanée en historique, je ne connais pas l’équivalent en standard), c’est possible de le régler plus bas (jusqu’à 1s par ex) ?
Je m’en sers pour voir si il n’y a pas de dépassement (et gérer du délestage) et en 15s on peut avoir le linky qui « disjoncte » si trop de puissance tirée à l’instant T (charge voiture + eau chaude + chauffage par ex).

Dernier point, j’ai des appareils virtuels MQTT pour gérer mes index Tempo, comment est-ce qu’il faudrait que je m’y prenne pour migrer (historique, conso30, cout30, etc.) vers cette intégration ?

Merci @mutmut pour ces bonnes questions ! Je reprends point par point.

1. Où installer ser2net ?

  • Directement sur la machine (l’hôte) où le module LiXee est branché en USB, avec sudo apt install ser2net.
  • Ni dans le Docker de Gladys, ni dans celui de l’intégration : aucun des deux ne voit le port USB.
  • Pour info, teleinfo2mqtt est « plug & play » parce que tu lui donnes le port avec --device dans son propre docker run. Une intégration externe ne peut pas faire ça : c’est Gladys qui crée son conteneur, et sans accès au port série.

2. Passage historique → standard : modifier le yaml ?

  • Oui : tu remplaces 1200e71 par 9600e71, puis sudo systemctl restart ser2net.
  • Ça n’arrive normalement qu’une fois dans la vie du compteur, quand tu demandes le passage en mode standard.
  • Si tu oublies, l’intégration te le dit dans son statut : « Connecté, mais aucune trame TIC valide : vérifiez la vitesse ser2net (1200 ou 9600 bauds) ».

3. Comment le mode est-il détecté ?

  • Exactement comme tu le décris : l’intégration lit les trames. En historique, les champs sont séparés par un espace, en standard par une tabulation. Les noms des champs (PAPP, SINSTS…) changent aussi.
  • Mais la vitesse se joue un cran plus bas. À la mauvaise vitesse, on ne reçoit que des octets illisibles, donc aucune trame à analyser. Et c’est ser2net qui ouvre le port série, avec la vitesse de son fichier de config, pas l’intégration.
  • Une piste à creuser : ser2net gère le protocole RFC 2217, qui permet au client de changer la vitesse à distance. L’intégration pourrait alors essayer 1200 puis 9600 toute seule.

4. PAPP plus souvent que toutes les 15 s ?

  • Les valeurs publiées dans Gladys ne descendent pas sous 15 s. Gladys limite une intégration à 300 valeurs par minute, et chaque valeur devient une ligne d’historique. Un compteur triphasé en mode standard dépasserait vite cette limite.
  • Mais pour le délestage, pas besoin de l’historique. Le déclencheur « Dépassement de puissance souscrite » analyse chaque trame, donc toutes les 1 à 2 s, quel que soit l’intervalle de publication :
    • en historique, il se base sur ADPS, que le compteur envoie dès que l’intensité souscrite est dépassée ;
    • en standard (l’équivalent de PAPP est SINSTS), il compare SINSTS à la puissance souscrite (PREF).
  • Il se déclenche une seule fois par dépassement. Le dépassement est considéré comme fini après 60 s sans nouveau signal.
  • L’action « Lire le compteur » renvoie elle aussi la dernière trame reçue (1 à 2 s d’âge), et pas la dernière valeur publiée. Tu peux donc t’en servir dans une condition de scène.

5. Migrer tes appareils MQTT (index Tempo, historique, conso30, cout30)

  • conso30 / cout30 : rien à recréer. Gladys les calcule tout seul à partir des index envoyés par l’intégration, comme pour le ZLinky. Les prix Tempo se règlent dans le contrat d’énergie de Gladys.
  • Historique : l’intégration ne peut pas importer d’anciennes valeurs, elle publie seulement les valeurs actuelles.
  • Gladys a une fonction « Migrer » qui déplace d’un appareil à l’autre l’historique, les scènes et les tableaux de bord. Aujourd’hui, le bouton n’existe que sur les intégrations dépréciées (Netatmo, Tuya, Hue…), pas sur MQTT. @pierre-gilles, est-ce qu’on pourrait l’ouvrir aux appareils MQTT ?
  • Attention aux unités : l’intégration publie les index en kWh. Si tes index MQTT sont en Wh, une migration déplacerait les valeurs sans les convertir.
  • En attendant : garde tes anciens appareils MQTT pour leur historique, et laisse tourner les deux en parallèle