Community Forum
    • Blog
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Librairie Universelle Pour la Téléinformation

    Scheduled Pinned Locked Moved Librairie Téléinfo
    corearduinoesp8266librairiejson
    12 Posts 5 Posters 17.4k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • CharlesC Offline
      Charles
      last edited by Charles

      Pourquoi ? Travaillant sur différents projets utilisant la téléinformation dans des environnements assez variés (Arduino, Raspberry, Spark Core, ESP8266, …) j’en avais un peu marre de devoir faire des copier/coller de mon code original écrit il y a quelques années… Continue Reading

      Click here to see the full blog post

      1 Reply Last reply Reply Quote
      • M Offline
        mersing
        last edited by mersing

        Bonjour,

        Vraiment du bon boulot.
        Merci.

        1 Reply Last reply Reply Quote
        • M Offline
          mersing
          last edited by mersing

          Re,

          Tout fonctionne parfaitement sur un Moteino, jusqu'à l'utilisation de la fonction Radio.

          J'ai pris Arduino_Softserial_Etiquette.ino comme exemple.

          J'ai uniquement ajouter la fonction radio.initialize( RF69_868MHZ, NODEID, NETWORKID ) à la fin de Setup().

          L'execution est bloquée. Rien ne s'affiche.

          Dans la librairie RFM69.cpp, si l'on commente les lignes :

          //do writeReg(REG_SYNCVALUE1, 0xAA); while (readReg(REG_SYNCVALUE1) != 0xAA);
          //do writeReg(REG_SYNCVALUE1, 0x55); while (readReg(REG_SYNCVALUE1) != 0x55);
          //while ((readReg(REG_IRQFLAGS1) & RF_IRQFLAGS1_MODEREADY) == 0x00); // wait for ModeReady

          ca fonctionne à nouveau (la partie Teleinfo, pas la partie radio bien sur).
          La fonction radio.initialize ne bloque plus.

          Une idée de ce qui peut se passer ?

          Cordialement.

          1 Reply Last reply Reply Quote
          • CharlesC Offline
            Charles
            last edited by Charles

            Bonjour,

            Merci pour le commentaire. C'est rigolo quand j'ai développé la librairie je l'ai fait sur un moteino 😉 mais je n'ai pas activé la radio, faudrait que j'essais!
            Mais je ne suis pas surpris que ce çà ne fonctionne pas, le SoftSerial c'est vraiment pas terrible et surtout incompatible avec d'autres librairies. C'est pas sa faute, mais il prends une IRQ à chaque changement d'état sur la pin soft RX, donc çà le travaille pas mal. Quand je vois déjà comment il torpille le millis(), j'imagine avec le moteino et les IRQ (quoique çà peut être asynchrone) çà pourrait marcher
            Il y a 3 solutions pour se sortir de là:

            • Privilégier la liaison Série Hardware, et switcher la pin RX (D0) entre celle de l'adaptateur FTDI pour l'upload la téléinfo une fois le sketch uploadé, ouais je sais, galère!!
            • Passer sur un moteino mega qui a 2 liaisons série hard et utiliser Serial1 pour la téléinfo 😉
            • Activer l'OTA sur le moteino, comme çà les upload se font en RF et la liaison série hard reste disponible pour la téléinfo 😉
            1 Reply Last reply Reply Quote
            • M Offline
              mersing
              last edited by

              Bonjour,
              J'ai change de Moteino - Tout fonctionne bien.

              Je dois avoir un probleme HW sur la Moteino précedente: les codes basic RF69 ne fonctionnent pas non plus : bloquent au niveau de radio.initialize.

              Cordialement.

              1 Reply Last reply Reply Quote
              • CharlesC Offline
                Charles
                last edited by Charles

                Ah cool alors 🙂

                j'aime pas trop le initialize de la librairie d'origine de Felix, car justement en cas de problème çà bloque et on ne sait jamais d'ou çà vient.
                Je l'avais déjà modifié pour çà, regarde sur mon git rfm69.cpp la fonction me retourne true si module trouvé ou false si time-out (50ms)

                bool RFM69::initialize(byte freqBand, byte nodeID, byte networkID)
                {
                  unsigned long start_to;
                  const byte CONFIG[][2] =
                  {
                    /* 0x01 */ { REG_OPMODE, RF_OPMODE_SEQUENCER_ON | RF_OPMODE_LISTEN_OFF | RF_OPMODE_STANDBY },
                    /* 0x02 */ { REG_DATAMODUL, RF_DATAMODUL_DATAMODE_PACKET | RF_DATAMODUL_MODULATIONTYPE_FSK | RF_DATAMODUL_MODULATIONSHAPING_00 }, //no shaping
                    /* 0x03 */ { REG_BITRATEMSB, RF_BITRATEMSB_55555}, //default:4.8 KBPS
                    /* 0x04 */ { REG_BITRATELSB, RF_BITRATELSB_55555},
                    /* 0x05 */ { REG_FDEVMSB, RF_FDEVMSB_50000}, //default:5khz, (FDEV + BitRate/2 <= 500Khz)
                    /* 0x06 */ { REG_FDEVLSB, RF_FDEVLSB_50000},
                
                    /* 0x07 */ { REG_FRFMSB, (freqBand==RF69_315MHZ ? RF_FRFMSB_315 : (freqBand==RF69_433MHZ ? RF_FRFMSB_433 : (freqBand==RF69_868MHZ ? RF_FRFMSB_868 : RF_FRFMSB_915))) },
                    /* 0x08 */ { REG_FRFMID, (freqBand==RF69_315MHZ ? RF_FRFMID_315 : (freqBand==RF69_433MHZ ? RF_FRFMID_433 : (freqBand==RF69_868MHZ ? RF_FRFMID_868 : RF_FRFMID_915))) },
                    /* 0x09 */ { REG_FRFLSB, (freqBand==RF69_315MHZ ? RF_FRFLSB_315 : (freqBand==RF69_433MHZ ? RF_FRFLSB_433 : (freqBand==RF69_868MHZ ? RF_FRFLSB_868 : RF_FRFLSB_915))) },
                
                    // looks like PA1 and PA2 are not implemented on RFM69W, hence the max output power is 13dBm
                    // +17dBm and +20dBm are possible on RFM69HW
                    // +13dBm formula: Pout=-18+OutputPower (with PA0 or PA1**)
                    // +17dBm formula: Pout=-14+OutputPower (with PA1 and PA2)**
                    // +20dBm formula: Pout=-11+OutputPower (with PA1 and PA2)** and high power PA settings (section 3.3.7 in datasheet)
                    ///* 0x11 */ { REG_PALEVEL, RF_PALEVEL_PA0_ON | RF_PALEVEL_PA1_OFF | RF_PALEVEL_PA2_OFF | RF_PALEVEL_OUTPUTPOWER_11111},
                    ///* 0x13 */ { REG_OCP, RF_OCP_ON | RF_OCP_TRIM_95 }, //over current protection (default is 95mA)
                
                    // RXBW defaults are { REG_RXBW, RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_24 | RF_RXBW_EXP_5} (RxBw: 10.4khz)
                    /* 0x19 */ { REG_RXBW, RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_16 | RF_RXBW_EXP_2 }, //(BitRate < 2 * RxBw)
                    //for BR-19200: //* 0x19 */ { REG_RXBW, RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_24 | RF_RXBW_EXP_3 },
                    /* 0x25 */ { REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_01 }, //DIO0 is the only IRQ we're using
                    /* 0x29 */ { REG_RSSITHRESH, 220 }, //must be set to dBm = (-Sensitivity / 2) - default is 0xE4=228 so -114dBm
                    ///* 0x2d */ { REG_PREAMBLELSB, RF_PREAMBLESIZE_LSB_VALUE } // default 3 preamble bytes 0xAAAAAA
                    /* 0x2e */ { REG_SYNCCONFIG, RF_SYNC_ON | RF_SYNC_FIFOFILL_AUTO | RF_SYNC_SIZE_2 | RF_SYNC_TOL_0 },
                    /* 0x2f */ { REG_SYNCVALUE1, 0x2D },      //attempt to make this compatible with sync1 byte of RFM12B lib
                    /* 0x30 */ { REG_SYNCVALUE2, networkID }, //NETWORK ID
                    /* 0x37 */ { REG_PACKETCONFIG1, RF_PACKET1_FORMAT_VARIABLE | RF_PACKET1_DCFREE_OFF | RF_PACKET1_CRC_ON | RF_PACKET1_CRCAUTOCLEAR_ON | RF_PACKET1_ADRSFILTERING_OFF },
                    /* 0x38 */ { REG_PAYLOADLENGTH, 66 }, //in variable length mode: the max frame size, not used in TX
                    //* 0x39 */ { REG_NODEADRS, nodeID }, //turned off because we're not using address filtering
                    /* 0x3C */ { REG_FIFOTHRESH, RF_FIFOTHRESH_TXSTART_FIFONOTEMPTY | RF_FIFOTHRESH_VALUE }, //TX on FIFO not empty
                    /* 0x3d */ { REG_PACKETCONFIG2, RF_PACKET2_RXRESTARTDELAY_2BITS | RF_PACKET2_AUTORXRESTART_ON | RF_PACKET2_AES_OFF }, //RXRESTARTDELAY must match transmitter PA ramp-down time (bitrate dependent)
                    //for BR-19200: //* 0x3d */ { REG_PACKETCONFIG2, RF_PACKET2_RXRESTARTDELAY_NONE | RF_PACKET2_AUTORXRESTART_ON | RF_PACKET2_AES_OFF }, //RXRESTARTDELAY must match transmitter PA ramp-down time (bitrate dependent)
                    //* 0x6F */ { REG_TESTDAGC, RF_DAGC_CONTINUOUS }, // run DAGC continuously in RX mode
                    /* 0x6F */ { REG_TESTDAGC, RF_DAGC_IMPROVED_LOWBETA0 }, // run DAGC continuously in RX mode, recommended default for AfcLowBetaOn=0
                    {255, 0}
                  };
                
                  pinMode(_slaveSelectPin, OUTPUT);
                  SPI.begin();
                 
                  // Set time out to 50ms
                  #define TIME_OUT 50
                  
                  start_to = millis() ;
                
                  do 
                    writeReg(REG_SYNCVALUE1, 0xaa); 
                  while (readReg(REG_SYNCVALUE1) != 0xaa && millis()-start_to < TIME_OUT);
                
                  if (millis()-start_to >= TIME_OUT) 
                    return (false);
                    
                  // Set time out 
                  start_to = millis()  ;  
                  do 
                      writeReg(REG_SYNCVALUE1, 0x55);
                  while (readReg(REG_SYNCVALUE1) != 0x55 && millis()-start_to < TIME_OUT);
                  
                  if (millis()-start_to >= TIME_OUT) 
                    return (false);
                  for (byte i = 0; CONFIG[i][0] != 255; i++)
                    writeReg(CONFIG[i][0], CONFIG[i][1]);
                
                  // Encryption is persistent between resets and can trip you up during debugging.
                  // Disable it during initialization so we always start from a known state.
                  encrypt(0);
                
                  setHighPower(_isRFM69HW); //called regardless if it's a RFM69W or RFM69HW
                  setMode(RF69_MODE_STANDBY);
                  // Set time out 
                  start_to = millis() ;
                	while (((readReg(REG_IRQFLAGS1) & RF_IRQFLAGS1_MODEREADY) == 0x00) && millis()-start_to < TIME_OUT); // Wait for ModeReady
                  if (millis()-start_to >= TIME_OUT) return (false);
                  attachInterrupt(_interruptNum, RFM69::isr0, RISING);
                
                  selfPointer = this;
                  _address = nodeID;
                  return true;
                }
                
                
                1 Reply Last reply Reply Quote
                • X Offline
                  XxP1asmaxX
                  last edited by

                  Bonjour,

                  Je me demandais si il était possible d'utiliser facilement l'ESP8266 et la téléinfo ?? en effet les deux utilise le serial il faudrait donc un softserial et un serial physique ça ne risque pas de poser des problèmes lors de la communication ?

                  Merci d'avance !

                  1 Reply Last reply Reply Quote
                  • CharlesC Offline
                    Charles
                    last edited by

                    Bonjour,

                    Oui c'est ce qui est fait avec la carte WifInfo, mais en revanche on perd la serial. J'utilise le TXD1 (la 1/2 uart serial restante) pour le débug.

                    J'ai essayé le soft serial (sur l'entrée téléinfo), pas concluant, ça génère tellement d'interruption que ça ralenti le processus.
                    Ceci dit, comme on est réseau avec l'ESP rien n'empêche d'utiliser une interface style telnet.

                    1 Reply Last reply Reply Quote
                    • ? Offline
                      A Former User
                      last edited by

                      This post is deleted!
                      1 Reply Last reply Reply Quote
                      • CharlesC Offline
                        Charles
                        last edited by

                        @J6B
                        Merci merci, dans la nouvelle version tous les retours se font en JSON 😉
                        Normalement la 1ere entrée de la liste chainée est vide (histoire de toujours avoir un pointeur en cas de liste vide justement) donc le me->next pointe bien sur la réelle 1ere entrée de la liste. et si la liste est vide le 1er me->next vaut null

                        1 Reply Last reply Reply Quote
                        • F Offline
                          fred
                          last edited by

                          Bonjour,
                          je m’intéresse aux nouvelles technologies et à la domotique.
                          Je souhaite avoir un relevé de ma conso électrique dans l'environnement Domoticz.
                          Pour se faire après lecture sur différents forums je me suis équipé d'un Arduino Nano et d'un Opto SFH620. Le but de mon installation est de transférer les trames via un RF433.
                          Sur différents forums le montage fonctionne et la remontée d'infos se fait bien via le mode RF433.
                          Le problème me concernant est que je suis en Tempo triphasé et le scripts pour l'Aruino sont écrits pour les monophasé
                          Pensez-vous que votre script peut fonctionner pour un Arduino Nano et un abonnement Tempo triphasé ?
                          Si oui est-il possible de le partager sur le forum "Easydomoticz" pour essayer de l'adapter pour qu'il puisse fonctionner en RF433.
                          Je n'y connais rien en progs d'où peut-être des questions bêtes !!!

                          En tout cas félicitation pour votre travail.

                          Fred

                          1 Reply Last reply Reply Quote
                          • CharlesC Offline
                            Charles
                            last edited by

                            @fred
                            Normalement le code dans l'Arduino (donc ça doit marcher sur Nano) ne fait que transmettre les informations.

                            Tu parles de quel code ? quel sketch tu mets dans ton Arduino?

                            1 Reply Last reply Reply Quote
                            • First post
                              Last post

                            3

                            Online

                            5.7k

                            Users

                            534

                            Topics

                            5.0k

                            Posts

                            Top Topics

                            • Denky 4 - Domoticz - Triphasé -
                              Nicolas BernaertsN
                              Nicolas Bernaerts
                              0
                              7
                              249

                            • Denky D4 et Linky Standard TInfo Rx Non Configuré
                              CharlesC
                              Charles
                              0
                              5
                              282

                            • CC1101
                              CharlesC
                              Charles
                              0
                              2
                              117

                            Popular Tags

                            teleinfo
                            24 topics
                            arduino
                            19 topics
                            remora
                            16 topics
                            esp8266
                            10 topics
                            arduipi
                            10 topics
                            wifinfo
                            7 topics
                            raspberry
                            7 topics
                            broadcast
                            7 topics
                            Copyright © 2022 Charles-Henri Hallard | Return to blog page | Powered by NodeBB