Guide: IPX800 et Vera

Après la présentation générale de la carte IPX800 hier, et comme vous êtes tous impatients de savoir comment faire, voilà le petit guide pour utiliser l'IPX avec la Vera.  Cette dernière étant capable d'interprêter des scripts Lua, il est possible de faire bien des choses.

J'ai dû chercher un peu, mais au final je vous livre une petite solution, plutôt complète, qui devrait répondre à la plupart des besoins pour contrôler l'IPX800 depuis la Vera. Bien sûr, ce n'est pas exhaustif, si vous avez une autre astuce, n'hésitez pas à nous en faire part ;-)

 

I. Création d'un device virtuel

 

Pour contrôler correctement l'IPX800, il va falloir lui affecter un device. Comme les devices sont créés automatiquement quand on inclue un module Zwave, il va falloir créer manuellement un device virtuel.

Commencez par télécharger les fichiers de configuration de ce device.

Ensuite, rendez vous dans MiOS Developer, puis dans l'onglet Luup Files. Uploadez les deux fichiers téléchargés précédemment, et cochez “Restart Luup after upload”:

 

2011 09 27 123543

 

Une fois l'upload terminé, retournez dans MiOS Developers, cette fois ci dans l'onglet “Create Device”, pour créer notre device virtuel:

 

2011 09 27 124843

 

Il faudra en créer un par relai à contrôler. Pour le moment je n'en crée qu'un, pour que vous compreniez le principe.

On obtient ce nouveau device sur le tableau de bord de la Vera:

 

2011 09 27 125047

 

Bon, tel quel, bien sûr, le device n'a aucun effet sur l'IPX, il va falloir maintenant lier tout ca.

 

II. Contrôle de l'IPX

 

Comme nous l'avons évoqué dans la présentation de l'IPX, celle ci est pilotable à l'aide de requêtes HTTP. Une chose que sait très bien faire la Vera !

Nous allons donc créer deux scénarios, un pour le On, l'autre pour le Off du relai.

Le premier scénario va se déclencher sur le “On” du device virtuel. On configure cela sur l'onglet event:

 

2011 09 27 125435

 

Ensuite, on va déterminer l'action à accomplir, dans l'onglet Luup, car nous aurons recours ici à un petit bout de code Lua:

 

2011 09 27 131215

 

On va utiliser cette commande:

 

[sourcecode language=”perl”]

luup.inet.wget("http://192.168.2.11/preset.htm?led1=1")

[/sourcecode]

 

qui va se charger d'activer le relai 1.

Remplacez l'adresse IP par celle de votre carte, puis adaptez led1 par le numéro du relai à contrôler.

Vous pouvez ensuite enregistrer ce scénario.

On répète la même opération, cette fois ci pour le “Off” du device virtuel.

On crée donc un nouveau scénario, qui se déclenche sur le Off du device virtuel:

 

2011 09 27 131653

 

puis on crée l'action à exécuter dans l'onglet Luup:

 

2011 09 27 131748

 

Cette fois, on utilise cette commande pour passer le relai à Off (d'où le “=0):

 

[sourcecode language=”perl”]

luup.inet.wget("http://192.168.2.11/preset.htm?led1=0")

[/sourcecode]

 

Ici aussi, remplacez l'adresse IP par celle de votre carte, ainsi que le “led1” par le numéro de relai que vous souhaitez contrôler.

Enregistrez le scénario, c'est fini !

Maintenant, si vous cliquez sur “On” du device virtuel, vous devriez entendre le petit clac du relai de l'IPX qui se déclenche immédiatement. Idem pour le Off.

Vous pourrez donc contrôler ce relai depuis le tableau de bord de la Vera, depuis l'application iPhone de la Vera, dans des scénarios plus complexes, etc…)

Il faudra par contre créer tout cela pour chaque relai à contrôler. C'est un peu laborieux, mais c'est le prix à payer pour contrôler son IPX depuis la Vera de façon “confortable”.

Il ne nous reste plus qu'une chose pour que tout soit parfait: nous avons vu comment contrôler un relai de l'IPX depuis la Vera. Mais si pour une raison quelconque, vous décidez d'activer un relai depuis l'interface de l'IPX, sans passer par la Vera ? Et bien cette dernière ne saura pas dans quel état est le relai. Nous allons donc remédier à cela…

 

III. Interrogation de l'IPX

 

L'IPX est vraiment bien pensée, du coup il existe un fichier xml qui permet de connaitre le status des différents relais, mais également des entrées, des compteurs d'impulsion, etc…

Nous allons donc demander à la Vera d'interroger à intervale régulier ce fichier afin de mettre à jour l'état de ses devices. C'est en quelque sorte le “polling” qu'elle fait avec les modules Zwave.

Nous allons donc créer un nouveau scénario, cette fois ci basé sur un calendrier, afin de répéter l'opération à intervalle régulier:

 

2011 09 27 132921

 

Histoire de ne pas saturer l'utilisation de la Vera ou de l'IPX, j'ai mis ici un temps de 5min, suffisant pour mon utilisation. On doit toutefois pouvoir réduire ce délai sans trop de problème, il faudra tester selon ses besoins.

Ensuite, on va utiliser encore un bout de script Lua dans l'onglet Luup:

 

2011 09 27 133131

 

Le code est un peu plus complexe que ce qu'on a utilisé jusqu'ici, je vais donc vous l'expliquer:

 

[sourcecode language=”perl”]

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.2.11/status.xml"

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

if (status == 0) then

local etatrelai0 = extractElement("led0", rss, "N/A")

luup.variable_set("urn:upnp-org:serviceId:SwitchPower1", "Status", etatrelai0, 94)

end

[/sourcecode]

 

Les 5 premières lignes définissent une fonction, qui  va nous permettre d'extraire la valeur contenue entre deux balises. Il n'y a rien à modifier ici.

Dans le fichier status.xml de l'IPX, les status des relais sont encadrés par les balisesstatus, où “x” est le numéro du relai (moins 1: le relai 1 sera led0, le relai 2 led 1, etc…). La fonction “extractElement” va donc nous permettre de récupérer cette valeur.

 

Capture d%E2%80%99%C3%A9cran 2011 09 29 %C3%A0 22.34.40

 

Ensuite, avec local url = “http://192.168.2.11/status.xml”, on indique l'adresse du fichier xml à utiliser. Remplacez bien sûr l'adresse IP par celle de votre IPX.

Avec la commande “local status, rss = luup.inet.wget(url, 10)”, nous récupérons le contenu du fichier status.xml dans la valeur rss, et la réponse de la requête dans la variable status .

Si le status = 0, alors l'adresse a bien répondu, et nous pouvons poursuivre le script.

On fait donc appel à notre fonction précédemment créée: “local etatrelai0 = extractElement(“led0“, rss, “N/A”)” en indiquant le numéro du relai pour lequel on souhaite récupérer l'état, ici led0 (donc l'état du relai 1). L'état est stocké dans la variable “etatrelai0”.

Enfin, on met à jour l'état de notre device virtuel sur la Vera en fonction de la réponse obtenue: luup.variable_set(“urn:upnp-org:serviceId:SwitchPower1”, “Status”, etatrelai0, 94)

Il faudra ici remplacer le “94” par l'id de votre device virtuel (que vous pourrez récupérer dans l'onglet Advanced du device en question).

Enregistrez votre scénario, c'est fini !

A partir de maintenant, le scénario va s'exécuter toutes les 5min pour vérifier l'état des relais en interrogeant l'IPX, puis mettre les devices correspondant à jour sur la Vera. Ainsi, si on active un relai par un autre moyen que la Vera, celle ci le saura tout de même, avec un retard de 5min maximum (selon le temps que vous aurez paramétré dans le scénario).

Bonne nouvelle: il ne sera pas nécessaire ici de créer un scénario pour chaque relai, vous pourrez utiliser ce script complet, en pensant à remplacer l'adresse IP de votre IPX, et surtout le numéro des devices virtuels correspondant aux relais:

 

[sourcecode language=”perl”]

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.2.11/status.xml"

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

if (status == 0) then

local etatrelai0 = extractElement("led0", rss, "N/A")

luup.variable_set("urn:upnp-org:serviceId:SwitchPower1", "Status", etatrelai0, 94)

local etatrelai1 = extractElement("led1", rss, "N/A")

luup.variable_set("urn:upnp-org:serviceId:SwitchPower1", "Status", etatrelai1, 95)

local etatrelai2 = extractElement("led2", rss, "N/A")

luup.variable_set("urn:upnp-org:serviceId:SwitchPower1", "Status", etatrelai2, 96)

local etatrelai3 = extractElement("led3", rss, "N/A")

luup.variable_set("urn:upnp-org:serviceId:SwitchPower1", "Status", etatrelai3, 97)

local etatrelai4 = extractElement("led4", rss, "N/A")

luup.variable_set("urn:upnp-org:serviceId:SwitchPower1", "Status", etatrelai4, 98)

local etatrelai5 = extractElement("led5", rss, "N/A")

luup.variable_set("urn:upnp-org:serviceId:SwitchPower1", "Status", etatrelai5, 99)

local etatrelai6 = extractElement("led6", rss, "N/A")

luup.variable_set("urn:upnp-org:serviceId:SwitchPower1", "Status", etatrelai6, 100)

local etatrelai7 = extractElement("led7", rss, "N/A")

luup.variable_set("urn:upnp-org:serviceId:SwitchPower1", "Status", etatrelai7, 101)

end

[/sourcecode]

IV. Conclusion

 

Ce n'est pas la mise en place la plus simple qu'on ai vu, puisqu'il faudra créer 2 scénarios par relai (On, et Off), soit au total 16 scénarios pour contrôler les 8 relais :/ Mais au moins, cela est possible, et au final, l'utilisation de l'IPX sur la Vera est pluôt bien intégrée, avec en prime le “polling” de la carte permettant de mettre à jour les status si on vient à piloter l'IPX en dehors de la Vera.

Le script d'interrogation de la carte pourra également être utilisé pour récupérer l'état des entrées, en modifiant simplement la balise à rechercher. Un détecteur d'ouverture filaire, ou encore un détecteur de niveau pourront très bien être raccordés à l'IPX, et leur status remonté sur l'interface de la Vera, qui pourra alors s'en servir pour effectuer des actions.

La création d'un device virtuel en utilisant le modèle des devices température permettra de la même façon de stocker le relevé de température de l'IPX, etc…

L'IPX800 pourrait donc remplacer des modules inexistant en Zwave, ou même remplacer certains modules Zwave couteux (modules contact sec, détecteur d'inondation, etc…). Seule contrainte, que nous avions vue lors de la présentation de l'IPX: tout cela doit être cablé jusqu'à l'IPX, alors que le Zwave peut se positionner n'importe où, surtout si on utilise des modules sur batterie. Malgré tout, je suis persuadé que cette carte pourra répondre à de nombreux besoins (gestion de l'arrosage, ouverture du portail automatique, suivi du compteur électrique et d'eau à l'aide des compteurs d'impulsion, les exemples sont nombreux…).

Vous avez maintenant la méthode, pour le reste, je vous laisse travailler un peu :p L'important, comme on l'a vu, est qu'on peut parfaitement utiliser cette carte IP avec la Vera !

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 :

38 Commentaires

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