La Zibase en complément de la Vera ?

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 :

 

012

 

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

A lire également:
Guide: Intégrer Starlink dans Home Assistant

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

 

022

 

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.

 

031

 

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é) :

 

012

 

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 :

 

022

 

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.

A lire également:
Guide: Intégrer Starlink dans Home Assistant

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

A lire également:
Guide: Intégrer Starlink dans Home Assistant

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 :

 

031

 

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

 

042

 

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 :

 

052

 

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.

Pour information, cet article peut contenir des liens affiliés, sans aucun impact sur ce que vous gagnez vous même ou le prix que vous pouvez payer pour le produit. Passer par ce lien vous permet de me remercier pour le travail effectué sur le blog chaque jour, et d'aider à couvrir les dépenses du site (hébergement, frais de port pour les concours, etc.). Ca ne vous coute rien, mais ca m'aide beaucoup ! Merci donc à ceux qui joueront le jeu !

Inscrivez vous à notre newsletter !

Ne ratez plus aucun article, test de produit ou guide, grâce à un mail dans votre boite chaque vendredi !

Tags :

1 commentaire

Laisser un commentaire

Maison et Domotique
Logo
Register New Account
Enregistrez vous, et stockez vos articles préférés sur votre compte pour les retrouver n'importe où, n'importe quand !
Compare items
  • Casques Audio (0)
  • Sondes de Piscine Connectées (0)
  • Smartphones (0)
Compare