De manière à pouvoir suivre ma consommation électrique, j’ai cherché une solution réalisable rapidement, à moindre frais, et qui puisse s’intégrer dans un système domotique.
Background
En attendant les compteurs Linky (Big Brother ?), les compteurs électriques français pas trop anciens disposent d’une sortie série « Téléinfo » accessible à l’usager et permettant de relever les données : numéro du compteur, courant et puissance apparente instantanés, type de tarification (de base, heure creuse …), relevés de consommation en Wh…
Outre le bon vieux compteur ERDF, il est aussi possible d’installer chez soi d’autres sous-compteurs qui permettront de faire un suivi détaillé de la consommation d’une partie de son installation (un peu encombrant, mais dans un garage ou une dépendance ça peut avoir du sens). L’intérêt par rapport à d’autres solutions telles que des gestionnaires d’énergie de type OWL ou les prises plugwise ou Zwave Aeon Labs est que la mesure est censée être vraiment fiable. D’ailleurs même si ce n’est pas le cas, ça correspond tout de même à ce qu’on va payer …
Côté hardware
Il existe de nombreux schémas électroniques disponibles sur la toile qui permettent de récupérer la sortie téléinfo sur un port USB ou série. Ca va du simple à un peu plus sophistiqué.
Si on est un peu paresseux ou qu’on n’a pas le matériel, on peut comme moi acheter un montage tout fait ou un module bien packagé sur un site en ligne. Personnellement, j’ai acheté un (puis 2 quand j’ai vu que ça marchait bien!) modules USB teleinfo
Côté software
Je reste fidèle à Linux et mon fidèle Seagate Dockstar sous Linux (Debian). Ce dernier étant pour l’instant un peu chargé en mémoire avec ses fonctions de serveur Squeezebox, DNS, DHCP, samba et tellstick, j’ai cherché une solution évolutive permettant de valider le concept en utilisant des services hébergés dans le Cloud qui puisse évoluer vers un auto-hébergement.
-
Pour le relevé des informations, le programme teleinfuse est impeccable : s’appuyant sur fuse, il permet d’accéder aux informations de son compteur via un système de fichier virtuel.
-
Pour le stockage et la visualisation des données, j’ai d’abord testé Sen.Se, service Cloud gratuit à la Pachube (Cosm maintenant) : il permet de sortir de jolis graphes et réaliser différentes fonctions intéressantes, mais à l’usage s’avère assez buggé et reste propriétaire. Dès que j’ai un peu de temps je teste ThingSpeak qui semble équivalent mais est libre. Je me suis finalement orienté vers le logiciel emoncms du projet OpenEnergyMonitor que j’ai découvert sur le forum touteladomotique.com: il s’appuie sur les mêmes principes, mais est complètement orienté vers le suivi énergétique.
Branchement du module teleinfo
On branche la bête sur le compteur (ne pas se tromper : c’est I1-I2, pas C1-C2). Voir « How to plug » sur la page du plugin teleinfo de Domogik pour des photos. La loupiotte rouge s’allume dès que je branche le port USB sur mon brave petit Seagate Dockstar, qui reconnait bien le dispositif ( le driver USB série ftdi_sio est de base dans mon système Debian Squeeze).
# dmesg 1 usb 1-1.3: new full speed USB device using orion-ehci and address 5 2 usb 1-1.3: New USB device found, idVendor=0403, idProduct=6001 3 usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 4 usb 1-1.3: Product: FT232R USB UART 5 usb 1-1.3: Manufacturer: FTDI 6 usb 1-1.3: SerialNumber: A500DB1Q 7 usb 1-1.3: configuration #1 chosen from 1 choice 8 usbcore: registered new interface driver usbserial 9 USB Serial support registered for generic 10 usbcore: registered new interface driver usbserial_generic 11 usbserial: USB Serial Driver core 12 USB Serial support registered for FTDI USB Serial Device 13 ftdi_sio 1-1.3:1.0: FTDI USB Serial Device converter detected 14 usb 1-1.3: Detected FT232RL 15 usb 1-1.3: Number of endpoints 2 16 usb 1-1.3: Endpoint 1 MaxPacketSize 64 17 usb 1-1.3: Endpoint 2 MaxPacketSize 64 18 usb 1-1.3: Setting MaxPacketSize 64 19 usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB0 20 usbcore: registered new interface driver ftdi_sio 21 ftdi_sio: v1.5.0:USB FTDI Serial Converters Driver
Premier test pour vérifier si ça fonctionne bien
On lit le port série correspondant en le paramétrant correctement :
- avec minicom
configurer en 1200 bauds, 7 bits data, 1 bit stop, parité paire, sur /dev/ttyUSB0
- ou directement
# stty -F /dev/ttyUSB0 1200 sane evenp parenb cs7 -crtscts # cat /dev/ttyUSB0 ETAT 000000 B ADCO xxxx OPTARIF BASE 0 ISOUSC 45 ? BASE 006765514 - ...
teleinfuse : accès aux infos téléinfo en mode fichier
Deux programmes sympa permettent d’accéder aux informations de son compteur via un système de fichier virtuel. Le premier (chronologiquement) est codé en python. Hélas, teleinfofs ne fonctionne pas sur mon arm :
NotImplementedError: Linux armv5tel is not supported.
Heureusement, ça fonctionne bien mieux avec le programme C teleinfuse (source migré de googlecode vers github):
# apt-get install subversion # svn checkout http://teleinfuse.googlecode.com/svn/trunk/ teleinfuse-read-only# git clone https://github.com/itineric/teleinfuse # apt-get install libfuse-dev# apt-get install fuse-utils# cd teleinfuse # make # cp teleinfuse /usr/local/bin # mkdir /mnt/teleinfo-maison # ./teleinfuse /dev/ttyUSB0 /mnt/teleinfo-maison # cd /mnt/teleinfo-maison # ls ADCO BASE IINST IMAX ISOUSC MOTDETAT OPTARIF PAPP PTEC status
Chacun des fichiers correspond à un type d’informations remonté par le compteur (voir détail ici). Par exemple, BASE contient l’index de compteur si on a souscrit à l’option tarifaire de base chez EDF
Pour lancer le montage du système de fichier à chaque boot, la première méthode que j’ai utilisé a été de modifier /etc/rc.local (copier teleinfo dans /usr/bin ou /usr/local/bin):
# releve teleinfo EDF teleinfuse /dev/ttyUSB0 /mnt/teleinfo-maison -o allow_other teleinfuse /dev/ttyUSB1 /mnt/teleinfo-garage -o allow_other
[EDIT 26/09/2014] On peut procéder de manière plus élégante, et grâce à Pierre (voir les commentaires) j’ai enfin pu utiliser /etc/fsab :
/usr/local/bin/teleinfuse#/dev/ttyUSB0 /mnt/teleinfo-maison fuse user,allow_other 0 0 /usr/local/bin/teleinfuse#/dev/ttyUSB1 /mnt/teleinfo-garage fuse user,allow_other 0 0
Remarque
Il peut être utile de modifier le Makefile de teleinfuse pour enlever l’option DEBUG si on veut avoir une syslog plus propre
Remontée des info vers emoncms (OpenEnergyMonitor)
Principe
Avec une crontab
J’ai créé un petit script shell à lancer en cron toutes les mn. Il relève puissance apparente et index de base de tous les compteurs énumérés et les remonte à emoncms, ainsi que le reste de la différence entre le compteur global et tous les autres.
Le script est à adapter si on a du triphasé ou un abonnement autre que celui de base. Il faut par ailleurs modifier 3 constantes en fonction de sa config (APIKEY et BASEURL pour le serveur emoncms, MOUNTBASE pour le préfixe des noms de répertoire de montage teleinfuse)
Paramètres : liste des suffixes identifiant les différents compteurs. Le dernier compteur correspond au compteur EDF global
/usr/local/bin/teleinfo2emoncms
#!/bin/bash APIKEY="METTRE_ICI_SON_API_KEY_ECRITURE" MOUNTBASE="/mnt/teleinfo-" BASEURL="http://vis.openenergymonitor.org/emoncms3/api/post?apikey="${APIKEY}"&json={" if [ $# -eq 0 ] ; then echo $0 [compteurn ...] compteurglobal exit -1 fi url=$BASEURL i=0 for a in ${BASH_ARGV[*]} ; do if [ -r ${MOUNTBASE}$a/status ]; then if [ `cat ${MOUNTBASE}$a/status` = online ]; then BASE=`cat ${MOUNTBASE}$a/BASE` # read counter value (Kwh) BASEWH=`expr $BASE + 0` # remove leading zeros let "BASEKWH=$BASEWH/1000" # convert to Kwh PAPP=`cat ${MOUNTBASE}$a/PAPP` # read power value PAPP=`expr $PAPP + 0` if [ $i -eq 0 ]; then url=${url}${a}.BASEKWH:${BASEKWH},${a}.PAPP:${PAPP} RESTEWH=$BASEWH RESTEPAPP=$PAPP else url=${url},${a}.BASEKWH:${BASEKWH},${a}.PAPP:${PAPP} RESTEWH=$(($RESTEWH - $BASEWH)) RESTEPAPP=$(($RESTEPAPP - $PAPP)) fi i=$(($i + 1)) else echo teleinfo $a is not online 1>&2 exit 1 fi else echo teleinfo $a is not mounted 1>&2 exit 1 fi done if [ $# -eq 1 ]; then url=${url}"}" else let "RESTEKWH=${RESTEWH} / 1000" # convert to Kwh url=${url},reste.BASEKWH:${RESTEKWH},reste.PAPP:${RESTEPAPP}"}" fi #echo "$url" curl -silent --request GET $url >/dev/null
Il est appelé en crontab :
# Consommation electrique * * * * * /usr/local/bin/teleinfo2emoncms garage maison >/dev/null 2>&1
Avec FHEM
Depuis que j’ai écrit ce post, j’ai développé un petit module TELEINFO pour le logiciel libre de domotique FHEM. Il est possible de l’utiliser pour remonter ses données dans emoncms.
Configuration d’emoncms
On peut lire avec profit les explications du site OpenEnergyMonitor : using Emoncms
Pour ma part, j’ai commencé en utilisant le service en Cloud proposé sur emoncms. Ce qui m’a causé quelques soucis à cause des évolutions fréquentes… Il est aussi possible de l’auto-héberger (quelques conseils pour le faire sur un serveur mutualisé OVH)
Créer un compte puis utiliser le service sur http://emoncms.org/
Aller sur http://emoncms.org/ .
Ne pas utiliser l’ancien site vis.openenergymonitor.org qui tourne avec une version plus ancienne d’emoncms, plus limitée au niveau de la création visuelle des dashboards.
Transformer et stocker les données
Les données remontées par le script teleinfo2emoncms arrivent sous forme de sources (input) qu’il faut transformer en flux (feeds) au moyen de traitements (process) :
La chaîne de traitement est celle-ci, dans le cas où on part de l’information de puissance comme donnée de base (c’est le principe de la chaîne d’acquisition du projet OpenEnergyMonitor ):
Avec les données téléinfo, pas la peine de convertir puissance apparente (PAPP), en kWh/j, car on a déjà tout ce qu’il faut, avec une meilleure précision (pas besoin d’échantillonner à une fréquence élevée), en s’appuyant sur le compteur en kWh (BASE , dans le cas d’un abonnement de base) :
Dans les faits ça se rentre comme ça :
utiliser les feeds pour créer des dashboards
Creating a dashboard donne des explications succinctes sur le mode opératoire à suivre pour les créer et sur les différents widgets utilisables.
Par exemple, voici ce qu’il est possible de faire :
Références
Un bon point d’entrée est Téléinformation compteur électrique qui donne en premier lien le thread du forum neufbox4.org relatif à la téléinfo et qui a vu le développement de teleinfuse
Informations sur la téléinformation ERDF
- La téléinformation EDF : ce qu’il faut savoir du fonctionnement de la téléinformation ERDF
- Sorties de télé-information client des appareils de comptage électroniques utilisés par ERDF (PDF – Version 4 – 01/07/2010) : les spécifications officielles
Hardware :
- Mode d’emploi du module USB-TELEINFO que j’ai utilisé
Software :
- teleinfuse : Système de fichier pour accéder au compteur électrique (en C)
- teleinfofs : Système de fichier pour accéder au compteur électrique (en python). Pas la peine de l’essayer sur une archi ARM : fuse.py ne marche que sur x86_64 et i686
- emoncms du projet OpenEnergyMonitor
- Tutoriaux emoncms sur le blogdomobase
- et d’autres softs à tester : graphes avec rrdtool, graphes avec highcharts, d’autres graphes avec highchart
Bonjour
merci pour ce tuto. Pour ma part j’ai récupéré les données de téléinfo sur le port série : /dev/ttyAMA0. Tout défile bien via car /dev/ttyAMA0
Est ce que la procédure est adaptable ?
J’ai essayé avec
# ./teleinfuse /dev/ttyAMA0 /mnt/teleinfo-maison
sans succès
Merci !
Bonjour Bruno,
Pour moi ça devrait marcher aussi. Quelle est l’erreur?
Par contre tel quel, /mnt/tic n’est lisible que par root. Je n’ai pas encore fouillé dans les options de mount.fuse mais la réponse y est certainement.
Côté /dev/ttyUSB* ça doit dépendre de l’ordre de branchement (quel port) mais je voudrais ne pas avoir à noter où doit être branché quoi.
Le ftdi a bien un serial number, et apparemment ça fait partie des prérequis de certification pour qu’un produit ait le logo usb. Certains ne s’embêtent pas pour si peu 🙂
J’ai testé avec ça, pas de /dev/tic après avoir débranché/rebranché le ftdi.
# udevadm info -a -p $(udevadm info -q path -n ttyUSB0) | egrep -i « ATTRS{serial}|ATTRS{idVendor}|ATTRS{idProduct} » -m 3
ATTRS{idVendor}== »0403″
ATTRS{serial}== »A5025UJD »
ATTRS{idProduct}== »6001″
# vi /etc/udev/rules.d/10-ftdi.rules
BUS== »usb », SYSFS{idProduct}== »6001″, SYSFS{idVendor}== »0403″, SYSFS{serial}== »A5025UJD », NAME= »tic »
J’ai mis à jour le post
– Pour la lecture par tous, c’est l’option allow_other
– Pour udev, je n’ai effectivement pas réussi à le faire marcher non plus
Pour monter le fs teleinfuse avec /etc/fstab :
A adapter évidemment au chemin du binaire et dev du port série.
/usr/local/bin/teleinfuse#/dev/ttyUSB0 /mnt/tic fuse user,defaults 0 0
Reste encore le problème du chemin du /dev/ttyUSBx quand on a plusieurs FTDI, mais visiblement les FTDI ont un numéro de série que n’ont pas forcément d’autres chips (là j’ai un prolific technologies sous la main et il ne donne que le vendor & device id, pas de serial number)
http://aeturnalus.com/robotics/mapping-ftdi-to-files-with-udev/
A suivre
Super, ça marche ! C’est con mais j’avais oublié de mettre le chemin de teleinfuse dans /etc/fstab …
MERCI !
Perso je n’ai pas le problème du chemin du /dev/ttyUSBx : ils se remontent toujours bien au même endroit.
Bonjour,
je viens de finir une install chez moi de emontx avec openenergymonitor et je cherche des plugs autonomes communiquant avec mon recepteur. Genre ce matos mais connecté (http://www.castorama.fr/store/Controleur-de-consommation-electrique-prod4300002.html#prodTabs). Avez vous eu connaissance de ce type de produit,le but est de superviser la conso d’un appareil derrière une prise.
Merci pour tout
Bruno
Bonjour,
C’est quoi ton récepteur : une emonBase sur raspberry pi ?
Je ne connais pas de prise qui remonte les infos directement vers emonbase de la même manière qu’un emontx. Par contre si tu es sur un raspberry pi tu peux utiliser un logiciel tel que FHEM pour récupérer les infos de prises « compteur d’energie » , pour peu que la prise utilise un protocole reconnu.
Personnellement je n’ai pas de prises mais j’utilise ce principe avec une sonde OWL micro+ dont j’intercepte les données avec FHEM et un module radio RFXtrx433 pour les renvoyer à emoncms.
Salut Olivier,
Je viens de te faire un commentaire sur ton install chez OVH.
En fait ce n’est pas une instal auto-hebergée (en local il y a juste un Raspberry qui envoie des les entrées sur un serveur emoncms en distant) Je ne voulais pas que le RPI fasse encore serveur de base de donnée sur la carte memoire, il héberge un web serveur qui visualise les tableaux de bords distants.
Oui j’utilise dyndns. et oui je confirme, chez OVH il y a un dynamic DNS des que tu as un abonnement.
salut olivier
Tiens moi au courant..
Au fait, j’ai un module teleinfo qui fonctionne sur rpi(qui me recuperes les infos sur mes deux compteurs)
regardes chezpatrick.dyndns.org
bon we
Salut Pat,
Ca y est, ça a l’air de marcher avec quelques paramétrages : Installation d’emoncms sur serveur mutualisé OVH. Je n’ai pas eu de problème comme toi pour me loguer mais d’abord pour avoir la mire de logging (problème d’une directive .htaccess non reconnue) puis avec le stockage des données (MySQL n’est plus par défaut).
Sympa ton install autohébergée. Tu utilises dyndns.org pour chez toi? A priori je crois qu’il y a un dynamic DNS gratuit dès lors qu’on est sur OVH.
bonjour
Je voudrais savoir si quelqu’un a deja installé( et herbergé) emoncms sur une plateforme comme ovh.
merci
Bonjour Pat,
C’étais mon idée de le faire mais je n’ai pas encore mis en oeuvre. A priori les quelques tests que j’avais fait semblaient montrer que ça devait marcher
A priori intéressant car permet d’adapter le code qui comporte quelques bugs du genre affichage du symbole euro, etc.
Olivier
Salut Olivier
Je viens d’installer EMONCMS sur un serveur OVH. La page de logging s’affiche mais rien de plus . Quelqu’un est arrivé plus loin?
Merci de vos réponses.
Je n’ai pas encore essayé. Pour l’instant j’écris un module Téléinfo pour FHEM. Une fois qu’il est à peu près au point j’envoie ses données vers OVH si j’arrive à installer emoncms sur OVH !
bonjour,
J’utilise depuis peu Emoncms , et j’ai du mal à obtenir des graphiques Kwh/day a partir des index des compteurs EDF.
J’alimente la base chaque heure et le graphique me montre des valeurs enormes et non pas la difference de deux valeurs d’index poutant j’utilise la fonction kwhinckwd. Qu’y a t il de plus à parametrer ?
Il faut utiliser la fonction « kWh to kWh/d » (attention à ne pas utiliser non plus « kWh to kWh/d (OLD) ». Si on utilise emoncms en français, il y a deux fonctions « kWh vers kWh/j » : il faut prendre la deuxième. Attention à partir d’une situation saine en supprimant les flux de type kWh/j éventuellemnt créés, sans les réutiliser, car ils ne sont pas nécessairement compatibles côté base de données.
Le prix du KWh est attaché au widget de visualisation, pas à un feed. On peut donc imaginer, en utilisant le produit brut de pomme, avoir un feed pour les HC, un pour les HP et les visualiser séparément pour avoir leur coût. Ou créer un feed avec le coût de chaque (ce qui permet de gérer le changement de tarification – à la hausse il va sans dire-) et sommer les 2.
Hello ! Superbe article ! Moi qui utilise open.sen.se et le trouve un peu généraliste, je serais bien tenté de basculé sur emoncms ! je vois que tu as un forfait sans distinction HP/HC, sais-tu si EmonCMS permet de gérer correctement ce type d’abonnement (avec donc des prix du kW différents) ?