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 ?