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

    Ré-écriture de Wifinfo pour traiter le mode standard du Linky

    Scheduled Pinned Locked Moved WifInfo
    110 Posts 27 Posters 26.7k 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 @Christophe
      last edited by Charles

      @Christophe les sources sont dans les exemple de la librairie Teleinfo mais ils sont un peu obsolètes
      https://github.com/hallard/LibTeleinfo/tree/master/examples/Wifinfo

      Je suis en train de ré-écrire de code à l'aide de @sremy et je pense que je vais sortir les sources de la librairie. De plus le code sera capable de gérer des compteurs d'impulsions et quelques capteurs.

      Capture.JPG

      N S 2 Replies Last reply Reply Quote
      • S Offline
        seb82
        last edited by

        @Charles très content d'apprendre que vous travaillez sur une nouvelle version.
        Pour la partie Jeedom, serait-il possible de prendre en compte la nouvelle version du plugin Teleinfo qui attend les données au format json ?
        @mjeanne a fait un script de contournement que l'on peut trouver sur le forum de jeedom. Cela fonctionne très bien, mais tant qu'à faire ce serait encore mieux que ce soit géré directement.

        1 Reply Last reply Reply Quote
        • S Offline
          Seb3d
          last edited by

          Salut @Charles

          Content aussi d’apprendre que vous bossez sur une nouvelle version.

          Comme je disais dans un autre post j’ai modifier ton exemple pour ajouter le support MQTT (pour publier vers home assistant par exemple ) et ajouter le support de capteur type DHT et BME (le tout enregistrer via option de la page web dans la config)

          Si je peux aider à quelque chose n’hésite pas 😉

          Seb@stien

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

            Bonjour Charles
            Je ne sais pas ou vous en êtes dans la réécriture du code, j'ai remanié entièrement wifinfo pour une application perso,
            je pense la mettre plus tard sur github. Je peux déjà vous l'envoyer si ça vous intéresse.
            J'ai mis en place les classes:
            les fonctionnalités présentes dans wifinfo
            -myWifi ajout start stop wifi horaire paramétrés par l'interface web
            -myOta
            -webClient
            -webServer
            -config
            -LibTeleinfo mode standard à terminer(j'ai pas encore le linky)
            -mySyslog version de Dominique DAMBRAIN 2017-07-10
            -ledRGBSerial (pour des APA106)
            ajout
            -myNTP mise à l'heure datation
            -simuTempo simulation de trames tempo (historique)
            -enregistrement enregistrement d'informations (compteur couleur imax...)

            ajouts pour mon application qui pilote la vmc et affiche les couleurs tempo et jour/nuit
            -vmc
            -interRelais
            -buzzer
            -canBus liaison vers un module d'affichage commande + capteur déporté st7735
            -capteur
            -ta12 surveillance du courant vmc
            -dht
            -smt160

            le programme principal
            traitement_tempo.ino

            M 1 Reply Last reply Reply Quote
            • M Offline
              Marco40 @Marco40
              last edited by

              @Marco40
              Bonjour
              J'ai mis une version de Wifinfo/Libteleinfo réorganisée sur github:
              https://github.com/marco402/LibTeleinfo/tree/rewrite-Wifinfo.

              -Je n'ai pas re testé:
              -Les sorties leds(leds.cpp et leds.h),j'ai conservé les fonctions d'origine mais j'ai une autre version avec des leds APA106.
              -Les sortie emoncms,jeedom et httpRequest, fonctions qui sont d'origine à la mise en place des classes près.

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

                Bonjour Marc,

                J'ai commencé à regarder votre code concernant la gestion du mode Standard. Il détecte bien des trames, mais je n'ai pas réussi à les afficher et à vérifier qu'elles sont bien correctes. Je vais continuer à regarder ce soir et demain.

                Par contre, le mode Standard ne gère plus les mêmes noms de valeurs, l'envoi de données vers Emoncms ou Domoticz ne fonctionne pas car les champs attendus ne sont pas renvoyés. Je verrai ce qu'il est possible de faire pour ajouter les champs dans la requêtes.

                Pierre

                M 1 Reply Last reply Reply Quote
                • M Offline
                  Marco40 @mangoose
                  last edited by

                  @mangoose

                  Bonjour Pierre,
                  Je pense que c'est normal, j'ai bien précisé que le mode standard est à terminer (je n'ai pas encore le linky pour essayer).
                  Marc

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

                    Bonjour Marc,

                    J'ai pu avancer sur le sujet, en fait tout est bon dans le code si ce n'est le calcul du checksum.
                    En fait, il faut que le début du calcul soit le suivant:

                    uint16_t sum = ' ';
                    //5.3.6. Couche liaison document enedis Enedis-NOI-CPT_54E.pdf  
                    if (!this->modeLinkyHistorique){
                    	sum = 0x09 * 2;// Somme des codes ASCII du message + deux tabulations
                    }
                    

                    En fait, il n'y a pas d'espace et 2 tabulations. En faisant ça, les checksums sont corrects et cela fonctionne bien mieux.

                    Pour l'url, j'ai rajouté les éléments suivants:

                          if (valName == "SINSTS"){
                            url.replace("%SINSTS%",me->value);
                          }
                          if (valName == "EAST"){
                            url.replace("%EAST%", me->value);
                          }
                          if (valName == "EASF01"){
                            url.replace("%EASF01%", me->value);
                          }
                          if (valName == "EASF02"){
                            url.replace("%EASF02%", me->value);
                          }
                    

                    J'espere que ça pourra aider d'autres personnes.

                    Pour le moment, je me bats avec le Wemos qui passe son temps à rebooter sans que j'ai compris pourquoi. Si vous avez une idée, je suis prenneur.

                    Pierre

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

                      Bonjour, je suis en train de regarder pour adapter l'envoi du code actuel vers jeedom car le plugin teleinfo à changé et il faut envoyer des variables en POST. (webclient.cpp)
                      Hors c'était http.GET qui était utilisé et le http.POST ne fonctionne pas. Je ne suis pas connaisseur du cpp, qqun aurait une idée ? je reçois bien l'url (GET) mais rien en POST.
                      Merci

                      boolean httpPost(char * host, uint16_t port, char * url,char * varPost ) {
                      HTTPClient http;
                      bool ret = false;

                      unsigned long start = millis();

                      // configure traged server and url
                      http.begin(host, port, url);

                      Debugf("http%s://%s:%d%s => ", port==443?"s":"", host, port, url);

                      http.addHeader("Content-Type", "text/plain");
                      // start connection and send HTTP header
                      int httpCode = http.POST(varPost);
                      if(httpCode) {
                      // HTTP header has been send and Server response header has been handled
                      Debug(httpCode);
                      Debug(" ");
                      // file found at server
                      if(httpCode == 200) {
                      String payload = http.getString();
                      Debug(payload);
                      ret = true;
                      }
                      } else {
                      DebugF("failed!");
                      }
                      Debugf(" in %d ms\r\n",millis()-start);
                      http.end();
                      return ret;
                      }

                      1 Reply Last reply Reply Quote
                      • M Offline
                        Marco40 @mangoose
                        last edited by

                        @mangoose
                        Bonjour Pierre

                        J'ai corrigé sur Github et j'ai ajouté une classe myTinfo pour sortir les fonctions de Wifinfo.ino.

                        Pour ton problème, est-ce lié à ma version ?
                        Est ce que le reboot se fait sur l'initialisation ?
                        As tu des messages console au moment du reboot (watchdog...)?

                        Marc

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

                          Bonjour

                          J'ai continué à avancer, en fait il faut que les valeurs soient remontées de la manière suivante:

                            url = *CONFIGURATION.config.httpReq.path ? CONFIGURATION.config.httpReq.path : "/";
                            //url += "?";
                          
                            // Loop thru the node
                            while (me->next) {
                              // go to next node
                              me = me->next;
                              skip_item = false;
                          
                              // Si Item virtuel, on le met pas
                              if (*me->name =='_')
                                skip_item = true;
                          
                              // On doit ajouter l'item ?
                              if (!skip_item)
                              {
                                String valName = String(me->name);
                                /* FOR STANDARD TYPE */
                                if (valName == "SINSTS"){
                                  url.replace("%SINSTS%",String(atol(me->value)));
                                }
                                if (valName == "EAST"){
                                  url.replace("%EAST%", String(atol(me->value)));
                                }
                                if (valName == "EASF01"){
                                  url.replace("%EASF01%", String(atol(me->value)));
                                }
                                if (valName == "EASF02"){
                                  url.replace("%EASF02%", String(atol(me->value)));
                                }
                          

                          Concernant les reboots, j'ai remarqué que c'est quand je suis connecté à l'interface web en même temps que ça envoie les informations à Domoticz. Si je ne me connecte pas à l'interface, c'est relativement stable.

                          Je vais creer un clone de ton github et ensuite je vais injecter le code que j'ai écrit, ca sera plus simple.

                          Pierre

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

                            C'est bon j'ai fait un pull request sur github.

                            Voici ce que j'ai quand ça reboote:
                            May 1 18:05:43 WifInfo-423FC4 Wifinfo Good CRC, not set! From now, we can use EEPROM config !
                            May 1 18:07:21 WifInfo-423FC4 Wifinfo Good CRC, not set! From now, we can use EEPROM config !
                            May 1 18:08:51 WifInfo-423FC4 Wifinfo Good CRC, not set! From now, we can use EEPROM config !
                            May 1 18:17:01 WifInfo-423FC4 Wifinfo Good CRC, not set! From now, we can use EEPROM config !
                            May 1 18:20:11 WifInfo-423FC4 Wifinfo Good CRC, not set! From now, we can use EEPROM config !
                            May 1 18:37:21 WifInfo-423FC4 Wifinfo Good CRC, not set! From now, we can use EEPROM config !

                            M 3 Replies Last reply Reply Quote
                            • M Offline
                              Marco40 @mangoose
                              last edited by

                              Bonjour Pierre

                              J'ai fait une erreur dans la dernière version:
                              en fin de webClient.cpp fonction validate_value_name
                              Il faut que tu remplace sizeof(tabNames) par 38 ou la nouvelle taille du tableau tabName si tu ajoute des champs(ce que j'ai fait dans la dernière version pour les 4 champs que tu avait indiqué).
                              J'ai ajouté par sécurité un ESP.wdtFeed(); en début de build_emoncms_json.

                              marc

                              1 Reply Last reply Reply Quote
                              • M Offline
                                Marco40 @mangoose
                                last edited by

                                Il y a un autre problème, le buffer dimensionné à 136 est trop petit avec les variables ajoutées, je l'ai passé de 136 à 300.

                                webClient-->httpPost -->char buffer[300];

                                marc

                                1 Reply Last reply Reply Quote
                                • M Offline
                                  Marco40 @mangoose
                                  last edited by

                                  J'ai ajouté un test dans build_emoncms_json au cas ou on a jamais reçu de message teleinfo , dans ce cas j'avais un reboot par le watchdog.

                                      if(! first_item) 
                                        // go to next node
                                       me = me->next;
                                     //marc
                                     else
                                  	   if (me->free) {
                                  		   //1st item is free : empty list !
                                  		   Debugln("Teleinfo list is empty !");
                                  		   break;
                                  	   }
                                     //fin marc
                                      if( ! me->free ) {
                                  

                                  C'est le code qui était déjà dans tinfoJSONTable.

                                  Il faudra voir pour httpRequest si tu as encore un soucis et pour jeedomPost.

                                  J'ai dimensionné le tableau à 400 et j'ai mis ta modif String(atol(me->value)).

                                  Github est à jour.

                                  Marc

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

                                    Bonjour

                                    J'ai trouvé 2 problèmes dans le code.

                                    Il faut commenter la ligne 339 du fichier webclient.cpp
                                    La fonction this->on("/tinfo.json", & { plante systématiquement chez moi. J'ai fait en sorte qu'elle sorte des le début et je n'ai visiblement plus de plantage intempestif.

                                    Je ne sais pas trop bien ou ça plante, mais je recois juste le message "setReinit tinfoJSONTable" et ensuite ça fait un hard reset.

                                    Je n'ai pas encore trouvé d'où ca peut provenir. Si je trouve, je ferait à nouveau un pull request pour que ce soit incorporé à ton code sans que l'un ou l'autre ait à reprendre les modifs manuellement.

                                    Pierre

                                    M 1 Reply Last reply Reply Quote
                                    • M Offline
                                      Marco40 @mangoose
                                      last edited by

                                      as-tu remplacé sizeof(tabNames) par 38 ?
                                      Marc

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

                                        J'ai repris ton code directement mais ca ne fonctionne pas mieux.

                                        Par ailleurs, en continunant à chercher j'ai remarqué que mes reboots avait lieu au bout d'un nombre variable de minute + 10 secondes systématiquement.
                                        Si je ne me trompe pas, le watchdog hardware est de 10s, il doit y avoir une boucle quelque part qui dure trop longtemps et qui fait rebooter le systeme. Je vais regarder ça.

                                        Pierre

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

                                          J'ai trouvé ce qui faisait planter le programme. Il faut modifier la taille maximale des datas en mode standard. Certaines dépassent les 16 octets et peuvent monter à 98 octets.

                                          Il n'y a plus de problème avec le code suivant:

                                          struct _ValueList
                                          {
                                          ValueList *next; // next element (for compatibility)
                                          char name[16]; // LABEL of value name
                                          //char value[16]; // value
                                          char value[98]; //Changed for standard type
                                          uint8_t checksum; // checksum
                                          uint8_t flags; // specific flags
                                          uint8_t free; // checksum
                                          uint8_t filler; // unused, for boundary
                                          };

                                          Il faut aussi changer la ligne suivante
                                          memset(me->value, 0, 16); en memset(me->value, 0, 98);

                                          Je pense que la vérification des TAG valide devrait etre fait dans la classe TInfo et pas dans la classe webClient. Cela permettrait d'avoir quelque chose de plus générique. Tu peux regarder ce que j'ai écrit dans mon fork de ton répo

                                          Pierre

                                          1 Reply Last reply Reply Quote
                                          • A Offline
                                            Arly
                                            last edited by

                                            Bonsoir à tous, je n'ai toujours pas de Github mais ma version "remasterisée" pour Linky en mode Standard et Jeedom avec la dernière version du plugin Teleinfo (requette en mode POST en non plus GET) fonctionne. Il me reste à finaliser les interface EmonCMS (que je ne peux pas tester) et MQTT.
                                            Les sources sont ici avec un bin compilé pret à flasher : https://drive.google.com/drive/folders/1SxTt7uEn-4zt3LfUq1NbdaFKlY1nju0r?usp=sharing

                                            @Charles libre à vous de récupérer ces sources et de les intégrer a votre travail, ce serait avec plaisir.

                                            A 1 Reply Last reply Reply Quote
                                            • First post
                                              Last post

                                            7

                                            Online

                                            5.7k

                                            Users

                                            534

                                            Topics

                                            5.0k

                                            Posts

                                            Top Topics

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

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

                                            • CC1101
                                              CharlesC
                                              Charles
                                              0
                                              2
                                              116

                                            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