Aller au contenu

Krikroff

Modérateurs
  • Compteur de contenus

    6 715
  • Inscription

  • Dernière visite

  • Jours gagnés

    124

Tout ce qui a été posté par Krikroff

  1. [emoji15] et [emoji22] c'est étrange comme positionnement ! Envoyé de mon smartphone
  2. +1 Phil tu es en forme @Fredo, Au début du VD
  3. Krikroff

    Plugin Netatmo

    Oui moi aussi ...
  4. @Fredo, Je m'excuse pour mon retour très très tardif ... Et pour me faire pardonner je te propose 1 solution plus propre car la récupération de t pose des problèmes en effet il y a 3 ou 4 node t dans le code... Voici un parser XML --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- -- LUA XML parser -- UPDATE: Jean-Christophe Vermandé -- NOTE: This is a modified version of Alexander Makeev's Lua-only XML parser -- found here: http://lua-users.org/wiki/LuaXml --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- Parser = function() XmlParser = {}; function XmlParser:ToXmlString(value) value = string.gsub(value, "&", "&".."amp;"); -- '&' -> "&" value = string.gsub(value, "<", "&".."lt;"); -- '<' -> "<" value = string.gsub(value, ">", "&".."gt;"); -- '>' -> ">" value = string.gsub(value, "\"", "&".."quot;"); -- '"' -> """ value = string.gsub(value, "([^%w%&%;%p%\t% ])", function(c) return string.format("%X;", string.byte(c)) end); return value; end function XmlParser:FromXmlString(value) value = string.gsub(value, "([%x]+)%;", function(h) return string.char(tonumber(h, 16)) end); value = string.gsub(value, "([0-9]+)%;", function(h) return string.char(tonumber(h, 10)) end); value = string.gsub(value, "&".."quot;", "\""); value = string.gsub(value, "&".."apos;", "'"); value = string.gsub(value, "&".."gt;", ">"); value = string.gsub(value, "&".."lt;", "<"); value = string.gsub(value, "&".."amp;", "&"); return value; end function XmlParser:ParseArgs(node, s) string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) node:addProperty(w, self:FromXmlString(a)) end) end function XmlParser:ParseXmlText(xmlText) local stack = {} local top = newNode() table.insert(stack, top) local ni, c, label, xarg, empty local i, j = 1, 1 while true do ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i) if not ni then break end --fibaro:debug("label: "..label); --fibaro:debug("xarg: "..xarg); local text = string.sub(xmlText, i, ni - 1); if not string.find(text, "^%s*$") then local lVal = (top:value() or "") .. self:FromXmlString(text) --fibaro:debug(lVal); stack[#stack]:setValue(lVal) end if empty == "/" then -- empty element tag local lNode = newNode(label); self:ParseArgs(lNode, xarg) top:addChild(lNode) elseif c == "" then -- start tag local lNode = newNode(label); self:ParseArgs(lNode, xarg) table.insert(stack, lNode) top = lNode else -- end tag local toclose = table.remove(stack) -- remove top top = stack[#stack] if #stack < 1 then error("XmlParser: nothing to close with " .. label) end if toclose:name() ~= label then error("XmlParser: trying to close " .. toclose.name .. " with " .. label) end top:addChild(toclose) end i = j + 1 end local text = string.sub(xmlText, i); if #stack > 1 then error("XmlParser: unclosed " .. stack[#stack]:name()) end return top end return XmlParser end newNode = function(name) local node = {} node.___value = nil node.___name = name node.___children = {} node.___props = {} function node:value() return self.___value end function node:setValue(val) self.___value = val end function node:name() return self.___name end function node:setName(name) self.___name = name end function node:children() return self.___children end function node:numChildren() return #self.___children end function node:addChild(child) if self[child:name()] ~= nil then if type(self[child:name()].name) == "function" then local tempTable = {} table.insert(tempTable, self[child:name()]) self[child:name()] = tempTable end table.insert(self[child:name()], child) else self[child:name()] = child end table.insert(self.___children, child) end function node:properties() return self.___props end function node:numProperties() return #self.___props end function node:addProperty(name, value) local lName = "@" .. name if self[lName] ~= nil then if type(self[lName]) == "string" then local tempTable = {} table.insert(tempTable, self[lName]) self[lName] = tempTable end table.insert(self[lName], value) else self[lName] = value end table.insert(self.___props, { name = name, value = self[name] }) end return node end Puis le code pour l'utiliser dans notre cas local HC2 = Net.FHttp("wxdata.weather.com"); local result, status, errorCode = HC2:GET("/wxdata/weather/local/FRXX0076?cc=*&unit=m"); if tonumber(status) == 200 then if (result ~= nil) then local xml = Parser(); local parsedXml = xml:ParseXmlText(result); local parsedDIDL = parsedXml['weather']; local cnt = 1; if parsedDIDL ~= nil then local children = parsedDIDL["cc"] or {}; fibaro:debug(tostring(children.obst:value())); fibaro:debug(tostring(children.tmp:value())); fibaro:debug(tostring(children.t:value())); fibaro:debug(tostring(children.hmid:value())); else error("Node not created") end end else fibaro:debug("Error Code: " .. errorCode); end
  5. Il faut que tu me dises exactement les valeurs que tu veux et quelles sont les variables globales
  6. Je ne suis pas d'accord [emoji6]. 2 HC2 + 1 HCLITE soit trois IP renseignées manuellement dans l'application et les pushs fonctionnent très bien. La manipulation est àfaire juste une fois afin que les serveurs Fibaro enregistre bien le token, ensuite c'est bon. Envoyé de mon smartphone
  7. Soit tu enlèves les tonumber soit tu laisse setGlobal faire tranquillement un CAST et passer la valeur en string, soit tu fais un tostring.... Ce n'est pas les solutions qui manquent [emoji6] Tu veux que je modifie le code entre midi et deux ? JC Envoyé de mon smartphone
  8. Le problème est au niveau du script PHP qui ne gère pas les erreurs je pense et aussi de Netatmo qui retourne des données foireuses régulièrement. Et comme la librairie json du HC2 dans les VD est très sensible c'est la catastrophe [emoji1] Envoyé de mon smartphone
  9. Et elles repartent en pleine forme ou bien ?
  10. Re.... local HC2 = Net.FHttp("wxdata.weather.com"); local result, status, errorCode = HC2:GET("/wxdata/weather/local/FRXX0076?cc=*&unit=m"); if tonumber(status) == 200 then if (result ~= nil) then local temp = tonumber(result:match("<tmp>(.+)</tmp>") or 0); local hmid = tonumber(result:match("<hmid>(.+)</hmid>") or 0); fibaro:debug(temp.."°C"); -- Enregistrement de tmp dans la vg WEATHERTMP fibaro:setGlobal("WEATHERTMP", tmp); fibaro:debug(hmid.."%"); -- Enregistrement de hmiddans la vg WEATHERHMID fibaro:setGlobal("WEATHERHMID", hmid) end else fibaro:debug("Error Code: " .. errorCode); end et pour utiliser la variable globale c'est local tmp = fibaro:getGlobalValue("WEATHERTMP"); fibaro:debug(tmp);
  11. Krikroff

    Gestion D'un Json

    Si tu as besoin d'aide ou des questions
  12. Krikroff

    Z-Wave Hyperactive

    C'est déjàune bonne piste de travail... Je suis curieux de savoir si tu trouves le périphérique en cause, moi c' était toujours le RGBW....
  13. Pas la première fois que des versions sautent, en fonction des retours des bêta testeurs... Je sentais bien la 4.035 pour Vendredi (donc aujourd'hui) mais sans certitudes ! Et si le moteur z-wave est stabilisé alors les plugins arriveront rapidement j'imagine
  14. Oui exactement, merci coyote01 [emoji106] Envoyé de mon smartphone
  15. Oui pas la peine de faire une usine àgaz local HC2 = Net.FHttp("wxdata.weather.com"); local result, status, errorCode = HC2:GET("/wxdata/weather/local/FRXX0076?cc=*&unit=m"); if tonumber(status) == 200 then if (result ~= nil) then local temp = tonumber(result:match("<tmp>(.+)</tmp>") or 0); local hmid = tonumber(result:match("<hmid>(.+)</hmid>") or 0); fibaro:debug(temp.."°C"); fibaro:debug(hmid.."%"); end else fibaro:debug("Error Code: " .. errorCode); end le debug: [DEBUG] 23:31:52: 8°C [DEBUG] 23:31:52: 91% Tu as des questions ?
  16. Je switch donc notre conversation ici . Pour résumer: wxdata.weather.com retourne du xml et pas du json c'est le problème ici. Je regarde un truc simple pour te sortir tmp et hmid sans utiliser un pseudo parser XML...
  17. Krikroff

    Gestion D'un Json

    Parfois ça passe pour le https et en v4 c'est les doigts dans le nez [emoji6]depuis une scène. Sinon pour récupérer par exemple tempInside il faut simplement faire un json.decode sur la réponse de la requête puis d'accéder àla valeur directement sur l'objet retourné par decode. Envoyé de mon smartphone
  18. Bienvenue sur le forum Nicolas, tu es déjàbien équipé [emoji4] Envoyé de mon smartphone
  19. Krikroff

    Bonjour

    Bienvenue sur le forum soulac Envoyé de mon smartphone
  20. Krikroff

    Nouveau

    Bienvenue sur le forum antoine Envoyé de mon smartphone
  21. Krikroff

    Nouveau

    Bienvenue sur le forum tempo Envoyé de mon smartphone
  22. Krikroff

    Z-Wave Hyperactive

    Toujours en 3.591 ? C'est certainement le moteur zwave qui débloque, un périphérique peut être àl'origine de cela, mais aussi une scène ou un VD avec une boucle qui sature le HC2. Envoyé de mon smartphone
  23. Bienvenue sur le forum Zhelico ! Envoyé de mon smartphone
  24. Pour cela il manque au Hc2 une commande LUA incontournable afin d'exécuter du code importé àla volée [emoji6] Envoyé de mon smartphone
  25. oui et impossible de dire si des bugs ont été résolus entre temps mais j'en doute car les plugins Fibaro sont tous plus ou moins bogués en V4.033
×
×
  • Créer...