FHEM : module TELEINFO de lecture de compteur ERDF

Le logiciel libre FHEM est actuellement le moteur de mes expériences domotiques, sur lequel j’intègre progressivement de nouvelles fonctionnalités. Sauf, jusqu’à présent, le suivi de mes compteurs électriques (dans un premier article, j’ai décrit comment j’utilise le programme Linux  teleinfuse et emoncms pour exploiter les informations d’un compteur électrique ERDF équipé d’une interface téleinfo pour établir des tableaux de bord sympathiques sur le site www.emoncms.org, et dans un un deuxième comment l’auto-héberger sur OVH.)

Je souhaitais pouvoir exploiter les informations de ces compteurs sous FHEM. Par exemple :

  • pour me rappeler en sortant de chez moi que j’ai oublié d’éteindre la lumière quelque part, ce qui est malheureusement un classique …
  • faire des simulations de coûts avec un autre type d’abonnement, en reprogrammant le sous-compteur qui est à ma main pour pouvoir exploiter les informations de période tarifaire …

J’ai donc écrit un petit module FHEM (32_TELEINFO.pm) qui va me permettre d’exploiter ces infos, en adaptant le code de deux autres modules : 15_CUL_EM.pm gère des compteurs d’impulsion et 32_SYSSTAT.pm lit les stats Linux… : merci à leurs auteurs respectifs rudolfkoenig et justme1968.

Principe

Le module va utiliser le système teleinfuse d’accès aux infos téléinfo en mode fichier. Ça permet de simplifier l’écriture du module qui va lire périodiquement les valeurs de compteurs dans des fichiers, plutôt que de devoir se mettre à l’écoute d’un port série. Par ailleurs, je peux de cette manière continuer à utiliser les scripts d’alimentation d’ emoncms déjà écrits, en attendant de le faire via FHEM …

Installation

Le fichier 32_TELEINFO.pm doit être copié dans /opt/fhem/FHEM.

Utilisation

Préalable

Le module utilisant les infos récoltées par teleinfuse, il faut lancer teleinfuse avant FHEM :

# teleinfuse /dev/ttyUSB0 /mnt/teleinfo-maison -o allow_other

Cette commande permet de monter dans le répertoire /mnt/teleinfo-maison un système de fichier Fuse qui contient les infos relatives aux différentes informations du compteur.

Définition du compteur dans FHEM

La définition de compteur la plus simple permet réaliser un polling toutes les 60 s des valeurs téléinfo :

/opt/fhem/fhem.cfg :
define teleinfo_maison TELEINFO /mnt/teleinfo-maison

Il est possible de limiter la fréquence de polling à laquelle on interroge teleinfuse pour récupérer les informations . Par exemple, pour le faire toutes les 5 mn :

define teleinfo_maison TELEINFO /mnt/teleinfo-maison 300

Si on veut récupérer les valeurs de consommation en espèces sonnantes et trébuchantes il faut préciser les valeurs de coût (en euros) de son fournisseur. Par exemple pour un abonnement EDF tarif bleu option base, avec un compteur de 45A (à l’heure où j’écris : 13,29 c/kWh et 14,29 € d’abonnement par mois) :
attr teleinfo_maison cost-BASE 0.1329
attr teleinfo_maison basicFeePerMonth 14.29

Initialisation et cas d’erreur possibles

  • Si le montage teleinfuse n’est pas effectif au démarrage, le device FHEM TELEINFO n’est pas créé. Les erreurs sont affichées dans la log FHEM.
  • S’il y a une erreur teleinfuse (ex: mauvaise liaison série) à l’initialisation ou en fonctionnement, la valeur de « state » donne l’erreur.
  • L’ensemble des valeurs téléinfo est remontée, si le statut est « online »

En régime de croisière

Valeurs téleinfo

Un événement est généré pour chacune des valeurs d’information de compteur (voir le tableau ci-joint tiré du paragraphe 2.3 du document de référence ERDF) Sauf pour l’événement ADPS qui n’est émis une fois que lorsque la puissance consommée dépasse la puissance souscrite. Seule différence par rapport au tableau, les index sont exprimés en kWh (avec  3 décimales) et pas en Wh.

De nombreuses valeurs sont statiques -adresse du compteur-  ou ne changent que lors d’une reconfiguration du compteur -options tarifaire, intensité souscrite etc.-. Il est possible de limiter le nombre d’événements répétitifs avec  les attributs event-on-change-reading et event-on-update-reading . Par exemple, si on ne veut remonter que les valeurs d’intensité et de puissance instantanée à chaque polling, et ne générer un événement pour les autres indicateurs que lorsqu’ils change :

attr teleinfo_maison event-on-change-reading .*
attr teleinfo_maison event-on-update-reading IINST,PAPP

Valeurs calculées

A chaque polling des valeurs téléinfo, on calcule

  • la puissance moyenne sur la période (P_avg_<polling>)
  • l’énergie consommée sur la période (<index>_cum_<polling>)

Chaque début de journée sont calculées :

  • les informations de consommation du jour précédent en kWh (<index>_cum_day) et en euros (<index>_cost_day)
  • la valeur de compteur en début de journée  (<index>_cost_day) :
2013-12-05_00:00:45 teleinfo_maison BASE_cum_day: 11.475
2013-12-05_00:00:45 teleinfo_maison BASE_start_day: 17765.302
2013-12-05_00:00:45 teleinfo_maison BASE_cost_day: 1.525

Idem en chaque début de mois pour les valeurs mensuelles.

Affichage dans FHEM

On peut rendre l’affichage plus sympa en ajoutant une icone :

attr teleinfo_maison  icon measure_power_meter

De base, c’est le statut du dispositif teleinfo qui est affiché ( ‘online’ si tout va bien…). Si on préfère afficher les valeurs d’intensité et de puissance apparente, on peut ajouter la ligne suivante (pour du monophasé en abonnement EDF de base) :
attr teleinfo_maison stateFormat P: P_avg_60s W jour: BASE_cum_day kWh / BASE_cost_day €

Logs et graphes

Installer teleinfo.gplot dans /opt/fhem/www/gplot

Par exemple, pour loguer les événements sous forme de fichier texte et afficher la puissance moyenne

define FileLog_teleinfo_maison FileLog ./log/teleinfo_maison-%Y-%m.log teleinfo_maison
attr FileLog_teleinfo_maison logtype text,teleinfo
define weblink_teleinfo_maison SVG FileLog_teleinfo_maison:teleinfo:CURRENT
attr weblink_teleinfo_maison alias "Consommation electrique"

Remarque

C’est une première version qui fonctionne dans mon environnement (abonnement de base monophasé) et qui devrait fonctionner avec d’autres types d’abonnements (y compris triphasé). Merci de me remonter les bugs (et les corriger si possible!) si vous l’utilisez …