Une passerelle SMS grâce à Tasker et Jeedom.

Bonjour tout le monde,

En faisant mes fonds de tiroir je suis tombé sur un vieux galaxy S, et je me suis dis que je pourrais surement en faire quelque chose et là, Eurêka j’ai trouvé !! Lui donner une seconde vie en faisant une passerelle SMS. Par exemple envoyer « Fermer volet salon » et hop ça se ferme. Bien sur qui dit SMS, dit carte SIM et forfait, heureusement aujourd’hui il est possible de trouver des forfaits pour pas grand chose. Par exemple le forfait Free à 2€/mois (gratuit si vous êtes déjà abonné à l’ADSL chez eux) est parfait pour ça.

Bref ! Ensuite c’est posé la question de comment faire ça et là globalement j’ai 3 idées qui me sont venues :

  • Connecter le téléphone en USB à mon serveur Jeedom et l’utiliser comme une une clé 3G et l’utiliser avec le plugin « SMS ».
  • Utiliser Tasker pour gérer les SMS reçus et y associer des actions en fonctions. Je reçois le message X alors je fais ça, si je reçois Y alors je fais autre chose.
  • Utiliser Tasker avec un profil et tâche unique qui fait relais entre le monde GSM et IP (Jeedom).

La première solution a vite été écarté car je n’ai pas trouvé de driver pour le Galaxy S sur raspberry. La deuxième solution nécessite 1 profil ou au moins une tâche par action ce qui va vite devenir lourd et surtout que je me donne du mal pour centraliser mon administration domotique, ce n’est pas pour en laisser un bout à un vieux téléphone dans qui sera au fond d’une armoire…

Bref, reste la troisième solution, celle que j’ai adopté !
On crée un profil et tâche unique sur Tasker qui va simplement transférer le SMS reçu à Jeedom via l’API prévu pour les interactions. Tasker récupérera le résultat de la commande et nous le renverra par SMS.

Voilà ce que ça donne en image :

JeedSMS_schema

1 : J’envoi un SMS à mon vieux téléphone.
2 : Tasker détecte le message grâce à un profil et le transfère à Jeedom via l’API en HTTP.
3 : Jeedom interprète le message et fait les actions en conséquence et renvoit le résultat via le retour de la requête HTTP.
4 : Tasker récupère le résultat de la requête HTTP et le renvoi par SMS au demandeur.

Pour ce petit TP vous n’aurez pas besoin de grand chose :

  • Un vieux téléphone connecté en wifi (sur le même réseau que Jeedom) avec l’application Tasker.
  • Une carte SIM qui vous permet d’envoyer des SMS.
  • Votre serveur Jeedom

Configuration Jeedom

Pour la configuration Jeedom nous allons utiliser les interactions (Menu Général > Interactions).

Euh c’est quoi une interaction ??

Très bonne question !! Une interaction sous Jeedom est une sorte de dialogue, on demande quelque chose à Jeedom grâce à une phrase et en retour il va lancer des actions/scénarios et nous retourner une réponse (si on veut). Par exemple j’envoi le message « Je rentre à 17h30 » à Jeedom qui aura pour conséquence d’allumer le chauffage à 16h30 (1h avant pour qu’il fasse chaud quand je rentre) et me renvoyer un message en me disant que c’est bien pris en compte.
Comme vous vous en doutez ces phrases sont dynamiques et accepte des variables ce qui offre de larges possibilités.

Le but n’étant pas de vous faire un exposé sur les interactions, je vous laisse explorer la documentation officielle en détail si vous le souhaiter. En ce qui me concerne je vais vous montrer 2 exemples concrets :

  • Demander la température du salon et récupérer la valeur.
  • Ouvrir/Fermer les volets avec retour du résultat.

Récupérer une température.

On va commencer par ajouter une interaction pour récupérer la température. Jeedom vous interroge sur la demande via un popup. La demande est la phrase qu’il faudra envoyer pour que l’interaction soit reconnue. J’ai mis « température du salon » comme vous le voyez :

JeedSMS_inter_1

Vous entrez ensuite dans la configuration de l’interaction en question :

JeedSMS_inter_2

Vous pouvez donner un nom à votre interaction.
Le champs « demande » reprends ce que vous venez de renseigner et est donc déjà rempli.
Le champs « Réponse » sera comme vous vous en doutez ce que nous renverra Jeedom, en l’occurrence « Il fait X °C. ».
Dans la colonne de droite vous avez la possibilité de limiter votre interaction à certains périmètres. Dans notre cas ce n’est pas nécessaire car notre demande ne peut répondre qu’à 1 seule demande (c’est l’indication « nombre de phrases générées » qui nous donne l’info). En effet, notre demande est du texte pur et donc ne réagira que à cette phrase précise, mais on verra dans le 2ème exemple que nous pouvons réagir à plusieurs phrases grâce aux variables.
Dans les actions, ajoutez l’objet qui contient l’information de température et enregistrez tout ça !

Cool, maintenant on va pouvoir tester si cela fonctionne. Pour ça, 2 méthodes :

Via l’outils intégré de test.
Placez votre curseur à gauche de la fenêtre afin de faire apparaître le menu déroulant et là vous devriez avoir un bouton tester qui vous ouvre une fenetre où vous pouvez entrer votre demande et Jeedom vous répondra, soit par la réponse :

JeedSMS_inter_3

Soit en indiquant qu’il n’a pas compris :

JeedSMS_inter_4

Via l’API.

Jeedom mets à disposition une API pour appeler les interactions et c’est bien là tout l’intérêt d’ailleurs car c’est ce que nous utiliserons depuis Tasker pour intéroger Jeedom ! En voici la syntaxe :

http://192.168.1.200/jeedom/core/api/jeeApi.php?apikey=#VOTRE CLE#&type=interact&query=temperature%20du%20salon

A remplacer évidemment avec votre IP et votre clé.

JeedSMS_inter_5

Gestion des volets

Voilà, notre première interaction est prête, Passons à la 2ème. Bon je vais aller un peu plus vite. Créez une nouvelle interaction, dans le popup qui vous sollicite pour entrer la demande mettez « toto », on le configurera réellement après.
Dans cette exemple je veux pouvoir ouvrir et fermer mes volets grâce à une seul interaction, et c’est là qu’est la subtilité. J’aurais très bien pu avoir une interaction avec comme demande « ouvre le volet du salon », qui exécute l’action, idem pour tous les volets, mais c’est très lourd à maintenir (autant d’interaction que d’action).
Mais Jeedom (enfin son développeur) a pensé à tout et nous permet d’utiliser des variables, voilà donc comment nous allons configurer notre interaction :

JeedSMS_inter_12

Alors la dans ma demande on voit 2 variables :
#commande# : Correspond au nom de la commande. Vous trouvez ces informations dans le périphérique qui vous intéresse. Par exemple si je vais dans un de mes volets les commandes correspondent à « Programme », « Monter », « Descendre », « Stop »:

JeedSMS_cmd

#objet# : La variable objet parle d’elle même et correspond à vos différents objets. J’ai fais des objet par pièce donc « salon », « bureau »…etc. Je ne vois pas vraiment quoi vous dire de plus 🙂

J’ai définit quelques synonymes car personnellement j’ai plutôt tendance à utiliser les verbes « ouvrir » et « fermer » dans mes actions au lieu de « Monter » et « Descendre », du coup j’ai indiqué à Jeedom les équivalents.
En retour je n’attends pas de valeurs spéciales, juste que Jeedom me confirme qu’il a bien fait l’action.
J’ai limité l’interaction au plugin rfxcom car c’est lui qui gère mes volets. Dans les phrases générées, on voit que cette fois-ci j’en ai 28, correspondant à toutes les possibilités en fonction de mes variables.

Dans les actions je ne mets rien car elles ne sont pas figées et dépendront de la demande.

Là aussi vous pouvez faire vos tests sur le même principe que tout à l’heure 🙂

Configuration Tasker

Alors pour Tasker ça va vite être vu car comme je vous le disais on aura besoin que d’un profil et d’une tâche. Je pars du principe que vous êtes un minimum familier avec Tasker, si ce n’est pas encore le cas vous pouvez toujours passer au rattrapage avec l’article que j’avais fait il y a quelques mois.

Pour rappel, le but de tasker ici va être d’intercepter tous les messages qui viennent de mon numéro, de les transmettre à Jeedom via l’API (requête HTTP) et récupérer la réponse HTTP de Jeedom pour me la renvoyer par SMS.

Note : En prévision d’autres tests et bidouilles, j’ai préféré utiliser des variables pour m’éviter de tout retaper à chaque fois, mais étant donné qu’on aura qu’une tâche, vous pouvez taper les informations directement dans la tâche si vous voulez. Pour que vous fassiez le lien avec la suite, je vous fait quand même un petit screenshot des variables que j’utilise :

JeedSMS_inter_6

Création de la tâche

Il faudra créer une tâche qui ressemblera à ça :

JeedSMS_inter_7

Comme vous le voyez la tâche en question (je l’ai appelé Sms2jeedom) n’a que 2 actions. Elle envoie d’abord une requête HTTP en utilisant l’API. L’action à ajouter se trouve dans « Réseau > Get HTTP » : 

JeedSMS_inter_8

C’est exactement la requête qu’on avait testé dans notre navigateur tout à l’heure pour valider notre interaction.
La variable %SMSRB correspond au corps du dernier SMS. Il sera donc transmis en tant que requête à Jeedom.

Via une autre variable, Tasker garde la réponse de notre requête, on a donc plus qu’à transférer cette réponse par SMS. Pour cela on crée la 2ème action de la tâche, que vous trouverez dans « Téléphone > Envoyer un SMS » :

JeedSMS_inter_9

La variable %HTTPD correspond donc à la réponse et on l’envoi au numéro que l’on veut !

Création du profil

Ajoutez ensuite votre profil « Événements > Téléphone > SMS reçu »

JeedSMS_inter_10

Je veux que le profil ne s’exécute que quand c’est moi qui envoi un message. Et bien sûr j’associe mon unique tâche au profil :

JeedSMS_inter_11

Et voilà !! Sortez de Tasker, vous pouvez faire le test grandeur nature en envoyant des SMS à votre vieux téléphone

JeedSMS_tel

Conclusion

Nous avons pu créer une passerelle SMS<>Jeedom à moindre coût. Via un simple SMS nous pouvons interagir avec Jeedom et lui faire faire à peu près tout ce que l’on souhaite. L’utilisation peut très bien être complémentaire avec votre installation actuelle ou vue comme une solution de secours pour les installations dont la connexion Internet laisse à désirer par exemple.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *