Données du Wes dans Domoticz

Forums Serveur WES Remarques et demandes d’évolutions Données du Wes dans Domoticz

  • Post
    focky
    Participant

      Bonjour à tous ,je cherche une âme charitable pour m aider un peu .

      Je ne parviens pas à faire communiqué le Wes avec domoticz pour pouvoir avoir les données.

      Je ne trouve rien sur le net en ce sens.

      Merci aux hommes de bonne volontés.

       

      0
      0
    Vous lisez 12 fils de discussion
    • Replies
        cdlog2
        Modérateur

          Bonjour,

          En préambule, Je n’utilise pas Domoticz, mais je sais qu’il y a un plugin domoticz qui existe afin de lire les infos du WES par envoie de requêtes http.

          Le Wes implémente un fichier data.cgx et depuis la version WES V 0.83H B03 le fichier newdata.cgx qui se trouve à la racine de la microSD du WES.

          Newdata.cgx est un Script WES qui permet de lire toutes les infos utiles du WES via l’envoie de requêtes sur ce fichier et dont la réponse du WES retourne un formulaire XML avec les identifiants et Valeurs de chaque données.

          Vous pourvez envoyer la requête newdata.cgx via votre navigateur pour voir la réponse du WES :
          http://login:password@no-ip-Wes/newdata.cgx — exemple : http://admin:wes@192.168.0.xx/newdata.cgx
          login = login du WES
          password = mot de passe du WES
          no-ip-Wes = no IP de votre WES (192.168.0.xx)

          Le plugin Domoticz initiateur de la requête WES interprète ce formulaire reçu en retour et converti les champs ID du XML en Identifiants compatible Domoticz avec les valeurs associés.

          Voila à peu prés la mécanique entre Domotics et le WES. Mais je ne sais pas ou trouver le plugin domoticz.
          A priori c’est domoticz qui travaille sur ce plugin. Si vous connaissez un peu domoticz il doit être facile de réaliser ce plugin.

          Faites une recherche avec le mot clé domoticz sur ce forum, vous trouverez peut être des réponses à votre question.
          Cdt

          0
          0
            focky
            Participant

              bonjour

              mon wes ne contient pas de fichier Newdata.cgx .

              les requêtes wes vers domoticz fonctionnent une fois ou deux et ensuite plus  ou quand ça leurs chante……….

              je vais voir du coté des appels par lua sur domoticz .mais les fichiers que vous avez gentiment mis en ligne ne fonctionne pas ……avec IDX du

              dispositif que j’ai créé

              je dois louper un truc ..

               

               

              0
              0
            cdlog2
            Modérateur

              Re:

              Voir ce lien sur le Blog, vous trouverez quelques réponses et exemple de requêtes en Domoticz et le WES.

              https://www.cartelectronic.fr/blog/?action=bbp-search-request&bbp_search=domoticz&paged=3

              voir les tutos de Floche et Sacres qui fourni une petite doc explicative pour réaliser les requêtes entre domoticz et le WES.

              Cdt

              0
              0
              focky
              Participant

                bonsoir et merci pour les réponses rapide . je vais me pencher sur vos écrits.

                ;-))

                0
                0
                cdlog2
                Modérateur

                  Bonjour,

                  si vous me relisez : Le Wes implémente un fichier data.cgx et depuis la version WES V 0.83H B03 le fichier newdata.cgx. 

                  Peut-être êtes vous dans une version WES antérieure à la V 0.3H. Si cela est le cas vous trouverez le fichier data.cgx à la place de newdata.cgx. Personnalisez et envoyez depuis votre navigateur la requête vers le WES : http://login:password@192.168.xx.xx/data.cgx

                  Le WES devrait vous restituez un formulaire Xml avec les clés ID et valeurs  associées.

                  Donnez un exemple d’une de vos programmations qui est supposée envoyer une requête par le WES vers votre Domoticz et qui ne fonctionne pas correctement !.

                  Si vous simulez votre requête supposée être envoyé à Domoticz ( URL/?Data…)  via votre navigateur, Est ce que votre Domoticz répond correctement à chaque réception ?

                  Cdt

                  0
                  0
                  focky
                  Participant

                    V0.83H B03 c’est ma version

                    mon wes ne contient pas de fichier Newdata.cgx .

                    juste le data.cgx .mais là n’est pas la question .

                    les requêtes une à une fonctionnent bien est s’affichent dans le dispositif de domoticz sous l’IDX que je lui attribue .

                    mais dès que je fais plusieurs lignes de programmation de requêtes depuis le wes vers domoticz, le système se bloque et fait des erreurs dans le fichier de programmation , donne les valeurs aléatoirement  et je suis obligé de replacer un  fichier PROG.DAT de sauvegarde pour remettre de l’ordre et ça me plait moyennement de trafiquer le travail de Nicolas.

                    vu que je ne suis pas le seul dans ce cas ,alors je ne veux pas passer pas se cheminement mais plutôt par une requête en partance de domoticz vers le wes

                     

                     

                     

                    0
                    0
                    cdlog2
                    Modérateur

                      Bonsoir,

                      Désolé, vous avez raison, dans le ZIP téléchargé de la mise à jour V0.83H B03 c’est bien Data.cgx qui est présent. J’ai du certainement le renommé le mien chez moi pour des tests ?. Bref Désolé.

                      Je comprend mieux Maintenant votre Pb. Il faudrait demander à Nicolas d’implémenter une file d’attente (FIfO) dans la gestion des envoies des requêtes HTTP vers un destinataire depuis la gestion des Scripts « programme » du WES ou bien de ne pas attendre la réponse du Distant, Ou autoriser des requêtes de type UDP.

                      Il se peut que deux requêtes doivent être envoyés au même moment, Il faudrait savoir comment ce comporte la tache qui gère la page programme dans ce cas de figure.

                      Dans l’autre sens le WES peut accepter des rafales en réception de requêtes de l’ordre des 200ms, si les requêtes Cgx ne sont pas trop importantes. Il est préférable de fractionner le fichier DATA.CGX en petit tronçons, selon la page consultée dans votre domoticz.

                      L’envoie en global du fichier DATA.CGX est assez important, il serait préférable d’avoir des cycle d’envois plus proche de 800ms.

                      Cdt

                      0
                      0
                      kouki31
                      Participant

                        Bonjour.

                        j’ai essayer mais j’ai:

                        <span style= »color: #860016; font-family: ‘Courier New’, monospace; font-size: 11px; font-weight: 600; background-color: #fafafa; »>2021-12-18 03:19:00.291 Error: EventSystem: in wes: [string « … »]:441: attempt to concatenate a nil value (global ‘relais1’)</span>

                        le probleme c’est que la valeur relais1

                        est <span style= »background-color: #fafafa; color: #067676; font-family: ‘Courier New’, monospace; font-size: 11px; font-weight: 600; »>RELAIS1>ON</span>

                        alors que je pense qu’il ne faut que ON ou OFF.

                        j’essai de filtrer la valeur mais je sais pas faire…

                         

                        0
                        0
                        cdlog2
                        Modérateur

                          Bonjour,

                          Vous déterrez un vieux sujet de discussion et vous donnez très peu d’information pour bien comprendre votre problème. Qu’elle est la version de votre WES ?

                          De ce que je peux comprendre de votre énoncé, c’est que vous n’arrivez pas à extraire correctement les états des Relais rendus par le WES suite à l’envoie de requêtes sur le Data.cgx depuis votre Script Domoticz.

                          Quel est votre Script Domoticz ? il existe deux versions, l’une écrite en Python et l’autre en Lua ? Pourriez vous nous transmettre votre script Domoticz utilisé sous forme d’archive ZIP ?

                          Concernant la réponse du WES à une requête sur Data.cgx, oui en effet, les états des Relais sont rendus par « On » ou « Off ».

                          Exemple : extrait réponse du data.cgx pour les relais du WES:

                          <relais>
                          <RELAIS1>ON</RELAIS1>
                          <RELAIS2>OFF</RELAIS2>
                          </relais>

                          Si vous utilisez le Script Domoticz écrit en LUA, il existe une fonction qui extrait les valeurs du Data.cgx suivant un Mots Clé XML passé en argument et qui fait une analyse de la valeur lue relative à cette Clé en vérifiant s’il s’agit d’une réponse « ON ou  OFF », soit une valeur rendue par une Clé type Switch ou Relais. Si la valeur lue est bien « ON ou OFF » alors la fonction retourne cette valeur sans la modifier et pour tous les autres cas, la valeur est convertie en valeur numérique.

                          Voici en exemple la fonction concernée accompagné d’un appel à cette fonction avec enregistrement dans Domoticz de la valeur associée à son n° Ident.

                               ———————————————-
                              — function XML_Parse_Value(field, str)
                              —
                              — Récupère la Value d’un Tag <ID> d’un XML
                              — field : Tag <ID> de la Value XML à récupérer
                              — str : Fichier XML
                              — Return = Value Numérique ou « On »/ »Off » si value d’un Switch
                              — Return 0 si le Tag <ID> n’est pas trouvé
                              ———————————————–
                              function XML_Parse_Value(field, str)

                                 local field_start = string.find(str,field)
                                 if field_start == nil then
                                    print (« XML error – TAG NOT found »)
                                    return 0
                                 end
                                 
                                 local field_end = string.find(str, « </ », field_start)
                                 str_field = string.sub(str, field_start+1, field_end-1)
                                 if debug == true then
                                    print(str_field)
                                 end
                                 if str_field == « ON » or str_field == « OFF » then
                                    return str_field
                                 else
                                    return tonumber(str_field)
                                 end
                              end

                              ————————————————————
                              — Implémente toutes les valeurs WES dans la Array commandArray
                              ———————————————————-
                           
                              idx_relais1 = 80                                          — n° Ident relais 1 Domoticz

                              relais1 = XML_Parse_Value(« <RELAIS1> »,XML_string)         — demande l’état du Relais 1 rendu par le Data.cgx, soit « On ou OFF »
                              commandArray[idx_relais1] = {[‘UpdateDevice’] = idx_relais1..’|0|’..relais1}     — enregistre la réponse au n° Ident dans Domoticz

                          Trouvez en pièce jointe un exemple de Script LUA Domoticz dédié pour envoyer des requêtes data.cgx au WES.

                          Cdt

                           

                          Attachments:
                          You must be logged in to view attached files.
                          0
                          0
                          cdlog2
                          Modérateur

                            RE: Je m’aperçois qu’il y a un bug dans le Script LUA que j’ai fourni !

                            En effet la ligne  local field_start = string.find(str, tagdeb) de la function XML_Parse_TAG(field, str) doit sécrire :
                            local deb, field_start = string.find(str, tagdeb)

                            et la ligne local field_start = string.find(str,field) de la function XML_Parse_Value(field, str) doit s’écrire :
                            local deb, field_start = string.find(str,field)

                            La fonction API str.find(s,…) LUA renvoie 2 valeurs, la 1ere valeur est l’index du début de l’occurrence recherché et la 2eme valeur l’index de fin de cette occurrence.

                            Je joins le Script corrigé.

                            Cdt

                             

                            Attachments:
                            You must be logged in to view attached files.
                            0
                            0
                            kouki31
                            Participant

                              REBonjour.

                              J’ai reussit.

                              je posterais le programme modifier.

                              il n’y a pas grand chose a reprendre.

                              Merci beaucoup

                               

                              0
                              0
                              kouki31
                              Participant

                                Un premier jet marche très bien.

                                2 compteur eau a impulsion

                                4 pince ampérométrique

                                2 compteur EDF

                                
                                --------------------------------------------------------------------
                                -- Script LUA DOMOTICZ compatible DATA.CGX version WES V 0.84A4
                                -- révision du Script LUA déposé par @sacres sur le BLog Carteletronic
                                --
                                -- Personnalisez vos Identifiants Domoticz
                                -- Personnalisez vos bloc Relais 1Wire en décomentant les Blocs Relais Présents
                                -- Personnalisez vos Capteurs de Température et Humidité en décommentant les Blocs présents
                                -- Ne pas oublier de Commenter les Références des Sondes DB18B20 de Températures en relatif
                                -- Personnamiser l'URL de votre WES ci-dessous : Login : password et IP du WES
                                
                                commandArray = {} -- arrays des infos WES
                                
                                debug = false -- Affiche les Prints si true
                                
                                --------------------------------------------------------
                                -- Personnalisez l'URL de votre WES
                                -- URL du WES sous la forme => login:password@ip-du-wes
                                --------------------------------------------------------
                                WES_IP = "admin:wes@192.168.1.222"
                                
                                ----------------------------------------------------------
                                -- Personnalisez vos Identifiants Obj Domoticz
                                -- Adaptez vos propres valeurs IDX Domoticz, définies par défaut ci-dessous
                                ----------------------------------------------------------
                                
                                ---------------------------------------
                                -- Définition des 2 Identifiants Relais WES
                                ----------------------------------------
                                idx_relais1 = 1
                                idx_relais2 = 2
                                
                                ------------------------------------------------------
                                -- Définition des 6 Identifiants Compteurs d'impulsions
                                ------------------------------------------------------
                                idx_impulsion1 = 12
                                idx_impulsion2 = 13
                                
                                -----------------------------------------------------
                                -- Définition des 4 Identifiants Pinces ampèremétriques
                                ------------------------------------------------------
                                idx_pince1 = 6
                                idx_pince2 = 7
                                idx_pince3 = 8
                                idx_pince4 = 9
                                
                                --------------------------------------------
                                -- definition des 3 Compteurs TICs
                                --------------------------------------------
                                idx_tica1 = 15
                                idx_tica2 = 16
                                idx_tica3 = 17
                                idx_ticab = 22
                                idx_ticaw = 24
                                
                                idx_ticb1 = 18
                                idx_ticb2 = 19
                                idx_ticb3 = 20
                                idx_ticbb = 23
                                idx_ticbw = 25
                                
                                -- Fin de la personnalisations des Identifiants IDX
                                
                                -----------------------------------------------------
                                -- function XML_Capture(cmd , flatten)
                                --
                                -- cmd : commande système -> lecture d'une URL HTTP
                                -- flatten : booléen, suppression des Char spéciaux si = 1 (true)
                                ----------------------------------------------------
                                function XML_Capture(cmd,flatten)
                                local f = assert(io.popen(cmd, 'r'))
                                local s = assert(f:read('*a'))
                                f:close()
                                if flatten then
                                s = string.gsub(s, '^%s+', "")
                                s = string.gsub(s, '%s+$', "")
                                s = string.gsub(s, '[\n\r\t]+', "")
                                end
                                return s
                                end
                                
                                ----------------------------------------------
                                -- function XML_Parse_TAG(field, str)
                                --
                                -- Récupère le bloc XML compris entre les Tags et d'un XML
                                -- field : Tag ID du bloc XML à récupérer
                                -- str : Fichier XML
                                -- Return = le Bloc string Compris entre les deux TAGs ...
                                -- Return "" si le TAG n'est pas trouvé
                                -----------------------------------------------
                                function XML_Parse_TAG(field, str)
                                local tagdeb = "<"..field..">"
                                local tagend = "</"..field..">"
                                local field_start = string.find(str, tagdeb)
                                
                                if field_start == nil then
                                print ("XML error – TAG NOT found")
                                return ""
                                end
                                
                                local field_end = string.find(str, tagend, field_start)
                                str_field = string.sub(str, field_start+0, field_end-1)
                                
                                if debug == true then
                                print(str_field)
                                end
                                
                                return str_field
                                end
                                
                                ----------------------------------------------
                                -- function XML_Parse_Value(field, str)
                                --
                                -- Récupère la Value d'un Tag d'un XML
                                -- field : Tag de la Value XML à récupérer
                                -- str : Fichier XML
                                -- Return = Value Numérique ou "On"/"Off" si value d'un Switch
                                -- Return 0 si le Tag n'est pas trouvé
                                -----------------------------------------------
                                function XML_Parse_Value(field, str)
                                local field_start = string.find(str ,field)
                                if field_start == nil then
                                print ("XML error – Value NOT found")
                                return 0
                                end
                                local field_end = string.find(str, "</" ,field_start) str_field = string.sub(str, field_start+0, field_end-1) if debug == true then print(str_field) end local field_e = string.find(str, ">" ,field_start)
                                str_field = string.sub(str, field_e+1, field_end-1)
                                if str_field == "ON" or str_field == "OFF" then
                                return str_field
                                else
                                return tonumber(str_field)
                                end
                                
                                end
                                
                                -------------------------------------------------------------------
                                -- Début du Script :
                                -- Lecture du fichier Data.cgx du WES par envoie d'une requête HTTP
                                -------------------------------------------------------------------
                                XML_string = XML_Capture("curl -s 'http://"..WES_IP.."/data.cgx'", 1)
                                
                                if debug == true then
                                print(XML_string) -- Print du fichier XML si debut = True
                                end
                                
                                ----------------------------------------
                                -- Vérif si la requête WES à réussi ?
                                ----------------------------------------
                                valid = string.find(XML_string, "") -- check for a valid xml tag
                                if valid == nil then
                                print ("XML error – info NOT updated")
                                else
                                
                                ------------------------------------------------------------
                                -- Implémente toutes les valeurs WES dans la Array commandArray
                                ----------------------------------------------------------
                                
                                --Time
                                print('wes')
                                tima = XML_Parse_TAG("info", XML_string)
                                --print(tima)
                                timee = XML_Parse_TAG("time", tima)
                                print(timee)
                                
                                --
                                
                                ----------------------
                                -- 2 Relais du WES
                                ----------------------
                                --[[
                                print('V4')
                                relaisa = XML_Parse_Value("",XML_string)
                                relais1 = RELAISa
                                print(relaisa)
                                relais2 = XML_Parse_Value("",XML_string)
                                print(relais1)
                                print('_________')
                                commandArray[idx_relais1] = {['UpdateDevice'] = idx_relais1..'|0|'}
                                print(idx_relais1..'|0|')
                                commandArray[idx_relais2] = {['UpdateDevice'] = idx_relais2..'|0|'}
                                print(idx_relais2..'|0|')
                                ]]--
                                
                                ----------------------------
                                -- 6 Compteurs d'impulsions
                                -----------------------------
                                
                                --impulsion1 = XML_Parse_Value("",XML_string)
                                index1 = XML_Parse_Value("",XML_string)
                                --
                                
                                --impulsion2 = XML_Parse_Value("",XML_string)
                                index2 = XML_Parse_Value("",XML_string)
                                --
                                
                                commandArray[idx_impulsion1] = {['UpdateDevice'] = idx_impulsion1..'|0|'..index1}
                                --print(idx_impulsion1..'|0|'..index1)
                                commandArray[idx_impulsion2] = {['UpdateDevice'] = idx_impulsion2..'|0|'..index2}
                                --print(idx_impulsion1..'|0|'..index1..';')
                                
                                -----------------------------
                                -- 4 Pinces ampèremétriques
                                ------------------------------
                                
                                pince1 = XML_Parse_Value("",XML_string)
                                
                                pince2 = XML_Parse_Value("",XML_string)
                                --index2 = XML_Parse_Value("",XML_string)
                                --inject2 = XML_Parse_Value("",XML_string)
                                --
                                pince3 = XML_Parse_Value("",XML_string)
                                --index3 = XML_Parse_Value("",XML_string)
                                --inject3 = XML_Parse_Value("",XML_string)
                                --
                                pince4 = XML_Parse_Value("",XML_string)
                                --index4 = XML_Parse_Value("",XML_string)
                                --inject4 = XML_Parse_Value("",XML_string)
                                -----
                                commandArray[idx_pince1] = {['UpdateDevice'] = idx_pince1..'|0|'..pince1}
                                commandArray[idx_pince2] = {['UpdateDevice'] = idx_pince2..'|0|'..pince2}
                                commandArray[idx_pince3] = {['UpdateDevice'] = idx_pince3..'|0|'..pince3}
                                commandArray[idx_pince4] = {['UpdateDevice'] = idx_pince4..'|0|'..pince4}
                                
                                ----------------------------
                                -- Recup Info TIC1 - TIC2 - TIC3
                                ----------------------------
                                
                                XmlTic1 = XML_Parse_TAG("tic1", XML_string) -- Recup du Bloc TAG ....
                                XmlTic2 = XML_Parse_TAG("tic2", XML_string) -- Recup du Bloc TAG ....
                                --
                                papp1 = XML_Parse_Value("", XmlTic1) -- recup Puissance Apparente TIC1
                                iinsta1 = XML_Parse_Value("", XmlTic1) -- recup I Instantané TIC1
                                iinsta2 = XML_Parse_Value("", XmlTic1) -- recup I Instantané TIC1
                                iinsta3 = XML_Parse_Value("", XmlTic1) -- recup I Instantané TIC1
                                base1 = XML_Parse_Value("", XmlTic1) -- recup I Instantané TIC1
                                --
                                papp2 = XML_Parse_Value("", XmlTic2) -- recup Puissance Apparente TIC2
                                iinstb1 = XML_Parse_Value("", XmlTic2) -- recup I Instantané TIC2
                                iinstb2 = XML_Parse_Value("", XmlTic2) -- recup I Instantané TIC2
                                iinstb3 = XML_Parse_Value("", XmlTic2) -- recup I Instantané TIC2
                                base2 = XML_Parse_Value("", XmlTic2) -- recup I Instantané TIC2
                                
                                -------
                                commandArray[idx_tica1] = {['UpdateDevice'] = idx_tica1..'|0|'..iinsta1}
                                commandArray[idx_tica2] = {['UpdateDevice'] = idx_tica2..'|0|'..iinsta2}
                                commandArray[idx_tica3] = {['UpdateDevice'] = idx_tica3..'|0|'..iinsta3}
                                commandArray[idx_ticab] = {['UpdateDevice'] = idx_ticab..'|0|'..base1}
                                commandArray[idx_ticaw] = {['UpdateDevice'] = idx_ticaw..'|0|'..papp1}
                                
                                commandArray[idx_ticb1] = {['UpdateDevice'] = idx_ticb1..'|0|'..iinstb1}
                                commandArray[idx_ticb2] = {['UpdateDevice'] = idx_ticb2..'|0|'..iinstb2}
                                commandArray[idx_ticb3] = {['UpdateDevice'] = idx_ticb3..'|0|'..iinstb3}
                                commandArray[idx_ticbb] = {['UpdateDevice'] = idx_ticbb..'|0|'..base2}
                                commandArray[idx_ticbw] = {['UpdateDevice'] = idx_ticbw..'|0|'..papp2}
                                
                                end
                                
                                return commandArray
                                
                                

                                 

                                 

                                0
                                0
                                cdlog2
                                Modérateur

                                  Bonjour,

                                  Vous avez trouvez un palliatif au BUG que j’ai laissé dans le Script Domoticz, pour récupérer les bonnes valeurs.

                                  Mais vous pouvez retirer tout ce que vous avez rajouté car il suffit de rajouter une VAR Local ex: deb ou toto ou titi … associé à la VAR Local field_start existante car ils vont recevoir chacun en retour de l’appel au str.find(s,..) associé, l’index Début et l’index Fin du TAG recherché,

                                  Local deb aura l’Index du début du TAG qui pointe sur « <«  et Local field_start  aura l’index fin du TAG qui pointe sur « > »

                                  La ligne s’écrit : local deb , field_start  = string.find(str ,field)

                                  La fonction Api string.find (…. , ….) retourne 2 valeurs, soit index début + index fin de la chaîne string recherchée.

                                   

                                  Voici votre fonction que vous avez modifié et ce que vous pouvez retirer car ne sert à rien si vous corrigé le BUG d’origine par l’ajout de la Var Local manquante

                                  ———————————————-
                                  — function XML_Parse_Value(field, str)

                                  — Récupère la Value d’un Tag d’un XML
                                  — field : Tag de la Value XML à récupérer
                                  — str : Fichier XML
                                  — Return = Value Numérique ou « On »/ »Off » si value d’un Switch
                                  — Return 0 si le Tag n’est pas trouvé
                                  ———————————————–
                                  function XML_Parse_Value(field, str)

                                  — local field_start = string.find(str ,field)   — ICI BUG, il faut 2 Var avant appel find(….) une 1ere Var<=index début, 2eme Var<=index fin
                                  local deb , field_start = string.find(str ,field)  — ICI Corrigé, la Var deb va pointer au début du TAG « < » et la Var field_start sur « > »

                                  if field_start == nil then
                                  print (« XML error – Value NOT found »)
                                  return 0
                                  end

                                  local field_end = string.find(str, « </ » ,field_start)
                                  —- str_field = string.sub(str, field_start+0, field_end-1)   — ICI PAS bon la valeur se trouve à l’index field_start+1 et non + 0
                                  str_field = string.sub(str, field_start+1, field_end-1)        — LIGNE Corrigée

                                  if debug == true then print(str_field) end

                                  —– ICI vos RAJOUT ne Servent à rien si vous corrigez le BUG d’origine (bug manque var local deb sur le 1er find)
                                     — local field_e = string.find(str, « > » ,field_start)       — Doublon pour rien la VAR str_field intégre déjà la Valeur du TAG
                                     — str_field = string.sub(str, field_e+1, field_end-1)      — Doublon pour rien  

                                  if str_field == « ON » or str_field == « OFF » then
                                  return str_field
                                  else
                                  return tonumber(str_field)
                                  end

                                  end

                                  VOICI la Fonction qui fonctionne après correction du BUG suite Oubli de la VAR DEB sur le 1er str.find(s,…)

                                  ———————————————-
                                  — function XML_Parse_Value(field, str)

                                  — Récupère la Value d’un Tag d’un XML
                                  — field : Tag de la Value XML à récupérer
                                  — str : Fichier XML
                                  — Return = Value Numérique ou « On »/ »Off » si value d’un Switch
                                  — Return 0 si le Tag n’est pas trouvé
                                  ———————————————–
                                  function XML_Parse_Value(field, str)

                                  —– ICI il faut mettre deux VAR en appel du Find(…)
                                   local deb , field_start = string.find(str ,field)     — Ligne Corrigée, deb va pointer au début Tag « < » et field_start sur la fin du TAG « > »

                                     if field_start == nil then
                                        print (« XML error – Value NOT found »)
                                        return 0
                                     end

                                     local field_end = string.find(str, « </ » ,field_start)
                                     str_field = string.sub(str , field_start+1 , field_end-1)        — LIGNE Corrigée on est bien cadré <tag>+1 => valeur <= -1</tag>

                                     if debug == true then print(str_field) end

                                     if str_field == « ON » or str_field == « OFF » then
                                       return str_field
                                     else
                                       return tonumber(str_field)
                                     end
                                  end

                                  De même il faut rajouter la VAR deb dans la function XML_Parse_TAG(field, str)

                                  ———————————————–

                                  function XML_Parse_TAG(field, str)

                                  local tagdeb = « <« ..field.. »> »
                                  local tagend = « </ »..field.. »> »
                                  local deb , field_start = string.find(str ,field)   — ICI Corrigé, la Var deb va pointer au début du TAG « < » et la Var field_start sur « > »
                                  …….
                                  …….

                                  0
                                  0
                                  cdlog2
                                  Modérateur

                                    RE : Oubli, dans votre Script il faut aussi modifier la function XML_Parse_TAG(field, str)

                                    str_field = string.sub(str , field_start+1 , field_end-1)        — LIGNE Corrigée on est bien cadré <tag>+1 => valeur <= -1</tag>

                                     

                                    Je vous joins les deux fonctions corrigés à recopier dans votre Script à la place de ceux existant qui ont les BUGS

                                    Cdt

                                    Attachments:
                                    You must be logged in to view attached files.
                                    0
                                    0
                                Vous lisez 12 fils de discussion

                                Étiqueté : 

                                • Vous devez être connecté pour répondre à ce sujet.