En attendant l'article,
voila le code que j'utilise, il n'est sans doute pas parfait. Je suis preneur de toute idée

le principe général est simple, il faut créer autant de devices virtuels que vous avez de sondes a récupérer de la Zibase.
Pour cela utiliser :
D_HumiditySensor1.xml : pour créer des sondes virtuelles d'humidité
D_TemperatureSensor1.xml : idem pour la température
D_PowerMeter1.xml : idem pour la consommation électrique
Ces fichiers étant déjà en standard dans la vera (pas besoin de les rajouter)
En suite il faut allez chercher les données dans le fichier xml de la Zibase pour alimenter nos sondes, pour cela voila le code que j'utilise :
la première fonction permet de parcourir le fichier xml et de récupérer les informations qui nous intéressent.
La deuxième partie du code, consiste a injecter les valeurs lues dans nos sondes vera,
1/ Pour chaque sonde de la zibase il faut indiquer ses paramètres pour récupérer leurs valeurs :Exemple : extractElement(7,"OS","439193872", rss, "N/A") :
7 : correspond au type (je vous conseille de regarder le fichier xml pour connaitre le type de votre sonde, dans mon cas 7 pour les oregon et 10 pour OWL CM119)
OS : Correspond au paramètre pro du fichier xml ( OS pour mes oregon et WS pour mon OWL)
439193872 : l'identifiant de la sonde ( dans l'utilitaire de configuration de la zibase on retrouve ces deux informations "OS439193872" dans la partie Identifiant radio)
rss : a ne pas changer c'est le nom de la variable dans laquelle on a chargé le fichier xml
"N/A" est la valeur par défaut si le script ne trouve pas la sonde.
cette fonction récupère 3 paramètres : gmt, v1, v2
gmt est une indication de l'heure Ă laquelle la zibase a lu la sonde ... pour l'instant je n'utilise pas cette information peut etre dans une V2
v1, v2 : les valeurs de la sonde
Dans le cas des sondes Température + humidité : V1 correspond a la température * 10, V2 a l'humidité en %
Pour mon OWL : V1 est quantité d'énergie en KWH depuis le début du fonctionnement du OWL, V2 à la puissance en KWatts /10
2/ la fonction luup.variable_set inject la valeur dans notre sonde (le dernier paramètre étant le numéro de notre sonde virtuelle)Et voila ce que ca donne :
- Code: Tout sélectionner
local function extractElement(type, pro,id, xml,default)
local gmt,v1,v2
local pattern = "<ev type=\""..type.."\" pro=\""..pro.."\" id=\""..id.."\" gmt=\"(%d+)\" v1=\"(%d+)\" v2=\"(%d+)\"/>"
gmt,v1,v2 = xml:match(pattern)
if (gmt == nil) then
gmt, v1,v2 = 0,default,default
end
return gmt,v1,v2
end
local url = "http://IP_ZIBASE/sensors.xml"
local gmt, v1,v2
local status, rss = luup.inet.wget(url, 10)
if (status == 0) then
gmt, v1,v2 = extractElement(7,"OS","439193872", rss, "N/A")
if (tonumber(v1)==nil) then
luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1 ,43)
else
luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1/10 ,43)
end
luup.variable_set("urn:micasaverde-com:serviceId:HumiditySensor1", "CurrentLevel", v2 ,46)
gmt, v1,v2 = extractElement(7,"OS","3930869507", rss, "N/A")
if (tonumber(v1)==nil) then
luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1 ,47)
else
luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1/10 ,47)
end
gmt, v1,v2 = extractElement(7,"OS","439177544", rss, "N/A")
if (tonumber(v1)==nil) then
luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1 ,48)
else
luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1/10 ,48)
end
luup.variable_set("urn:micasaverde-com:serviceId:HumiditySensor1", "CurrentLevel", v2 ,49)
gmt, v1,v2 = extractElement(7,"OS","3930783540", rss, "N/A")
if (tonumber(v1)==nil) then
luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1 ,50)
else
luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1/10 ,50)
end
gmt, v1,v2 = extractElement(10,"WS","133903", rss, "N/A")
if (tonumber(v1)==nil) then
luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "KWH", v1 ,54)
else
luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "KWH", v1/10 ,54)
end
if (tonumber(v2)==nil) then
luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "Watts", v2 ,54)
else
luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "Watts", v2*100 ,54)
end
end
On ajouter enfin un scénario avec ce code que l'on appel toutes les 5 (ou 10) minutes pour récupérer les valeurs et le tour est joué !
Pour info j'ai également trouvé le moyen de déclencher des scénarios Vera lorsque mes détecteurs de mouvements X10 (ou mes boutons XDom) sont activés (via la zibase et son controle http en utilisant un raccourcisseur d'url légèrement modifié pour ne pas avoir des url's trop longue). Si ca intéresse quelqu'un

PS pour Cedric : je suis fan de tes articles, si tu veux reprendre tout ou partie de mon post ce sera une bien modèste contribution
