Où sommes nous ?

Retour

BananaPI et téléinformation

Les compteurs EDF récents, c'est-à-dire ceux qui comportent un afficheur digital et non une roulette, disposent d'une prise nommée TéléInfo qui expose leurs statistiques sous forme d'une classique trame série : plus d'informations directement sur le site d'EDF.
Encore mieux, si vous êtes vous-même producteur d'électricité, les 2 compteurs supplémentaires sont du même type et peuvent eux aussi fournir des informations.

Le but de ce billet est de connecter ce ou ces compteurs à notre BananaPI pour générer de jolies statistiques.

Côté compteur

La partie haute du compteur est réservée au personnel d'EDF et briser la scellée ne pourra que vous amenez que des problèmes ... vous êtes donc prévenu. Le bas par contre est à votre disposition avec 2 connecteurs :

Cette prise téléinfo produit un signal série classique (identique à prises RS-232), mais avec des niveaux électriques atypique : un signal modulé à 50hz, 5 volts en nominal.

Gràce à ce dernier, un simple câble téléphonique suffit, dans lequel plusieurs paires peuvent être utilisées (ben oui, les producteurs ont plusieurs compteurs comme je l'ai indiqué plus haut) sur une longueur qui peut atteindre les ... 500 mètres. Enfin la norme intègre le risque inductif en cas d'orage (la norme prévoie une surtension ponctuelle jusqu'à 20 volts) : Bref, utilisable aussi si vos compteurs sont déportés en limite de propriété.

Il faut donc ...

un (des) convertisseur de niveau

Il se résume à 3 composants par compteur à connecter suivant un schema qui se trouve facilement sur internet :

Mon schéma vient du forum de ChaleurTerre.

Sont nécessaires :

Pour rendre la chose un peu plus "propre", j'ai aussi ajouté un bornier : J'ai trouvé sur la baie un kit tout prêt qui ne m'a coûté qu'une dizaine d'€uros pour 2 flux, port compris.

Malheureusement, le SFH620A est trop lent pour le mode "Standard" du Linky. Ce montage ne fonctionnera qu'avec le mode "Historique" ou avec un ancien compteur.

Voir plus bas pour une solution pour tous les modes du Linky

Côté BananaPI

La majorité des solutions de téléinfo DIY sont basées sur un RaspberryPI, qui ne dispose que d'un seul UART : pas pratique pour suivre plusieurs compteurs ...

Le BananaPI expose, lui, 4 UARTs tels qu'indiqué dans le guide utilisateur.

Ce qui donne les correspondances suivantes :

       | Correspondance | Connecteur | Utilisation
| Gentoo | |
-------------------------------------------------------------
uart0 | ttyS0 | J11 | Console (par défaut)
uart2 | ttyS1 | Con 3 | GPIO0 & 2
uart3 | ttyS2 | Con 3 | Compatible rPI
uart7 | ttyS3 | J12 |

J'ai laissé de côté ttyS0, toujours utile d'avoir une console sur un serveur headless, ainsi que ttyS1 pour conserver la compatibilité avec le Raspberry du con3 : On sait jamais, au cas où j'aurai envie d'ajouter un sheild prévu pour ce SBC.
Il me reste donc :

Ben ... et le 3e compteur dit de sous-tirage ?
Il n'est utilisé que pour vérifier que vous ne réinjectez pas le courant issu d'EDF dans votre production : Il restera donc à zéro, strictement aucun intérêt.

Configuration des ports séries

Les transmissions se font en 1200 bauds, 7 bits, parité paire, 1 bit de stop. Ce qui correspond aux commandes suivantes :

stty 1200 cs7 evenp cstopb -igncr -inlcr -brkint -icrnl -opost -isig -icanon -iexten -F /dev/ttyS2
stty 1200 cs7 evenp cstopb -igncr -inlcr -brkint -icrnl -opost -isig -icanon -iexten -F /dev/ttyS3

Placer ces commandes dans le fichier /etc/local.d/teleinfo.start (qui doit être exécutable), initialisera nos ports à chaque boot.

Ce fichier n'est pas suffisant pour l'utilisation d'un démon car le dit démon sera lancé avant que les fichiers locaux ne soient utilisés. Voir plus loin dans cette page pour un script openrc.

Autoriser l'accès aux ports

Tous les utilisateurs devant accéder aux ports doivent faire partir du groupe uucp.

usermod -a -G uucp utilisateur

Test

Ca marche, yeaaaahhhh !

laurent@bPI ~ $ cat /dev/ttyS3
ADCO 040928025841 B
OPTARIF HC.. <
ISOUSC 60 <
HCHC 037551020 ]
HCHP 053068843 8
PTEC HP.. 
IINST 002 Y
IMAX 062 G
PAPP 00520 (
HHPHC C .
TDETAT 000000 B
ADCO 040928025841 B
OPTARIF HC.. <
ISOUSC 60 <
HCHC 037551020 ]
HCHP 053068843 8
PTEC HP.. 
IINST 002 Y
IMAX 062 G
PAPP 00520 (
HHPHC C .

avec comme informations interessantes :

Réalisation

Comme on peut le voir, il reste beaucoup de place pour d'autres aventures électroniques

Et pour exploiter tout ça ...

... j'ai créé un joli démon.

Téléinfod lit ces trames et les convertit en messages MQTT. C'est de l'open-source et, d'après mes tests, la charge sur le BananaPI est négligeable.

Libérons le port CON3

En regardant de plus près le schéma du BananaPI, le RX de l'UART4 est connecté au port J12-03 (pin PH04 du proc, le TX, PH05 n'est connecté nul part): ça tombe bien, nous n'avons besoin que d'entrée (RX) et cela libére entièrement le CON 3.

Seule une modification du fichier FEX et nécessaire : activation de l'UART4 comme suit :

[uart_para4]
uart_used = 1
uart_port = 4
uart_type = 2
uart_tx = port:PH04<4><1><default><default>
uart_rx = port:PH05<4><1><default><default>

Le uart_used est passé de 0 à 1. Un reboot et l'uart4 est actif.

Et pour faire plus propre, un fichier de démarrage

Pour que les UART soient configurés correctement à chaque démarrage, j'ai créé le fichier /etc/init.d/uart suivant :

#!/sbin/runscript
# Copyright Laurent Faillie 2015
#
# init uart for Teleinfo usage

start() {
        ebegin "Init uart for Teleinformation"
        stty 1200 cs7 evenp cstopb -igncr -inlcr -brkint -icrnl -opost -isig -icanon -iexten -F /dev/ttyS3
        stty 1200 cs7 evenp cstopb -igncr -inlcr -brkint -icrnl -opost -isig -icanon -iexten -F /dev/ttyS4
        eend $?
}

Que j'ai activé par un classic

rc-update add uart default

/etc/local.d/teleinfo.start n'était pas suffisant car le démon TeleInfod démarait avant que les UART ne soient configurés ...

Linky

Comme je le disais précédemment, le Linky permet 2 modes de communication :

Ce mode ne peut être changé que par le gestionnaire de votre contrat électrique. Heureusement, il peut le faire à distance et ce fût même gratuit pour moi avec Enédis.

Etant "producteur revente totale", je me retrouve avec 2 compteurs Linky

Linky Consommation

Mon contrat n'a pas changé, Heures Creuses, sans auto consommation. Du coup, le mode Historique est largement suffisant et me permet de conserver mon montage précédent.
Aucun changement donc de ce côté.

Linky Production

L'ancien compteur de production était utilisé à rebrousse poile et fonctionnait en mode BASE : les puissance, intensité, ... qu'il renvoyait correspondaient à ce que produisait mon installation photo-voltaïque.

Avec le Linky, ce n'est plus le cas : il fonctionne comme son homologue "consommation", c'est-à-dire que ce qu'enverrait une trame Historique correspond au soutirage. Soutirage ??? Alors que nous sommes censé produire ? Et bien oui, j'ai eu la désagréable surprise de voir l'onduleur consomme jusqu'à 10W lorsque les panneaux solaires ne produisent pas (la nuit par exemple).
Pour avoir la production, il est nécessaire de passer en mode Standard pour obtenir les trames Injections.

Lire les trames standards

Ne pouvant utiliser mon montage existant et n'ayant pas trouvé de plan de montage fonctionnant à tous les coups avec le mode standard, j'ai décidé d'en acheter un tout prêt, référence TINFO-1CPT (mais il y a exactement le même adaptateur sous d'autres références suivant les magasins : il faut se baser sur le visuel et les descriptions).

A l'intérieur, un bornier permet de brancher les 2 fils de la téléinfo alors que le boitier se connecte à l'ordinateur par USB et apparaitra comme un pseudo port série supplémentaire (utile pour un raspberry qui n'a qu'un UART). Au classique /dev/ttyUSB? qui dépend des périphériques connectés et de l'ordre dans lequel le système les détecte, je préfère passer par l'arborescence /dev/serial/by-id/

$ ls /dev/serial/by-id/
lrwxrwxrwx 1 root root 13 1 janv. 2010 usb-Cartelectronic_Interface_USB_1_TIC_DA5MNCIH-if00-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 1 janv. 2010 usb-RFXCOM_RFXtrx433_A13X8IX-if00-port0 -> ../../ttyUSB0

(le ttyUSB0 correspond à mon RFXTrx qui contrôle mes volets).

A l'intérieur toujours, un switch permet de choisir un mode USB pour "windows ou Linux". Franchement, j'ai du mal à voir la différence et surtout ... je n'ai pas été chercher plus loin.

Il faut quand même configurer ce port

J'aurais pensé qu'il l'aurait fait tout seul ... mais non, il faut configurer ce port : mon /etc/init.d/uart devient donc

#!/sbin/runscript
# Copyright Laurent Faillie 2015
#
# init uart for Teleinfo usage

start() {
    ebegin "Init uart for Teleinformation"
    stty 1200 cs7 evenp cstopb -igncr -inlcr -brkint -icrnl -opost -isig -icanon -iexten -F /dev/ttyS3
    stty 1200 cs7 evenp cstopb -igncr -inlcr -brkint -icrnl -opost -isig -icanon -iexten -F /dev/ttyS4

    stty 9600 cs7 evenp cstopb -igncr -inlcr -brkint -icrnl -opost -isig -icanon -iexten -F /dev/serial/by-id/usb-Cartelectronic_Interface_USB_1_TIC_DA5MNCIH-if00-port0

    eend $?
}

et on obtient les fameuses trames "standards".

ADSC	123456789012	5
VTIC 02 J
DATE E210603202810 7
NGTF PRODUCTEUR .
LTARF INDEX NON CONSO 0
EAST 000000008 W
EASF01 000000008 *
EASF02 000000000 #
EASF03 000000000 $
EASF04 000000000 %
EASF05 000000000 &
EASF06 000000000 '
EASF07 000000000 (
EASF08 000000000 )
EASF09 000000000 *
EASF10 000000000 "
EASD01 000000008 (
EASD02 000000000 !
EASD03 000000000 "
EASD04 000000000 #
EAIT 000133862
ERQ1 000000000 ;
ERQ2 000000252 E
ERQ3 000013858 V
ERQ4 000000043 E
IRMS1 001 /
URMS1 235 D
PREF 01 @
PCOUP 01 Z
SINSTS 00000 F
SMAXSN E210603061347 00126 4
SMAXSN-1 E210602060110 00139 H
SINSTI 00171 E
SMAXIN E210603112955 01458 5
SMAXIN-1 E210602134630 00615 F
UMOY1 E210603202000 237 '
STGE 003A0301 =
MSG1 PAS DE MESSAGE <
PRM 12345678901234 ;
RELAIS 000 B
NTARF 01 N
NJOURF 00 &
NJOURF+1 00 B
PJOURF+1 00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE 9

Exploitation

Téléinfod évolue vers la version 3.0 qui non seulement permet d'exploiter les trames "standards" mais peut aussi convertir ces informations vers les topics des trames "historiques" afin de garder une compatibilité avec d'anciens codes (la liste des correspondances est présente sur le github).

Recyclage de l'ancien compteur

Je me retrouve donc avec mes anciens compteurs et une entrée UART inutilisés : je les ai donc recyclé pour superviser la consommation de la pompe de ma piscine, dans l'espoir de déterminer si le filtre est plein ou non. Mais d'autres utilisations du même genre sont envisageables ... en tenant compte que la résolution de PAPP n'est que de 10 Watts (ce qui fait déjà beaucoup).


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2021
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.