La Télé-Information, c’est le moyen de récupérer, en temps réel, diverses informations renvoyées par votre compteur électronique EDF : les différents compteurs (Heures creuses, Heures pleines, ou les 6 tarifs d’un abonnement Tempo), l’intensité instantanée, la puissance apparente, la puissance souscrite etc …
Je sais que ce sujet a été traité maintes fois sur Internet, je sais aussi qu’il a fallu que je compulse des dizaines d’informations plus ou moins convergentes pour arriver à la solution que j’ai finalement mise en oeuvre en 2 lieux différents.
Je me propose de détailler ma démarche, en commençant par un montage le plus simple possible pour récupérer les données de télé-information générées par nos compteurs EDF.
Dans un premier temps on utilisera un « Sketch » de test Arduino, qui se contentera d’afficher les informations brutes émises par le compteur.
Ensuite je donnerai des pistes pour mettre en oeuvre le « data logging » sur un serveur PHP/Mysql (chez moi un NAS Synology) …
a) La Télé-Information EDF :
Si vous souhaitez avoir une documentation officielle sur le sujet, je vous conseille de télécharger le document suivant :
Sorties de télé-information client des appareils de comptage électroniques utilisés par ERDF
Grâce à ce dispositif, vous serez à même de consulter votre consommation électrique de n’importe où, via un navigateur Internet. Vous pourrez afficher des graphiques de consommation électrique (par jour, mois, année, etc …), relever vos compteurs à distance pour les transmettre à EDF (service Relevé Confiance) et peut être même générer des économies, parce que vous comprendrez mieux vos consommations …
Pour accéder au bornier de télé-Information, il faut ouvrir le capot du compteur accessible au client et qui n’est donc non plombé.
ATTENTION : Il y a généralement 2 borniers. L’un sert à la commande du relais heures creuses du ballon d’eau chaude, l’autre est celui de la télé-information, ne vous trompez pas ! La disposition et l’apparence peuvent varier suivant le modèle de compteur !
![]() | ![]() |
* Extraits de la documentation EDF :
La plupart de ces appareils offrent également à l’utilisateur du réseau la possibilité d’être informé en temps réel de ses consommations et de piloter automatiquement ses charges grâce à la mise à disposition sur le bornier-client de l’appareil d’une sortie d’information numérique, appelée « sortie de télé-information client », qui diffuse en permanence les paramètres contractuels gérés, ainsi que les grandeurs de consommation mesurées par l’appareil. Cette sortie d’information numérique est également appelée « sortie de télé-information » dans la suite du document. Chaque caractère est émis dans un ensemble cohérent de 10 bits dont la constitution est la suivante :
- 1 bit de start correspondant à un 0 logique,
- 7 bits pour représenter le caractère en ASCII,
- 1 bit de parité, parité paire,
- un bit de stop correspondant à un 1 logique.
- Les trames sont émises les unes après les autres en continu. Entre la fin d’une trame et le début de la suivante, un délai sans l’émission est ménagé. Sa durée est comprise entre 16,7 et 33,4 ms. De même le délai entre 2 groupes d’information successifs d’une même trame ne doit pas être supérieur à 33,4 ms.
- Les trames ont une longueur qui dépend du type de contrat choisi et contiennent toutes les informations présentes dans les mémoires du compteur et pouvant aider à la gestion d’énergie.
Une trame est constituée de trois parties :
- le caractère « Start TeXt » STX (002 h) indique le début de la trame,
- le corps de la trame est composé de plusieurs groupes d’informations,
- le caractère « End TeXt » ETX (003 h) indique la fin de la trame.Il est admis que l’émission puisse être momentanément interrompue sur la liaison de télé-information client du compteur, pendant un téléreport par exemple. Dans ce cas :
- le caractère ASCII « End Of Text » EOT (004 h) est généré avant interruption,
- la reprise de l’émission se fait en début de trame par émission du caractère « STX ».Toutes les données du compteur sont délivrées par groupes d’information qui forment chacun un ensemble cohérent avec une étiquette et une valeur associée de telle sorte qu’il soit facile de les distinguer les unes des autres.La composition d’un groupe d’information est la suivante :
- un caractère « Line Feed » LF (00A h) indiquant le début du groupe,
- le champ étiquette dont la longueur est inférieure ou égale à huit caractères,
- un caractère « SPace » SP (020 h) séparateur du champ étiquette et du champ donnée,
- le champ donnée dont la longueur est variable,
- un caractère « SPace » SP (020 h) séparateur du champ donnée et du champ contrôle,
- le champ contrôle se composant d’un caractère contenant la « checksum » dont le calcul est donné ci-dessous en remarque,
- un caractère « Carriage Return » CR (00D h) indiquant la fin du groupe d’information.
Tempo : | HP/HC : |
---|---|
ADCO 0xxxxxxxxxx3 : OPTARIF BBR( S ISOUSC 45 ? BBRHCJB 000010828 0 BBRHPJB 000007345 = BBRHCJW 000000000 2 BBRHPJW 000000000 ? BBRHCJR 000000000 – BBRHPJR 000000000 : PTEC HPJB P DEMAIN —- » IINST 002 Y IMAX 030 B PAPP 00430 ( HHPHC Y D MOTDETAT 000000 B | ADCO 2xxxxxxxxxx9 B OPTARIF HC.. < ISOUSC 30 9 HCHC 014460852 $ HCHP 012506372 – PTEC HP.. IINST 002 Y IMAX 035 G PAPP 00520 ( HHPHC C . MOTDETAT 000000 B |
b) Arduino, présentation rapide :
Voici comment est présentée la plateforme Arduino, sur le site officiel
Arduino est une plateforme de prototypage électronique, « Open Source« , basée sur du matériel et du logiciel flexible, simple d’utilisation. Elle est destinée aux artistes, aux concepteurs, aux « hobbyists » et quiconque intéressé par la création d’objets ou d’environnements interactifs.
Voici à quoi ressemble une carte Arduino :
Ses dimensions sont d’environ 69 x 53 mm
Le coût, aux environs de 20 euros, est assez modeste pour la carte seule.
Cette carte contient un micro-contrôleur, grâce auquel on pourra gérer des entrées/sorties analogiques et numériques, en les faisant interagir grâce à des programmes écrits en langage C (nommés sketches). Ces programmes sont injectés dans la carte depuis votre ordinateur, via un simple câble USB
Le sketch est stocké dans une mémoire permanente, l’ordinateur n’est donc pas nécessaire au fonctionnement, une fois alimentée électriquement, la carte devient totalement autonome !
Les outils de développement gratuits fonctionnent sur toutes les plateformes courantes : Windows, Linux, Mac …
Dans notre montage, le rôle de la carte est de traiter les données envoyées par le compteur EDF sur l’une de ses entrées numériques, de vérifier les sommes de contrôle (checksum) sur chaque bloc d’information. Dans le sketch le plus simple on se contera d’afficher tout cela dans le « Moniteur Série » disponible depuis l’outil de programmation Arduino.
Afin d’assurer l’isolation galvanique entre le compteur EDF et notre montage, nous intercalerons un opto-coupleur. Ce sera l’objet d’un simple montage électronique décrit dans la prochaine section.
Dans la version la plus aboutie, à chaque fois qu’une trame complète sera collectée, elle sera envoyée via une carte d’extension Ethernet (on parle de shield), à l’aide de requêtes HTTP vers un serveur PHP/Mysql (dans mon cas un NAS Synology)
c) L’interface avec le compteur EDF :
Pour le circuit électronique de liaison entre les 2 bornes téléInfo EDF et la carte Arduino, je me suis largement inspiré du schéma publié ici.
Schéma définitif :Téléchargement du Schéma électronique
Ce schéma a été réalisé grâce au logiciel EAGLE (site officiel ici).
Voici le fichier généré : TeleInfo Light.sch
Ce circuit repose essentiellement sur un opto coupleur, dans notre cas un SFH620A qui ne coute même pas 1 euro.
a) Le montage de test :
Avec ce premier montage, nous allons nous connecter au compteur EDF et vérifier que notre montage reçoit correctement les informations émises par le compteur.
Dans ce but, nous utiliserons un sketch le plus simple possible, qui se contentera d’afficher les caractères au fur et à mesure de leur réception.
Si vous ne possédez pas encore de shield Ethernet pour votre Arduino, vous pouvez quand même réaliser la version de test. Le shield Ethernet ne deviendra indispensable que quand vous déciderez de collecter vos données sur un serveur (ex : NAS Synology).
Dans mon cas, pour faire un montage rapide, j’ai utilisé un « breadboard » qui permet d’avoir quelque chose d’opérationnel assez rapidement.
Télécharger ce schéma au format fez
Le dessin ci-dessus a été réalisé grâce au logiciel gratuit Fritzing, téléchargeable ici
* Pour la réalisation définitive, j’ai utilisé une plaque à bandes de cuivre (moins de 5 €) et ça donne ceci :
![]() | ![]() |
b) Le matériel nécessaire pour le test :
Pour l’alimentation du montage de test, je me suis contenté du câble USB qui joue 2 rôles : injecter le Sketch (programme) dans la carte Arduino et lui fournir l’énergie électrique.
Quantité | Description | Prix |
---|---|---|
1 | Carte Arduino Uno R3 | 25€50 |
1 | Mini Breadboard 170 contacts | 3€20 |
1 | Opto Coupleur SFH620A | 0€79 |
1 | LED bleue | 0€40 |
1 | Résistance 1 k | 0€10 |
1 | Résistance 4,7 k | 0€10 |
TOTAL = | 30€09 |
c) Le sketch de test :
/* Usage : + This is a simple Teleinfo Test program + It's just to test the TeleInfo board and its connexion to the EDF counter + It just displays the received teleInfo data on the Serial Monitor + No Internet connexion, no data transfered Hardware needed : + 1 x Arduino UNO r3 + 1 x Opto Coupler : SFH620A + 1 x LED + 1 x 1 k? resistor + 1 x 4,7 k? resistor PIN USED : PIN 8 : Software Serial RX PIN 9 : Software Serial TX */ // Nous utilisons la bibliothèque Software.Serial, ce // qui permet de configurer le port série sur d'autres // pins que les habituelles 0 & 1 déjà utilisées par // le "moniteur série" #include <SoftwareSerial.h> // Caractère de début de trame #define startFrame 0x02 // Caractère de fin de trame #define endFrame 0x03 // On crée une instance de SoftwareSerial SoftwareSerial* cptSerial; // Fonction d'initialisation de la carte Arduino, appelée // 1 fois à la mise sous-tension ou après un reset void setup() { // On initialise le port utilisé par le "moniteur série". // Attention de régler la meme vitesse dans sa fenêtre Serial.begin(115200); // On définit les PINs utilisées par SoftwareSerial, // 8 en réception, 9 en émission (en fait nous ne // ferons pas d'émission) cptSerial = new SoftwareSerial(8, 9); // On initialise le port avec le compteur EDF à 1200 bauds : // vitesse de la Télé-Information d'après la doc EDF cptSerial->begin(1200); Serial.println(F("setup complete")); } // Boucle principale, appelée en permanence une fois le // setup() terminé void loop() { // Variable de stockage des caractères reçus char charIn = 0; // Boucle d'attente du caractère de début de trame while (charIn != startFrame) { // on "zappe" le 8ème bit, car d'après la doc EDF // la tramission se fait en 7 bits charIn = cptSerial->read() & 0x7F; } // Boucle d'attente d'affichage des caractères reçus, // jusqu'à réception du caractère de fin de trame while (charIn != endFrame) { // S'il y a des caractères disponibles on les traite if (cptSerial->available()) { // on "zappe" le 8ème bit charIn = cptSerial->read() & 0x7F; // on affiche chaque caractère reçu dans le // "moniteur série" Serial.print(charIn); } } // après chaque fin de trame, on provoque un retour chariot Serial.println(""); }
Vous pouvez télécharger le sketch directement ici : Sketch de test
Les outils de développement Arduino officiels sont téléchargeables gratuitement ici
a) Le matériel nécessaire pour le montage complet :
Quantité | Description | Prix |
---|---|---|
1 | Composants du montage test (sauf breadboard) | 26€89 |
1 | Plaque à bandes de cuivre | 5€00 |
1 | Shield Ethernet | 37€50 |
1 | Boitier (facultatif) | 11€00 |
TOTAL = | 80€39 |
b) Présentation du montage définitif :
L’évolution principale par rapport au montage de test, c’est l’ajout d’un shield Ethernet permettant l’envoi des données capturées vers un serveur PHP.
Le Shield Ethernet![]() | Le montage complet![]() |
Le montage en boitier![]() | Le montage en place![]() |
c) Sketches définitifs :
Dans l’état actuel des choses, j’ai 2 sketches séparés : 1 pour traiter l’abonnement Heures pleines/Heures creuses, l’autre pour traiter l’abonnement Tempo
Vous pouvez télécharger les 2 sketches ici :
Quelques commentaires sur les sketches :
Chaque projet « .ino » s’ouvre en affichant 6 onglets :
Le premier, portant le nom du projet (ex : my_teleinfo_light) contient essentiellement des commentaires
_00_variables
• Définition de l’adresse MAC du shield Ethernet
_01_init
• Lancement de la fonction setup()
• Connexion du shield Ethernet au réseau (acquisition de l’adresse IP)
• Instantiation de la classe TeleInfo
_02_Main_loop
• Lancement de la fonction loop()
• Dans la fonction loop(), appel de la fonction readTeleInfo() (récupération des données du compteur)
• Si connexion Internet OK appel de la fonction recordTeleInfoOnMySQLServer() (envoi vers serveur mySQL/PHP
• Si connexion Internet coupée, tentative de reconnexion
_03_Headers.h
• Définition des fonctions et variables publiques et privées de la classe « TeleInfo »
_04_Classes.cpp
• Source de la classe « TeleInfo »
• fonction TeleInfo() : constructeur de la classe « TeleInfo », intialisation du port série de Télé-Information, initialisation des variables
• fonction readTeleInfo() : récupération des trames de Télé-Information. Décodage par l’appel à la fonction handleBuffer(), si la séquence n’est pas correcte, on attend la trame suivante. Comparaison de la somme de contrôle reçue dans la trame avec la somme calculée par la fonction chksum(). Si elle est mauvaise on attend la trame suivante.
• fonction handleBuffer() : décodage de la trame, avec vérification de l’ordre des blocs, si hors séquence on renvoie false
• fonction chksum() : renvoi la somme de contrôle de chaque bloc (voir doc Télé-Information EDF pour l’algorithme).
• fonction displayTeleInfo() : affiche les données reçues dans la fenêtre « moniteur série », si la variable « debug » est à true
• fonction recordTeleInfoOnMySQLServer() : génère une requête HTTP get, vers le serveur PHP.
d) Côté serveur PHP :
Voici le source PHP fourni en l’état. Il vous faudra l’adapter à votre existant mysql/php : teleInfo.php
Basiquement, la carte Arduino génère une URL comme celle-ci :
Heures Pleines/Heures Creuses :
xx.xx.xx.xx:yyyyy/zibase01/teleInfo.php?OPTARIF=HC..&HCHC=14828278&HCHP=12782315&PTEC=HPJB&DEMAIN=—-&IINST=2&IMAX=30&PAPP=430&zibasezone=Noisiel
Tempo :
xx.xx.xx.xx:yyyyy/zibase01/teleInfo.php?OPTARIF=BBR..&HCHC=14828278&HCHP=12782315&HCJW=0&HPJW=0&HCJR=0&HPJR=0&PTEC=HPJB&DEMAIN=—-&IINST=2&IMAX=30&PAPP=430&zibasezone=Frehel
Le script PHP récupère depuis l’URL les différentes données et les stocke dans des variables
Il se connecte à la base mySQL en utilisant utilisateur/mot de passe etc … récupérés dans un fichier de config
Après quelques vérifications sommaires, il quitte s’il trouve certaines incohérences
Il met à jour la table « teleinfo_rt » qui mémorise les dernières données en temps réel (mise à jour très fréquente, 1 seul enregistrement conservé dans la table), puis il ajoute 1 enregistrement toutes les 15 minutes la table d’historique « teleinfo »
En cas de question, laissez-moi un commentaire
e) Exemples de résultats graphiques
Conso en temps réel![]() | Conso journalière![]() |
Conso mensuelle![]() | Conso depuis le début![]() |
Il serait possible de consolider ces 2 sketches en 1 seul, avec détection automatique du type d’abonnement, voir d’ajouter d’autres types d’abonnements EDF. Attention cependant à la taille mémoire limitée de la carte Arduino Uno (32 ko). Pour des traitements un peu plus lourds, investir dans une carte de type Arduino Mega 2560 (caractéristiques ici) possédant 256 Ko de mémoire peut être judicieux.
Ajout d’un « data logger » sur la carte SD intégrée au shield Ethernet
J’ai personnellement réalisé un montage équipé d’une Mega 2560, d’un afficheur LCD avec les caractéristiques suivantes :
• Différents affichages sur LCD, commutables par l’appui sur un bouton poussoir
• Affichage en temps réel du compteur tempo actuel, avec conso instantanée, couleur du jour
• Affichage de la couleur du lendemain, dès qu’elle est connue
• Affichage du nombre de jours restant par couleur (renvoyé par serveur PHP à chaque connexion)
• Affichage de la valeur de chaque compteur par couleur
• Affichage adresse IP du shield Ethernet ainsi que l’adresse de la passereille
• Affichage de l’heure et de la date (renvoyé par serveur PHP à chaque connexion)
• Affichage de la version du sketch
• Passage en mode économie (afficheur éteint) après quelques secondes
• Utilisation de LEDs tricolores pour afficher la couleur Tempo en cours et celle du lendemain
• 1 LED pour afficher le régime en cours : Heures pleines/Heures creuses
• 1 LED qui clignote à chaque envoi de trame
67 Comments
Ben
Hum, je pense que ça revient bien moins cher avec un sparkcore non ? En plus ça prend moins de place, c’est wifi pour ceux qui n’ont pas de réseau à proximité du compteur et on peut rajouter qq options comme des relais pour piloter l’ECS par exemple. En gros dans un petit boitier rail din on doit pouvoir intégrer un joli truc à la eco device non ?
Pascal CARDON
@Ben : Tel quel, effectivement ça ne coute pas très cher … par contre le prix d’un shiel WIFI est loin d’être donné !
Il est vrai qu’avec les entrées sorties disponibles sur l’arduino, on peut aller encore beaucoup plus loin (commande ECS est une bonne idée …).
L’avantage de l’éco device, c’est entre autre qu’on n’a pas à sortir le fer à souder, la lime, la perceuse etc … L’avantage de l’Arduino c’est la satisfaction d’avoir mis au point et « fabriqué » quelque chose soi même …
Pascal STEPHANY
Merci Pascal pour ce tuto DIY car l’exercice n’est jamais évident et bien sur il y a d’autres alternatives mais qu’aucune ne pourra remplacer la satisfaction personnelle de l’avoir fait, c’est ça le DIY…
Laurent (@Laurent3333)
Bonjour,
Il y aura un tuto avec le shield Ethernet ?
Merci pour le tuto !!!
Laurent
Pascal CARDON
@Laurent3333
Bonjour Laurent, dans mon tuto, la partie intulée « Montage définitif » c’est le montage avec Shield Ethernet, les sketchs « définitifs » s’appuient sur le shield Ethernet … Si tu as des questions ou si tu as besoin de précision sur cette partie, n’hésites pas …
Cordialement
Pascal
fred
Bonjour,
Je remarque sur les graph l’indication Kw. Ce sont des Kw ou des KVA car de mémoires un des inconvénients du téléinfo c’est de transmettre des Kva (ce qui diffère parfois pas mal des kva et donc de la facture reçu)
Sinon, bravo pour le montage et le partage.
merci
fred
Jacques Cardon
Bravo Pascal
Pascal CARDON
@fred
Les graphiques mentionnent des KW, c’est exactement ce qui s’affiche sur le compteur (les compteurs HC, HP, les bleus, blancs rouges), donc ce qu’on transmet à EDF, et ça correspond exactement à la facture … Je crois pour être précis, que je devrais parler de KW/H
Par contre le compteur renvoie aussi la puissance apparente (instantanée), et dans ce cas l’unité de mesure est le VA ou kVA …
Pascal CARDON
@Jacques CARDON
Euh … on se connait ?? 😉
c’est beau la solidarité familiale
Merci frangin
wipeout85800
Pour compléter, avec un montage similaire vous pouvez alimenter « domoticz », « emoncms » et surement « d’autre box domotique » en envoyant la requete HTTP qui vas bien a partir de l’arduino….
Pascal CARDON
@wipeout85800
on est tout à fait d’accord et ça mérite d’être souligné …
Eric
Bonjour, j’ai réalisé un projet similaire avec un PIC et un logiciel maison. Je le décrit ici : http://eric.delcamp.free.fr/?p=12
Pascal CARDON
@eric
Merci pour ton message et le lien vers ton site. C’est une autre approche, interessante aussi …
Fredcmn
Bonjour Pascal,
Je débute avec Arduino et les base Phpmysql sur le nas synology.
Je souhaiterais recupere les infos de mon compteur mais je suis en triphasé.
Que faut-il modifier pour recupere les 3 infos de puissance, d’intensité et d’intensite max. Est-ce à la portée d’un débutant ?
Je te remercie d’avance pour ta réponse
Cordialement
Fred
destroyedlolo
Bonjour,
Merci pour cette article qui est vraiment très intéressant.
Je me pose 2 questions :
1/ J’avais dans l’idée de disséminer des Arduino dans ma maison pour superviser les températures … sauf que vu le prix de l’Arduino et surtout de son sheld (plus de 70E), cette solution perd quand même beaucoup d’intérêt.
Sachant que j’ai payé mon BananaPI 50E avec l’alim et un carte SD … qui offre quand même beaucoup plus de possibilités, non ?
Ai-je loupé quelques chose ?
2/ J’aime l’idée de la LED pour visualiser les transfères.
Sachant que le CPU du Banana (AllWiner A20) fonctionne en 3.3v, est-ce que la chute de tension de la LED est suffisante si je conserve l’alimentation en +5v ?
Merci
Pascal CARDON
@Fredcmn … oups, je lis seulement aujourd’hui ta question … On peut poursuivre si tu le souhaites
• Récupérer les infos d’un compteur triphasé : A mon avis pas de grosse différence, si celui-ci renvoie bien les infos concernant chaque phase, il y aura à modifier un peu le « sketch » Arduino, au niveau matériel, pas de différence
• Pour ce qui est du synology, il faut manier la programmation php et mySql … et puis quel est l’objectif ? générer des graphiques, des tableaux ? Pour un débutant, si tu t’intéresses à la programmation c’est jouable en te faisant un peu aider, mais je ne dirais pas que c’est facile … c’est facile quand on connait, comme tout …
Cordialement
Pascal
Fredcmn
Bonsoir Pascal,
J’ai fais des essais en tirant un câble car mon compteur est a environ 25 m en limite de propriété. L’objectif est de laisser l’arduino prêt du compteur et d’utiliser le CPL pour la liaison réseau.
Lorsque je lit les infos du compteur j’ai bien les 3 valeurs d’intensité des phases. Je suis en base Tri 36kva. je veut récupérer les infos d’intensité et de puissance. Je vais regarder pour récupérer les infos.
Pour le serveur synology je maitrise pas complétement le php et mySql mais je cherche des infos sur le net pour essayer de progresser. le but est de générer des graphiques et des tableaux de suivis.
Cordialement
fred
Frederic
bonsoir
super projet
la page PHP est complete sur le site car il y a un include que je ne trouve pas . est ce normal ?
include(‘./my_includes/include.php’)
Il y a t il un endroit ou l on peut telecharger la version complete php et source pour l arduino
Merci de votre aide
Maga
Bonjour,
Tout d’abord bravo et merci pour le partage…
Quand à moi j’ai un automate à la maison avec un écran tactile dans le salon. J’ai acheté un arduino mega 2560 avec la carte ethernet et un KIT téléinfo SFH620. Je débute en arduino. J’aimerais dans la mesure du possible utiliser votre code mais au lieu d’utiliser le PHP j’aimerais récupérer les infos depuis mon automate en modbus IP.
Mais j’avoue que j’ai un peu de mal… Vous pourriez m’aider?
Thomas
Bonjour,
Merci pour cet article très bien fait et détaillé !
J’ai par contre rencontré 2 problèmes auxquels j’ai trouvé des solutions mais qui bloquerait certainement un néophyte.
Je viens de faire le montage et je l’ai validé avec le sketch de test, tout roule.
C’est avec le sketch final que j’ai eu des problèmes :
– Les instrucions Serial1 ne compilent pas pour l’Arduino Uno (1 seul port série contrairement à la Mega). J’ai résolu le problème grâce à la librairie SoftwareSerial.
– Contrairement au sketch de test, Serial.read n’ignore pas le dernier bit lors de la lecture des caractères :
charIn = cptSerial->read(); (charIn = cptSerial->read() & 0x7F; dans le sketch de test)
Par conséquent le caractère de start n’est jamais reconnu et donc aucune trame n’est lue.
pat
bonjour,
félicitations pour cet article,mais j’ai un souci de compilation avec l’erreur suivante:
_01_Init.ino: In function ‘void setup()’:
_01_Init:8: error: ‘version’ was not declared in this scope
je suis sous windows 8.1 et arduino 1.06
je ne parviens pas a cibler le problème
Merci par avance de l’aide que pourriez m’apporter
Pat
didi
Bonjour
Je ne trouve pas ./my_includes/include.php ….
Comment puis je récupérer ce fichier?
Coté serveur PHP (sur Synology), quelles sont les manips à faire? Où doit-on mettre le fichier TELEINFO.PHP ??
Je manque d’infos pour mettre en service ce PHP/SQL en service concernant le Teleinfo…
Peux tu m’en dire plus sur la manière de mettre tout ça en marche?
Merci
SLTS
Khris
Félicitations Pascal Cardon pour ton projet, et ta mise en partage. il me reste à regler un Pb mon serveur wamp ne trouve pas ./my_includes/include.php.. Encore merci pour toutes tes explications
didi
Bonjour KHRIS
Effectivement , je suis dans le même cas….
Si vous avez la solution….faites moi signe!
Est-ce que tout est clair pour vous dans les programmes sources? pas pour moi…
Merci de m’eclairer.
A+
Pascal CARDON
@khris et @ didi : Effectivement, comme mentionné dans l’article, le source « teleinfo.php » doit être adapté à votre cas et le but ici c’est de montrer les grandes lignes : le sketch Arduino fait une requête html vers un serveur php/mysql (en l’occurence un NAS Synology dans mon cas), ce sketch passe dans des paramètres de l’URL des données … le script php commence par récupérer ces fameux paramètres de l’URL pour les placer dans des variables PHP (c’est la série des if(isset($_GET[‘HCHC’]) && !empty($_GET[‘HCHC’]))
$HCHC = $_GET[‘HCHC’];
if(isset($_GET[‘HCHP’]) && !empty($_GET[‘HCHP’]))
$HCHP = $_GET[‘HCHP’];
….)
Ensuite il faut programmer … des requêtes mySQL pour alimenter des tables dans une base de données que vous aurez conçu vous même …
Bien entendu je reste à dispo pour répondre à des questions si vous en avez …
COrdialement
Pascal
didi
Bonjour Pascal
Ce qui nous manque , c’est le fichier /my_includes/include.php.
Pourriez-vous nous envoyer un exemple de ce fichier?
Par la même occasion, un pack complet (qui fonctionne) avec tous les sources en version simplifiée serait apprécié pour des débutants et une bonne base pour le mettre à « notre sauce » .
Merci
Khris
Merci Pascal pour le complément d’info., je vais continuer a décortiquer ta création ! Bonne soirée
Khris
salut didi, ou en es tu de ton montage, tu arrives a envoyer depuis l’arduino sur ton réseau ?
Pascal CARDON
@khris et @ didi : La fourniture du fichier /my_includes/include.php ne vous suffirait pas, car celui-ci fait lui même d’autres includes, qui de plus pour la plupart sont sans rapport avec le sujet (l’enregistrement des consommations), vu que comme je l’ai précisé, c’est un script extrait d’un ensemble complet de gestion de domotique, mettant en oeuvre entre autre une Zibase …
La création d’un pack complet est bien sûr une bonne idée, mais dans tous les cas il faut prendre des partis pris : par exemple décider qu’on utilisera telle base de données (ex mySQL) sur tel type de serveur (ex : un NAS synology) …
Une fois les choix faits, la première étape est sans doute de créer une base de données, par exemple grâce à l’outil phpMyAdmin (http://www.phpmyadmin.net/home_page/index.php), puis définir les données qu’on souhaite enregistrer dans cette base (ex : toutes les 30 mn on enregistre la date, l’heure, le compteur Heures pleines, le compteur Heures creuses, l’intensité instantanée etc …).
A partir de ces besoins ont définit les tables nécessaires et on les crée, toujours avec cet outil phpMyAdmin, ou via des scripts php si on souhaite que le package soit réinstallable sur différents serveurs …
Ensuite on écrit des scripts, par exemple en PHP, qu’on va installer sur un serveur HTTP … on a donc sur un serveur, un moteur de base de données (MySQL) et un serveur HTTP qui interprète le langage PHP … Vous comprenez que faire une solution complète, demande donc, dans le cadre d’un tutoriel d’aborder beaucoup beaucoup de domaines différents : bases de données, outils d’administration de ces bases, langage de programmation etc …
Pour autant, je n’exclue pas de m’y mettre et de fabriquer un package et son tutoriel, qui montrera un serveur minimaliste (base de données + script php) permettant d’enregistrer les données en provenance de l’Arduino … mais après, je pense aussi que vous me demanderez aussi comment générer les graphiques 😉 allez, je vous met sur une piste : j’utilise HighStock (http://www.highcharts.com) pour de beaux graphiques …
Bon, laissez moi plusieurs semaines et j’y pense …
Cordialement
Pascal
destroyedlolo
Bonjour,
durant une (longue 🙁 ) période d’arrêt maladie, j’ai fait un programme qui reprend ce que Pascal explique : stockage en base (PostgreSQL pour moi), génération de graphisme, …
Il se nome « Domestik » et est disponible sur mon site : http://destroyedlolo.info/Developpement/Domestik/ .
A la base, c’était surtout pour monitorer mes différentes machines mais comme il est ouvert, on peut créer des sondes pour n’importe quoi (comme avec Nagios pour ceux qui connaissent, mais avec comme objectif d’être beaucoup plus léger).
La sonde pour la téléinfo se trouve dans ce répertoire : http://sourceforge.net/p/domestik/code/HEAD/tree/trunk/Client/Delegations/EDF/
Dans mon cas, c’est du Lua (langage de script très léger). Mais comme elle communique avec Domestik, avec de simple webservice, rien n’empêche d’utiliser un Arduino ou quoi que ce soit.
Pour le moment, les rapports ne sont pas super esthétiquement car tous utilisent la même méthode. Mais j’ai une v2 dans les tuyaux avec la possibilité de faire des rapports plus personnalisés.
A+
Laurent
eric
Bonjour,
merci beaucoup pour le tuto.
A prioris (d’apres la led) je réceptionne les signaux de télétransmission. Mais je débute sous arduino et c’est un modèle Arduino Yun que j’ai. Du coup je m’interroge sur les changements à réaliser dans le code.
Pourriez vous m’éclairer ?
Merci d’avance,
Eric
passbagger
Bonjour Pascal,
Tu utilises un Vishay SFR620A dans ton montage. Il existe trois variantes (SFR620A-1, SFR620A-2 et SFR620A-3). Chacune des variantes a un taux de transfert en courant (CTR)différent : -1 de 40% à 125%, -2 de 63% à 200% et -3 de 100% à 320%. Laquelle des variantes as-tu utilisé ? D’avance merci.
passbagger
C’était bien sûr SFH et non SFR !
Pascal CARDON
@passbagger : j’ai sorti ma loupe et avec beaucoup de mal j’ai trouvé SFH620A-3 😉
Damien Gouyette (@cestpasdur)
Bonjour Pascal.
Dommage d’indiquer dans les pré-requis une carte arduino uno, alors que le code final est destiné à une carte arduino mega.
As tu une version fonctionnelle pour uno quelque part à tout hasard ?
Concernant le partage du code, cela pourrait être plus pratique si tu déposais ton code sur un repo comme github, cela permet de partager du code, mais aussi de recevoir des suggestions de fonctionnalités par d’autres utilisateurs.
En tout cas, merci pour cette article qui est très intéressant.
Damien
didi
Bonjour
Pourriez-vous mettre en téléchargement le fichier (‘./my_includes/include.php’) afin de voir à quoi il ressemble.
Cela nous permettrai d’en faire une version personnelle.
Il n’y a que ce fichier qui manque….dommage pour l’ensemble du projet qui n’est pas exploitable, du coup.
Merci pour cet effort de votre part. (et pour l’ensemble des lecteurs!)
Cordialement
darzel
bonjour
super programme
je serais intéresse par votre programme avec lcd?
merci
cordialement olivier
Au Fil Elec
Bonjour et merci pour cet article qui me sert actuellement.
J’envoie les informations sur un raspberry pi 2 avec Jeedom dessus et ça fonctionne bien, après quelques modifications dans le code.
Barbera
Salut
J’ai lu ton article sur la carte ardu info,mais pour moi je ne comprend pas tout .
Je recherche une interface pour récupérer les info ,rouge,bleu,blanc et hm,chez pour faire du délestage sur le cumulus en jour rouge. Donc je dois récupérer dès contact sur l’arduino que je cable sur un s’éloigne
Est ce possible avec l’explication ci dessus,
Merci
Barbera
Zut il y a des erreur.
Contact HP et HC. Sur un ZELIO. Désoler c’est à causes de l’écriture automatique
lldel
Bonjour,
J’ai essaye de le faire marcher sur une arduino uno +shield ethernet mais j’ai des erreurs sur Serial1 a la compilation. Quelqu’un pourrait m’aider ? Merci par avance.
Ludovic
Bonjour a tous,
J’ai depuis ce midi le nouveau compteur ERDF Linky,
Je n’arrive plus a décoder les trames. Que doit on changer en plus de la vitesse de transmission (9600 vs 1200 bauds)
Merci !
destroyedlolo
Recherche les docs du Linky sur le web, il y a 2 modes :
* un TéléInfo compatible avec l’ancien, mais avec 1 ou 2 infos en moins
* un mode évolué, de mémoire à 9600 bd, qui contient beaucoup plus de champs.
Ludovic
J’ai cherché toute l’après midi.
Particulièrement sur ce document : http://www.erdf.fr/sites/default/files/ERDF-NOI-CPT_54E.pdf
Mais rien n’y fait… pas un caractère ne sort.
destroyedlolo
Oui, c’est le chapitre 6 qui est important.
De plus sur les anciens compteurs, même si la TéléInfo n’est pas active, tu obtiens seulement des trames contenant les ADC. Je ne sais pas pour les Linky mais je doute que ca ne sort rien.
Tu as peut-être un pb dans ton montage 🙂
Ludovic
Mon montage est vraiment tout simple…
c’est le même que sur cette page : http://www.worldofgz.com/electronique/recuperer-la-teleinformation-erdf-sur-larduino/
Ludovic
a l’origine j’avais celui de cette page qui ne fonctionne plus
Ludovic
C’est en lisant cette documentation que j’avais conclu a 9600 bauds : http://www.erdf.fr/sites/default/files/ERDF-NOI-CPT_54E.pdf
Ce matin j’ai branché un convertisseur série que j’ai pu retrouver des trames conformes avec Termite :
[02]
ADCO XXXXXXXXXXXX L
OPTARIF BASE 0
ISOUSC 30 9
BASE 000036088 $
PTEC TH.. $
IINST 003 Z
IMAX 090 H
PAPP 00660 –
HHPHC A ,
MOTDETAT 000000 B
[03]
1200 bauds, 7 data bits, 1 stop bit, parity even.
Jeremi
Bonjour à tous,
Dans un premier temps, je vous remercie beaucoup pour ce site très enrichissant. J’ai 2 questions à vous poser (je n’ai malheureusement pas trouvé la réponse) :
1) la sortie télé-information nous informe bien si le client est en HP & HC. D’ailleurs, on sait même si la zone actuelle est HP ou HC. Je me pose alors la question suivante: Comment puis-je connaître les horaires des HPs et HCs. En France, il y a différentes plages horaires d’heures pleines et heures creuses qui varie suivant la région, la commune etc. Même au sein d’une même commune, il y a parfois 3 voir 4 plages d’horaires. alors ma question est la suivante: Comment puis-je savoir laquelle des plages HP/HC est appliquée pour le logement qu’on « étudie ». Sachant que la télé-information fournie une info de la forme suivante : HHPHC C ou HHPHC Y D. Comment peut-on à partir de ces données remonter aux horaires ?
2) La sortie télé-information ne fournie pas la puissance active (la vrai!). Comment faire pour calculer (mesurer) celle-ci ? La puissance apparente est fournie en temps réel mais pas la tension…..
Je vous remercie d’avance pour vos réponses.
Cordialement.
Jeremi.
p2cardon
Bonjour @jeremi,
Pour la question des plages horaires, je viens de chercher sur Internet, et d’après EDF les plages dépendent des communes, et même parfois des quartiers. Elles sont choisies en fonction des contraintes d’exploitation.
Sur ce site, tu peux trouver ces plages en fonction de ton code postal:
http://www.erdf.fr/classes-temporelles
par contre EDF annonce que cette information est fournie sans engagement …
J’ai fait une recherche pour chez moi :
Plage 1 : 00H00-08H00
Plage 2 : 02H00-07H00;14H00-17H00
Plage 3 : 22H30-06H30
Plage 4 : 23H30-07H30
p2cardon
@jeremi suite … oups c’est parti un peu vite
Une recherche avec différents codes postaux montre des plages différentes
Je pense que les numéros de plages 1, 2, 3, 4 correspondent à la lettre A, B, C, D trouvée dans la trame de télé-information
Pour ce qui est de la puissance, je me suis posé la question. Il faudrait pouvoir mesurer en temps réel la tension pour rapprocher ça des valeurs fournies par la téléinformation. Pour ce qui me concerne j’ai considéré une valeur moyenne, généralement constatée chez moi de 240 V
Par ailleurs j’ai cherché, mais pas trouvé de montage simple pour récupérer cette info par exemple avec une Arduino … si quelqu’un à une solution, je suis preneur
Cordialement
Pascal
destroyedlolo
@Jérémi : « La sortie télé-information ne fournie pas la puissance active (la vrai!). Comment faire pour calculer (mesurer) celle-ci ? »
Tu ne peux pas : il faudrait que tu connaisses le Cos Phi de ton installation et en temps réel.
> » La puissance apparente est fournie en temps réel mais pas la tension….. »
U = Papp / Iinst
Sauf que Iinst est arrondi à l’ampère tout comme la Papp (mais je ne sais pas à quoi, 30VA peut-être), donc ça sera pifométrique.
Perso, j’ai un onduleur pour mon réseau et je récupère la tension réseau de ce dernier.
Mais en aucun cas, ca ne te donnera la puissance réel.
Singman
@Jeremi : les plages horaires sont marquées sur ta facture, ce sont les seules qui font foi officiellement. Après, on peut les determiner grace a la téléinformation.
Pour mesurer le voltage, ce qui est inutile mais bon si ça te chante d’avoir un résultat qui ne sert a rien (tu es facturé à l’index compteur et tes retours téléinformation ne sont que des infos « relatives »), après tout pourquoi pas, voila un accessoire qui va te plaire : http://www.seeedstudio.com/depot/noninvasive-ac-current-sensor-100a-max-p-547.html
Il existe plusieurs modèles suivant l’intensité.
jeremi
Bonjour,
Merci pour vos éléments de réponses.
Discussion :
@p2cardon : Pour les heures HP/HC, le mieux est de suivre les changements sur 1 journée et en déduire la plage du logement concerné.
@Singman : Peux-tu stp m’expliquer en quoi un capteur de courant va m’aider à obtenir la tension, le cos phi, la puissance active ?
Merci.
Au plaisir de vous lire.
Cordialement.
Lionel
Bonjour,
J’aimerais ajouter 2 capteurs de temperatures type DHT11 (interieur et exterieur) dans le lien genere par le projet arduino.
J’ai telecharge et installe la librairie (https://github.com/adafruit/DHT-sensor-library) j’ai essaye de l’integrer au projet mais je n’arrive pas du tout a l’integrer dans le lien genere par le projet.
Pour info, j’utilise un NAS Synology au lieu d’une zibase. J’ai donc cree ma base sql et les donnees sont bien recues et affichees sur ma page web.
Merci pour votre aide.
Kapitaliste1
Bonjour!
Merci pour le tuto, j’ai suivit jusqu’à la dernière ligne 😀 .
Je travail sur un Intel Edison et j’ai essayé tout bêtement de compiler refaire la même procédure mais ça ne fonctionne pas.
N’auriez-vous pas une remarque ou solution pour un débutant?
Philippe
pour ceux qui voudrait utiliser un arduino Méga
voici un bout de code qui permet d’afficher les trames sur le COM usb.
Avec ce setup pas besoin de filtrer le huitième bit.
void setup()
{
// On initialise le port utilisé par le « moniteur série ».
// Attention de régler la meme vitesse dans sa fenêtre
Serial.begin(115200); COM USB
Serial2.begin(1200,SERIAL_7E2); COM compteur EDF 7 bits, parité even, 1 bit stop
// On initialise le port avec le compteur EDF à 1200 bauds :
// vitesse de la Télé-Information d’après la doc EDF
Serial.println(F(« setup complete »));
}
void loop()
{
// Variable de stockage des caractères reçus
char charIn = 0;
// Boucle d’attente du caractère de début de trame
if (Serial2.available()){
charIn = Serial2.read();
Serial.print(charIn);
}
}
drouard
bonjour ce sujet est il toujours d actualité
p2cardon
@drouard
* Réponse rapide OUI 😉
* Réponse un peu plus « fouillée » : tant qu’il y a des compteurs EDF avec une sortie téléinformation et des cartes Arduino : OUI …
Chez moi le montage est toujours exploité et n’a jamais montré de défaillance … j’enregistre maintenant depuis juillet 2012 … les données enregistrées dans une base MySQL sur Synology ont d’abord été exploitées par une Zibase jusqu’en avril 2016 et maintenant par une box eedomus …
Quelle est la question sous-jacente ?
Gijs
Bonjour,
Je cherche une solution simple.
Je veux décoder le signal Téléinformation et seulement activer une relais pendant JBHC.
C’est pour une abonnement tempo. Est-il correct que le PTEC donne cette information?
Et avez-vous une exemple d’une programme qui fait seulement cette détection?
J’ai déjà une Arduino uno et l’interface ver le compteur EDF. Toute support est bien apprécié!
Mathieu
@Pascal CARDON
« Je crois pour être précis, que je devrais parler de KW/H ».
Pas vraiment, en fait le kW/h n’existe pas à ma connaissance pour des compteurs, c’est surtout un abus de langage ou d’écriture, car ça correspond à un flux de puissance. En réalité, pour l’énergie on écrit kWh (car c’est un kW multiplié par 1h, et non pas divisé par 1h !).
Donc pour résumer: kW pour la puissance (par exemple quand tu as des dépassements, ou la puissance souscrite), kWh pour l’énergie consommée (consommation mensuelle par exemple).
Merci pour le tuto !
Laurent
Salut,
Découvert sur le tard votre page, cela ne fait que très très peu de temps que je m’intéresse au développement sur Arduino. Particulièrement tout dev lié à la domotique!
En revanche j’ai un peu de mal à voir/comprendre à quoi correspond les deux borniers de connexion que l’on voit sur votre photo tu montage en place.
A l’opposé de la LED bleue, il y a le bornier jack noir pour l’alimentation, juste à côté de celui-ci il y a la prise Ethernet afin, je pense, de pouvoir communiquer sur le net (ce qui semble bien être le but de votre montage :-)), mais à quoi sert ce bornier de connexion juste à côté de la LED???
Plus exactement quel est son type : jack, USB, simple connecteur double ou 3 fils ,etc… Je pense qu’il s’agit du bornier qui est connecté au compteur EDF mais je ne vois vraiment pas comment il est. Sur les autres photos on voit bien un petit « boîtier » de plastique couleur marron crème, mais je ne vois vraiment pas de quoi il s’agit…
Pourriez-vous m’éclairez?
En tout cas toutes mes félicitations pour la clarté et la façon dont vous avez écrit cet article!
A+
Lolo
Pascal CARDON
Bonjour,
Si on prend le boitier en plastique noir, dans lequel j’ai implanté la carte Arduino, du côté opposé à la LED bleue, il y a effectivement toute la connectique de la carte Arduino, soit une prise jack pour l’alimentation, la prise ethernet, la prise USB permettant l’injection du code dans la carte …
Côté LED bleue : La lED bleue est fixée sur un petit morceau de circuit imprimé perforé, sur lequel j’ai soudé un optocoupleur (petit circuit imprimé à 4 pates), et un connecteur RJ11, qui est en fait un connecteur téléphonique … j’ai choisi ça parce que je trouvais commode et approprié pour relier mon montage à la sortie dite de téléinformation située en bas du compteur EDF … Ce connecteur permet donc de relier, via 2 fils l’opto coupleur à la sortie ‘téléinformation » du compteur EDF … Si ce n’est pas clair, n’hésitez pas à le solliciter à nouveau … Pascal
Aloyse
Bonjour,
Merci pour cet excellent Tuto.
J ai réalisé la montage et testé son bon fonctionnement sur une carte Arduino UNO.
Tout se passe bien avec la Uno je récupère les trames edf bien propres mais tout se complique quand j essaye de migrer l application sur une carte Arduino YUN (qui me sert à la surveillance de mon chauffage).
J’utilise AltSoftSerial sur le Yun mais je récupère des des trames incomplètes ou parasitées…
Pouvez vous me donner une piste de solution ?
Merci
/*
* le 12/098/2017 Fonctionnne mais reception aleatoire de trames incompletes
*/
#include
#include
#define startFrame 0x02
#define endFrame 0x03
// PIN 13 = RX
AltSoftSerial altSerial;
void setup() {
Bridge.begin();
delay (500);
Console.begin();
while (!Console) ; // wait for Arduino Serial Monitor to open
Console.println(« AltSoftSerial Test Begin »);
altSerial.begin(1200);
}
void loop() {
char c = 0;
int n;
if (altSerial.available()) {
Console.println(« AltSoftSerial available »);
while (c != startFrame){
c = altSerial.read() & 0x7F;
}
while (c != endFrame){
c = altSerial.read() & 0x7F;
// impression des caractere Alphabumeriques
int n = c – ‘0’;
if (( n >= 0 ) && ( n = 17 ) && ( n <= 42)){
Console.print (c);
}
/*
// impression en HEXA
Console.print ( c , HEX);
Console.print (" : ");
*/
}
Console.println("——-fin de Trame——————-");
}
}
db255
J’ai réalisé avec un Arduino Uno un délesteur (coupe le chauffe-eau quand j’approche de la puissance de mon abonnement) grâce à ce super article.
Trois remarques :
– Utiliser plutôt AltSoftSerial, car SoftwareSerial ralentit la fonction millis(), qui me sert pour délester au minimum 10 minutes,
– Si l’on a pas de SFH620A sous la main, un 4N35 et une diode font l’affaire,
– Mon compteur est un Linky tout neuf, il communique les mêmes informations que celles décrites dans l’article.
didi
Bonjour
Pourriez-vous mettre en téléchargement le fichier (‘./my_includes/include.php’) afin de voir à quoi il ressemble.(ou m’envoyer une copie en exemple!)
merci
Papagueno
Bonjour,
En faisant des recherches sur internet je suis tombé sur votre site.
Je me permet de vous contacter car je suis a la recherche d’un moyen simple d’enregistrer la présence et la durée des heures creuses envoyer par EDF.
J’ai des soucis avec eux car je remarque que de plus en plus ils n’envoient pas les HC. Toujours une bonne excuse c’est un problème Enedis au poste source nous allons faire une régularisation.
J’ai essayé Luko mais mon problème n’est pas d’avoir d’info sur la conso mais d’enregistrer la présence et la durée des HC.
Luko ne gère pas cela.
Donc je pensais récupérer la commutation du relais du compteur, pas le téléinfo , et enregistrer la présence et la durée uniquement.
Je ne recherche pas a enregistrer la consommation.
Je part sur la base du relais car avec le téléinfo je n’ai pas la certitude que le relais soit commuté.
Après je conçoit tout a fait que le relais du compteur peut avoir un défaut.
Merci pour tout.