Les compteurs EDF récent disposent d'un module émettant périodiquement des informations sur la consommation éléctrique. Le compteur utilise un protocol série à 1200 baud, le signal est modulé par une porteuse à 50Khz (Voir téléinformation EDF pour les détails ainsi que la Spécification Technique EDF). Cet article explique comment récupérer ces informations et les rendre visibles è travers plusieurs graphes. En deux mots, le principe est de récupérer les informations EDF, d'envoyer ces informations sur un serveur et afficher tous les graphes et résultats à travers une interface Web accessible depuis Internet.
Téléinformation avec clef USB ADTEK
La société Adtek propose un petit module Téléinfo USB permettant de récupérer la téléinformation via un port série. La communication se fait à 9600 baud, 8-bits, sans parité. Sous Linux, il faut charger les deux modules usbserial
et ftdi_sio
. Suivant la version du driver ftdi, la clef USB peut ne pas être reconnue, il faut alors indiquer les identifiants du fabricant et du produit lors du chargement du driver.
insmod usbserial.ko
insmod ftdi_sio.ko vendor=0x0403 product=0x6015
Si tout se passe bien le driver va créer le device /dev/ttyUSB0
lorsque la clef est montée:
usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device
ftdi_sio 2-2:1.0: FTDI USB Serial Device converter detected
usb 2-2: Detected FT232RL
usb 2-2: FTDI USB Serial Device converter now attached to ttyUSB0
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver
Petit agent de monitoring
Un petit agent de monitoring va lire en permanence les trames EDF de téléinformation via le port série. Il doit collecter les données et envoyer les résultats toutes les 5 minutes en utilisant un POST HTTP vers le serveur qui lui est donné au démarrage.
edf-teleinfo /dev/ttyUSB0 http://server/teleinfo.php &
Cet agent peut tourner dans un Raspberry Pi, un BeagleBone Black. Dans mon cas, je le fais tourner sur ma Bbox Sensation ADSL. A défaut, on peut utiliser un PC standard mais ce n'est pas optimal pour la consommation éléctrique. Source de l'agent: edf-teleinfo.c
La compilation de l'agent se fait simplement avec l'une des commandes suivantes:
gcc -o edf-teleinfo -Wall -O2 edf-teleinfo.c
arm-angstrom-linux-gnueabi-gcc -o edf-teleinfo-arm -Wall -O2 edf-teleinfo.c
Création des fichiers RRDtool
Le compteur EDF envoie une mesure toutes les 2 secondes (option -s
de rrdtool
). La consommation éléctrique est enregistrée sous deux data sources: hc
(Heures creuses) et hp
(Heures pleines). Les min, max et average sont calculés pour des périodes de 1 mn (30 mesures), 5mn (150 mesures) et 15 mn (450 mesures).
rrdtool create teleinfo-home.rrd -s 2 \
DS:hc:COUNTER:300:0:4294967295 \
DS:hp:COUNTER:300:0:4294967295 \
RRA:AVERAGE:0.1:30:1800 \
RRA:MIN:0.1:30:1800 \
RRA:MAX:0.1:30:1800 \
RRA:AVERAGE:0.1:150:1800 \
RRA:MIN:0.1:150:1800 \
RRA:MAX:0.1:150:1800 \
RRA:AVERAGE:0.1:450:1800 \
RRA:MIN:0.1:450:1800 \
RRA:MAX:0.1:150:1800
Alors que les Heures creuses et Heures pleines sont définies comme COUNTER
, l'intensité instantanée et la puissance apparente sont représentées avec des gauges variant de 0 à 70A ou 0 à 15000W.
rrdtool create teleinfo_power-home.rrd -s 2 \
DS:ic:GAUGE:300:0:70 \
DS:pap:GAUGE:300:0:15000 \
RRA:AVERAGE:0.1:30:1800 \
RRA:MIN:0.1:30:1800 \
RRA:MAX:0.1:30:1800 \
RRA:AVERAGE:0.1:150:1800 \
RRA:MIN:0.1:150:1800 \
RRA:MAX:0.1:150:1800 \
RRA:AVERAGE:0.1:450:1800 \
RRA:MIN:0.1:450:1800 \
RRA:MAX:0.1:150:1800
La création des fichiers est à faire une seule fois sur le serveur. Si la création est faite dans un répertoire /var/lib/collectd/rrd
alors on peut facilement utiliser Collectd Graph Panel pour l'affichage des graphes.
Collecte des informations
Sur le serveur, une page fait l'extraction des paramètres de la requête POST et remplit la base de donnés RRDtool.
L'agent envoie les informations suivantes:
date
: le temps Unix correspondant à la première mesure,end
: le temps Unix de la dernière mesure,hc
: la valeur du compteur sur les heures creuses,hp
: la valeur du compteur sur les heures pleines,ic
: le courant instantané,pap
: la puissance apparente.
Comme l'agent envoie les données par lot de 150 valeurs (ou plus si il y a eu des problèmes de connection), la mise à jour se fait en insérant plusieurs valeurs à la fois. Dans ce cas, rrdupdate
s'attend à avoir le timestamp Unix suivit des valeurs des deux data sources (courant et puissance). Voici un extrait de la commande:
rrdupdate \
/var/lib/collectd/rrd/home/teleinfo/teleinfo_power-home.rrd \
1379885272:4:1040 1379885274:4:1040 1379885276:4:1040 \
1379885278:4:1040 1379885280:4:1040 1379885282:4:1040 \
1379885284:4:1040 1379885286:4:1040 1379885288:4:1040 ...
Pour l'installation de la collecte, copier le fichier edf-collect.php
sur le serveur en s'arrangeant pour rendre accessible la page via le serveur web. Source: edf-collect.php.txt
Affichage des informations
Collectd Graph Panel est une application web écrite en PHP et Javascript permettant d'afficher les graphes collectés par collectd. Si les graphes sont crées au bon endroit, alors cette application les reconnaitra et permettra de les afficher. Pour cela, il faut ajouter le plugin teleinfo.php
dans le répertoire plugin
. Source: teleinfo.php.txt
unzip CGP-0.4.1.zip
cp teleinfo.php.txt CGP-0.4.1/plugin/teleinfo.php
Et maintenant
Voir sa consommation éléctrique a un petit coté ludique. Parfois c'est surprenant de constater que la consommation éléctrique ne descend pas en dessous de 200W. Ceci dit c'est normal avec toutes ces Box, décodeurs, switch et autres appareils qui même en veille consomme quelques watts.