Tout d’abord je ne reviendrai pas sur la présentation ni l’installation ou encore la création d’une interface OpenRemote. Il s’agit là précisément de comprendre comment faire communiquer OpenRemote et la box eedomus.
[box type= »info » ]Le projet OpenRemote est un projet OpenSource visant à permettre le contrôle à distance de son installation domotique grâce à des interfaces simples. Vous pouvez aller lire notre article sur OpenRemote.[/box]
Grâce à son API, l’eedomus permet notamment deux choses :
- envoyer des commandes http pour modifier l’état des périphériques
- récupérer l’état des différents capteurs, également au travers d’une requête http
Explication rapide du fonctionnement de OpenRemote
Lorsque vous créez votre interface OpenRemote vous avez besoin de deux choses :
- des commandes http qui permettent de modifier l’état d’un prériphérique sur votre box
- des sensors qui vont interroger à intervalle régulier un fichier xml ou json pour relever l’état des capteurs auxquels ils sont associés.
Mise en place dans OpenRemote
Nous allons utiliser une fonction d’OpenRemote qui s’appelle « rules ». Les rules permettent de scripter un peu tout et n’importe quoi …
Dans notre cas, nous allons demander à OpenRemote d’interroger toutes les secondes l’url de l’API eedomus qui permet de récupérer l’état des capteurs de la box.
Cette url est de la forme :
https://api.eedomus.com/get?action=periph.caract&periph_id=XXX&api_user=XXX&api_secret=XXX
periph_id est le code API du périphérique dont vous souhaitez connaître l’état à récupérer dans les paramètres experts du module en question
api_user et api_secret sont à récupérer dans la configuration de votre box.
Rendez-vous ensuite dans votre designer OpenRemote, dans l’onglet « Config for Controller ».
Sélectionnez rules et dans le champ rules editor collez ce script en ayant pris soin, bien sûr, de compléter l’url avec vos propres valeurs.
package org.openremote.controller.model.event import org.apache.commons.io.FileUtils; import java.net.URL; import java.io.File; rule "Poll eedomus every second" timer (cron: * * * * * ?) when eval(true) then pollVera(); end function void pollVera() { FileUtils.copyURLToFile(new URL("https://api.eedomus.com/get?action=periph.caract&periph_id=XXX&api_user=XXX&api_secret=XXX"), new File("../webapps/controller/eedomus.json")); }
Petit point : pour l’instant l’API eedomus ne permet pas d’appeler d’une simple url l’ensemble des statuts des capteurs de la box. Il va vous falloir ajouter manuellement chaque periph_id à la suite du premier en les séparant simplement par une virgule (periph_id=XXX,XXX,XXX…).
Pas très pratique, mais pour l’instant c’est comme ça ! 😉
Validez la rule puis retournez dans la rubrique Device.
Nous allons prendre pour exemple un simple switch. Il faut tout d’abord créer les deux commandes ON et OFF.
Créez une nouvelle commande http :
[highlight]https://api.eedomus.com/set?action=periph.value&periph_id=XXX&value=100&api_user=XXX&api_secret=XXX[/highlight]
Même chose pour la commande OFF en changeant la valeur à 0 :
[highlight]https://api.eedomus.com/set?action=periph.value&periph_id=XXX&value=0&api_user=XXX&api_secret=XXX[/highlight]
Puis on crée une nouvelle commande http qui mettra à jour le sensor qui renseigne l’état du switch (veillez à compléter l’adresse IP de votre controller OpenRemote ainsi que le port utilisé) :
[highlight]https://IP_OR:8688/controller/eedomus.json[/highlight]
On choisit de vérifier l’état toutes les secondes.
On renseigne le json path expression qui permet de choisir le capteur à relever (valeur et periph_id à vérifier d’après l’url citée en début d’article) :
[highlight]body[?(@.periph_id==XXX)].last_value[/highlight]
Ensuite vous créez comme d’hab un sensor utilisant cette url, puis un switch utilisant le sensor créé ainsi que les deux commandes ON et OFF.
Et voilà, votre interface OpenRemote cause avec votre eedomus !
Attention à ne pas interroger trop rapidement l’API de l’Eedomus.
1 requête / seconde = 3600 requêtes par heure = 86400 requêtes par jour.
Pour rappel, l’utilisation de l’API est limitée à 1000 requêtes / jour sans abonnement et 10000 par jour avec l’abonnement Premium.
–> http://doc.eedomus.com/view/Formules
Il vaut mieux utiliser l’API locale en remplaçant http://api.eedomus.com/ par http://IP_BOX_EEDOMUS/ dans les requêtes d’OpenRemote.
http://doc.eedomus.com/view/API_eedomus#Local_API_.28LAN.29
L’utilisation de l’API locale permettra aussi une meilleure réactivité.
Hello Fabien
Tu as bien raison, je devais faire la mise à jour du tuto.
La limitation tient plus du serveur Connected Objects que des capacités de l’eedomus.
Ceci dit : appeler l’API distante n’a pas d’intérêt puisque de toutes façons OpenRemote est forcément installé sur un serveur local.
Donc mise à jour sur toutes les commandes http ! Merci !
Je rectifie d’ailleurs que pour accéder à l’API localement il ne faut pas remplacer http://api.eedomus.com/ par http://IP_BOX_EEDOMUS/ mais par http://IP_BOX_EEDOMUS/api/
😉
Bonjour,
je trouve ce tuto très intéressant mais je me pose depuis quelques temps des questions sur ces solutions tierces d’accès à nos box domotiques par rapport à la sécurité, que je recherche parcequ’elles permettent une interface bien plus belle :
Comme pour Imperihome que je voulais utiliser depuis mon galaxy, que risque-je de mettre mes identifiants de l’eedomus dans les url dans OpenRemote (ou dans les autres, je ne vis personne en particulier) ? Parceque ces solutions m’intéressent beaucoup mais pas si ça doit ouvrir grandes les portes de mon chez-moi à des gens que je ne connais pas. Merci de nous éclairer sur ce point.