Après avoir vu dans le dernier article concernant le serveur PAW à installer sur un Smartphone Android comment on pouvait faire pour permettre de recevoir des SMS et de les utiliser comme déclencheur d’actions, nous aborderons aujourd’hui le moyen de transmettre ces ordres reçus par SMS en HTTP à une API. L’API peut être celle d’un service sur Internet ou bien encore cette d’une box domotique.
Présentation
Quel est le but dernière tout cela? Pouvoir piloter sa domotique via SMS par exemple. Ou encore pouvoir questionner sa domotique par SMS afin d’obtenir une information tels des relevés de consommation ou de température à la demande.
Cela peut être pratique également afin de pouvoir agir à distance sur sa domotique si la connexion internet est HS. En cas de panne Internet, pour les box ou serveurs domotiques qui proposent des API locales (c’est à dire sans faire appel à un serveur distant), elles pourront être quand même contactées. L’application PAW sert alors de pont entre l’extérieur (via les SMS) et votre réseau local à destination de votre serveur domotique (via des requêtes HTTP).
Une exécution en plusieurs commandes
Dans le précédent article concernant PAW et la réception des SMS nous avions vu qu’il suffisait d’enregistrer la demande de PAW à recevoir les SMS reçu par le Smartphone sur lequel il est installé via les commandes du style:
SmsListener.registerScript("test", "vibrate(3000);");
ou bien :
SmsListener.registerAction("Voix", "123", "vibrate(3000);");
Que l’on utilise des SMS Actions ou bien des SMS Scripts la commande à exécuter lors de la réception du SMS est le dernier paramètre à savoir dans mon exemple : “vibrate(3000);” ce qui signifie faire vibrer le téléphone pendant 3 secondes.
Souvent lorsque l’on veut faire parler 2 systèmes la mise en relation tient en plus de 1 commande. Sinon se serait trop simple! La solution proposée consiste alors à utiliser comme commande à exécuter le fait de dire : merci de se reporter à ce fichier là, il contient le script à exécuter. Si le fichier de script se nomme “appelapi.bsh” et se trouve dans le répertoire “/sdcard/paw/import” on aura alors la syntaxe suivante:
SmsListener.registerScript("test", "source(\"/sdcard/paw/import/appelapi.bsh");\");
ou bien :
SmsListener.registerAction("Voix", "123", "source(\"/sdcard/paw/import/appelapi.bsh\");");
Le fichier contenant ce bout de code sera toujours à placer dans le répertoire “autostart” de PAW. Quant au fichier appelapi.bsh sera à mettre dans le répertoire “import” de PAW. Le nom de ce répertoire “import” est libre et peut être modifié à votre convenance.
Mise en œuvre
Voici la marche à suivre que je vous propose afin de permettre à PAW de recevoir les SMS reçus par le Smartphone-Serveur, de les décoder et d’appeler une API et HTTP.
- Lancer la console d’administration de PAW sur votre ordinateur et connectez-vous sur PAW
Via Média=> File Manager, créer le répertoire import (tout en minuscule) dans le répertoire /sdcard/paw/.
- Paramétrer votre Smartphone pour que PAW puisse autoriser les scripts d'”autostart” comme présenté dans le précédent article
- Copier le code suivant afin de créer un fichier appelapi.bsh
// pour l'appel d'URL import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.*; import org.apache.http.client.methods.*; import org.apache.http.util.*; //déclarations pour les SMS import de.fun2code.android.pawserver.util.*; retour=""; getURL=""; //si utilisation des SMS Actions: message = smsArgs.toLowerCase(); //si utilisations des SMS Scripts: //message = smsMessage.toLowerCase(); // déterminataion de l'action à lancer if (message.equals("lumière salon on")) { //********** eedomus ******** // getURL="http://api.eedomus.com/set?action=periph.value&api_user=aaaaa&api_secret=bbbbb&periph_id=12345&value=100"; //********** zibase ********* getURL="http://192.168.0.2/cgi-bin/domo.cgi?cmd=ON+A3+P9"; retour = "La lumière du salon est allumée."; } if (message.equals("lumière salon off")) { //********** eedomus ********* // getURL="http://api.eedomus.com/set?action=periph.value&api_user=aaaaa&api_secret=bbbbb&periph_id=12345&value=0"; //********** zibase ********** getURL="http://192.168.0.2/cgi-bin/domo.cgi?cmd=OFF+A3+P9"; retour = "La lumière du salon est éteinte."; } //lancement de l action if (getURL.equals("")) { retour ="Désolé ça ne marche pas"; } else { client = new DefaultHttpClient(); get = new HttpGet(getURL); responseGet = client.execute(get); resEntityGet = responseGet.getEntity(); if (resEntityGet = null) { retour = "Impossible de contacter le serveur."; } //retirer le commentaire pour obtenir la réponse du serveur //retour = EntityUtils.toString(resEntityGet); } // envoi par SMS de l'accusé de réception SmsUtil.sendSms(smsNumber, retour);
Pensez à dé-commenter les lignes correspondantes aux appels Zibase ou eedomus en fonction du type de serveur que vous possédez. Vous pouvez bien évidemment utiliser ce code afin d’appeler tout autre API en HTTP en l’adaptant en conséquence. Pensez également à renseigner les bonnes valeurs des paramètres des API en fonction de vos identifiants. La documentation de l’API pour la Zibase et la documentation de l’API de la box eedomus sont disponibles sur le site de leurs fabricants respectifs.
- Placer le fichier créé et modifié pour votre besoin dans le répertoire /sdcard/paw/import.
- Copier le code suivant afin de créer un fichier initsms.bsh que vous placerez dans le répertoire /sdcard/paw/autostart
import de.fun2code.android.pawserver.listener.*; SmsListener.registerAction("SMS", "123", "source(\"/sdcard/paw/import/appelapi.bsh\");");
- Via le Smartphone, arrêter PAW et redémarrez-le à nouveau en appuyant sur le bouton STOP puis START.
Vous êtes fin prêts à piloter votre domotique par SMS. Vous n’avez plus qu’à :
- envoyer le SMS “SMS:123:lumière salon on” pour allumer la lumière
- envoyer le SMS “SMS:123:lumière salon off” pour l’éteindre
Faites attention aux majuscules/minuscules dans vos SMS. Si vous ne respectez pas la casse votre action ne marchera pas
Dans mon exemple j’ai utiliser la méthode SMS Action mais le principe est identique si vous optez pour les SMS Scripts.
Conclusion
Cet exemple fonctionne avec n’importe quelle API en HTTP. Parmi les systèmes domotique que je possède à la maison, la Zibase remporte la palme de la sécurité car l’appel de l’API peut être faite en local sur votre box et non pas uniquement sur les serveurs distant de Zodianet. Avec ce moyen on pourra commander directement des actionneurs mais également appeler des scénarii.
Le fait de devoir “ouvrir” manuellement les actions possibles via SMS en les renseignant un à un dans le script n’est pas forcément ennuyeux: on ne veut pas forcément tout faire par SMS. Il faudra déjà se souvenir de la liste des commandes programmées…
Si vous possédez un Smartphone d’occasion à recycler en serveur PAW, le coût de la solution sera très abordable car le logiciel étant gratuit (vous pouvez néanmoins faire un don au programmeur pour le remercier), seul l’abonnement téléphonique sera à souscrire. Vous trouverez très facilement sur le marché un forfait SMS illimités pour 2€ par mois. C’est vraisemblablement un solution très abordable que 24€ par an.
Le fait de pouvoir envoyer des SMS à sa domotique ouvre des portes pour les propriétaires de téléphones Apple équipés de l’application Siri. Il vous suffit de renseigner le numéro de téléphone de votre passerelle PAW dans votre iPhone (comme un contact classique en fait) puis de demander à Siri d’envoyer un SMS à ce contact avec votre ordre comme message. Vous pourrez donc piloter votre maison à la voix par ce biais!