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

    WebServer étrange

    Scheduled Pinned Locked Moved Remora
    79 Posts 7 Posters 173.9k 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.
    • S Offline
      scalz
      last edited by

      beau boulot Charles, comme d'hab 😉

      1 Reply Last reply Reply Quote
      • AuFilElecA Offline
        AuFilElec
        last edited by

        Salut @scalz , ça fait plaisir de te voir ici.

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

          @AuFilElec :

          hihi 🙂 tout le plaisir est pour moi aussi. et de voir que tu aides ici aussi c'est bueno 🙂
          ca fait partie de mon trio favori 🙂 avec mys et jeedom 🙂 mais je ne suis actif qu'à un endroit pour l'instant malheureusement.. Charles a bossé dur en coulisse, ça va être extra de chez extra.

          jsuis ancien dev mais je le resterai toujours! (et ancien veut pas dire que je suis vieux ahah). Vu que j'ai pas trop le temps pour l'instant quand je vois ce qu'à fait Charles, ui, websockets, wow youpie yeah, je ne peux que kiffer, je plussoie, j'en souris jusqu'au oreilles 🙂 car c'est sur ma todo, de pouvoir manager ma gw et mes nodes même si pas de controller (j'avais comme idée esp server async websockets, et appli mobile hybride..).

          pff trop trop hate de vous rejoindre, jvais finir par rouiller lol et quand je vois async etc, truc de geek de developper, ça me donne envie de plonger dedans, mais non non faut pas que jfasse l'abeille et que jme mette à butiner...faut que je finisse mes design de gizmos avant, que j'ai hâte de montrer d'ailleurs...

          @+

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

            @scalz
            ouais c'est compliqué (voir même complètement fou) de vouloir gérer le hard et le soft, nous sommes que des humains, notre gros soucis c'est que le temps est le même pour tout le monde et il nous faudrait des journées de 48H, une soft, une hard hahahaha

            En plus tout le socle Arduino ESP8266 ça bouge tout le temps, l'équipe est super active et réactive, ça avance vite et une version OK peu ne plus compiler 6 mois après car tout à changé mais que en bien !

            Ah oui je ne vous ai pas dit aussi, j'ai tout passé le JSON avec la super librairie ArduinoJSon de Benoit (encore un Frenchy), la encore trop de la balle à tel point que la AsyncWeb socket de @me-no-dev inclue tout ce qu'il faut pour s'intégrer avec cette lib.

            Après je suis pas super calé en C++ (class, template, virtual) et parfois je galère pour contribuer aux codes de ces super dev. En revanche le C ça va très bien 😉

            @AuFilElec
            Pour la partie du code dont tu parles, tu as du voir mais je fais un rappel, plus on aura d'yeux sur le soucis plus vite on le trouvera (bien que je suis pas certain que ça vienne du code, je l'utilise sous linux depuis des lustres sans le moindre soucis). Donc

            La structure de la liste chaînée _ValueList contient pour chaque élément (je fais grace du premier (root) qui est vide)

            // Linked list structure containing all values received
            typedef struct _ValueList ValueList;
            struct _ValueList 
            {
              ValueList *next; // next element
              uint8_t checksum;// checksum
              uint8_t flags;   // specific flags
              char  * name;    // LABEL of value name
              char  * value;   // value 
            };
            

            Donc pour chaque élément, tu as:

            • *next un pointeur sur la même structure du prochain élément, sauf si nous sommes sur le dernier élément bien sûr auquel cas ce pointeur est NULL
            • checksum la checksum du couple LABEL/VALUE de l'élément
            • flags des drapeaux servant a savoir su l'élément vient d'être ajouté, ou juste modifié, .. (par exemple une valeur IINST modifiée)
            • *name un pointeur sur la chaine qui va contenir le nom du label (ex IINST)
            • *value un pointeur sur la chaine qui va contenir la valeur (ex 23)

            Ce qu'il faut bien comprendre c'est que quand tu alloues un élément de la liste chaînée (parce que viens de recevoir une nouvelle étiquette) tu n'as pas la taille pour stocker le nom de l'étiquette ainsi que sa valeur, ce ne sont que des pointeurs *name et *value il faut donc allouer l'espace mémoire nécessaire et c'est la qu'interviennent les lignes dont tu parles.

            Donc dans un 1er temps on crée un node vide de la taille de la structure auquel on ajoute la taille de l'étiquette+1 et de sa valeur+1 (les 2 +1 pour les fins de chaine \0) newNode

            
                  // Our linked list structure sizeof(ValueList)
                  // + Name  + '\0'
                  // + Value + '\0'
                  size_t size = sizeof(ValueList) + lgname + 1 + lgvalue + 1  ;
                  // Create new node with size to store strings
                  if ((newNode = (ValueList  *) malloc(size) ) == NULL) 
                    return ( (ValueList *) NULL );
                  else 
                    // get our buffer Safe
                    memset(newNode, 0, size);
                  
                  // Put the new node on the list
                  me->next = newNode;
            

            Ensuite on positionne les valeurs de la structure, et la, c'est la ruse on stocke la chaîne du nom à la fin de la structure (car y on a réservé plus de place), donc son pointeur est l'adresse du noeud + la taille de la structure
            newNode->name = (char *) newNode + sizeof(ValueList);
            et enfin le pointeur de la valeur juste après la valeur du nom
            newNode->value = (char *) newNode->name + lgname + 1;

            D'ou le code suivant:

                  // First String located after last struct element
                  // Second String located after the First + \0
                  newNode->checksum = checksum;
                  newNode->name = (char *)  newNode + sizeof(ValueList);
                  newNode->value = (char *) newNode->name + lgname + 1;
            

            Et après on y copie label + valeur

                  // Copy the string data
                  memcpy(newNode->name , name  , lgname );
                  memcpy(newNode->value, value , lgvalue );
            

            Voilà j'espère avoir pu éclairer sur le sujet 😉

            Et Tadaaaaaaaaaaaa , la vache, en écrivant ça je viens de percuter sur un truc, je crois comprendre ce qu'il se passe et je pense avoir trouvé le bug !!!!!
            L'ESP aligne par défaut les structures et leur contenu sur 4 octets et donc en fonction des tailles label/value tout peut changer et on se retrouve avec des alignement foireux (j'ai déjà rencontré ce souci en sauvant des config sous forme de structure en flash) que j'ai réglé avec des directives pragma pour aligner sur 1 octet.

            Peux-tu essayer de changer le code de déclaration de la structure en y ajoutant les pragma avant et après déclaration de la structure? Si ça ne suffit pas il faudra aussi tenter d'aligner malloc pour label/value sur 4

            #pragma pack(push)  // push current alignment to stack
            #pragma pack(1)        // set alignment to 1 byte boundary
            
            // Linked list structure containing all values received
            typedef struct _ValueList ValueList;
            struct _ValueList 
            {
              ValueList *next; // next element
              uint8_t checksum;// checksum
              uint8_t flags;   // specific flags
              char  * name;    // LABEL of value name
              char  * value;   // value 
            };
            
            #pragma pack(pop)
            

            Bon tests 😉

            Charles

            1 Reply Last reply Reply Quote
            • AuFilElecA Offline
              AuFilElec
              last edited by

              Ok, effectivement je n'avais pas vu ça de cette manière, le stockage du nom et de la valeur. Il faut dire que mes notions de C remontent maintenant à quelques années. Donc pas simple de s'y remettre. Vu que je n'ai fait quasiment que du Web depuis 10 ans.
              Merci pour l'info et en prime, ça t'a donné une idée sur ce qui pourrait déconner 🙂

              Je suis en train d'intégrer les Websockets dans le code du Remora en ce moment, donc je ferai ces tests là un peu plus tard.
              D'ailleurs, j'avais vu sur le dépôt de me-no-dev qu'il gère aussi le JSON, c'est vraiment trop fort, bientôt il nous préparera le café et viendra nous le servir 😉

              J'ai créé une branche spécifique pour l'intégration des websockets, donc on pourra échanger si tu veux.

              Je suis vraiment fan de ce projet et il y en a un autre qu'y a attiré mon attention ULPNode.

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

                @AuFilElec
                Ouais j'avais intégré aussi les WebSockets dans WifInfo, mais l'ancienne version (pas async) et j'ai du tout rechangé (web server aussi) car c'est maintenant intégré au Async, mais c'est bon le boulot est fait maintenant, au moins j'aurais plus ça à faire.

                Pour le Bug, je pense j'ai trouvé un truc pour faire un align ici avec xPortWantedSizeAlign()

                le code suivant modifié dans LibTeleinfo.cpp devrait fonctionner, à tester 😉

                      // Our linked list structure sizeof(ValueList)
                      // + Name  + '\0'
                      // + Value + '\0'
                      size_t size ;
                      #ifdef ESP8266
                        lgname = xPortWantedSizeAlign(lgname+1);   // Align name buffer
                        lgvalue = xPortWantedSizeAlign(lgvalue+1); // Align value buffer
                        // Align the whole structure
                        size = xPortWantedSizeAlign( sizeof(ValueList) + lgname + lgvalue  )     ; 
                      #else
                        size = sizeof(ValueList) + lgname + 1 + lgvalue + 1  ;
                      #endif
                
                      // Create new node with size to store strings
                      if ((newNode = (ValueList  *) malloc(size) ) == NULL) 
                        return ( (ValueList *) NULL );
                
                

                Quand tu veux pour échanger, au contraire, ce sera avec plaisir et sur tous les sujets, puis ton interface des zones c'est cool, j'aimerais trop l'intégrer 😉

                1 Reply Last reply Reply Quote
                • AuFilElecA Offline
                  AuFilElec
                  last edited by

                  C'est avec grand plaisir que je partage mon travail, si il peut servir à d'autres, c'est le principe de l'open source.
                  Si tu veux, je vais mettre ça au propre et je t'envoie une pull request sur ton dépôt.

                  Je galère un peu avec l'intégration du JSON avec l'utilisation des websockets, mais ça va venir. Je m'occuperai du problème de télé-info après, car j'ai hâte d'avoir les websockets en place 🙂

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

                    ça j'ai et fonctionnel en plus (Json, WebSocket, Console et Async)

                    Je release pas pour le moment, mais je peux t'envoyer le code, en plus c'est le même format que WifiInfo et remora alors si tu peux t'en inspirer pour le coller dans le remora, au contraire on restera cohérent et l'intégration sera bien plus facile 😉

                    Si tu le gardes pour toi pour le moment je t'envois les sources...

                    1 Reply Last reply Reply Quote
                    • AuFilElecA Offline
                      AuFilElec
                      last edited by

                      Ok, c'est cool. Je le garderai bien au chaud et cela m'économisera des heures de boulot.

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

                        Je viens de créer un private repo github (depuis le temps que j'en avais besoin aussi)
                        si tu me donnes ton compte github je t'ajoute sur le repo

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

                          Je viens de publier un correctif potentiel dans la librairie téléinfo pour les problèmes d'étiquettes erronées, quelqu'un peut tester et me faire un retour ?
                          Tout est sur le repo dédié

                          1 Reply Last reply Reply Quote
                          • AuFilElecA Offline
                            AuFilElec
                            last edited by

                            Salut @Charles ,

                            Je suis à 2 jours et 7 heures d'uptime, je vais attendre encore un peu pour voir les logs lorsqu'il se mettra à planter, si je peux tirer quelque chose. La dernière fois, il a planté après 2 jours et 14 heures.

                            Ensuite je passe ton correctif pour tester et je te tiens au courant, mais faudra encore attendre au minimum 2 jours, voir une semaine d'après ce que disait @Fab_33 .

                            1 Reply Last reply Reply Quote
                            • AuFilElecA Offline
                              AuFilElec
                              last edited by

                              Salut @Charles ,

                              Je voulais savoir un truc, dans le projet Remora, il y a la lib LibLibTeleInfo qui est un fichier en dur dans le projet. N'est'il pas mieux de mettre la lib direct dans les libraries de l'IDE Arduino et d'y faire appel dans le projet Remora ?

                              Sinon, mon Remora en est à 3 jours et 8 heures et la télé-info est toujours OK. Ce que je ne comprends pas dans les problèmes d'alignement dont tu parlais, c'est que si il y a ce problème, il devrait intervenir de suite, pourquoi apparaîtrait'il après plusieurs jours ?
                              Le problème d'alignement est bien un décalage de byte dans le registre mémoire ?

                              Pour les corrections JS dont je t'ai parlé hier, je vais attendre que tu bascules sur le fichier main.js pour te proposer les modifications, cela m'évitera une gymnastique comme l'autre jour 🙂

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

                                Moi le problème est ttoujours le même. Au bout d'un certain temps la requête http://IP/tinfo me renvoie juste }"

                                1 Reply Last reply Reply Quote
                                • AuFilElecA Offline
                                  AuFilElec
                                  last edited by

                                  Et bien, pour le moment, la Remora a un uptime de 5 days 8 hours and 20 minutes et la télé-information est toujours OK. J'attends encore jusqu'à la fin de la semaine avant de tester les modifications de @Charles .

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

                                    @AuFilElec
                                    Ah yes t'as raison la vache j'avais oublié ça, dans remora il prend liblibteleinfo donc les modifs sur la lib originale ne sont pas appliquées puisqu'elle n'est pas prise en compte (c'est corrigé je viens de pusher la nouvelle LibLibTeleinfo sur remora_soft), donc sur remora les modifs étaient inefficaces.
                                    D'ailleurs, je songe très sérieusement à arrêter le support de Particle dans remora, le code devient ingérable (preuve en est) et illisible. En plus pas de serveur WEB sur Particle (enfin un vrai, simple) et Cloud dépendance, bref, ya pas photo...
                                    Bien sur j'aimerais bien qu'il prenne la lib dans le dossier librairie de l'IDE Arduino, et il le fait (l'ESP), sauf que Particle il sait pas faire. Il n'y a pas de possibilité de dossier lib pour cette merde d'environnement (mince, je l'ai dit ?!?!, rohhhhh) J'ai la même punition pour la librairie radio RadioHead !!!!
                                    Pourquoi pas au démarrage, bonne question tu as raison, peut être qu'il fait des garbage collector plus tard et déplace les infos ?
                                    @Fab_33, normal nous sommes sur le pb des étiquettes erronées pour le moment, chaque chose en son temps 😉

                                    1 Reply Last reply Reply Quote
                                    • AuFilElecA Offline
                                      AuFilElec
                                      last edited by

                                      @Charles
                                      Tout à fait d'accord avec toi concernant le maintien du spark core. C'est une galère lors de la lecture du code.
                                      En plus, je hais le photon, après en avoir acheté un, un test réussi et après deux mois de tiroir, plus moyen de le faire fonctionner.
                                      Par contre, pour les modifs (gestion des zones), tu ne les as pas déployées dans le répertoire data.
                                      Après 6 jours et plusieurs heures, j'ai eu une erreur dans la télé-information. Mais rien de pertinent dans les logs.

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

                                        J'ai eu mes heures de galère avec Spark/Photon des AM entiers pour arriver à les reprogrammer et à chaque modif de firmware, plus les API qui changent !!!

                                        Heuuu, normalement la gestion des zones est bien déployée non? J'ai regénéré, au cas ou effectivement le index.htm.gz est différent, et j'ai ajouté la police jeedom, un oubli.

                                        C'est mieux ?

                                        1 Reply Last reply Reply Quote
                                        • AuFilElecA Offline
                                          AuFilElec
                                          last edited by AuFilElec

                                          Pour ma part, j'ai lâché l'affaire après deux journées sans réussite avec le Photon.

                                          Le problème du répertoire data devait venir de ma branche qui n'a pas du se mettre correctement à jour.

                                          Je t'ai envoyé 3 PR pour les petites corrections que j'ai apporté pour le fonctionnement du Remora.

                                          1 Reply Last reply Reply Quote
                                          • AuFilElecA Offline
                                            AuFilElec
                                            last edited by

                                            @Charles
                                            Aurais-tu une idée pour la réalisation d'un testeur d'ordres pour fil pilote ?

                                            J'aimerai bien me faire un outil pour vérifier les ordres reçus sur un fil pilote, en utilisant un Wemos ou NodeMCU, pour m'éviter des allers retours dans les maisons.

                                            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