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 »:

 

 

Une fois l’upload terminé, retournez dans MiOS Developers, cette fois ci dans l’onglet « Create Device », pour créer notre device virtuel:

 

 

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:

 

 

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:

 

 

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

 

 

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:

 

 

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

 

 

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:

 

 

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:

 

 

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.

 

 

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 !


Tags :

38 Commentaires

      Laisser un commentaire

      Ne ratez plus aucune news !

      Inscrivez vous à notre newsletter, et recevez chaque mois toute l'actualité du blog pour ne plus rien louper: actualité, guides, tutoriaux, concours !

      Merci pour votre inscription !