Le Blog de C-quad

Récupérer la téléinformation avec un Arduino

Depuis longtemps j’avais envie de pouvoir suivre ma consommation électrique, sans jamais avoir vraiment franchi le pas. Il existe bien des solutions toutes faites qui permettent de suivre cette consommation via par exemple une pince ampèremétrique, mais j’avais envie de le faire moi même. Cela pour plusieurs raison :

  1. Envie de monter en compétence sur ce formidable Arduino
  2. Que cela ne me coute pas trop cher (moins d’un euro l’opto-coupleur + l’arduino qui va servir à autre chose)
  3. On est tellement fier quand on a réussi quelque chose fait maison 😉

Pour ceux qui ne connaissent pas encore l’Arduino, je vous conseille d’aller faire un petit tour sur le site du projet

Il s’agit d’un petit circuit imprimé complètement open-source disposant d’un microcontrôleur facilement programmable.

La téléinformation

Les compteurs EDF de type électronique possèdent deux bornes (I1 et I2) qui émettent un signal modulé sur 50Hz. Il existe de nombreux schema de circuit imprimé disponible sur internet afin de démoduler ce signal et obtenir par exemple votre consommation en temps réel.

Pour ceux qui désirent avoir un peu plus de détail, je vous conseille de lire l’article plutôt complet sur le sujet  rédigé par Planète-domotique.

Et pour ceux qui aiment aller directement à la source, voici la documentation officielle d’ERDF.fournie par bernard lefrancois.

Le schéma et l’arduino

Une recherche sur internet, m’a amené sur un schéma simple sur chaleurterre  : http://www.chaleurterre.com/forum/viewtopic.php?p=51607#51607

Par contre, il est prévu pour une connexion RS232 (port Série) d’un ordinateur. Cela ne correspondait pas tout à fait à mon besoin, j’ai pour objectif de collecter la téléinformation via le microcontrôleur arduino (qui va faire plus de chose par la suite), mon pc étant très éloigné du compteur.

Heureusement je suis tombé sur quelqu’un qui avait fait le même type de montage pour une interface série TTL. Voici donc le schéma utilisé :

Et avec ce petit bout de code :

#include <SoftwareSerial.h>

SoftwareSerial cptSerial(2, 3);

void setup() {
        Serial.begin(1200);     // opens serial port, sets data rate to 1200 bps
        cptSerial.begin(1200);
}

void loop() {

  if (cptSerial.available())
    Serial.write(cptSerial.read() & 0x7F);
}

J’ai effectivement la chance d’avoir en sortie des données qui ressemblent bien à celles de la téléinformation :

ADCO 02092xxxxxx @
OPTARIF HC.. <
ISOUSC 45 ?
HCHC 010956910 %
HCHP 016779643 >
PTEC HP..
IINST 021 Z
IMAX 047 J
PAPP 04860 3
HHPHC A ,
MOTDETAT 000000 B

Maintenant que j’ai validé que le montage est ok, il me reste à investir dans un shield ethernet afin de pouvoir me passer de la connexion usb.

L’objectif c’est de connecter ce module à domogik via xpl, mais ce sera l’objet d’un autre article.

Logiciels utilisés :

  • Fritzing pour le schéma
  • Arduino pour le développement
  • cutecom pour la liaison série

PS : Partout sur internet on parle de l’opto-coupleur SFH6206, j’ai fait l’erreur de l’acheter, il s’agit d’un opto-coupleur qui n’est pas au format DIP et qui n’est donc pas utilisable sur une plaque d’essai. Je vous conseille donc de prendre plutot le SFH620A qui lui est au format DIP (C’est le même).

53 réponses à to “Récupérer la téléinformation avec un Arduino”

  • Jerome:

    Bonjour, je suis très intéressé par ce projet. Ou avez vous acheté l’optocoupleur ?

  • Jerome:

    Ok Merci pour votre réponse.
    Existe-il une lib en PHP/Python/Perl/Java… pour parser les valeurs retournées par le BUS Téléinfo?

  • Cool !
    J’ai hâte d’avoir un compteur nextgen pour tester ! 😀

  • philippe:

    C’est vrai qu’on peut pas faire plus simple !
    J’ai de mon cote realise une appli similaire mais avec un pic en utilisant un montage que l’on trouve sur le net : http://bernard.lefrancois.free.fr/schema2.htm. J’ai mon aussi enleve la partie max232.

    Je suis entrain de refondre mon systeme pour passer sur bus CAN et au passage je vais migrer ma teleinformation vers votre montage. Par contre, j’aimerais savoir a quel distance est votre arduino du compteur edf ? Le mien est à environ 30m.

    cordialement

  • CyrilP:

    Une autre solution serait de passer sur un jeenode (http://jeelabs.org/tag/jeenode/) alimenté via une batterie (tient le coup bien longtemps) et de passer la communication sans fil pour récupérer les valeurs du teleinfo. (globalement pareil qu’avec un arduino classique mais peut être plus économique/autonome).

  • Bob:

    Bonjour,

    Tout d’abord, merci pour cet article.
    Je suis un parfait ignorant en matière d’électronique, mais je souhaiterais malgré tout réaliser un module de téléinfo à faible coût et j’ai cru comprendre que pour celà, il fallait mettre la main à la patte.

    Je dispose déjà d’un Arduino Uno R3 et d’un Shield Ethernet.
    Afin de m’indiquer si j’ai bien tout compris, pouvez-vous m’aider sur ma liste d’achat ?

    1/ L’optocoupleur que vous présentez : http://www.electronique-diffusion.fr/product_info.php?products_id=21174
    2/ Une résistance de ce type : http://www.electronique-diffusion.fr/product_info.php?products_id=41486
    3/ Un BreadBoard de ce type : http://www.ebay.com/itm/1PCS-new-White-Solderless-Prototype-Breadboard-170-Tie-points-for-Arduino-/370702495888?pt=LH_DefaultDomain_0&hash=item564f973090
    4/ Quelques cables de ce type : http://www.ebay.com/itm/40-Pin-30cm-Dupont-Wire-Connector-Cable-2-54mm-Male-to-Male-1P-1P-For-Arduino-/281031934682?pt=LH_DefaultDomain_0&hash=item416ecf02da

    Est-bien ce qu’il faut ?

    Merci beaucoup de votre aide.

  • Sieg24:

    Bonjour,

    Est-il possible avec un arduino de lire la sortie téléinfo et d’envoyer les trames brutes vers la sortie Ethernet en TCP-IP ?
    Avez-vous un bout de code pour ça ?
    Merci!

    Cordialement

  • bo:

    Bonjour,

    J’ai une arduino UNO, un shield ethernet et le shield teleinfo et je souhaiterais pouvoir recuperer mes infos de teleinfo via Ethernet. Avez-vous la marche a suivre?

    Cdlt

    B

  • Belibaste:

    Bonsoir,
    comme ce dimanche il pleuvait, je me suis intéressé à l’aide de votre blog à la récupération des données de mon compteur ErDF.
    1) essais sur l’arduino avec 10 ml de cable entre le compteur et l’arduino: OK
    2) j’ai installé votre plugin. Il n’apparait pas dans la liste des plugins du menu de gauche; il ne figure que dans la rubrique « Hosts – External members ». Est-ce normal? Je n’ai pas pu créer le « device »: dans la rubrique « feature » la liste était vierge (mon arduino n’était pas raccordé). Tout cela est-il normal?
    3) comment se fait la liaison Arduino / Raspberry ? liaison éthernet? (je passe par ma Neufbox)

    Merci pour votre aide

  • Belibaste:

    Mon compeur de consommation se relève bien sur Domogik.
    Est-il possible de faire la meme chose pour mon compteur de revente d’énergie photovoltaique?

  • J’ai réalisé un module indépendant avec un Arduino pour la récupération du téléinfo et la mise à jour d’une site web distant pour avoir l’historique de la consommation électrique. Cf http://arduino.douez.net
    Tristan

  • Franck:

    Hello Cedric,
    Merci pour cet article intéressant. Je viens de faire ton montage au détail près que la résistance fait 1.6k au lieu de 1.5k (sur le lien chaleurterre.com il semble y avoir une tolérance sur sa valeur). Avant de connecter à l’arduino j’ai voulu vérifier le signal à l’oscillo. Précision : Je suis débutant. En sortie de téléinfo je relève un signal modulé avec une porteuse 50hz, tension crête à crête 12v. En sortie de SFH620A (je relève un signal sinusoïdal de seulement 40mV (quasi nul donc) qui ne resemble en rien à du TTL (5V). J’ai essayé de mettre une LED, ça ne donne rien. Questions au cas où : Est-ce qu’il y a une polarité du côté téléinfo? Quelle tension max dois-je attendre en sortie, quelle forme de signal? As-tu une photo du montage réel, je me demande si j’ai bien compris le câblage du SFH620A (pourtant élémentaire).

  • Salut ! Très intéressant, va falloir que je m’y mette !

  • wehby:

    svp j ai besoin du schéma de demodulation du signal de teleinformation ainsi que la programmation de decodage du trame .

  • Seb:

    Hello,

    J’essaye de faire le montage SFH6206 pour relevé ma conso avec mon arduino mais je ne vois jamais aucune information sortir de l’arduino.
    Je vois que la téléreléve fonctionne car j’ai fait un montage avec un led sur la sortie de l’optocoupleur et la led clignote.
    J’avoue que je séche complétement.
    Avez vous une idée??
    Merci

  • Squale76:

    Bonjour,

    Je voudrais utiliser un arduino pour récupérer la téléinfo mais à la différence de votre montage, je dois utiliser une liaison série (je n’utilise que la puce AtMega328, je ne peux donc pas mettre de shield ethernet).
    Que dois je modifier pour envoyer la trame xPL sur le Rx/Dx de l’arduino ?
    Mon Domogik est installé sur un raspBerry et je pensais donc « écouter » le port UART du GPIO pour récupérer la trame xPL, est ce possible ? Comment je dois procéder ?

    Merci d’avance pour vos réponses. Je suis vraiment à la « Rame » sur ce sujet.

  • sridel:

    Merci. grâce à tes infos, je lis les téléinformations de mon compteur edf.
    Je tente un montage optocoupleur -> arduino -> wr703n

  • Bitard Michaël:

    Bonjour,

    Comme j’ai galéré un peu dessus, je poste une piste qui pourrait aider les autres.
    J’ai un arduino Mega et ce n’est pas possible de récupérer les informations sur certaines pins.
    Dans mon cas j’ai branché sur la pin 12 et ça a fonctionné.

    Voilà la doc :
    Not all pins on the Mega and Mega 2560 support change interrupts,
    so only the following can be used for RX:
    10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

    Not all pins on the Leonardo support change interrupts,
    so only the following can be used for RX:
    8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

    • philou35:

      slt michael,

      je galere aussi pour faire marcher la teleinfo sur le port serial1 de la mega 2560: si j’utilise Softserial, ça marche (pin 10 par ex) mais si j’essaye d’utilser RX1 (pin 19), je ne recois jamais rien… si je connecte la teleinfo a la fois sur pin10 et Pin19, là je recois des choses sur RX1 et des que je debranche la pin 10 (le signal teleinfo etant tjrs connecté sur pin 19 RX1) la reception sur pin19 s’arrete.. il semble que le signal ne soit detecté sur le port serial1 que si il est connecté aussi sur la pin10 et que le port correspondant soit bien declaré en port serie soft (pas la peine de le scruter, juste le declarer) bref c’est tres bizarre cette correlation…
      je precise que j’ai teste le fonctionnement en 1200 bds du port SERIAL1 séparement, avec une autre carte UNO qui envoyait du 1200 bds et que ça marche sans pb…

      aurais tu une idée la dessus, je pourrais t’envoyer on bout de soft de test …
      merci pour ton aide..

      • Michaël:

        Salut Philou,

        J’ai déménagé et malheureusement le compteur dans mon nouveau logement est un ancien, donc je ne peux plus récupérer la téléinformation.

        Mais pour ton problème ça me parait normal que tu n’y arrives pas, la pin 19 n’est pas RX sur l’arduino mega, seulement les pins : 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69.

        Bon courage,
        Michaël

        • Cyrille Collinet:

          Sur le Mega, 3 SERIAL PORT « matériel » supplémentaires sont disponibles. RX1 est bien en 19 et TX1 en 20

        • philou35:

          merci pour ta réponse ! effectivement on ne peut tuiliser apparemment que les pins 62 a 69 pour la fonction SoftSerial sur mega+wiznet+SD, les autres pins etant prises par les shield… mais si on n’utilise pas la carte SD, on eut utiliser la pin 10 ou 11 : ça marche tres bien…

          mon pb etait l’utilisation des ports série hard de la MEGA et là, il semble qu’il faille ajouter une resistance entre l’entrée RX1 (pin 19) et VCC (voir reponse de cyrille C.)

          pour ton vieux compteur : tu peux soit attendre le deploiement de Linsys par ERDF (avec peut etre un pb de compatibilité du protocole teleinfo d’apres ce que j’ai vu…???), soit bricoler un capteur depuis un compteur supplementaire que tu bricolerais (faut vraiment avoir envie de bricoler mais j’ai vu des trucs geniaux la dessus !!)

      • Cyrille Collinet:

        J’a posté sur mon blog un « memo » concernant mon code fonctionnel sur mega 2560 et 1280 et compatible avec l’utilisation du shield ethernet WIZNET
        http://memo-geek.blogspot.fr/

      • Thomas L. (@ookook):

        Note qui intéressera peut-être un passant: aucun souci pour récupérer la téléinfo avec SoftwareSerial sur un arduino Uno, par contre obligé d’utiliser AltSoftSerial pour réussir à la récupérer sur arduino Yùn.

        HTH.

        • eric:

          Bonjour,

          ce sujet date un peu mais il m’intéresse.
          Je suis débutant sous arduino, j’ai le modèle de type Yun et je cherche à monitorer (puis ultérieurement à grapher) les informations de télétransmission edf.
          J’ai trouvé quelques sources sur la faisabilité, par exemple ici: http://www.domotique-info.fr/2014/05/recuperer-teleinformation-arduino

          J’en suis au stade où la led semble capter les infos mais je ne parviens pas à les afficher via l’arduino YUN (wifi et/ou éthernet). Les sources que j’ai pu trouver font souvent référence à des cartes arduino UNO mais je n’ai rien trouvé avec le YUN.

          Je cherche éventuellement un bout de code et à comprendre.
          Merci d’avance pour vos éclaircissements.

          Cdt

          Eric

          ———————————————————————————
          Thomas L. (@ookook):
          13 février 2014 à 9 h 43 min

          Note qui intéressera peut-être un passant: aucun souci pour récupérer la téléinfo avec SoftwareSerial sur un arduino Uno, par contre obligé d’utiliser AltSoftSerial pour réussir à la récupérer sur arduino Yùn.

          HTH.
          Répondre
          ———————————————————————————

  • Cyrille Collinet:

    Bonjour,
    En complement concernant l’implémentation teleinfo sur arduino mega, il convient d’utiliser une des interruptions « materiel » du mega, le shield wiznet monopolisant toutes les broches disponibles et compatibles citées ci dessus…(j’ai bien galeré la dessus…)
    donc par exemple on utile le rx1 (broche 19) de l’arduino mega :

    Pour le setup:
    Serial1.begin(1200);
    UCSR1C = B00100100; // passage en mode 7bits + bit de parité de la liaison série pour la liaison avec le compteur EDF.

    et on modifie la fonction de lecture de trame pour utiliser Serial1.read (supprimer également le masquage du 8 bit !)

    Pour le montage T1—1.2k—opto1 et 4.7k entre rx1 et vcc
    Cela fonctionne enfin …..

    • philou35:

      merci cyrille !! tu réponds a ma question apparemment, c’est bien une question de hard (resistance de pull up a rajouter coté RX1) je teste asap et posterais la confirmation sur le blog de Cedric ! vous etes tous supers en tout cas…

      sinon merci aussi pour ton soft : il ressemble grosso modo au mien, mais tu as dû sans doute enlever la partie traitement webserver… normal : faut qu’on cherche un peu…j’essaye en ce moment d’envoyer des requetes SQL depuis l’arduino vers une page free pour gerer les données via une base mysql, pas évident mais ça devrait être possible…je débute en PHP et Mysql aussi…mais c’est genial !!
      l’ultime dev serait de passer apres sous Android pour recuperer tout ça sur une tablette…!

  • belibaste:

    Bonjour,
    J’ai récupéré le script de Cyrille pour le MEGA; je l’ai modifié pour être en « base »; fonctionne nickel.
    Cyrille tu as trop écrit et pas assez; j’ai pigé le idx par contre je n’ai pas trouvé la liaison entre « Dummy » et l’http…….
    un indice supplémentaire?
    Pour en revenir au MEGA en Téléinfo: ça n’a jamais fonctionné sous Chrome par contre très bien sous « Mozilla »; l’opto directement sur une entrée Serial non plus je module le signal à travers 2 portes NAND en série.

  • Cyrille Collinet:

    C’est a ton arduino de poster la requête, via la « fonction client » de ethernet.h (je viens de posté ma « fonction » a la fin de de mon code teleinfo…).
    Dans domoticz, tu cree un virtual « hardware » de type « Dummy »pour ton arduino.
    Sur ce virtual hardware du crée un virtual sensor de type energie, tu recupere son idx et a partir de la tu peux mettre a jour la valeur avec la requête http qui vas bien….

  • philou35:

    juste pour confirmer à tous qu’il faut bien une resistance de 4.7 k entre 5v et entrée RX1 (pin 19) de l’entree serial1 de la carte MEGA : ça marche super maintenant et je vais pouvoir coder le reste du projet …
    (je suppose que c’est idem pour les autres entrées des ports series MEGA excepté RX0 TX0 peut être…)

  • belibaste:

    @Cyrille:
    dans Domoticz j’ai bien créé le « dummy » par contre je coince avec le script pour le MEGA; j’ai récupéré ta fonction, mais quand je compile j’ai une série d’erreurs; j’ai chjerché tout ce W.E. mais je n’ai pas avancé.
    @philou35: tu en es où?

    • philou35:

      slt !
      comme je le disais, j’ai enfin validé qu’l fallait bien une resistance supp de 4.7 k sur la carte MEGA,si on utilise le port serial1 ( avec le port Softserial, pas besoin )
      pour l’instant j’accede aux donnees teleinfo via une page WEB simplifiée mais je voudrais gerer une gestion des infos via une base mysql, et faire un acces via une page WEB hebergée sur une page perso, pour gerer des stats diverses de conso, et a terme developper une interface pour actionner des capteurs toujours via le site page perso… apparemment c’est plus sioux dans le sens page WEB -> arduino (free bloquant les requetes ds ce sens)…d’apres ce qu’on m’a dit…
      une info en passant : mefier vous des shield ethernet vendu pas cher sur ebay : certains sont des premieres generations, reconnaissable car il n’y a qu’une led de controle dessus, et ils bugent pdt le televersement : il faut actionner le reset juste apres la compil ! j’ai galeré une journée avant de trouver l’info…app

  • Cyrille Collinet:

    @belibaste
    J’ai mis a jour ma page de blog « memo » avec un code « complet » qui compile fonction teleinfo et domoticz (par contre je ne l’ai pas tester ;-)).

    • philou35:

      hello cyrille : juste une petite question en passant, si tu as une ide (même si c’est +que limite HS par rapport a la teleinfo…) j’utilise 2 shield ethernet, parfaitement reconnus ds mon reseau par contre le premier a été detecté automatiquement par le routeur de ma freebox V6 (WIZnet xxxxxx où xxxxxx est la fin de l’adr MAC utilisée) -> je le voyais dans mes periph…et j’avais un bail alloué…avc le deuxieme, rien n’est vu ! par contre quand j’accede via IE aux pages WEB (ou par un simple ping), je vois alors sur les entrées switch de l’ecran reglage avancé les adr mac correspondantes : j’ai pu creer un bail statique manuellement mais la free ne voit tjrs pas l’adr IP qd je suis connecté (et en plus maintenant elle ne voit plus le premier shield !) bref comprend rien! est ce en rapport avec la façon d’ouvrir et de fermer la connexion web ds le code arduino ? cemment voir le shield connecté depuis l’interface de la free ? si quelqu’un a une idée, je suis preneur !! bonne soirée qd même !

      • Cyrille Collinet:

        Cela ressemble franchement a un « conflit » d’adresse mac entre tes 2 shield ethernet …
        Tu as bien « codé » 2 mac differentes sur tes deux sketch ?

        • philou35:

          non non, c’est bien 2 MAC differentes, et tout est bien fonctionnel depuis l’exterieur : j’accede a mes 2 mini sites ARDUINO depuis 1 PC exterieur, ou via un smartphone donc les redirections sont bien OK . Je viens de verifier une ultieme fois sur l’ecran « peripheriques réseau » de la freebox (revol) et oh miracle, je vois les 2 shield en ligne ! j’ai enfin pu baptiser le deuxieme shield avec un nom personnalisé…
          par contre et malgré que les 2 shields aient un bail statique defini, je ne vois pas les shields parmi les baux actifs, mêe en grisé… mystere…
          peut etre faut t-il definir les gateway et submask ds les sketch pour que le bail soit reconnu ? bref si quelqu’un a des shields qui apparaissent dans les baux actifs de sa freebox V6, je suis preneur du bout de code qui declare la partie server du shield…
          mais je digresse completement de forum ! je devrais poster sur celui d’arduino…promi juré j’arrete là la déviance ! (surtout qu’avec la freebox, je risque le mal de crâne a essayer de comprendre) les subtilités de routage…)

  • belibaste:

    @ Cyrille: désolé mais je n’ai réussi à faire fonctionner le code complet:1) la var BUFFER_HCHP remonte une valeur nulle alors que j’ai bien les remontées de mon compteur en visu dans la console série de l’Arduino.
    2) le Raspberry ne reçoit pas les codes par le réseau (dans le log de Domoticz je vois la connexion de l’Arduino lorsque je le lance mais je ne vois pas apparaître toutes les 30′ les remontées de l’arduino).
    Ne pourrait-on pas continuer la discussion ailleurs car ici j’ai peur qu’on disgresse.

  • Cyrille Collinet:

    @Belibaste : pour la partie « domoticz » tu peux utilisé les commentaires de ma page mémo, je vais y jeter un coup d’oeil et surtout paramétrer les notifications ;-))

  • vincent:

    bonjour
    La classe !! en bidouillant le code pour le « passer en xap » (le protocole cousin de xpl) pour faire discuter le compteur avec le « mechant Homeseer  »
    NI-KEL cela me permet de virer l’antique plugin plus soutenu « teleinfo »

    Bravo et encore merci pour le taf

  • Guillaume:

    Bonjour,
    J’ai testé ce montage en suivant les instructions qui ne semblent pas très compliquées mais tout ce que j’arrive à obtenir dans le moniteur série est une suite de « x » sur la première ligne. (qui s’arrête si je débranche l’arduino du compteur)
    Est-ce que cela est déjà arrivé à quelqu’un? Est-ce que vous avez une idée d’où cela peut venir? (mauvais cablage? composant défectueux? erreur de code? …)
    PS : j’utilise un Diecimila mais j’ai obtenu exactement le même pbm en utilisant ma board Mega ADK.

  • philou35:

    franchement je ne vois pas de raison pour laquelle ça ne marcherait pas sur mega ADK ou diecimila ! verifie bien tes vitesses deja (9600 par defaut sur le port console) et 1200 pour la teleinfo, puis le reste du soft. si c’est ok, donc 1/ verifier que ton soft marche bien en testant par ex le port softwareserial et en le rebouclant sur une autre carte qui enverrait des données series… tu dois trouver facilement des exemples sur le site de ref.
    2/ une fois ton port serie operationnel (en 1200 bds pour la teleinfo), si tjrs pas OK, tu as un pb avec la sortie teleinfo non activée (pas de chance !!) donc essaye de tester sur un autre compteur…

    difficile de pouvoir diagnostiquer ta panne sans le code ni ton schema precis du montage utilisé.mais encore une fois, pas de raison que ça ne marche pas…

  • 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

Laisser un commentaire