Demodulateur teleinformation EDF
De MicElectroLinGenMet.
Sommaire |
La liaison téléinfo
(Source: [GESTIONNAIRE D'ÉNERGIE])
Les compteurs électroniques EDF possèdent deux bornes de téléinformation à disposition du client. Sur celles-ci, il est possible d'y lire des données informatiques sur la consommation électrique du client.
L'utilisation de ces bornes est surtout destinée aux gestionnaire d'energie disponible dans le commerce. Mais il est aussi possible d'exploiter ces données sur un PC.
Ces informations sont émises cycliquement sous forme de messages composés d’une étiquette d’identification suivie généralement d’une valeur. Le signal est modulé à 50 KHz : la présence de modulation correspondant à un 0 logique, l’absence à un 1 logique.
Il est donc nécessaire de démoduler ce signal. Après quoi on obtient une suite de caractères ASCII émise à 1200 bits/s, 7 bits/caractères, parité paire, 1 bit de stop.
Chaque information débute par le caractère LF (0A hexa), suivie de l’étiquette, de la valeur associée et se termine par le caractère CR (0D).
Autres sources d'informations sur le sujet:
Détail des trames téléinformation
(Source: [GESTIONNAIRE D'ÉNERGIE] et [Teleinfo])
Les infos sont transmises cycliquement sur la ligne, modulées en ASK à 50kHz, ce qui correspond en gros à : soit aucune tension présente, soit un signal à 50kHz de 10V CC environ. Le 0V équivaut à un 1 logique, le 50kHz à un 0 logique.
Pour être exploitées, ces infos doivent être démodulées pour être aux formats TTL ou RS232.
C'est donc une liaison série qui délivre des caractères ASCII suivant le protocole suivant :
- 1200 bits/s
- 7 bits/caractères
- parité paire
- 1 bit de stop
Un groupe de messages complet constitue une trame qui débute par le caractère STX (code ASCII = 02), et se termine par ETX (03).
Chaque message composant la trame comprend :
LF (0x0A) Etiquette (4 à 8 caractères) SP (0x20) Données (1 à 12 caractères) SP (0x20) CC (caractère de contrôle) CR (0x0D)
Ces différents messages donnent les indications suivantes en fonction de l'abonnement souscrit :
- n° d'identification du compteur, étiquette: ADCO (12 caractères)
- option tarifaire (type d'abonnement) : OPTARIF (4 car.)
- intensité souscrite : ISOUSC ( 2 car. unité = ampères)
- index si option = base : BASE ( 9 car. unité = Wh)
- index heures creuses si option = heures creuses : HCHC ( 9 car. unité = Wh)
- index heures pleines si option = heures creuses : HCHP ( 9 car. unité = Wh)
- index heures normales si option = EJP : EJP HN ( 9 car. unité = Wh)
- index heures de pointe mobile si option = EJP : EJP HPM ( 9 car. unité = Wh)
- index heures creuses jours bleus si option = tempo : BBR HC JB ( 9 car. unité = Wh)
- index heures pleines jours bleus si option = tempo : BBR HP JB ( 9 car. unité = Wh)
- index heures creuses jours blancs si option = tempo : BBR HC JW ( 9 car. unité = Wh)
- index heures pleines jours blancs si option = tempo : BBR HP JW ( 9 car. unité = Wh)
- index heures creuses jours rouges si option = tempo : BBR HC JR ( 9 car. unité = Wh)
- index heures pleines jours rouges si option = tempo : BBR HP JR ( 9 car. unité = Wh)
- préavis EJP si option = EJP : PEJP ( 2 car.) 30mn avant période EJP
- période tarifaire en cours : PTEC ( 4 car.)
- couleur du lendemain si option = tempo : DEMAIN
- intensité instantanée : IINST ( 3 car. unité = ampères)
- avertissement de dépassement de puissance souscrite : ADPS ( 3 car. unité = ampères) (message émis uniquement en cas de dépassement effectif, dans ce cas il est immédiat)
- intensité maximale : IMAX ( 3 car. unité = ampères)
- Puissance apparente : PAPP ( 5 car. unité = Volt.ampères)
- groupe horaire si option = heures creuses ou tempo : HHPHC (1 car.)
- mot d'état (autocontrôle) : MOTDETAT (6 car.)
Nota : le compteur peut être configuré en mode "veille" et n'émettre que l'étiquette ADCO. Pour avoir accès au jeu d'informations complet, il suffit de le faire paramétrer en conséquent par EDF.
Documentation plus complète: Spécifications techniques d'EDF concernant la téléinformation
Le bornier téléinformation est situé dans mon cas en haut à droite du compteur électronique (Borne I1 - I2).
La liaison vers l'utilisation se fait par un câble 2 conducteurs avec écran relié à la terre.
Shéma du démodulateur
Shéma repris du site [GESTIONNAIRE D'ÉNERGIE], redessiné sous Kicad (version Linux).
Shéma PDF: teleinfo.pdf
Partie démodulateur seul avec sortie TTL
La led a été rajoutée pour visualiser la réception. Celle-ci clignote rapidement à la réception des trames.
Adaptateur TTL/RS232
Shéma à base du circuit Max232 pour la connexion à un port RS232 de PC.
Test du montage sur un PC Linux
Réception des trame sous minicom
Minicom est un programme de communication par port série sous Linux/Unix.
Bienvenue avec minicom 2.2
OPTIONS: I18n
Compilé le Jan 7 2007, 18:00:43.
Port /dev/ttyS1
Tapez CTRL-A Z pour voir l'aide concernant les touches spéciales
ADCO 70060936XXXX ? (paranoiac inside)
OPTARIF HC.. <
ISOUSC 20 8
HCHC 004063750 _
HCHP 004423070 '
PTEC HC.. S
IINST1 001 I
IINST2 000 I
IINST3 001 K
IMAX1 006 6
IMAX2 016 8
IMAX3 015 8
PMAX 05710 3
PAPP 00280 +
HHPHC E 0
MOTDETAT 000000 B
PPOT 00 #
ADCO 70060936XXXX ?
OPTARIF HC.. <
ISOUSC 20 8
HCHC 004063751
HCHP 004423070 '
PTEC HC.. S
IINST1 001 I
IINST2 000 I
IINST3 001 K
IMAX1 006 6
IMAX2 016 8
IMAX3 015 8
PMAX 05710 3
PAPP 00280 +
HHPHC E 0
MOTDETAT 000000 B
PPOT 00 #
Aide : CTRL-A Z | 1200 7E1 | NOR | Minicom 2.2 | VT102 | Déconnecté
Trame téléinfo
L'abonnement est de type Heures Creuses en tri-phasée.
ADCO 70060936XXXX ? OPTARIF HC.. < ISOUSC 20 8 HCHC 003064470 ^ HCHP 003660820 , PTEC HP.. IINST1 001 I IINST2 001 J IINST3 001 K IMAX1 015 6 IMAX2 022 5 IMAX3 026 : PMAX 09040 3 PAPP 00600 ' HHPHC E 0 MOTDETAT 000000 B PPOT 00 #
En hexa.:
00116940 0a 41 44 43 4f 20 37 30 30 36 30 39 33 36 XX XX |.ADCO 70060936XX| 00116950 XX XX 20 3f 0d 0a 4f 50 54 41 52 49 46 20 48 43 |XX ?..OPTARIF HC| 00116960 2e 2e 20 3c 0d 0a 49 53 4f 55 53 43 20 32 30 20 |.. <..ISOUSC 20 | 00116970 38 0d 0a 48 43 48 43 20 30 30 33 30 36 34 34 37 |8..HCHC 00306447| 00116980 30 20 5e 0d 0a 48 43 48 50 20 30 30 33 36 36 32 |0 ^..HCHP 003662| 00116990 33 34 34 20 2f 0d 0a 50 54 45 43 20 48 50 2e 2e |344 /..PTEC HP..| 001169a0 20 20 0d 0a 49 49 4e 53 54 31 20 30 30 31 20 49 | ..IINST1 001 I| 001169b0 0d 0a 49 49 4e 53 54 32 20 30 30 30 20 49 0d 0a |..IINST2 000 I..| 001169c0 49 49 4e 53 54 33 20 30 30 31 20 4b 0d 0a 49 4d |IINST3 001 K..IM| 001169d0 41 58 31 20 30 31 35 20 36 0d 0a 49 4d 41 58 32 |AX1 015 6..IMAX2| 001169e0 20 30 32 32 20 35 0d 0a 49 4d 41 58 33 20 30 32 | 022 5..IMAX3 02| 001169f0 36 20 3a 0d 0a 50 4d 41 58 20 30 39 30 34 30 20 |6 :..PMAX 09040 | 00116a00 33 0d 0a 50 41 50 50 20 30 30 35 39 30 20 2f 0d |3..PAPP 00590 /.| 00116a10 0a 48 48 50 48 43 20 45 20 30 0d 0a 4d 4f 54 44 |.HHPHC E 0..MOTD| 00116a20 45 54 41 54 20 30 30 30 30 30 30 20 42 0d 0a 50 |ETAT 000000 B..P| 00116a30 50 4f 54 20 30 30 20 23 0d 03 02 0a 41 44 43 4f |POT 00 #....ADCO|
Trame dépassement d'intensité en triphasé (ici phase 2):
00000000 0a 41 44 49 52 32 20 30 32 35 20 29 0d 0a 41 44 |.ADIR2 025 )..AD| 00000010 43 4f 20 37 30 30 36 30 39 33 36 XX XX XX XX 20 |CO 70060936XXXX | 00000020 3f 0d 0a 49 49 4e 53 54 31 20 30 30 31 20 49 0d |?..IINST1 001 I.| 00000030 0a 49 49 4e 53 54 32 20 30 32 35 20 50 0d 0a 49 |.IINST2 025 P..I| 00000040 49 4e 53 54 33 20 30 30 33 20 4d 0d 03 |INST3 003 M..|
Ce type de trames est suivi de trames courtes:
00000000 0a 41 44 43 4f 20 37 30 30 36 30 39 33 36 XX XX |.ADCO 70060936XX| 00000010 XX XX 20 3f 0d 0a 49 49 4e 53 54 31 20 30 30 31 |XX ?..IINST1 001| 00000020 20 49 0d 0a 49 49 4e 53 54 32 20 30 31 39 20 53 | I..IINST2 019 S| 00000030 0d 0a 49 49 4e 53 54 33 20 30 30 31 20 4b 0d 03 |..IINST3 001 K..|
Attention pour le monophasé: la trame de dépassement d'intensité commence par ADPS.
Programmes sous Linux
- Programme de test en C pour lire les données téléinfo: teleinfoserial_csv.c ou teleinfoserial_mysql.c
(Version identique à celle du Wrt54gl)
- Programme avec interface ethernet/série ou daemon ser2net (socket réseau)
Voir programme: Teleinfosocket mysql.c
- Versions du programme teleinfo_serial.c adaptées par d'autres utilisateurs
- Version pour compteur monophasé heures creuses, (Modifiée/Testée par Ludovic Gomez): Teleinfo_serial_mono.c
- Autre version qui "broadcaste" les trames téléinfo. sur le réseau: http://hallard.wikidot.com/teleinfo-broadcast
Interface teleinfo. pilote par un WRT54GL
L'arrivée du câble téléinformation n'étant pas à proximité du PC Linux, l'interface téléinfo. sera piloté par un port série du routeur wifi Wrt54gl flasher OpenWrt.
Le matériel
Le montage utilise une interface simple utilisant un 74HC05 pour adapter les niveaux 3.3V du port série au 5V.On pourra reprendre le montage de l'interface 1-wire pour wrt54gl car il reste 2 portes du 74HC05 de libres.Celle-ci utilisant le port série ttyS1, l'interface Téléinfo. prendra le port ttyS0.
Il faudra désactiver la console système utilisant ce port au niveau d'OpenWrt en modifiant un fichier.
root@wrt54gl:# cat /etc/inittab ::sysinit:/etc/init.d/rcS #tts/0::askfirst:/bin/ash --login => ligne diésée.
suivi d'un reboot.
ATTENTION: OpenWrt ne sera plus joignable par la console série mais le CFE doit rester joignable au boot normalement.
Ceci n'est pas génant pour l'interface Téléinfo car elle ne reçoit pas de données.
Shéma de l'interface
Photos du cablâge
Vu de l'interface 1-wire et téléinfo en test (78HC05 + DS2480B + DS18B20 sur la platine et un autre en extérieur):
Programmes
Voici deux programmes pour gérer l'interface sur le Wrt54gl (Voir Compiler_des_programmes_pour_le_Wrt54gl).
(Ces programmes fonctionneront aussi sur PC aprés compilation en précisant le bon port série).
Teleinfoserial_csv
Le premier (teleinfoserial_csv.c) va lire les données Téléinfo. demandées et les enregistrer dans un fichier.
Les données Téléinfo. sont disponible dans le fichier /tmp/teleinfo.csv
root@wrt54gl:~# cat teleinfo.csv '1223717885','2008-10-11','11:38:05','70060936XXXX','HC..','20','8430133','8216484','HP','1','0','1','11','20','19','7470','420','E','000000','00','0','0','0' '1223717944','2008-10-11','11:39:04','70060936XXXX','HC..','20','8430140','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0' '1223718005','2008-10-11','11:40:05','70060936XXXX','HC..','20','8430147','8216484','HP','1','0','1','11','20','19','7470','420','E','000000','00','0','0','0' '1223718065','2008-10-11','11:41:05','70060936XXXX','HC..','20','8430154','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0' '1223718124','2008-10-11','11:42:04','70060936XXXX','HC..','20','8430160','8216484','HP','1','0','1','11','20','19','7470','450','E','000000','00','0','0','0' '1223718185','2008-10-11','11:43:05','70060936XXXX','HC..','20','8430167','8216484','HP','1','0','1','11','20','19','7470','430','E','000000','00','0','0','0' '1223718244','2008-10-11','11:44:04','70060936XXXX','HC..','20','8430174','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0' '1223718305','2008-10-11','11:45:05','70060936XXXX','HC..','20','8430180','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0' '1223718365','2008-10-11','11:46:05','70060936XXXX','HC..','20','8430187','8216484','HP','1','0','1','11','20','19','7470','440','E','000000','00','0','0','0' '1223718424','2008-10-11','11:47:04','70060936XXXX','HC..','20','8430194','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0' '1223718485','2008-10-11','11:48:05','70060936XXXX','HC..','20','8430200','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0' '1223718544','2008-10-11','11:49:04','70060936XXXX','HC..','20','8430207','8216484','HP','1','0','1','11','20','19','7470','400','E','000000','00','0','0','0'
En mode DEBUG, le programme affiche la trame Téléinfo. reçue.
root@wrt54gl:~# ./teleinfoserial_csv ----- 2008-10-12 15:59:52 ----- ADCO='70060936XXXX' OPTARIF='HC..' ISOUSC='20' HCHP='008444126' HCHC='008228815' PTEC='HP' IINST1='002' IINST2='000' IINST3='001' IMAX1='011' IMAX2='020' IMAX3='019' PMAX='07470' PAPP='00610' HHPHC='E' MOTDETAT='000000' PPOT='00' ADIR1='' ADIR2='' ADIR3=''
Voir dans la syslog les messages d'erreurs ou d'informations.
Cette nouvelle version détecte les trames de dépassement d'intensité (ADIRn) en envoyant un message par la syslog et gère la vérification des checksums en bouclant jusqu'à 3 essais si erreurs.
En mode DEBUG, une erreur de checksum génére un fichier contenant la trame Téléinfo:
root@wrt54gl:~# hexdump -C teleinfotrame.1222095735 00000000 0a 41 44 43 4f 20 37 30 30 36 30 39 33 36 XX XX |.ADCO 70060936XX| 00000010 XX XX 20 3f 0d 0a 4f 50 54 41 52 49 46 20 48 43 |XX ?..OPTARIF HC| 00000020 2e 2e 20 3c 0d 0a 49 53 4f 55 53 43 20 32 30 20 |.. <..ISOUSC 20 | 00000030 38 0d 0a 48 43 48 43 20 30 30 38 30 30 35 39 32 |8..HCHC 00800592| 00000040 37 20 25 0d 0a 48 43 48 50 20 30 30 38 31 39 37 |7 %..HCHP 008197| 00000050 39 39 33 20 41 0d 0a 50 54 45 43 20 48 50 2e 2e |993 A..PTEC HP..| 00000060 20 20 0d 0a 49 49 4e 53 54 31 20 30 30 31 20 49 | ..IINST1 001 I| 00000070 0d 0a 49 49 4e 53 54 32 20 30 30 30 20 49 0d 0a |..IINST2 000 I..| 00000080 49 49 4e 53 54 33 20 30 30 31 20 4b 0d 0a 49 4d |IINST3 001 K..IM| 00000090 41 58 31 20 30 31 31 20 32 0d 0a 49 4d 41 58 32 |AX1 011 2..IMAX2| 000000a0 20 30 31 39 20 3b 0d 0a 49 4d 41 58 33 20 30 31 | 019 ;..IMAX3 01| 000000b0 36 20 39 0d 0a 50 4d 41 58 20 30 35 30 39 30 20 |6 9..PMAX 05090 | 000000c0 34 0d 0a 50 41 50 50 20 30 30 33 33 30 20 27 0d |4..PAPP 00330 '.| 000000d0 0a 48 48 50 48 43 20 45 20 30 0d 0a 4d 4f 54 44 |.HHPHC E 0..MOTD| 000000e0 45 54 41 54 20 30 30 30 30 30 30 20 42 0d 0a 50 |ETAT 000000 B..P| 000000f0 50 4f 54 20 30 30 20 23 0d 03 |POT 00 #..|
Paramètres à adapter dans le source en fonction de ses besoins:
- Port série à modifier en conséquence avec 'SERIALPORT.
- Nombre de valeurs à relever: NB_VALEURS + tableaux "etiquettes".
Teleinfoserial_mysql
Le deuxième (teleinfoserial_mysql.c) va lire les données Téléinfo. demandées et les enregistrer sur une base de données MySql distante.
Si le serveur MySql n'est pas accessible le programme sauvegarde les données en local sur le Wrt54gl (/tmp/teleinfo.csv) pour réimport ultérieure par exemple.
Ce programme détecte aussi les trames de dépassement d'intensité (ADIRn) en envoyant un message par la syslog et gère la vérification des checksums en bouclant jusqu'à 3 essais si erreurs.
Voir la table MySql Téléinfo: Structure de la table Teleinfo à adapter suivant abonnement EDF (ici données pour du triphasé).
Le programme sera lancer en crontab du Wrt54gl:
* * * * * /jffs/bin/teleinfoserial_mysql >> /tmp/teleinfoserial_mysql.log 2>&1
Ne pas oublier d'installer la "library" libmysqlclient pour utiliser les fonctions MySql:
root@wrt54gl:~# ipkg install libmysqlclient
Il n'y a pas d'affichage à la console sauf en mode DEBUG (affichage de la trame Téléinfo. reçue), Les messages d'erreurs ou d'informations étant renvoyés dans la syslog.
Voici une partie des données Téléinfo. enregistrées dans une base MySql sur la Debian:
dan@vesta:~$ ~/bin/listdatateleinfo.sh timestamp date heure hchp hchc ptec inst1 inst2 inst3 papp 1222352044 25/09/2008 16:14:04 8215020 8030891 HP 1 0 1 300 1222351984 25/09/2008 16:13:04 8215016 8030891 HP 1 0 1 300 1222351925 25/09/2008 16:12:05 8215012 8030891 HP 1 0 1 300 1222351864 25/09/2008 16:11:04 8215007 8030891 HP 1 0 1 300 1222351805 25/09/2008 16:10:05 8215003 8030891 HP 1 0 1 300 1222351744 25/09/2008 16:09:04 8214999 8030891 HP 1 0 1 300 1222351683 25/09/2008 16:08:03 8214995 8030891 HP 1 0 1 300 1222351625 25/09/2008 16:07:05 8214991 8030891 HP 1 0 1 300
Execution du programme en mode DEBUG:
root@wrt54gl:~# ./teleinfoserial_mysql ----- 2008-10-12 15:59:52 ----- ADCO='70060936XXXX' OPTARIF='HC..' ISOUSC='20' HCHP='008444126' HCHC='008228815' PTEC='HP' IINST1='002' IINST2='000' IINST3='001' IMAX1='011' IMAX2='020' IMAX3='019' PMAX='07470' PAPP='00610' HHPHC='E' MOTDETAT='000000' PPOT='00' ADIR1= ADIR2= ADIR3=
Paramètres à adapter dans le source en fonction de ses besoins:
- Port série à modifier en conséquence avec SERIALPORT.
- Nombre de valeurs à relever: NB_VALEURS + tableaux "etiquettes" à modifier selon abonnement.
- Paramètres Mysql (Serveur, Base, table et login/password)
- Autorisé le serveur MySql à accepter les connexions distantes pour le Wrt54gl.
Ser2net
Il est possible d'utiliser le package ser2net sur le Wrt54gl pour rediriger le port série du WRT vers un port réseau.
Il suffira de lire les données avec un programme comme Teleinfosocket mysql.c tournant sur un Linux distant.
Configuration sur le Wrt54gl, fichier ser2net.conf (sur OpenWrt Kamikaze 8.09):
root@wrt54gl:~# grep ttyS0 /etc/ser2net.conf 2001:raw:10:/dev/ttyS0:1200 EVEN 1STOPBIT 7DATABITS LOCAL -RTSCTS
Export donnee Teleinfo sur base MySql externe d'un FAI
Le fichier CSV généré par le programme teleinfoserial_csv.c pourra être exporté sur une base MySql de FAI (free.fr en l'occurence).
Voici un exemple de script: Export_donnee_Teleinfo_sur_base_FAI.php
Résultats sous forme graphique
Scripts PHP
Les données Téléinfo. sont lus par le script PHP dans la base MySql.
La librairie JpGraph permet de généré facilement un graphe en fonction de ces données.
(Dernière version des scripts PHP: 19/02/2009)
Consommation sur 24h. En vert apparait la consommation en période "heures creuse".
Intensité sur 24h des 3 phases (abonnement tri-phasé), décalées sur le graphes de 10A pour la lisibilité.
Consommation sur une période de 8 jours.
Scripts RRDTool
Exemples de scripts Shell pour générer des graphiques Téléinfo. avec RRDTool.
Pour le Wrt54gl, les packages rrdtool / rrdcgi sont disponibles. Il sont utilisé par temploggerd et owfs (Bus 1-wire sur Linksys Wrt54gl). A tester ...
Ci-dessous, graphes obtenus avec RRDTool sur PC.
Les scripts rrdtool n'ont pas évolué depuis car les données Téléinfo. étant stockés dans une base MySql cela faisait double emploi avec une base RRD en plus qui reste moins souple à utiliser.
12 Mai 2007
