Aller au contenu
Frédéric Dury

Conversion Code Lua Venant De Veralite

Recommended Posts

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 result
end
local url = "http://192.168.1.51/weewx/RSS/weewx_rss.xml"
local status, rss = luup.inet.wget(url, 10)
if (status == 0) then
local 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.

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu veux adapter quoi là-_-'.

Dsl mais tout est àrefaire.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

N’empêche c'est quand même beaucoup plus le lua sous hc2 que sous vera mdr.

Partager ce message


Lien à poster
Partager sur d’autres sites

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...).

Partager ce message


Lien à poster
Partager sur d’autres sites

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" 
   <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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

 

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é par moicphil
Merci de ne pas citer le message précedent

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Steven de lui avoir répondu, je suis désolé j'ai pas 5min àmoi en ce moment.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×