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

    Ajout de l'export XML et brut

    Scheduled Pinned Locked Moved WifInfo
    3 Posts 2 Posters 2.2k Views 2 Watching
    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.
    • M Offline
      mjeanne
      last edited by mjeanne

      Grosse évolution, j'ai laissé l'ESP-01 et je suis passé au nodeMCU.
      Que du bonheur: l'alim est intégrée, j'ai plus d'entrées/sorties, et surtout, j'ai l'OTA qui fonctionne. Pur bonheur que de pouvoir faire des mises à jour sans démonter l'installation au sous-sol !
      Je ne constate plus de valeurs erronées, mais j'ignore si c'est lié au passage au nodeMCU ou à la nouvelle version de la librairie (ou au deux).

      Je suis donc passé à la nouvelle version du soft Wifinfo, et je vous fait profiter de deux modifs que j'y apporte.
      J'ai une ziBase, elle parle "XML", j'ai rajouté l'export XML et comme ça ne coute rien, l'export "brut".

      (Je n'utilise pas GIT, du coup, je mets ça un peu en vrac)

      Dans webserver.cpp:

      /* ======================================================================
      Function: sendXML
      Purpose : dump all values in XML
      Input   : linked list pointer on the concerned data
                true to dump all values, false for only modified ones
      Output  : - 
      Comments: -
      ====================================================================== */
      void sendXML(void)
      {
        ValueList * me = tinfo.getList();
        String response = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<data>\r\n";
        
        // Got at least one ?
        if (me) {
          // Json start
          response += F("<_UPTIME>");
          response += seconds;
          response += F("</_UPTIME>\r\n");    
      
          // Loop thru the node
          while (me->next) {
      
            // we're there
            ESP.wdtFeed();
      
            // go to next node
            me = me->next;
      
            response += F("<") ;
            response += me->name ;
            response += F(">") ;
            formatNumberJSON(response, me->value);
            response += F("</") ;
            response += me->name ;
            response += F(">\r\n") ;
          }
         // Json end
         response += F("</data>\r\n") ;
      
        } else {
          server.send ( 404, "text/plain", "No data" );
        }
        server.send ( 200, "text/xml", response );
      }
      
      /* ======================================================================
      Function: sendRAW
      Purpose : dump all values in JSON
      Input   : linked list pointer on the concerned data
                true to dump all values, false for only modified ones
      Output  : - 
      Comments: -
      ====================================================================== */
      void sendRAW(void)
      {
        ValueList * me = tinfo.getList();
        String response = "";
        
        // Got at least one ?
        if (me) {
          // Json start
          response += F("UPTIME ");
          response += seconds;
          response += F(" #\r\n");    
         
      
          // Loop thru the node
          while (me->next) {
      
            // we're there
            ESP.wdtFeed();
      
            // go to next node
            me = me->next;
      
            response += me->name ;
            response += F(" ") ;
            response += me->value ;
            response += F(" ") ;
            response += me->checksum ;
            response += F("\r\n") ;
          }
        } else {
          server.send ( 404, "text/plain", "No data" );
        }
        server.send ( 200, "text/plain", response );
      }
      

      rajout des définitions dans webserver.h

      void sendXML(void);
      void sendRAW(void);
      

      dans wifinfo.ino, fonction setup(), on ajoute les fonctions au serveur et j'en profite pour rajouter la prise en charge de "/restart" (car "/reset" me semble moins parlant, et j'ai déjà des scripts qui utilisent "/restart")

        server.on("/xml", sendXML);  
        server.on("/raw", sendRAW); 
        server.on("/restart", handleReset);
      

      Pour info, l'export "brut", je l'utilise via un ESP configuré en pont. Il lit en wifi les données brutes du vrai téléinfo, et me les redonne sur le port série. Cela simule la téléinfo d'un compteur EDF, et je vais pouvoir travailler "au chaud" sur d'autres modifs au lieu de me brancher dans le garage. En particulier, j'avais branché sur l'ESP01 un DHT11 pour lire la température, mais ça ne fonctionnais pas bien. Je vais pouvoir debugguer ça directement sur un second nodeMCU relié à mon PC.

      Autre modif, au niveau du "restart", je recharge la page d'accueil après reboot (délai de 30s en fait). Dans webserver.cpp, j'ai changé ça:

      const char FP_RESTART[] PROGMEM = "<html><head><META http-equiv=\"refresh\" content=\"30;URL=/\"></head><body>OK, Red&eacute;marrage en cours\r\n</body></html>";
      

      et 2 modifications identiques plus loin dans le code pour renvoyer du html au lieu de texte:

      server.send ( 200, "text/html", FPSTR(FP_RESTART) );
      

      Dernier point, une requète. Pour mettre à jour via web, il y a une vérification du nom de fichier. Serait-il possible de rajouter "Wifinfo.ino.bin", car c'est ainsi que l’éditeur nomme le fichier chez moi par défaut (ou m'indiquer le fichier à modifier)

      1 Reply Last reply Reply Quote
      • First post
        Last post

      2

      Online

      5.8k

      Users

      540

      Topics

      5.0k

      Posts

      Top Topics

      Popular Tags

      Copyright © 2022 Charles-Henri Hallard | Return to blog page | Powered by NodeBB