Frédéric Dury Posté(e) le 5 avril 2014 Signaler Partager Posté(e) le 5 avril 2014 Bonjour, Je viens d'une VeraLite et souhaiterait traduire le code Lua que j'y utilisais vers la HC2. Je récupère plusieurs valeurs dans un fichier xml encadré par des balises. local function extractElement(tag, xml, default)local pattern = "<"..tag..">(.*)</"..tag..">"local result = (xml:match(pattern) or default)return resultendlocal url = "http://192.168.1.51/weewx/RSS/weewx_rss.xml"local status, rss = luup.inet.wget(url, 10)if (status == 0) thenlocal Tin = extractElement("Tint", rss, "Error")Tin = tonumber(string.sub(Tin, 1, 4))luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", Tin, 118)local atm = extractElement("Barometre", rss, "Error")atm = tonumber(string.sub(atm, 1, 4))luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", atm, 119)local rain = extractElement("Pluie", rss, "Error")rain = tonumber(string.sub(rain, 1, 3))luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", rain, 122)end Je suis un peu perdu sur comment programmer un module virtuel en HC2 Merci pour le coup de pouce. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shad Posté(e) le 5 avril 2014 Signaler Partager Posté(e) le 5 avril 2014 Tu veux adapter quoi là-_-'. Dsl mais tout est àrefaire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 5 avril 2014 Signaler Partager Posté(e) le 5 avril 2014 En effet pas très clair cela. Néanmoins on peut toujours transformer le xml en json depuis la HC2 si tu en as vraiment besoin. Sent from my GT-I9192 using Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shad Posté(e) le 5 avril 2014 Signaler Partager Posté(e) le 5 avril 2014 N’empêche c'est quand même beaucoup plus le lua sous hc2 que sous vera mdr. Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 5 avril 2014 Signaler Partager Posté(e) le 5 avril 2014 C'est pas du lua il me semble sur vera mais du code luup, c'est pas tout àfait la même chose bien qu'on retrouve des éléments identiques au lua (comme par exemple string.sub, match...). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Frédéric Dury Posté(e) le 5 avril 2014 Auteur Signaler Partager Posté(e) le 5 avril 2014 Tu veux adapter quoi là -_-'. Dsl mais tout est à refaire. Ok, je peux repartir de 0. J'ai un Raspberry connecté à une station météo sur mon réseau qui me génère un fichier xml dont le contenu est : <?xml version="1.0"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" > <channel> <Barometre>1003.9 mbar</Barometre> <Vent>0 km/h from 90°</Vent> <Tint>24.2°C</Tint> <Pluie>1.2 mm</Pluie> </channel> </rss> et je souhaite récupérer les valeurs entre balises pour les faire afficher dans un module virtuel de la HC2. Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 6 avril 2014 Signaler Partager Posté(e) le 6 avril 2014 Allez je suis généreux. Avec ça tu récupéreras ce qu'il y a dans un fichier xml assez simplement. Je te laisse broder autour, rien de compliqué. function XML(content, property) -- valueFromXML local s = string.find(content, "<" .. property .. ">"); local e = string.find(content, "</" .. property .. ">"); if (s and e) then local m = string.match(content, "<" .. property .. ">(.-)</" .. property .. ">"); local sl = string.len("<" .. property .. ">"); local el = string.len("</" .. property .. ">"); local fs = string.sub(content, 0, s-1); local te = string.sub(content, e + el); return m, fs .. te; end return nil, content; end Lien vers le commentaire Partager sur d’autres sites More sharing options...
Frédéric Dury Posté(e) le 6 avril 2014 Auteur Signaler Partager Posté(e) le 6 avril 2014 (modifié) Allez je suis généreux. Avec ça tu récupéreras ce qu'il y a dans un fichier xml assez simplement. Je te laisse broder autour, rien de compliqué. function XML(content, property) -- valueFromXML local s = string.find(content, "<" .. property .. ">"); local e = string.find(content, "</" .. property .. ">"); if (s and e) then local m = string.match(content, "<" .. property .. ">(.-)</" .. property .. ">"); local sl = string.len("<" .. property .. ">"); local el = string.len("</" .. property .. ">"); local fs = string.sub(content, 0, s-1); local te = string.sub(content, e + el); return m, fs .. te; end return nil, content; end Merci, Je test de suite! Cf : http://www.domotique-fibaro.fr/index.php/topic/700-bien-utiliser-la-fonction-citation-dans-les-r%C3%A9ponses/ Modifié le 6 avril 2014 par moicphil Merci de ne pas citer le message précedent Lien vers le commentaire Partager sur d’autres sites More sharing options...
Frédéric Dury Posté(e) le 7 avril 2014 Auteur Signaler Partager Posté(e) le 7 avril 2014 Bon, je suis trop novice en la matière visiblement.Comment est-ce que je peux accéder àce fichier qui se trouve sur mon serveur Raspberry en local sur mon réseau (url: http://192.168.1.51/weewx/RSS/weewx_rss.xml)? Merci pour votre aide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 10 avril 2014 Signaler Partager Posté(e) le 10 avril 2014 Oups, je vois que personne ne t'as répondu, alors je vais t'aiguiller un peu. Il faut créer un module virtuel (seul les modules virtuels peuvent accéder au requête HTTP). Dans ton module virtuel, tu crées un bouton, dans ce dernier pour accéder à ton fichier tu dois utiliser le code suivant : HC2 = Net.FHttp("192.168.1.51") response = HC2:GET("/.../weewx_rss.xml") response contiendra donc le contenu de ton fichier XML.Après je te laisse jouer avec le code de BenjyNet mais théoriquement, je dis bien théoriquement, un code comme celui-ce devrait faire l'affaire : function XML(content, property) -- valueFromXML local s = string.find(content, "<" .. property .. ">"); local e = string.find(content, "</" .. property .. ">"); if (s and e) then local m = string.match(content, "<" .. property .. ">(.-)</" .. property .. ">"); local sl = string.len("<" .. property .. ">"); local el = string.len("</" .. property .. ">"); local fs = string.sub(content, 0, s-1); local te = string.sub(content, e + el); return m, fs .. te; end return nil, content; end HC2 = Net.FHttp("192.168.1.51"); response = HC2:GET("/.../weewx_rss.xml"); local barometre = XML(response, "Barometre"); local vent = XML(response, "Vent"); local tint = XML(response, "Tint"); local pluie = XML(response, "Pluie"); -- A toi d'exploiter les variables barometre, vent, tint et pluie comme tu le souhaites .Ce code a été écrit sans aucun test, c'est plus un prototype qu'un code fonctionnel mais il devrait te permettre de t'en sortir avec des performance acceptables correct vu que ton fichier XML est très petit. Cordialement Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 10 avril 2014 Signaler Partager Posté(e) le 10 avril 2014 Merci Steven de lui avoir répondu, je suis désolé j'ai pas 5min àmoi en ce moment. 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Frédéric Dury Posté(e) le 10 avril 2014 Auteur Signaler Partager Posté(e) le 10 avril 2014 Merci je teste ce soir Envoyé de mon ASUS Transformer Pad TF700T en utilisant Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
Frédéric Dury Posté(e) le 11 avril 2014 Auteur Signaler Partager Posté(e) le 11 avril 2014 Bonjour, Grand merci, ça fonctionne nickel ! Envoyé de mon ASUS Transformer Pad TF700T en utilisant Tapatalk 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés