Interface de connexion de la liaison téléinfo du compteur électrique version 2

Introduction

La liaison téléinformation du compteur d'électricité EDF fournit en permanence des informations sur son état: valeur des compteurs, intensité instantanée, période tarifaire, .... Il est donc nécessaire de disposer d'un système alimenté en permanence pour les traiter et enregistrer. Etant donné la faible charge demandée, ce système peut être partager avec une autre application, comme un modem routeur dans la version précédente ou un PBX dans cette version, ou, bien sûr, une quelconque application de votre choix.

Le lecteur notera, cependant, que les anciens compteurs ne disposent pas de liaison téléinfo rendant, dans ce cas, cette interface inutile.

Le fonctionnement de la liaison téléinformation a déjà été présenté dans les documents [1], [2], [3], [4]. Le lecteur est donc inviter à s'y reporter, si ce n'est déjà fait.

L'application de cette interface se fait avec une machine disposant des facilités suivantes:

Fonctionnalités de la carte d'interface

Note à propos du nommage

Le précédent projet était nommé nbtelei parce qu'il était raccordé à un modem neufbox alors qu'ils avaient en commun que les quelques fils qui les reliaient et qui est toujours disponible sur cette page (voir la page ici). Ce projet s'appelle avrtelei2 parce que, comme le précédent, il traite de la téinformation du compteur et qu'il plus spécifique aux microprocesseurs AVR qu'aux systèmes auxquels il peut être raccordé.

On peut faire la même remarque pour le programme nbtirelay qui communique avec le processeur avr et qui est maintenant appelé tiserver, un terme plus générique n'incluant pas de dépendance à une architecture particulière.

Système hôte

La carte d'interface est, dans cette version, raccordée à une carte Raspberry Pi destinée à héberger un PBX Asterisk (voir la page de description ici). Les 2 cartes se partagent l'alimentation et la boite.

Principe de fonctionnement

Le projet comporte un circuit d'interface à microprocesseur, analogue à celui décrit dans le document [3], et son logiciel. Le microprocesseur lit en permanence la liaison téléinfo, la décode, filtre les informations et les transmet sur la liaison série à 115200 bits/s, 8 bits, sans parité.

Le filtrage consiste à enlever les informations redondantes. Dans le cas de tempo, par exemple, les 6 compteurs sont présents dans la trame, alors que dans la période tarifaire en cours, un seul est activé. L'intensité instantanée peut être échantillonnée avec une périodicité variable de 1 à 255 secondes et les informations ne sont transmises que si il y a changement par rapport à la valeur précédente.

La liaison série du micro est directement connectée à l'interface série du système hôte. En effet cette interface ne sert pas au fonctionnement normal du modem mais simplement pour l'aide au debug. Elle est donc utilisable par notre interface sans condamner sa première affectation. Un logiciel est nécessaire pour la gestion de la liaison série sur le système hôte. Un synoptique montre les différents blocs du projet.

Dans le système hôte, les informations sont reçues par un logiciel tiserver travaillant en mode serveur. Il est en permanence à l'écoute de la liaison série et d'un port réseau tcp/ip. Les informations provenant de la liaison série sont stockées en local dans un fichier et traités pour une base de données (en fichiers) qui est exploitée par le programme d'affichage teleinfo.

Les informations provenant du port tcp/ip sont soit destinées à l'interface et alors ils sont simplement transmis sur la liaison série vers l'interface, soit destinées au serveur lui-même pour la gestion des fichiers de téléinfo et alors elles traitées par le serveur. Le serveur gère la transmission et la suppression des fichiers de téléinfo à la demande. Cette fonctionnalité, bien que moins utile dans cette version, est conservée, car elle permet, entre autres, de reflasher le micro de la carte à distance.

Ce programme teleinfo est un programme CGI. Il est appelé par le server http, ici lighttpd, et se limite pour l'instant, à remplir une table avec la valeur des compteurs à partir de la base de données.

Le programme dlreader qui servait pour rappatrier les fichiers de téinfos dans la version précédente, ne sert plus directement. Il peut cependant être utile pour reconstruire la base de données en cas de besoin.

La carte d'interface

Voici le schéma de la carte d'interface :

La carte d'interface est réalisée autour d'un microprocesseur AVR atmega644 comportant 64 k octets de mémoire flash. On notera que cette capacité n'est pas nécessaire pour ce projet et qu'un atmega164 ou atmega324 ferait l'affaire, mais le choix m'est imposé par le contenu des tiroirs.

On peut se demander pourquoi un si gros processeur. En fait si on veut utiliser l'oscillateur temps réel et l'oscillateur normal, on n'a pas le choix car sur les petits boitiers les sorties TOSC1 TOSC2 sont sur les mêmes pins que l'oscillateur principal XTAL1 XTAL2, ce qui présente peu d'intérêt. Il eu été préférable de sacrifier 2 entrées ADC, par exemple !.

Un quartz permet de donner la stabilité nécessaire sur la liason série, ainsi qu'au décodage de la téléinfo. Le transfo est un transfo d'isolement de modem. Celui-ci a été récupéré sur un modem RTC foudroyé. Après ce test en grandeur réelle, on peut supposer qu'il évitera la propagation de la foudre aux équipements connectés.

Un cable de liaison série permet le racordement direct au niveau TTL des signaux txd et rxd à 3.3 V. l'énergie étant fournie par l'alimentation commune.

Pour les amateurs d'IO, il reste 23 pins disponibles qui peuvent servir de commande à distance. Ils sont accessibles de la box, d'un pc sur le réseau local ou même d'internet.

Un deuxième oscillateur à 32768 Hz sert de pilote à l'horloge temps réel utilisant les diviseurs du timer2.

La consommation du montage est de 6 mA sous 3.3 volts et 140 microA en mode sleep power save à partir des piles, lorsque l'alimentation principale est absente.

photo du montage

Voici une photo du montage avec à gauche l'alimentation sur ma plaque de base, la carte d'interface et la carte Raspberry Pi.

Horloge temps réel

L'horloge temps réel consiste en une variable 32 bits incrémentée toutes les secondes par interruption du timer2.

Une émulation du RTC ds1307 de Maxim a été implémentée et est accessible par le bus i2C. Cependant vu que les interruptions TWI (i2c) sont moins prioritaires que les interruptions timer, que celles ci, arrivant à 3600 Hz, amènent une charge importante de l'avr, et qu'en plus il faut effectuer un transcodage de l a date en secondes à la date secondes, minutes, heures, jour, mois, année, la réponse n'arrive pas aussi rapidement que ne le ferait le circuit lui même, alors le module du noyau rtc-ds1307 s'impatiente et n'attend pas la réponse. Il est donc exclus d'utliser, sans modification, ce module rtc-ds1307 et la commande hwclock qui va avec.

Dans l'archive vous trouverez un fichier nommé rtc_ds1307.c qui est un programme de Andre Wussow modifié par moi même et qui permet de lire le rtc à partir du Raspberry Pi avec le module i2c-dev.

En ce qui concerne ce projet, la synchronisation est faite par le dialogue entre les 2 programmes avrtelei2 et tiserver.

Le logiciel de la carte d'interface

Le logiciel est écrit en C et dispose, en plus des fonctions énumérées au dessus, d'un interprêteur de commande simple et simpliste pour les besoins de test, ainsi que le bootloader habituel pour programmer la mémoire flash.

Un dispositif de mise en isolement a été nécessaire pendant le démarrage de la neufbox4. Il est déjà moins nécessaire avec le raspberry pi. En effet les messages produits par la neufbox sont envoyés sur la liaison série et perturbaient l'interface. Dautre part l'interface doit être silencieuse au moins pendant la durée de vie du bootloader de la box, le CFE, pour éviter d'interrompre le boot. Dès la détection d'un message du CFE, l'interface s'isole pendant 2 minutes.

La programmation de la mémoire flash du microprocesseur se fait soit par la laison série en utilisant les fonctionnalités d'autoprogrammation (méthode préférée, voir fichier boot.c), soit en déplacant le microprocesseur sur un programmateur puisque les connexions ISP (In System Programming) ne sont pas installées. Comme la liaison série est accessible en réseau, le programmateur pgrm se connecte à la box ou raspberry pi qui relaie les infos de programmation dans les 2 sens.

Voici un exemple de session vers la carte d'interface à travers la box. Le # et le texte qui le suit est un commentaire rajouté pour éclairer le lecteur et ne fait pas partie de la session.!

[hq@olix php]$ telnet pi 2946
Trying 192.168.1.1...
Connected to nb.
Escape character is '^]'.
W                      # demande d'identification
Nbtelei_1.0.59
D                      # demande de la date
14:57:04 18:04:2012
N                      # demande mode Iinst/Papp période d'échantillonnage
I/P: 0 15
IC                     # lecture du port C
C PORT 0, PIN 6, DDR 0
iC FF                  # écriture de FF dans le port C
IC                     # relecture du port C (il n'a que 6 bits)
C PORT 7F, PIN 3F, DDR 0
c                      # lecture des index du compteur EDF
CNT: 0 25164608 25164608 0
CNT: 1 26874105 26878929 4824
CNT: 2 5205527 5205527 0
CNT: 3 5023635 5023635 0
CNT: 4 3097098 3097098 0
CNT: 5 1431020 1431020 0
J                      # lecture intensité instantanée 
PAPP: 540 IINST: 1 2

Il est possible de voir une copie des messages enregistrés au fil de l'eau, en se connectant au système hôte.

hq@olix php]$ telnet pi 2946
Trying 192.168.1.1...
Connected to nb.
Escape character is '^]'.
fa
D
 7:15:54 19:04:2012
4F8FBCCA  PAPP: 320 IINST: 1 2
4F8FBD06  PAPP: 370 IINST: 1 1
4F8FBDF6  PAPP: 370 IINST: 1 2
4F8FBE05  PAPP: 220 IINST: 1 1

Outils de développements

Le logiciel est développé sur un système Linux. Pour ce faire, il est nécessaire de disposer d'un compilateur spécifique pour les AVR et installer les paquets suivants, qui ne sont pas installés par défaut :

Une fois le programme compilé, il peut être téléchargé dans la mémoire flash du microprocesseur à l'aide du logiciel pgrm et sa fonction terminal permet d'en controler le fonctionnement. Attention cependant la première fois il faut procéder autrement : voir les pages relatives à pgrm.

Le schéma est créé avec gschem qui fait partie de la suite gEDA. Si vous souhaitez modifier le schéma, vous en aurez sans doute besoin ainsi que la bibliothèque de symboles gedasym.

Compilation

Vous avez besoin des outils de développement précédemment cités:

tar Jxvf avrteli2-yyyymmdd.tar.xz
cd avrteli2-yyyymmdd
make

Les logiciels à installer sur le système hôte

Le système hôte étant un système Linux, il suffit d'installer le compilateur C si ce n'est pas déjà fait. On copie alors les paquets sur le système et on compile comme si on était sur son PC. Il est aussi possible d'utilser un compilateur croisé sur son PC.

Ces logiciels sont également écrit en C et constituent les paquets tiserver-yyyymmdd.tar.xz, dlreader-yyyymmdd.tar.xz teleinfo-yyyymmdd.tar.xz que vous pouvez télécharger et compiler.

Tiserver est une application fonctionnant sur la machine recevant le flux de données sur sa liaison série connectée à la carte avrtelei2. Cette application loggue sur le disque les messages reçus et maintient "au fil de l'eau" une base de données de téléinfo.

tar Jxvf tiserver-yyyymmdd.tar.xz
cd tiserver-yyyymmdd
make

Dlogread permet de recomposer l'archive et les données de téléinfo à partir des fichiers logs.

tar Jxvf dlreader-yyyymmdd.tar.xz
cd dlreader-yyyymmdd
make

Teleinfo est une application cgi-bin chargée de répondre aux requêtes envoyées au serveur web installé sur la machine où se trouvent les données de téléinfo.

tar Jxvf teleinfo-yyyymmdd.tar.xz
cd teleinfo-yyyymmdd
make

Références Documentaires

  1. Spécification techniques du signal de téléinformation.
  2. Utiliser son PC pour relever son compteur d'électricité.
  3. Un enregistreur de données et évènements autour de son compteur d'électricité.
  4. Démodulation ASK par un microprocesseur.
  5. Interface de connexion de la liaison téléinfo du compteur électrique.

LICENSE

The avrtelei2, tiserver, dlogread, teleinfo software are licensed under the terms of the GNU General Public License as published by the Free Software Foundation. See the file "COPYING" in their respective directory.

Download