Lorsqu'on veut améliorer quelque chose (un objet, un comportement, un fonctionnement...), il est nécessaire de pouvoir l'analyser, afin de mieux le connaître. C'est une des raisons pour lesquelles j'ai voulu intégrer la consommation électrique de mon logement dans mon système de supervision.

Linky : Le compteur connecté

La première idée qui m'est venue, puisque mon logement dispose d'un compteur Linky, est d'utiliser les données qu'il transmet à Enedis. Ça avait l'avantage d'être simple et rapide à mettre en place... jusqu'à début 2020.

Pour cela, j'ai créé un compte sur le site Enedis, et j'ai écris un script à l'aide de la bibliothèque pyLinky (ou plus exactement, un fork de cette bibliothèque dans lequel j'ai corrigé un bug qui intervient lors du changement d'heure d'hiver).

Cette approche avait cependant quelques inconvénients :

  • Le compteur Linky ne transmet ses données qu'une fois par jour, je n'avais donc pas les informations en direct.
  • Il ne transmet qu'un point toutes les 30 minutes, ce qui ne donne pas une précision suffisante.
  • Les données reçues n'indiquent pas le tarif correspondant, j'ai donc écrit en dur les horaires dans le code.

Le module pyLinky, comme toutes les bibliothèques équivalentes, se connectait sur le site Enedis, puis utilisait l'API de l'interface web pour récupérer les données. Cependant, ce fonctionnement ne semblait pas convenir à Enedis, puisqu'ils ont ajouté un captcha début 2020.

Parallèlement au blocage de cet accès, ils ont développé une API destinée à l'automatisation. Le problème est que pour utiliser cette API avec des données réelles, il faut absolument fournir un numéro de SIRET et signer un contrat. N'étant qu'un particulier, je n'y ai donc pas accès, et je trouve aberrant de devoir donner accès à mes données à une entreprise uniquement dans le but de pouvoir y accéder moi-même. Je ne peux donc pas utiliser cette API, et je refuse d'utiliser un des nombreux services qui ont dû être mis en place pour permettre aux box domotiques de pouvoir continuer à recevoir les informations du compteur Linky.

La sortie TIC (TéléInformation Client)

La sortie TIC, disponible sur de nombreux compteurs EDF (pas uniquement le Linky), permet au client de récupérer les informations transmises par le compteur en direct. Je connaissais cette solution depuis longtemps, mais, étant plus complexe à mettre en place, je l'avais laissée de coté. Maintenant que mon accès aux données du Linky est plus difficile, je me suis enfin motivé à utiliser la sortie TIC.

Description

La sortie TIC n'est finalement qu'un simple port série, qui envoie des données en continu. Elle se présente sous la forme de deux connecteurs, dans lesquels on peut insérer des fils, afin de pouvoir connecter un dispositif adapté.

L'interroger directement permet de récupérer les données de consommation instantanément, sans attendre le lendemain, et permet d'avoir un point toutes les deux secondes environ.

Montage électronique

De nombreux schémas du montage électronique nécessaire pour s'interfacer avec la sortie TIC sont disponibles sur Internet. La plupart sont basés sur un optocoupleur SFH620A. Cependant, le magasin d'éleectronique dans lequel je suis allé n'en possédait pas, j'ai donc opté pour un PC817, comme proposé par akila dans son article sur le même sujet.

N'ayant pas la possiblité de connecter directement le compteur à une machine de mon réseau, j'ai acheté un OrangePi Zero afin de l'utiliser comme intermédiaire placé directement dans l'armoire électrique, au plus près du compteur, grâce à sa petite taille. Il sera connecté au réseau en WiFi, évitant ainsi d'avoir à tirer des câbles dans tout le logement.

Préparation de l'OrangePi Zero

Deux possibilités existent pour connecter un tel montage sur un OrangePi Zero : Par le port USB, ou directement connecté à un UART disponible sur les pins GPIO. N'ayant pas envie de cumuler plusieurs montages à la suite (TIC-UART, puis UART-USB), j'ai opté pour la connexion par le GPIO. Cependant, même si l'OrangePi Zero dispose de GPIO, aucun connecteur n'est présent lors de l'achat de la carte, j'ai donc dû en souder un.

OrangePi Zero GPIO

Coté logiciel, il est nécessaire qu'un UART du GPIO soit activé. Le dtb fourni par Armbian, que j'utilise sur ma Debian, ne les active pas par défaut. Il est alors nécessaire d'ajouter un override qui s'en charge. Cette partie n'étant pas le sujet principal de cet article, je ne m'étends pas plus ici.

Prototype

Une fois les composants rassemblés, j'ai réalisé le montage sur une plaque d'expérimentation :

Prototype

Le prototype m'a permis, entre autres, de trouver la bonne valeur de résistance à placer en sortie de l'optocoupleur. En effet, les schémas présents sur internet proposent beaucoup de valeurs différentes, il ne semble pas y avoir de consensus à ce niveau. Le rôle de cette résistance est principalement de placer le niveau du signal de sortie dans les normes attendues par l'UART pour la bonne détection des bits 0 et 1. Après quelques tests, j'ai réussi à avoir un signal correct avec une résistance de 10kΩ.

Afin de tester la lecture des données reçues sur le port série, il suffit de configurer le port sur lequel est connecté le montage (/dev/ttyS1 dans mon cas), puis de lire ce qui y transite au moyen de cat, screen, ou équivalent. Mon compteur Linky fonctionnant en mode historique, les paramètres du port série sont les suivants :

  • Vitesse : 1200 bauds
  • Un bit de start
  • Sept bits de données (caractère ASCII)
  • Un bit de parité paire
  • Un bit de stop

Ce qui correspond, pour configurer le port série, à la commande :

$ sudo stty -F /dev/ttyS1 1200 sane evenp parenb cs7 -crtscts

Si le montage est correct, la sortie ressemble à cela :

IMAX 090 H
PAPP 02390 /
HHPHC A ,
MOTDETAT 000000 B
ADCO XXXXXXXXXXXX ;
OPTARIF HC.. <
ISOUSC 30 9
HCHC XXXXXXXXX ,
HCHP XXXXXXXXX 1
PTEC HC.. S
IINST 011 Y
IMAX 090 H
PAPP 02390 /
HHPHC A ,
MOTDETAT 000000 B
ADCO XXXXXXXXXXXX ;
OPTARIF HC.. <
ISOUSC 30 9
HCHC XXXXXXXXX -
HCHP XXXXXXXXX 1
PTEC HC.. S
IINST 011 Y
IMAX 090 H

Réalisation du montage final

Une fois la communication établie, j'ai pu passer à l'assemblage et au soudage du circuit final. Rien de particulier à cette étape, à part le petit trou percé dans le boîtier de mon OrangePi Zero pour permettre aux deux fils de données d'en sortir.

Circuit final

Réalisation de la partie logicielle

Après avoir réussi à établir la communication et faire défiler les informations dans une console, il est temps de développer un script pour permettre le stockage de ces informations. Comme d'habitude, je me suis tourné vers le langage Python pour envoyer les informations dans mon InfluxDB.

Deux bibliothèques nécessaires sont pyserial et influxdb. Sous Debian, il suffit d'installer les paquets python3-serial et python3-influxdb.

Une fois la lecture de données fonctionnelle depuis un programme python, il est nécessaire de décoder le contenu reçu. La documentation décrit le format des trames envoyées, ainsi que la méthode de calcul de la somme de contrôle.

Comme les précédents, mon script est disponible sur Framagit.

J'ai ensuite ajouté un panneau dans un dashboard Grafana existant pour afficher ces données.

Données TIC

Finalisation

Après avoir réuni tous les éléments nécessaire, il reste à mettre en place physiquement l'OrangePi Zero, fixé au tableau électrique au moyen d'un petit morceau de velcro adhésif pour pouvoir le retirer temporairement si nécessaire. Le câble de l'alimentation passe dans la charnière de la porte, et ne gène ni l'ouverture, ni la fermeture de celle-ci.

Projet terminé


Superviser un routeur 4G Huawei

dim. 01 nov. 2020 by Marmotte

Depuis l'obligation de passer en télétravail en début d'année, mon employeur m'a fourni un routeur nomade 4G Huawei afin de me permettre de travailler dans de bonnes conditions. Comme pour tous les appareils dont on peut tirer des informations de manière automatique, j'enregistre celles auxquelles j'ai accès dans ma solution …

read more

Capteurs de température/humidité et InfluxDB

dim. 01 nov. 2020 by Marmotte

Depuis que j'ai mis en place mes outils de supervision, j'y enregistre des informations de nature diverses.

Cet article se concentre sur l'enregistrement de la température, l'humidité et la pression atmosphérique des pièces de mon logement dans InfluxDB.

Matériel utilisé

Comme toujours, je refuse la dépendance à des services externes …

read more

Supervision d'un onduleur

dim. 01 nov. 2020 by Marmotte

Un onduleur permet d'éviter une extinction brutale des machines lors de (micro)coupures de courant, mais aussi de les protéger d'éventuelles surtensions. Lors d'une coupure courte, sa batterie permet de ne pas avoir à éteindre les machines. Si la coupure de courant dure plus longtemps, elle permet tout de même …

read more

Superviser une Livebox

dim. 01 nov. 2020 by Marmotte

Cet article sur la supervision est dédié aux informations que je récupère à propos de ma Livebox.

Collecte des informations

Pour collecter des informations sur ma Livebox, j'utilise la bibliothèque sysbus, qui appelle en arrière plan l'API de l'interface web de la Livebox.

Mon script est disponible sur Framagit, et …

read more

Superviser les sauvegardes : Borg, InfluxDB et Grafana

dim. 01 nov. 2020 by Marmotte

Sauvegarder ses données est essentiel pour éviter autant que possible les risques de les perdre. Cependant, mettre en place un processus de création de sauvegardes ne suffit pas, il est aussi nécessaire de surveiller qu'elles sont bien réalisées.

Dans de précédents articles, j'ai présenté Borg, que j'utilise pour réaliser les …

read more

Supervision avec Telegraf, InfluxDB et Grafana

dim. 01 nov. 2020 by Marmotte

Une partie importante de la gestion d'un parc informatique concerne la supervision des machines. Cela permet d'être prévenu lorsqu'un événement, problématique ou non, intervient et de pouvoir analyser les données pour déterminer les causes de cet événement, même lorsque la machine touchée ne répond plus.

Pour cela, plusieurs éléments sont …

read more

Monitoring avec Munin 2

dim. 15 juin 2014 by Marmotte

Munin est un outil de monitoring qui affiche l'activité des machines surveillées sous forme de graphiques. Il est constitué d'une machine maître, qui affiche les informations, et de noeuds, installés sur les machines à surveiller.

Installation

Sous Debian, il suffit d'installer le paquet munin pour le maître. Il est aussi …

read more