A voir
 

La Zibase en complément de la Vera ?

 
02
02
02

 
Présentation
 

Catégorie:
 
Prix:
 
Durée:
 
Mise en place
 
 
 
 
 


 
Utilisation
 
 
 
 
 


 
Utilité
 
 
 
 
 


 
Cout
 
 
 
 
 


 
Note Globale
 
 
 
 
 


Note des Lecteurs
Aucun vote

 

Pour


Des sondes de températures à pas cher pour la Vera

Contre


Il faut posséder une Vera et une Zibase...


1
Posté le25 mai 2012 par

 
Tutorial Complet
 
 

Avant toute chose, pourquoi utiliser la Zibase en complément de la Vera ? Et bien l’utilisation de la Zibase permet de palier un des manques de la Vera : avoir des sondes (températures, humidité) abordables et de taille restreinte. Attention, pas que ce soit incompatible avec le protocole Zwave, la preuve des modules existent (ici par exemple), mais aux alentours de 60€ pièce il est difficile de concurrencer les modules Oregon ou Lacrosse dont les sondes standards coutent entre 15€ et 30€ et pour lesquelles il existe une multitude de variantes (capteur UV, sonde pour piscine etc.).

 

L’idée est donc d’utiliser un connecteur entre les sondes Oregon et la Vera :

  • Si vous n’avez pas déjà une Zibase, je vous conseille d’utiliser le nouveau module USB de RFXCOM (95€) qui se branchera directement sur votre Vera en USB et qui, via un plugin dédié, vous permettra de contrôler vos sondes et vos modules X10, Chacon, … (Cédric vous en parlera la semaine prochaine). Je ne l’ai pas personnellement testé, mais cette solution est bien plus économique et est compatible avec plus de protocoles et notamment les sondes Lacrosse.
  • Si vous avez déjà une Zibase, vous pouvez (et c’est l’objet de cet article) utiliser votre Zibase comme connecteur entre vos sondes et la vera.


I. Les pré-requis

 

Connaitre l’adresse ip de sa Zibase (Nota : la vera et la Zibase doivent être dans le même réseau. Pour faire simple elles doivent accéder à internet par la même boite ADSL, si la Zibase est dans votre maison de vacances et la Vera dans votre domicile principal cela ne fonctionnera pas )

Pour cela, se rendre sur votre espace Zibase.net, passer en mode expert, dans l’onglet Zibase, sous onglet système :

 

 

Cette adresse ne doit pas changer, vous pouvez soit configurer l’adresse statique via les paramètres de votre box. La procédure étant différente pour chaque Box, je ne rentrerai pas dans les détails ici. A noter que vous aurez besoin de l’adresse « MAC » de votre Zibase et qu’il sera plus ou moins facile de l’obtenir en fonction de votre box. Il est dommage que cette information ne soit pas présente dans les paramètres de l’espace zibase.net

Vous pouvez également choisir de rendre cette adresse fixe via les paramètres de la Zibase présente sur cette même page : Adressage IP Lan en mode manuel (réservé aux experts du routage static :p ).

 

II. Créer des sondes (virtuelles) dans la Vera

 

En préparation de l’étape suivante, il faut créer autant de sondes virtuelles que vous avez de capteurs à récupérer de la Zibase (nota : pour une sonde température + humidité, il faut donc créer 2 sondes virtuelles).

Pour cela, allez dans l’onglet APPS / Develop Apps / Create device :

 

 

Dans le champs « Description » : donnez un nom à votre sonde

Dans le champs « Upnp Device Filename » utilisez (attention à ne pas avoir d’espace en trop à la fin) :

  • 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

Enfin choisissez la pièce associée à la sonde et validez.

 

 

La création de chaque module sera confirmée par ce message. Notez le numéro de la sonde (ici 130), nous en aurons besoin plus tard.

Tous vos modules sont maintenant créés et doivent apparaitre dans votre interface (exemple ici d’un module d’humidité) :

 

 

III. Connaitre les paramètres Radio de chacune de ses sondes

 

Le principe de base de ce connecteur est d’aller lire dans le fichier sensors.xml de la Zibase pour récupérer les valeurs des sondes. Ce fichier se trouve à l’adresse : http://IPZIBASE/sensors.xml (ou IPZIBASE est l’adresse ip de votre Zibase, voir le paragraphe pré-requis).

Dans votre espace Zibase.net, récupérez l’Identifiant radio de chacune de vos sondes :

 

 

Ouvrez dans votre navigateur pour trouver la ligne qui correspond dans le fichier sensors.xml, utilisez la fonction de recherche de votre navigateur en partant de l’identifiant de la sonde sans les lettres (dans mon cas 439193872)

 

[xml][/xml]

 

Pour chaque sonde vous devrez connaitre :

  • Son type (dans mon cas 7 pour les oregon et 10 pour OWL CM119)
  • Son paramètre « pro » (OS pour mes oregon et WS pour mon OWL)
  • Son id qui correspond à l’identifiant radio (sans les lettres)


IV.  Configurer la scène qui va se charger de lire le fichier sensor.xml

 

Dans votre Vera, créez une nouvelle scène et allez dans l’onglet luup.

Voici le canevas du code que vous pouvez copier coller dans la partie code :

 

[perl]

– fonction utilisée pour parcourir le xml et récupérer les valeurs
local function extractElement(type, pro, id, xml, default)
local gmt,v1,v2,v3
local pattern = ""
gmt, v1, v2, v3 = xml:match(pattern)
if (gmt == nil) then
gmt, v1, v2, v3 = 0, default, default, default
end
return gmt, v1, v2, v3
end
— fonction utiliser pour aleter en cas de batterie faible
local function setBatteryLevel(lowbat)
if (lowbat == 1 or lowbat == "1") then
return 0
else
return 100
end
end
— création des paramètres
local url = "http://IP_ZIBASE/sensors.xml"
local gmt, v1,v2
local status, rss = luup.inet.wget(url, 10)
local tempID,humiID
if (status == 0) then
— A Completer ici dans la prochaine étape du tutoriel
end
[/perl]

 

Il faudra bien sûr remplacer IP_ZIBASE par l’adresse ip de votre Zibase.

En l’état nous avons donc un script capable de lire les informations dans le fichier xml, il ne reste plus qu’à envoyer dans notre module virtuel la valeur lue. Il faut donc maintenant compléter la partie au niveau du commentaire « A Completer ici dans la prochaine étape du tutoriel »

En fonction du type de sonde, le code est différent :

 

Pour une sonde de température (seulement) :

[perl]
tempID = 24

gmt, v1,v2,lowbatt = extractElement(7,"OS","439193872", rss, "N/A")

if (tonumber(v1)==nil) then

luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1 , tempID)

else

luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1/10 , tempID)

end

 

luup.variable_set("urn:micasaverde-com:serviceId:HaDevice1", "BatteryLevel", setBatteryLevel(lowbatt) ,tempID)

luup.variable_set("urn:micasaverde-com:serviceId:SecuritySensor1", "LastTrip", gmt ,tempID)
[/perl]

 

Vous devez modifier dans les 2 premières lignes :

  • tempID = l’id de la sonde virtuelle de température que nous avons créée dans l’étape 2
  • les paramètres de la fonction extractElement : 7 correspond au type, « OS » au paramètre pro et »439193872″ au paramètre id que nous avons récupéré dans l’étape 3


Pour une sonde de température + humidité :

[perl]
tempID = 11

humiID = 14

gmt, v1,v2,lowbatt = extractElement(7,"OS","439193872", rss, "N/A")

if (tonumber(v1)==nil) then

luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1 ,tempID)

else

luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1/10 ,tempID)

end

luup.variable_set("urn:micasaverde-com:serviceId:HumiditySensor1", "CurrentLevel", v2 ,humiID)

luup.variable_set("urn:micasaverde-com:serviceId:HaDevice1", "BatteryLevel", setBatteryLevel(lowbatt) ,humiID)

luup.variable_set("urn:micasaverde-com:serviceId:SecuritySensor1", "LastTrip", gmt ,humiID)

luup.variable_set("urn:micasaverde-com:serviceId:HaDevice1", "BatteryLevel", setBatteryLevel(lowbatt) ,tempID)

luup.variable_set("urn:micasaverde-com:serviceId:SecuritySensor1", "LastTrip", gmt ,tempID)
[/perl]

 

Vous devez modifier dans les 2 premières lignes :

  • tempID = l’id de la sonde virtuelle de température que nous avons créée dans l’étape 2
  • humiID = l’id de la sonde virtuelle d’humidité que nous avons créée dans l’étape 2
  • les paramètres de la fonction extractElement : 7 correspond au type, « OS » au paramètre pro et »439193872″ au paramètre id que nous avons récupéré dans l’étape 3


Pour un capteur de consommationélectrique OWL

[perl]
tempID = 11

gmt, v1,v2,lowbatt = extractElement(10,"WS","133923", rss, "N/A")

if (tonumber(v1)==nil) then

luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "KWH", v1 ,tempID)

else

luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "KWH", v1/10 ,tempID)

end

if (tonumber(v2)==nil) then

luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "Watts", v2 ,tempID)

else

luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "Watts", v2*100 ,tempID)

end

luup.variable_set("urn:micasaverde-com:serviceId:HaDevice1", "BatteryLevel", setBatteryLevel(lowbatt) ,tempID)

luup.variable_set("urn:micasaverde-com:serviceId:SecuritySensor1", "LastTrip", gmt ,tempID)
[/perl]

 

Vous devez modifier dans les 2 premières lignes :

  • tempID = l’id de la sonde virtuelle de consommation électrique que nous avons créée dans l’étape 2
  • les paramètres de la fonction extractElement : 10 correspond au type, « WS » au paramètre pro et »133923″ au paramètre id que nous avons récupéré dans l’étape 3

 

Il faut donc copier pour chacune de vos sondes le bout de code correspondant en ayant pris soin de changer chacun des paramètres.

Un fois tout assemblé vous devrez donc avoir un code luup comme celui ci :

[perl]
— fonction utilisée pour parcourir le xml et récupérer les valeurs

local function extractElement(type, pro, id, xml, default)

local gmt,v1,v2,v3

local pattern = ""

gmt, v1, v2, v3 = xml:match(pattern)

if (gmt == nil) then

gmt, v1, v2, v3 = 0, default, default, default

end

return gmt, v1, v2, v3

end

– fonction utiliser pour aleter en cas de batterie faible

local function setBatteryLevel(lowbat)

if (lowbat == 1 or lowbat == "1") then

return 0

else

return 100

end

end

– création des paramètres

local url = "http://IP_ZIBASE/sensors.xml"

local gmt, v1,v2

local status, rss = luup.inet.wget(url, 10)

local tempID,humiID

if (status == 0) then

– Autant de fois que de sonde de température seul

tempID = 24

gmt, v1,v2,lowbatt = extractElement(7,"OS","439193872", rss, "N/A")

if (tonumber(v1)==nil) then

luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1 , tempID)

else

luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1/10 , tempID)

end

luup.variable_set("urn:micasaverde-com:serviceId:HaDevice1", "BatteryLevel", setBatteryLevel(lowbatt) ,tempID)

luup.variable_set("urn:micasaverde-com:serviceId:SecuritySensor1", "LastTrip", gmt ,tempID)

– Autant de fois que de sonde de température avec humidité

tempID = 11

humiID = 14

gmt, v1,v2,lowbatt = extractElement(7,"OS","439193872", rss, "N/A")

if (tonumber(v1)==nil) then

luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1 ,tempID)

else

luup.variable_set("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", v1/10 ,tempID)

end

luup.variable_set("urn:micasaverde-com:serviceId:HumiditySensor1", "CurrentLevel", v2 ,humiID)

luup.variable_set("urn:micasaverde-com:serviceId:HaDevice1", "BatteryLevel", setBatteryLevel(lowbatt) ,humiID)

luup.variable_set("urn:micasaverde-com:serviceId:SecuritySensor1", "LastTrip", gmt ,humiID)

luup.variable_set("urn:micasaverde-com:serviceId:HaDevice1", "BatteryLevel", setBatteryLevel(lowbatt) ,tempID)

luup.variable_set("urn:micasaverde-com:serviceId:SecuritySensor1", "LastTrip", gmt ,tempID)

– Autant de fois que de sonde de consommation électrique

tempID = 11

gmt, v1,v2,lowbatt = extractElement(10,"WS","133923", rss, "N/A")

if (tonumber(v1)==nil) then

luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "KWH", v1 ,tempID)

else

luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "KWH", v1/10 ,tempID)

end

if (tonumber(v2)==nil) then

luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "Watts", v2 ,tempID)

else

luup.variable_set("urn:micasaverde-com:serviceId:EnergyMetering1", "Watts", v2*100 ,tempID)

end

luup.variable_set("urn:micasaverde-com:serviceId:HaDevice1", "BatteryLevel", setBatteryLevel(lowbatt) ,tempID)

luup.variable_set("urn:micasaverde-com:serviceId:SecuritySensor1", "LastTrip", gmt ,tempID)

end
[/perl]

 

Afin de s’assurer que le code fonctionne correctement vous pouvez le tester dans l’onglet APPS / Develop apps / Test luup code :

 

 

Si tout est bon, vous devriez voir maintenant la valeur de vos capteurs dans vos sondes virtuelles :

 

 

Enregistrez votre code luup dans votre scène et sauvegardez la scène.

[Remarque importante sur un bug dans l'interface de la Vera]

Quand vous éditez votre code luup situé dans votre scène, vérifiez toujours la ligne qui se trouve dans la première fonction :

[perl]
local pattern = ""
[/perl]

 

En effet, un bug transforme la dernière partie

« /> »

en

« ></ev> »

ce qui a pour effet de ne plus faire marcher le script. Il faut donc remettre cette ligne avant d’enregistrer la scène.

 

V. Configurer la fréquence de rafraichissement

 

Maintenant que vous avez une scène qui permet de mettre à jour la température de vos sondes virtuelles sur la base du fichier sensor.xml de la Zibase, il n’y a plus qu’a choisir la périodicité de ce traitement.

Les températures étant des données à variation lente j’ai opté pour une mise à jour toutes les 10 minutes. Pour cela, éditez votre scène en allant dans l’onglet Schedules et positionnez un timer :

 

 

Vous pouvez maintenant profiter de vos sondes de températures depuis votre Vera, et les utiliser par exemple pour gérer la commande de vos radiateurs.

Vous aimez ? Partagez le ! Share on FacebookShare on Google+Tweet about this on TwitterPin on PinterestShare on RedditShare on TumblrShare on LinkedInBuffer this pageFlattr the authorEmail this to someone







  

x
Abonnement Newsletter
  • Dernières actualités
  • Tests produits
  • Bons plans

Entrez votre email pour ne rien rater !