Téléinfo EDF Arduino sans fil avec RFXCOM

Bonjour à tous,

voici un nouveau mini projet qui me trotte dans la tête depuis un bon moment. J’utilise Domoticz avec un Rasberry B+ et RFXCOM depuis plusieurs mois.

Je récupères les trames téléinfo de mon compteur EDF grâce à un montage avec un optocoupleur.  (vous trouverez les explications détaillées du montage sur le site magdiblog.fr par exemple).

Tout fonctionne très bien et je récupère de belles courbes sur Domoticz :

téléinfoEDF

Téléinfor EDF sur Domoticz

Comme je souhaiterais me passer de la liaison filaire entre mon compteur EDF et mon Raspberry je souhaiterais pouvoir transmettre les informations relevées sur mon compteur à mon Rasberry via le RFXCOM et donc par onde radio 443Mhz.

Pour se faire je vais utiliser un Arduino nano qui permettra de lire les trames Téléinfo et de les transmettre via ondes Radio grâce à un émetteur RF 443Mhz.

Matériel :

  • Rasberry B+ avec Domoticz  (39€)
  • Module USB RFXCOM (110€)
  • Adruino Nano USB (2.5€)
  • Optocoupleur SFH620A-x (ref exacte SFH620A-3)  (4,20€)
  • Module RF 433Mhz (1€)
  • Plusieurs résistances (~1€)

Donc si comme moi vous avez déjà un Raspberry, le module RFXcom et le montage optocoupleur vous n’aurez pas plus de 5€ à rajouter pour avoir le module téléinfo RF.

Etape 1 : Montage électronique partie téléinfo 

Comme d’habitude, je ne vais pas réinventer le roue, vous trouvez sur internet de multiples schémas qui expliquent le montage avec optocoupleur nécessaire pour récupérer les trames téléinfo de votre compteur EDF.

Je vous conseille par exemple :

Pour ma part j’utilise le PIN 8 pour réceptionner les données téleinfo.

Etape 2 : Montage électronique partie émeteur RF 

Très simple, dans mon cas j’utilise le PIN 3, donc Data sur PIN 3, GND sur GND et +VCC sur 5v de la carte Arduino.

A ce stade vous devez avoir votre Arduino Nano avec l’information de téléinfo qui arrive sur le PIN 8 et le module RF 433Mhz qui émet via le PIN 3.

Module téléinfo sans fil

Module téléinfo sans fil (A noter que pour simplifier le schémas les résistance R1 et R2 de l’optocoupleur ne sont pas symbolisées)

Etape 3 : Code pour Arduino

j’ai fais pas mal de recherche. Je suis loin d’être capable d’écrire un code complet aussi complexe. Alors j’ai trouvé par exemple sur le site worldofgz.com [REF] un code qui pourrait bien m’aider. Malheureusement il utilise 2 ports serials alors que le Adruino Nano n’en possède qu’un.

Le code que l’on trouve sur le site www.domotique-info.fr [REF] traite très bien le signal téléinfo mais il manque la partie qui envoie l’information sur l’émeteur RF.

J’ai finalement trouvé quelque chose qui correspond exactement à mon besoin, un code qui va lire les trames téléinfo puis les envoyer vers RFXcom en simulant un OWL180. C’est un peux le même principe que ce que j’ai déjà fait pour les sondes thermomètres [Voir : Simulation sonde Oregon avec Atmega ).

Ce code, disponible sur le site connectingstuff.net, s’inspire lui même des références si dessus. L’original peux être trouvé ici. J’ai à mon tour adapté ce code, vous trouverez ma version ici  :  teleinfo_rf.ino

Etape 4 : c’est fini ! 

Une fois tout bien branché comme expliqué dans les étapes 1, 2, 3  domoticz devrait identifier un nouvel appareil comme ceci :

cm180

Puis vous pourrez voir de belles courbes EDF comme ceci :

téléinfo EDF RF

Courbes consommation EDF avec module RF

J’espère que cet article vous permettra d’avancer. Comme vous le voyez j’ai pas mal réutilisé les information trouvées sur internet. J’ai juste consolider le tout sur une seule page et partagé le tout avec vous.

Ce code a été adapté pour les compteurs triphasés. Pour voir le code adapté à un compteur triphasé allez voir sur le super article sur le site petitssuisses.com. Lien de l’article  : Téléinfo ERDF sans fil pour compteur triphasé)

103 réflexions sur « Téléinfo EDF Arduino sans fil avec RFXCOM »

  1. Manu Auteur de l’article

    Bonjour,

    principalement sur ebay. en tapant les référence dans le moteur de recherche d’ebay tu devrais trouver facilement. Par contre si ça vient de Chine faut compter quelque semaine pour que ça arrive chez toi (2 à 3 semaines généralement) .

    Désolé d’avoir tardé a répondre…

    Répondre
  2. Brouty

    Rebonjour
    tout fonctionne enfin mais j’ai un pb avec les courbes. Je n’ai pas les HC et les HP sur le graph. RFX com m’a cree 3 dispositifs different. As tu une explication?
    Voici la copie d’un dispositif:
    {
    « ActTime » : 1439531876,
    « ServerTime » : « Aug 14 2015 07:57:56 »,
    « Sunrise » : « 06:40:00 »,
    « Sunset » : « 20:48:00 »,
    « result » : [
    {
    « BatteryLevel » : 100,
    « CounterToday » : « 3.459 kWh »,
    « CustomImage » : 0,
    « Data » : « 55536.285 kWh »,
    « Favorite » : 0,
    « HardwareID » : 9,
    « HardwareName » : « Rfxcom »,
    « HaveTimeout » : false,
    « ID » : « 03C2 »,
    « LastUpdate » : « 2015-08-14 07:57:54 »,
    « Name » : « Edf »,
    « Notifications » : « false »,
    « PlanID » : « 0 »,
    « Protected » : false,
    « ShowNotifications » : true,
    « SignalLevel » : 8,
    « SubType » : « CM180 »,
    « SwitchTypeVal » : 0,
    « Timers » : « false »,
    « Type » : « Energy »,
    « TypeImg » : « current »,
    « Unit » : 0,
    « Usage » : « 370 Watt »,
    « Used » : 1,
    « XOffset » : « 0 »,
    « YOffset » : « 0 »,
    « idx » : « 21 »
    }
    ],
    « status » : « OK »,
    « title » : « Devices »
    }

    Merci

    Répondre
  3. Manu Auteur de l’article

    Désolé pour la réponse tardive. que donne les courbes , ca ressemble a des courbes HP et HC ? Quel tété elle on après quelques jour de marche ?

    Moi ça avait bien reconnu les HP et HC, comme une vrai sonde OWL180..

    Répondre
  4. domotruc

    Salut manu,
    Tout d’abord félicitation pour ton tuto.
    Je débute à peine sous arduino et je rencontre un soucis : je ne reçois rien sur domoticz et sur la console de l’arduino j’ai sequence error … . J’ai bien sur testé le montage optocoupleur sur un raspberry où je reçois bien les infos sur /dev/ttyAMA1. La sortie de l’optocoupleur est bien sur D8.
    Question subsidiaire peut-on rajouter un second optocoupleur sur par exemple le D9 pour relever la production d’électricité en simulant une 2° sonde ( 2° Id pour le CM180 ) ,
    Peux-tu STP m’apporter ton aide.

    Répondre
  5. Manu Auteur de l’article

    Bonjour domotruc !
    Merci pour tes encouragements !

    Pour le message « sequence error » tu as quelque chose de plus que ça dans la log ? Pas de problème au niveau des résistance par rapport au montage électronique de l’optocoupleur ? Pas de fils trop longs (plus de 1m) entre l’optocoupleur et le compteur ou entre le l’optocoupleur et le board arduino ?

    Pour la seconde question, je ne vois pas de problème d’utiliser un second optocoupleur mais dans le cas le code pour l’arduino devra être réécrit car il n’est pas fait pour cela dans l’état actuel.

    A+

    Répondre
    1. domotruc

      Bonsoir Manu,

      Merci pour ta réponse rapide, non malheureusement je n’ai pas plus de log sur la console de l’arduino. Sinon pour les longueurs de câble ou la résistance j’utilise le même montage sur le raspberry et décâble uniquement les 3 fils pour aller sur l’arduino nano.
      Je vais refaire des tests et te tiens au courant.

      Répondre
  6. Nicolas

    Salut, excellent article que j’ai suivi à la ligne, mais (il y a un mais), je ne voit pas la sonde dans domoticz, je voit les trames dans rfxmanager, mais nada dans domoticz (V2.3530), le serial boucle bien des infos à la chaines, quels dispositifs faut-il activer sur le rfxcom dans domoqicz ? (j’ai bien tenté oregon mais sans succés).

    Répondre
    1. Nicolas

      J’ai vu mon erreur, si le système n’est pas branché au compteur il n’est pas detecté, (pas d’infos à emettre ?)
      je recois le flus suivant dans domoticz
      « result » : [
      {
      « AddjMulti » : 1.0,
      « AddjMulti2 » : 1.0,
      « AddjValue » : 0.0,
      « AddjValue2 » : 0.0,
      « BatteryLevel » : 255,
      « CounterToday » : « 0.480 kWh »,
      « CustomImage » : 0,
      « Data » : « 111045.808 kWh »,
      « Description » : «  »,
      « Favorite » : 1,
      « HardwareID » : 6,
      « HardwareName » : « RFX433 »,
      « HardwareType » : « RFXCOM – RFXtrx433 USB 433.92MHz Transceiver »,
      « HardwareTypeVal » : 1,
      « HaveTimeout » : false,
      « ID » : « 000003D2 »,
      « LastUpdate » : « 2015-12-20 12:49:11 »,
      « Name » : « EDF »,
      « Notifications » : « false »,
      « PlanID » : « 0 »,
      « PlanIDs » : [ 0 ],
      « Protected » : false,
      « ShowNotifications » : true,
      « SignalLevel » : « -« ,
      « SubType » : « kWh »,
      « SwitchTypeVal » : 0,
      « Timers » : « false »,
      « Type » : « General »,
      « TypeImg » : « current »,
      « Unit » : 1,
      « Usage » : « 1963.0 Watt »,
      « Used » : 1,
      « XOffset » : « 0 »,
      « YOffset » : « 0 »,
      « idx » : « 26 »

      Quel champ de donne les heures creuses ?

      Répondre
  7. gresset

    Hello,

    Merci pour ce montage tres intéressant.
    Toutefois je rencontre un petit souci, je ne récupéré pas de courbe (à part des valeurs sur la courbe semaine passée).
    Le montage avec mon nano est fonctionnel car en me branchant sur son port série avec un PC, je vois bien les trames des messages du compteur.
    Pour la partie radio je passe par le module RFLink branché sur un raspberry pi B+ via l’USB, qui détecte bien sa présence dans l’onglet dispositifs (device) de Domoticz.
    Est ce qu’il y a une incompatibilité avec RFLink?
    A+

    Merci de vos lumiere

    Répondre
    1. Gresset

      Hello,

      Je reviens sur ce problème avec plus de précision.
      Coté Nano en me branchant sur son port serie, j’attrape bien les trames:
      ADCO 020022146054
      OPTARIF HC..
      ISOUSC 45
      HCHC 45281559
      HCHP 29208749
      PTEC HP..
      IINST 2
      IMAX 37
      PAPP 480
      HHPHC D
      MOTDETAT 000000

      Coté Rflink en me branchant sur le port série de l’Arduino Mega, j’attrape des trames de ce type:

      – En regardant avec le moniteur du port série de l’IDE Arduino, cela donne ce type de trame
      20;00;Nodo RadioFrequencyLink – RFLink Gateway V1.1 – R37;
      20;01;Oregon CM180;ID=003C;WATT=0152;KWATT=01bdb0ed;
      20;02;Oregon CM180;ID=003C;WATT=0152;KWATT=01bdb0ee;

      – En regardant avec le logiciel de Rflink (RFlink loader) en mode normal cela donne ceci
      20;00;Nodo RadioFrequencyLink – RFLink Gateway V1.1 – R37;
      10;version;
      20;01;VER=1.1;REV=37;BUILD=05;
      20;02;Oregon CM180;ID=003C;WATT=0182;KWATT=01bdb138;
      20;03;Oregon CM180;ID=003C;WATT=0182;KWATT=01bdb139;
      20;04;Oregon CM180;ID=003C;WATT=0182;KWATT=01bdb139;

      – En regardant avec le logiciel de Rflink (RFlink loader) en mode debug cela donne ca
      10;rfdebug=on;
      20;05;RFDEBUG=ON;
      20;06;DEBUG;Pulses=194;Pulses(uSec)=510,360,420,390,420,360,420,360,420,360,420,870,930,870,420,390,420,390,900,390,420,870,390,390,420,390,420,390,420,390,390,390,420,390,420,390,900,900,420,390,900,390,390,390,390,390,390,900,420,390,420,390,420,390,420,390,420,390,390,390,390,390,390,390,900,390,390,900,390,420,390,420,390,420,390,420,390,420,390,420,390,420,390,420,390,420,390,420,390,420,870,420,390,900,390,420,870,900,390,420,870,420,360,420,360,930,870,420,390,900,390,420,390,420,870,420,390,930,360,420,870,420,360,930,870,930,870,930,360,420,360,420,360,420,870,420,360,930,360,420,360,420,360,420,360,420,360,420,360,420,360,420,360,420,360,420,360,420,360,420,360,420,360,420,360,420,360,420,870,930,360,420,870,930,870,930,360,420,360,420,390,420,360,420,360,420,360,420,360,420,360,420,360,6990;
      20;07;Oregon CM180;ID=003C;WATT=0182;KWATT=01bdb13a;

      Si vous avez des idées?

      Répondre
      1. Manu Auteur de l’article

        Salut,

        après quelque recherches et surtout la trame que que a posté plus haut je ne pense pas que cette solution de simulation de sonde OWL180 soit compatible avec Rflink.

        cependant c’est bizarre car je pense qu’une vrai sonde devrait être correctement reconnue et utilisable avec Rflink (a confirmer)

        Manu

        Répondre
  8. nicozozo

    Je prêche pour ma paroisse, je possède un RFXCOME, et ce matériel certes cher (95/105€ suivant les sites) est vraiment génial, la mise à jour du firmware quasi tous les mois (voyez sur le site ..) , le mode lighting 4 qui reconnais quasi tout le matos (j’ai réussi à faire reconnaitre un interrupteur livolo acheté sur aliexpress à 23€), mes volets somfy, mes sondes de températures, mes interrupteurs chacons, mes prises achetés chez brico dépot (15€ les 2) , le montage téléinfo , et dérnièrement des contacteurs de portes achetés sur aliexpress (3€ pièces) , donc aprés avoir passé des heures à essayer de faire marcher ma domotique avec rflink, j’ai acheté rfxcom et bim on passe plus

    Répondre
  9. Yoann

    Bonjour,
    Petite question d’un amateur, comment alimentez-vous votre module Adruino Nano USB ?
    Mon compteur est situé à 50m de ma maison et votre solution me parait idéale.

    Merci d’avance pour votre réponse !

    Répondre
    1. Manu Auteur de l’article

      Pour ma part j’ai également une prise au niveau de mon compteur… Si as la place et que tu t’y connais un peux en électricité ce n’est pas grand chose a faire. Un disjoncteur 20A + une prise pour tableau électrique et le tour est joué. Un électricien te fera certainement ça pour pas grand chose…

      Sinon la méthode du bloc de pile est pas mal aussi mais faut voire combien de temps ça dure…

      Répondre
  10. Fred B

    La liaison téléinfo est cablé à l’intérieur de ma maison sur ma starbox, en parallèle avec le module RF Arduino, avec 50m de liaison cuivre classique vers le compteur. Aucun souci de lecture des données! Si tu veux mettre le module Arduino dans le compteur, ca ne va pas être très réglo avec EDF, il faut mettre des disjoncteurs, …. ou alors sur pile…

    Répondre
  11. Ping : Téléinfo ERDF sans fil pour compteur triphasé - Petitssuisses

  12. lepongebobby

    Bonjour, je suis nouveau sur raspberry. Je voulais savoir ce qu’il faut faire une fois qu’on a télécharger votre fichier .ino
    ou le mettre etc ….

    Répondre
  13. Fred

    Bonjour à tous,
    Dans le montage il faut prévoir 2 résistance, pour la 1ère de 1,2k en entrée de l’octocoupleur ok mais la seconde de 3,3k où faut-il la mettre ?
    Entre le pin 8 et l’octocoupleur ?
    Merci pour votre retour.

    Fred

    Répondre
  14. Fred

    Je me réponds à moi-même merci de me signaler si je me trompe.
    Optocoupleur :
    PIN 1 une résistance de 1.2k avant sortie 1 du teleinfo 1
    PIN 2 direct teleinfo 2
    PIN 3 sur le GND du Nano entre les Pins RST et VIN
    PIN 4 sur PIN8 du Nano et après le piquage une résistance de 3.3k et piquage sur alimentation 3.3v du Nano (2ème PIN à gauche du port USB orienté en haut)

    J’ai téléchargé le fichier de MANU (teleinfo_rf.ino) « un grand merci pour le partage ».
    Je l’ai téléversé dans la Nano grâce à la console IDE d’Arduino.
    Je suis stoppé dans mon installation car j’attends le module Rf 433 (commandé depuis 3 semaines frais port gratuit mais ça commence à faire long….).

    Dès réception et tests, Je vous tiens informé de la suite.

    Fred

    Répondre
  15. Bastien

    Bonsoir,
    Quel dispositif matériel faut-il activer? Pour l’instant j’ai activer P1 smart meter USB et teleinfo EDF USB
    Ensuite j’ai branché le circuit…. alors j’ai bien un compteur qui est détecté par domoticz. Néanmoins je crois qu’il y a clairement interférence avec le module OWL 180 qui est déjà installé!!! je reçois des valeurs de dingue!

    Répondre
  16. Bastien

    Je précise j’avais déjà un compteur OWL 180 installé, je voulais vérifier l’écart des mesures qu’il me donne avec la téléinfo…. je crois que je vais laisser tomber du coup car les 2 systèmes font des interférences; de plus je me demande si ca ne perturbe pas les sondes T° également; j’ai de nouvelles sondes qui sont apparues avec des valeurs de dingue la aussi (262°C…….)

    Répondre
    1. Manu Auteur de l’article

      Oui maintenant que tu le dit c’est vrait qu’il y avait des interferances avec les autres appareils. En ajoutant un delay(xxxx) dans le loop ca devrait passser… en plus ca evite de surcharder domoticz et le rfxcom en leur envoyant trop frequament des données… 12s ca me parait pas mal…

      Répondre
  17. Bastien

    Bonsoir
    Pardon d’avance pour mes question mais je suis un novice….
    Pourquoi 12 s? Il y a une raison?
    Le delay(1200) il faut le mettre à quel endroit des le programme?
    Merci par avance

    Répondre
  18. Fred B

    Hello Bastien,

    Ajoute simplement dans la boucle principale du arduino:
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
    Et les includes:

    #include //snips : télécharger la librairie LOwPower.h sur https://github.com/rocketscream/Low-Power/archive/master.zip et décompresser dans arduino\libraries

    Exemple:
    void loop() {

    teleInfoReceived=readTeleInfo(true);
    if (teleInfoReceived)
    {
    encodeur_OWL_CM180();
    mySerial->end(); //NECESSAIRE !! arrête les interruptions de softwareserial (lecture du port téléinfo) pour émission des trames OWL
    sendOregon(OregonMessageBuffer, sizeof(OregonMessageBuffer)); // Send the Message over RF
    //**********snips : exemple de mise en veille – activer les lignes ci-dessous pour faire dormir l’arduino pendant 8 secondes ***************************
    LowPower.powerDown(SLEEP_4S, ADC_OFF, BOD_OFF);
    //LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
    //**********snips : fin exemple de mise en veille *****************************************************************************************
    mySerial->begin(1200); //NECESSAIRE !! relance les interuptions pour la lecture du port téléinfo
    displayTeleInfo()void loop() {

    teleInfoReceived=readTeleInfo(true);
    if (teleInfoReceived)
    {
    encodeur_OWL_CM180();
    mySerial->end(); //NECESSAIRE !! arrête les interruptions de softwareserial (lecture du port téléinfo) pour émission des trames OWL
    sendOregon(OregonMessageBuffer, sizeof(OregonMessageBuffer)); // Send the Message over RF
    //**********snips : exemple de mise en veille – activer les lignes ci-dessous pour faire dormir l’arduino pendant 8 secondes ***************************
    LowPower.powerDown(SLEEP_4S, ADC_OFF, BOD_OFF);
    //LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
    //**********snips : fin exemple de mise en veille *****************************************************************************************
    mySerial->begin(1200); //NECESSAIRE !! relance les interuptions pour la lecture du port téléinfo
    displayTeleInfo(); // console pour voir les trames téléinfo.. désactiver cette ligne pour économiser de l’énergie
    }

    }; // console pour voir les trames téléinfo.. désactiver cette ligne pour économiser de l’énergie
    }

    }

    Répondre
    1. Manu Auteur de l’article

      J’ai ajouté la ligne delay(12000) dans le code initial voir ici :
      https://github.com/Sirus10/Arduino/blob/master/teleinfo_rf.ino

      (j’ai deplacé le code sur github car plus simple pour moi pour mettre a jour… )

      Je pense que la méthode de Fred est mieux car durant les 8s (ou 4 ici) de sleep l’Arduino ne consomme quasiment rien comme électricité…

      Tu peux tester les deux codes et nous dire si tu as toujours les interférences et surtout à quoi ressembles tes courbes dans domoticz après quelques heure d’utilisation…

      A+

      Répondre
  19. bastien

    Bonjour Fred B,
    J’essaye de mettre en place ton code; je copie colle ce que tu as posté mais en faisant la vérif, apparemment il y a un pb de { unexpected…. et mon niveau en programmation ne me permets pas de voir ce qui ne va pas……

    Répondre
    1. Manu Auteur de l’article

      Un problème de connexion usb / port com peut être? Tu as bien installé les drivers usb et suivis les tuto de configuration usb pour adruino?

      Répondre
  20. bastien

    Bonjour manu,

    Le problème n’est pas un pb de connexion usb, je ne crois pas
    mon arduino est bien reconnu par le logiciel arduino; avant de téléverser le programme dans l’arduino on peut « vérifier » celui-ci, le logiciel doit vérifier qu’il n’y ait pas de pb de synthaxe j’imagine, un genre de « débugage ».

    Ds le programme de manu, il doit y avoir un { en trop ou il en manque un, je ne sais pas; toujours est-il, lorsque je lance la vérif avant le téléversement, le logiciel me dit qu’il y a un pb.

    Répondre
  21. bastien

    Autre question que je me posais, quel matériel faut-il activer? téléinfo usb ou P1 smart meter? pour l’instant j’active les 2…..
    Et au niveau du port on laisse celui du RFXCOM?

    Répondre
  22. bastien

    In function ‘void loop()’:

    teleinfo_rf:506: error: a function-definition is not allowed here before ‘{‘ token

    displayTeleInfo(); void loop() {

    ^

    teleinfo_rf:525: error: expected ‘}’ at end of input

    }

    ^

    teleinfo_rf:525: error: expected ‘}’ at end of input

    exit status 1
    a function-definition is not allowed here before ‘{‘ token

    Je précise c’est le programme de Fred

    Répondre
  23. bastien

    J’ai enlevé un void loop() { ds le programme de fred et la compilation a réussi….. je vais donc tester comme cela ; cà donne cela:

    void loop() {

    teleInfoReceived=readTeleInfo(true);
    if (teleInfoReceived)
    {
    encodeur_OWL_CM180();
    mySerial->end(); //NECESSAIRE !! arrête les interruptions de softwareserial (lecture du port téléinfo) pour émission des trames OWL
    sendOregon(OregonMessageBuffer, sizeof(OregonMessageBuffer)); // Send the Message over RF
    //**********snips : exemple de mise en veille – activer les lignes ci-dessous pour faire dormir l’arduino pendant 8 secondes ***************************
    LowPower.powerDown(SLEEP_4S, ADC_OFF, BOD_OFF);
    //LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
    //**********snips : fin exemple de mise en veille *****************************************************************************************
    mySerial->begin(1200); //NECESSAIRE !! relance les interuptions pour la lecture du port téléinfo
    displayTeleInfo();

    {

    teleInfoReceived=readTeleInfo(true);
    if (teleInfoReceived)
    {
    encodeur_OWL_CM180();
    mySerial->end(); //NECESSAIRE !! arrête les interruptions de softwareserial (lecture du port téléinfo) pour émission des trames OWL
    sendOregon(OregonMessageBuffer, sizeof(OregonMessageBuffer)); // Send the Message over RF
    //**********snips : exemple de mise en veille – activer les lignes ci-dessous pour faire dormir l’arduino pendant 8 secondes ***************************
    LowPower.powerDown(SLEEP_4S, ADC_OFF, BOD_OFF);
    //LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
    //**********snips : fin exemple de mise en veille *****************************************************************************************
    mySerial->begin(1200); //NECESSAIRE !! relance les interuptions pour la lecture du port téléinfo
    displayTeleInfo(); // console pour voir les trames téléinfo.. désactiver cette ligne pour économiser de l’énergie
    }

    }; // console pour voir les trames téléinfo.. désactiver cette ligne pour économiser de l’énergie
    }

    }

    Répondre
  24. bastien

    Je suis bien bloqué………
    J’essaye avec les 2 programmes mais je ne sais pas ce qui va pas.
    Dans les LOG de domoticz j’ai
    2016-04-30 17:06:09.323 Error: UNHANDLED PACKET TYPE: FS20 81
    2016-04-30 17:06:41.088 Error: RFXCOM: input buffer out of sync, going to restart!….

    Quel matériel il faut activer? j’ai essayé avec teleinfo usb ou smart meter usb mais rien n’y fait
    Je crois que je vais laisser tombre

    Répondre
  25. bastien

    Quel matériel faut-il ajouter et comment régler le mode du RFXCOM? Il faut cocher quoi? j’ai à peu près tt essayé, par moment j’ai un compteur qui apparaît mais les valeurs ca ne va pas. De plus le RFX n’a plus de synchro; mais il n’y a plus d’interférences à priori

    Répondre
  26. Christopher

    Bonjour je laisse un commentaire, car je viens de créer mon module et de le branche.

    je n’arrive à ne rien recevoir dans domoticz, mais si je branche mon RFXcom sur le PC je reçois ça

    20/05/2016 18:12:06
    Packettype = ENERGY
    subtype = ELEC3 – OWL CM180
    Sequence nbr = 85
    ID = 962
    Count = 0
    Instant usage = 0 Watt
    total usage = 0 Wh
    Signal level = 6 -72dBi
    Battery = OK
    ————————————————
    20/05/2016 18:12:21
    Packettype = ENERGY
    subtype = ELEC3 – OWL CM180
    Sequence nbr = 86
    ID = 962
    Count = 0
    Instant usage = 0 Watt
    total usage = 0 Wh
    Signal level = 6 -72dBi
    Battery = OK
    ————————————————
    20/05/2016 18:12:29
    Packettype = ENERGY
    subtype = ELEC3 – OWL CM180
    Sequence nbr = 87
    ID = 962
    Count = 0
    Instant usage = 0 Watt
    total usage = 0 Wh
    Signal level = 6 -72dBi
    Battery = OK
    ————————————————
    20/05/2016 18:12:34
    Packettype = ENERGY
    subtype = ELEC3 – OWL CM180
    Sequence nbr = 88
    ID = 962
    Count = 0
    Instant usage = 0 Watt
    total usage = 0 Wh
    Signal level = 6 -72dBi
    Battery = OK

    Peut-t-on m’aider SVP

    Répondre
  27. Cr1cr1

    Bonjour,
    Merci pour ce super tuto, j’ai fabriqué avec succès mon montage, et une fois le programme spécifique pour l’abonnement BASE téléchargé, j’ai pu noter le bon fonctionnement grâce au moniteur série de l’Arduino.
    Par contre, je n’ai reçu une trame qu’une fois sur mon RFXCOM / dans Domoticz.

    Mon compteur est éloigné de 8 m environs de l’antenne du RFXCOM, mais il faut passer par 3 ou 4 murs de parpaing. Est-ce un souci ? Comment avez-vous positionné l’antenne sur l’émetteur 433MHz? J’ai soudé un bout de fil de 17,3cm dessus. Je vais tenter de déporter la partie émetteur 433 pour l’approcher du RFXCOM.

    Répondre
    1. Cr1cr1

      Bon je me réponds… 🙂
      J’ai utilisé un autre émetteur 433MHz. J’avais peut-être un souci avec le premier.
      Mais j’ai également déporté l’émetteur avec un câble avec paires torsadées afin de rapprocher l’émetteur du récepteur.
      Maintenant, ça marche bien. Mais il me reste une question :
      – comment régler la granularité des graphes Domoticz à 1 minute par exemple ? J’ai 5 minutes de granularité et je voudrais temporairement positionner à 1 minutes pour voir des détails.
      Merci encore pour ce tuto !

      Répondre
      1. bastien

        Bonjour
        Pour les graphes je ne sais pas
        En revanche est ce que tu utilises des sondes de température communiquant par radio et si oui observes tu des interférences ? Personnellement j’ai des sondes Oregon ainsi qu’un owl 180 ; résultat tout était brouillé ; du coup j’ai laissé tombé la remontée de la teleinfo ; à chaque fois les compteurs virtuels domoticz que j’ai créés associés à l’owl 180 me remontaient des valeurs dignes de la conso française d’électricité

        Répondre
  28. Cr1cr1

    Bastien,
    Non, j’avais laissé le programme Arduino original au début, avec un envoi des trames très soutenu, et je n’ai observé aucune interférence avec mes nombreuses sondes Oregon (7 THGR810 + 1 UVN800 + 1 PCR800)
    J’ai décommenté les lignes afin de faire s’endormir l’arduino pendant 16 secondes entre chaque cycle.
    ça marche très bien, et je reçois bien la puissance affichée sur mon compteur (Linky)

    Répondre
  29. JF

    Bonjour, je mets en place un raspberry avec domoticz et un RFX, et j’ai fait mettre la téléinfo par edf sur le compteur (30 €);
    j’ai réaliser le montage monophasé tempo avec l’arduino, mais cela non fonctionne pas correctement:
    avec un programme test et un moniteur sur tx de l’arduino, je vois bien les info compteur défiler, mais avec le prg teleinfo_rf rien;
    au niveau de la détection du ‘dispositif’, domoticz détecte le dispositif avec les infos suivantes:

    RFX1 2E210C unkown Security X10 security motion.
    Le protocole oregon est coché mais pas le X10!

    Quelqu’un peut il m’aider?

    Merci d’avance et bravo pour l’ensemble ces travaux

    Répondre
    1. Seb T

      Bonjour,
      J’ai un peu le même problème lorsque que je lance le moniteur série avec un code de test j’ai bien les infos du compteur, mais dès que je flash avec la teleinfo_rf rien n’est détécté par domoticz + rfxcom… j’ai fais le montage avec un arduino nano et un arduino uno c’est pareil.

      Cela dit beau boulot 🙂

      Répondre
  30. Fred B

    Pour je viens aussi de me faire installer le compteur Linky à 50m de la maison et de la carte arduino, et…. aucun souci la téléinfo est entièrement compatible avec le code existant.
    Seul l’index du compteur a été remis à zéro.

    Répondre
    1. Manu Auteur de l’article

      Bonjour,

      Effectivement, sa sature un peu rfxcom et le raspberry sur lequel on voit l’utilisation de la cpu qui augmente fortement.
      Je pense qu’ajouter un delay de 2 minutes devrait faire l’affaire.

      Répondre
  31. Guillaume

    Bonjour,

    Je ne comprends pas un truc,
    Faut-il relier la patte 4 de optocoupleur au 3.3v de la carte arduino et aussi à la borne D8 de l’ arduino nano ou faut t’il relier la patte 4 de l’ optocoupleur directement à la borne D8 de l’ arduino sans résistance ?

    Est-il possible de mettre un schéma avec les deux résistances s’il vous plait ?

    Merci en tout cas pour toutes les informations 😉
    Guillaume

    Répondre
  32. Cédric Bernard

    Bonjour à tous,
    Excellent tuto pour mettre en place un module domotique bien pratique 🙂
    Souhaitant l’implémenter, je suis actuellement bloqué côté rfxcom. Il ne décode aucune trame.
    Quelqu’un pourrait-il me partager un exemple de trame brute ?
    J’ai testé d’envoyer ces patterns mais cela ne donne rien:
    //11 5A 02 0A 86 52 00 00 00 00 B1 00 00 00 BE CB 60 70
    //62 80 3C E8 00 60 47 D9 12 00 00 D0 85

    Afin de valider le SW et le HW, j’ai testé un autre pattern Oregon correspondant à une sonde
    //EA 4C 20 BB 2C 11 60 04
    et là ca passe.
    Je ne dois donc pas être très loin de la vérité, mais sans toutefois pouvoir l’atteindre 🙁
    Merci pour votre aide!
    Cédric

    Répondre
  33. Matthieu

    Bonjour à tous, et merci pour le tuto !
    Depuis quelques temps j’utilisais la Téléinfo en filaire sur mon Raspberry, et j’ai décidé de switcher en RF grâce à cet article.
    Cependant, je me trouve face à une difficulté imprévue:
    J’ai bien les trames qui arrivent sur la PIN 8. Le signal me semble propre, bien que la pile soit un peu faible (Calibre 0.5V/div):
    http://img11.hostingpics.net/pics/332562IMG2699.jpg
    , mais je n’ai rien en entrée de l’émetteur (PIN 3) : 0V… Je suis sensé avoir une trame toutes les 12 secondes, mais c’est plat…

    Avez-vous une idée ?
    Je précise que j’ai effectué le montage sur un Mini Pro 16MHz 5V, et non un Nano.

    Matthieu

    Répondre
  34. TCS

    Merci à l’auteur de cet article, j’ai mis du temps à récupérer mon matériel sur différents sites, mais tout est opérationnel pour mon compteur linky avec le code .ino sans HC-HP, bravo pour le taff !
    Je vais aussi maintenant modifier un peu le délai pour n’avoir un refresh des infos que toutes les minutes pour ne pas saturer le rfxcom.
    Deux petites questions pour l’auteur:
    – en branchant mon arduino sur l’usb de mon portable, les infos affichées dans la console sont illisibles (moniteur série / 9600 / pas de fin de ligne): que dois-je faire pour avoir des logs lisibles dans la console?
    – j’ai l’impression que la conso live est plus élevée que la normale quand je compare aux données de mon Archos TBH? une idée? 🙂
    Merci Manu pour tes conseils!

    Répondre
  35. TCS

    Je me réponds à moi-même pour ma première question sur la console illisible de mon arduino: j’aurais dû utiliser « moniteur série / 115200/ pas de fin de ligne » je pense 😉

    Répondre
  36. Tiaw

    Bonjour,

    Super article, le montage a bien fonctionné chez moi. Même s’il reste l’épreuve des 2 murs en pierre à passer. Cela dit, le code pour transférer la température de connectingstuff.net passe bien donc ça ne devrait pas poser de problème.
    Cependant j’ai eu un comportement étrange et il y a un truc dans le code que je pige pas très bien.
    A un moment, la valeur du compteur est multiplié par 223,666 parce que RFXCOM le divise par 223,666. Mais d’où sort cette constante ? Est-elle complètement arbitraire où s’agit-il d’un calcul afin d’extraire l’intensité ?
    Parce que de mon coté, je ne retrouvais pas sur les logs de RFXCOM les mêmes valeurs. Et si du coté arduino j’envoyais comme valeur de compteur 115032, je recevais coté RFXCOM la valeur 111864. Et en fait, après un produit en croix, je me suis rendu compte que RFXCOM divisait par 230 la valeur que je lui transmettais. Du coup j’suis bien paumé parce même si ça marche, je vois pas trop pourquoi j’ai du changer la constante du produit (230 au lieu de 223,666 dans le code) avant l’envoi de la trame.
    Si vous avez un point d’éclairage, ça serait le bienvenu ^^.
    Ah et sinon, il y a coquille dans l’article, non ? Le code que tu as mis fonctionne pour un compteur monophasé.

    Répondre
  37. Bertrand

    Bonjour et Merci pour ce superbe article,
    Je suis avec un Raspberry couplé a un RFlink sur lesquels tourne Domoticz
    J’ai realisé le montage sans pb (fonctionnel sur pcb pastille ainsi que sur plaque d’essai) et Utilisé le code sur un Arduino Nano,
    Mais soucis : je n’arrive pas a maintenir le la communication plus de 24h, On dirai que l’arduino freeze et plus de trame emise au RFlink(-domoticz)

    Une idée?

    Répondre
    1. Korleone

      Vérifie tes connections. Le code fonctionne chez moi (Sur un Pro Mini 5V 16MHz) sans problèmes depuis des mois avec un Raspberry Pi 3 qui héberge Domoticz
      Sinon, comment alimentes-tu ton Arduino ? Piles ou sur secteur via un transfo ?
      Tu peux essayer de voir si le signal est transmit à l’émetteur en mettant une LED (et sa résistance) en parallèle du signal de la PIN3.
      => Tu regardes si tu as bien un signal à l’intervalle défini.
      Tu pourras ainsi discriminer un problème de réception (ou d’émission) (niveau, bruit, portée) d’un problème de freeze de la part de ton Arduino.
      Il se pourrait également que ton signal téléinfo soit bruité ou atténué.

      Répondre
    2. Fred B

      Bonjour Bertrand,
      Tu es sûr que par ailleurs le RFlink est toujours fonctionnel? Moi j’ai eu des blocages entre domoticz et RFlink. Saturation mémoire? Comment débloques-tu la liaison: relance de domoticz, relance de l’arduino teleinfo ?
      L’arduino téléinfo peut difficilement planter. Conseil: Emettre seulement toutes les 10 ou 15 sec la teleinfo pour ne pas saturer ta domotique.

      Répondre
      1. Bertrand

        salut et merci de ta réponse,
        Pour te répondre: le RFlink marche correctement avec les autres modules présents dans la maison donc je doute que cela vienne de là,
        pour rétablir le fonctionnement : reset de l’arduino
        Je vais essayer de modifier le delais de transmission… mais j’ai qqs soudures a refaire étant donné que j’ai arraché qqs fils en voulant extraire le module du compteur electrique…

        Répondre
        1. Bertrand

          Hello bon j’ai remis en route le module en suivant le conseil de Fred B et depuis hier ça tient le coup… merci,
          Toutefois j’aimerais régler 2 trucs sur domoticz :
          – j’aimerais avoir ma conso H-pleine H-creuse sur le même graph
          -Le fait d’avoir relancé le module, il m’a mis un gros (énorme) pic de consommation qui correspond au delta des kWh consommé depuis la dernière mesure effective
          Je sais c’est des questions d’ordre esthétique pour certains mais moi j’aime bien quand c’est clair… 😉
          Bien a vous

          Répondre
  38. Ardefy

    Bonjour,

    J’ai fait tout le montage tout est parfais !!! 🙂 merci

    mais j’ai un gros probleme c’est que mon arduino change d’ ID :/
    un coup il s’appelle 003C et un autre 003D donc mes courbes s’arrete dans Jeedom 🙁

    Est ce que quelq’un a une idée svp ?

    Répondre
  39. Nicolas974

    Bonjour et merci pour votre présentation très détaillée et très claire!

    Je me permets de vous contacter car je rencontre quelques difficultés lors de la compilation du code que vous fournissez. Voici la copie des messages d’erreur:

    Arduino : 1.6.11 (Windows 7), Carte : « Arduino Nano, ATmega328 »

    Z:\Projets Arduino\Module téléinfo EDF 433 MHz\Teleinfo_EDF_Arduino\Teleinfo_EDF_Arduino.ino: In function ‘void sendOregon(byte*, byte)’:

    Teleinfo_EDF_Arduino:133: error: ‘sendPreamble’ was not declared in this scope

    Teleinfo_EDF_Arduino:135: error: ‘sendPostamble’ was not declared in this scope

    Z:\Projets Arduino\Module téléinfo EDF 433 MHz\Teleinfo_EDF_Arduino\Teleinfo_EDF_Arduino.ino: At global scope:

    Teleinfo_EDF_Arduino:144: error: two or more data types in declaration of ‘sendPreamble’

    Teleinfo_EDF_Arduino:157: error: two or more data types in declaration of ‘sendPostamble’

    exit status 1
    ‘sendPreamble’ was not declared in this scope

    Savez-vous d’où peuvent venir ces erreurs ?

    En vous remerciant,

    Répondre
  40. Cedric

    Bonjour à tous,
    Quelqu’un pourrait il partager la valeur de la trame hexa partant du module arduino?
    Cf mon message du dessus, les trames partant de mon arduino ne sont pas décodées par le rflink :-((
    J’ai testé d’envoyer ces patterns mais cela ne donne rien:
    //11 5A 02 0A 86 52 00 00 00 00 B1 00 00 00 BE CB 60 70
    //62 80 3C E8 00 60 47 D9 12 00 00 D0 85
    Alors que la trame suivante est correctement décodée ( mais ne sert à rien pour ce cas d’usage si ce n’est de la validation de chaîne HW 😀 )
    //EA 4C 20 BB 2C 11 60 04

    Un grand merci pour votre aide!

    Répondre
  41. Wudi

    Bonjour,

    Tout d’abord merci pour l’article!! Je compte me lancer dès que j’ai recu les bonnes resistances… j’ai commandé du 1.2ohms au lieu de 1.2KiloOhms…

    Quelle est la durée de vie de la batterie?
    Je compte alimenter avec un powerbank USB de 2500mah. Ca peut tenir combien de temps?

    J’ai vu que la frequence d’envoi variait selon certain de 12s à 2mn… quel est l’interet d’une frequence si rapproche? Suivre les pics en « live »? Je prefere eviter la saturation, deja que j’ai 2 sondes meteo qui me bombardent toutes les 35s… :/

    Merci

    Répondre
  42. Roland

    Bonjour,
    Le script a fonctionné 15 jours nickel (avec 2 dispositifs sous Domoticz, 1 HP et l’autre HC), puis d’un coup plus rien… impossible de revoir le dispositif depuis rflink, sauf une brève valeur tous les 3 jours…. Problème d’antenne, de parasites en 433 ?
    Merci d’avance pour vos idées….

    Répondre
    1. Moltes

      @Roland
      Pour moi, c’est le 30/12/2017 que le capteur a disparu de Domoticz.
      J’ai essayé de renvoyer le sktech arduino, de vérifier le câblage au niveau du compteur.
      Rien n’y fait.
      Les trames ERDF ont changé de tête ? De valeurs ? D’amplitude ?

      Répondre
      1. Mockinbird

        Idem pour moi, tout a parfaitement fonctionné une semaine et depuis ce matin plus rien.
        Par curiosité, comment alimentez-vous l’arduino ?

        Répondre
  43. florian lg

    Tout fonctionne parfaitement mais comment mettre à 0 la conso instantanée de l’autre compteur. Sans cela, elle reste à la dernière valeur reçu, et fausse les stats de vos compteurs HC/HP.

    Répondre
  44. florian lg

    Tout fonctionne parfaitement mais comment mettre à 0 la conso instantanée de l’autre compteur. Sans cela, elle reste à la dernière valeur reçue, et fausse les stats des compteurs HC/HP.

    Répondre ↓

    Répondre
  45. martin

    bonjour
    est ce que le montage est pour un compteur classique ou linki ?
    est ce qu’il y a une différence dans le sketch entre les 2 compteurs ?

    Répondre
    1. martin florian

      j’ai fait le montage avec un arduino uno est rien ne ce passe .
      est ce qu’il faut charger un programme différent entre un nano et un uno ?

      Répondre
  46. Lebsana

    Je ne suis pas pro donc difficile de vous conseiller
    Par il peut y avoir un problème selon le montage.
    Il y a un schéma qui relie la patte 3 de l’octo sur le D3 de l’arduino alors que le sketch attend l’info sur D4.
    Dans ce cas il suffit de relier la patte 3 sur pin D4 de l’arduiono.
    Si cela ne fonctionne pas je ne serai plus vous aider par manque de compétence.
    Par contre Si ça fonctionne je serais content de la savoir.

    Répondre
    1. lebsana

      Erreur après relecture du schéma c’est D3/D4 vers le pin data 433mhz qui peut poser pb selon le sketch utilisé.
      Le pin 4 de l’octo va bien au 8 de l’arduino.

      Répondre
  47. nobruu

    Bonjour à tous,
    Montage réalisé avec succès et connecté à Domoticz. Tout est parfaitement fonctionnel.
    Pour info, j’ai réussi à utiliser l’alimentation fournie par le Linky. Il faut utiliser des diodes de redressement schottky qui font gagner un peu de puissance. Cela ne fonctionnait pas avec des diodes classiques.
    A l’arrivée, tout le montage est entré dans la petite trappe du compteur, pas un fil qui dépasse.

    Répondre
      1. Killian

        Salut,
        si ta question est toujours d’actualité, je te conseille d’essayer de changer les lignes « OregonMessageBuffer[2] =0x3C; » et « OregonMessageBuffer[2] =0x3D; » en changeant le code hexa. Par exemple: 0x3A et 0x3B.

        Répondre
  48. Matthieu

    Bonjour à tous,

    Merci pour toutes ces informations, ça fonctionne parfaitement !
    J’ai quand même un soucis, car j’ai 2 compteurs: un Linky pour la consommation EDF et un Actaris (blanc boutons bleus) pour la production solaire.
    Les 2 sorties Téléinfo fonctionnent, j’ai réalisé 2 montages avec optocoupleurs, mais sur Domoticz elles sont reconnues comme un seul dispositif avec donc le même IDX.
    Du coup ce n’est pas exploitable.
    Y’a t-il un paramètre à modifier dans le code pour que Domoticz voit bien que ce soit 2 compteurs différents ?

    Merci pour votre aide et bon confinement !

    Répondre
    1. Killian

      Salut,
      si ta question est toujours d’actualité, je te conseille d’essayer de changer les lignes « OregonMessageBuffer[2] =0x3C; » et « OregonMessageBuffer[2] =0x3D; » en changeant le code hexa. Par exemple: 0x3A et 0x3B.

      Répondre
  49. Killian

    Bonjour,
    Je viens de lire l’article qui est très bien expliqué par ailleurs, mais une question me taraude. Dans les schéma avec l’optocoupleur, il y a une résistance de tirage en PULL UP car le raspberry ne propose pas de PULL UP. Cependant, les carte Arduino ont cette possibilité, alors serait-il possible de ne pas utiliser de résistance à la carte Arduino et de rajouter dans Le setup:  » pinMode(TELEINFO_PIN,INPUT_PULLUP);  » ?

    Répondre
  50. Moltes

    Bonjour,
    J’ai un montage Arduino qui capture la teleinfo de mon linky pour me grapher les conso sur Domoticz.
    Je vais installer des panneau solaires pour faire de l’autoconsommation.
    Que dois-je adapter dans le code pour compter ce que je produit et/ou auto-consomme ?
    Merci

    Répondre
    1. Matthieu

      Bonjour,

      Je suis dans ta futur configuration également en autoconsommation, j’ai mon Linky (arrivée EDF) raccordé en tele-info via le RFXCOM, et j’ai un autre compteur (pour le solaire) raccordé en tele-info via les ports GPIO du Raspberry.
      Domoticz m’affiche deux dispositifs, l’EDF et le solaire.

      Matthieu

      Répondre
      1. Moltes

        L’installateur ne m’a pas parlé d’un compteur supplémentaire.
        En effet, avec 2 compteurs différents, je duplique l’existant (au delta près de changer l’ID du capteur) et roulez jeunesse.
        Mais là, je sèche un peu…

        Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.