Piloter sa domotique eedomus en langage naturel avec des SMS15 minute(s) de lecture

A la maison, la passerelle SMS a été installée dans un premier temps afin de permettre à ma domotique de pouvoir me remonter des informations par ce biais. A l’époque, j’avais entrepris le développement qui consistait à utiliser la passerelle dans l’autre sens c’est à dire pour une communication du smartphone vers la domotique. Le but derrière cela était de me permettre de piloter ma box domotique via des SMS.  Le terme passerelle SMS est tout à fait exact même si sa mise en oeuvre est peu orthodoxe bien que terriblement efficace car basée sur un vieux Smartphone recyclé sur lequel l’application SMS Gateway fait merveille.  Le temps me manquait pour terminer les développements (la vie, le travail, le blog,…). La semaine dernière, les “vacances” méritées à l’issue du concours m’ont permis de terminer et de tester la solution envisagée.  C’est la mise à jour récente de la box eedomus datée du 7 avril 2014 qui m’a remis le pied à l’étrier.  Si vous souhaitez piloter votre box eedomus avec des SMS, je vous propose la solution suivante.

L’objectif initial

A la base rien ne permet de déterminer que piloter une box domotique via des SMS est quelque chose qui peut être intéressant.  Toutes les box proposent aujourd’hui des applications pour les smartphones qui sont très pratiques pour piloter sa domotique. Si on y réfléchit un peu plus, cela peut avoir un intérêt dans différents cas par exemple lorsque:

  • la maison est équipée d’une connexion internet et que celle-ci est en panne rendant le pilotage par smartphone inopérant hors du domicile
  • la maison est une résidence qui n’a pas du tout de connexion internet ou tout du moins qui n’est pas disponible en permanence
  • l’un des habitants n’a pas de smartphone mais un téléphone classique et souhaite quand même piloter la domotique via ce dernier
  • dans le lieu où l’on se trouve en vacances ou en déplacement, la connexion data est de très mauvaise qualité ou inexistante. Seuls la voix est les SMS passeront.
  • à l’occasion d’un déplacement à l’étranger on est obligé de supprimer la connexion data du forfait téléphonique pour ne pas avoir de mauvaises surprises sur la facture en fin de mois…

box_eedomus

Le système que je souhaitais devait proposer les fonctionnalités principales suivantes:

  • pouvoir être utilisé par plusieurs personnes donc par plusieurs numéros de téléphones
  • ne pouvoir n’être utilisé QUE par des numéros de téléphones préalablement enregistrés.
  • pouvoir envoyer un accusé de réception lors de l’exécution d’un ordre
  • un ordre doit pouvoir servir pour agir sur la maison ou bien pour consulter une donnée ou un état la concernant
  • pouvoir utiliser indifféremment différentes tournures de phrases du style “Quelles est la consommation électrique?” ou “Consommation électrique” ou “conso élec” pour connaître à tout instant la consommation électrique du logement
  • pouvoir gérer automatiquement l’utilisation de plusieurs mots pour effectuer une seule et même action.  C’est la notion de synonyme. C’est le cas du mot “allumer” qui serait tout naturellement remplacé dans une commande par le mot “rallumer”.  Cela permet également d’ouvrir les volets avec les mots suivants: ouvre, ouvrir, monter, monte…
  • pouvoir choisir les actions ou interrogations pouvant être faites par SMS
  • pouvoir ne plus toucher au script lorsque je souhaite rajouter une commande pouvant être pilotée à distance. Chaque nouvelle commande possible doit pouvoir être gérée facilement via les écrans de la box eedomus
  • C’est tout bête mais le système doit être indépendant d’Internet: tout doit être fait en local dès lors que le SMS est reçu chez vous

Le fait que la box eedomus permet d’héberger maintenant des scripts PHP a permis d’alléger le dispositif mis en place à l’époque. Les améliorations ergonomiques de l’interface de gestion ont été également mis à contribution.

sms-gateway-eedomus-schema

Recevoir des SMS chez soi? Comment faire?

Pour pouvoir recevoir des SMS à la maison il faut un serveur qui soit en charge de cette fonctionnalité. La bonne nouvelle est que ce serveur peut être tout simplement un smartphone.  Si vous avez un ancien smartphone sous Android c’est gagné: vous n’avez rien besoin de plus.  Vous pouvez alors lui donner une seconde vie et le recycler en y installant l’application gratuite SMS Gateway disponible sur le Google Play Store.  Le téléphone n’a pas besoin d’être récent. Une version 1.6 ou ultérieure d’Android suffit. Votre passerelle SMS vous apportera ses services pour un coût de 0€.

Il vous faudra ensuite une carte SIM et un forfait SMS illimité.  Le coût reste correct car on en trouve de nos jours à 2€ par mois.

sms-gateway-logo

Je ne vais pas détailler l’étape consistant à l’installation de l’application car elle est très simple et surtout du fait qu’elle a déjà fait l’objet d’un précédent article.  Je vous incite à vous y référer afin de ne pas faire double emploi.  Sachez cependant que l’installation est toute simple.  L’application s’installe de la même manière que le dernier jeu en vogue sur Android. C’est une application classique pour smartphones Android.

Le fait qu’un smartphone puisse être une passerelle SMS vous fait bénéficier d’un serveur à petit prix doté d’une alimentation en cas de panne électrique car on utilisera alors les batteries du téléphone. Vous l’aurez compris ce téléphone devra rester ensuite à demeure chez vous pour assurer son service. Ceux qui ont installé l’application PAW pour gérer les SMS pourront utiliser le script PHP communiqué dans l’article.  Vous pourrez également décider d’installer SMS Gateway pour la gestion des SMS: les 2 applications cohabitent sans souci sur le même téléphone pour peu que les SMS reçus ne soient pas interprétés en parallèle par les 2 applications.

Le fonctionnement du système

Le fonctionnement est tout simple:

  1. vous envoyez un SMS a votre maison sur le numéro du smartphone qui héberge SMS Gateway
  2. SMS Gateway le communique à un script PHP hébergé sur la box eedomus
  3. le script PHP fait les traitement d’usages et les modifications nécessaires:
    1. Il vérifie que le SMS provient d’un numéro de téléphone préalablement enregistré
    2. Si le téléphone est bien recensé, le script PHP vérifie ensuite que la commande à traitée est connue
    3. si la commande est inconnue un message SMS vous est renvoyé pour vous avertir de la non compréhension de l’ordre
    4. si la commande est reconnue, elle est alors exécutée par la box eedomus qui vois en informe via un message SMS qui vous est alors envoyé
    5. si le téléphone n’est pas recensé l’expéditeur n’en est pas informé pour ne pas lui indiquer que le SMS Gateway peut être une porte d’entrée vers la maison
  4. la box eedomus traite l’ordre reçu est validé par le script PHP
  5. la box eedomus prépare un SMS pour indiquer que l’ordre a été pris en compte
  6. SMS Gateway émet le SMS préparé par la box eedomus à celui qui a émis l’ordre d’origine

Comme vous pouvez le voir le point d’entrée chez vous sera l’application SMS Gateway. Cette application sera également l’interface de sortie de la communication.

A propos du script PHP

Afin d’interpréter les commandes présentes dans le SMS un petit script est nécessaire. N’ayez pas de craintes je vous le donne tout fait. Le but ce ce petit bout de code est de faire l’interface entre SMS Gateway et la box domotique.  Pour cela :

  • il met tous les ordres en minuscules
  • il supprime tous les accents, les signes de ponctuations
  • il supprime tous les mots “inutiles” tels que les mots “le”, “la”, “vérifie”, ….
  • il remplace des mots par leur synonyme :
    • allume, rallume seront replacés par ON
    • éteint, éteindre seront remplacés par OFF
    • monte, ouvre, seront remplacés par ON
    • baisse, ferme, seront remplacés par OFF
  • il communique à la box eedomus le numéro de téléphone et la commande “nettoyée”

Les actions suivantes:

  • Monte le volet du salon
  • monter le volet du salon
  • ouvre volet salon

seront toutes transformées en : on volet salon

C’est cette action “on volet salon” qui devra être créée dans la box eedomus pour pouvoir être traitée par la suite.

Pourquoi mettre les ordres en minuscules? Tout simplement pour ne pas imposer de manière de saisie du SMS sur le smartphone.  Qu’il y ait ou non des majuscules, le SMS sera mis en minuscules et confrontés à l’action paramétrée sur la box qui est elle aussi paramétrée en minuscules.

Pourquoi supprimer les accents? Tout simplement parce que la box eedomus ne gère pas très bien ces caractères accentués en entrée. Une histoire d’encodage empèche à différents niveaux de bien gérer ces impératifs de la langue française. Le mot “entrée” correctement orthographié dans le SMS ou bien rapidement tapé sans accentuation sera alors transformé en “entree” par le script PHP pour être ensuite confronté au mot “entree” paramétré sur la box. Pour résumer : comme ils gênent on supprime!

Le script que je vous communique fais tout cela.  Il peut être modifié par vos soins pour rajouter par exemple des synonymes qu’il doit prendre en compte.  Vous pouvez également supprimer cette fonctionnalité de synonymes en mettant en commentaire la ligne suivante dans le script:

// gestion des synonymes 
$action = sdk_synonymes($action);

qui deviendra alors  :

// gestion des synonymes 
//$action = sdk_synonymes($action);

La règle importante à suivre est donc la suivante:

Vous écrivez votre SMS en français naturel mais vous paramétrez les ordres dans la box eedomus sans accents.

Mise en oeuvre

L’application SMS Gateway est la brique logicielle utilisée pour recevoir votre SMS et le communiquer à la box eedomus.  En retour, la box eedomus fera appel à cette même passerelle SMS pour vous apporter sa réponse ou bien pour confirmer l’exécution d’une action. La mise en oeuvre se fait en 3 étapes.

  • Installation de SMS Gateway et paramétrage de l’application pour quelle appelle le script PHP à chaque réception de SMS.
  • sur la box eedomus : référencement des numéros de téléphones habilités, référencement des ordres pouvant être transmis par SMS et création des phrases qui seront envoyées en réponse
  • sur la box eedomus : Mise en place du script dans l’environnement de scripts de la box eedomus

Installation et paramétrage de SMS Gateway

  • Installer SMS Gateway via le Play Store en suivant si vous le souhaitez les indications données dans le précédent article dédié.
  • Aller dans le menu Settings

smsgateway-http

  • Cocher les options suivantes:
    • Listen for HTTP send SMS Commands
    • Forward incoming SMS to HTTP
    • Prevent CPU sleep mode
    • Start gateway automatically after phone boot
  • Aller dans HTTP Settings

smsgateway-http-param

  • Renseignez un mot de passe de votre choix dans la zone “Required password in URL”.  Il sera uniquement demande à la box eedomus lorsqu’elle voudra envoyer un SMS en utilisant une requête HTTP.
  • Paramétrer l’adresse sur votre eedomus qui sera appelée à chaque réception de SMS dans la zone “Forward incoming SMS to HTTP URL:
http://192.168.0.xx/script/?exec=execute_cmd.php

En remplaçant bien évidemment 192.168.0.xx par l’adresse IP de votre eedomus.

C’est tout!  Vous pouvez maintenant lancer le service de passerelle SMS en appuyant sur start!

smsgateway-start

Paramétrage des actions et réponses sur la box eedomus

Sur la box eedomus il faut maintenant créer 4 périphériques virtuels :

  • Commandes Externes : liste des commandes externes qui peuvent être appelées par SMS
  • Commandes Externes Réponses : listes des réponses possibles de la box aux commandes qui lui sont adressées
  • Commandes Externes Sources : liste des numéros de téléphones qui peuvent agir via SMS sur votre domotique
  • Messages : log des messages reçus.  Ce périphérique pourra être supprimé par la suite mais il est intéressant de le créer au départ pour comprendre un éventuel dysfonctionnement.

Pour cela via l’interface de paramétrage de la box:

  • Créer l’état : “Commandes Externes Sources“.

eedomus_commandes-externes-sources

  • Lui affecter comme valeur les numéros de téléphones autorisés.  Il est important que la “valeur brute” et la description de chaque valeur soient égales et référencent les téléphones en les précédant du 33 pour la France.  06-12-34-56-78 sera présent dans la liste sous la forme 33612345678

eedomus_commandes-externes-sources-valeurs

  • Créer l’actionneur HTTP : Commandes Externes Réponses

eedomus_commandes-externes-reponses

  • Lui affecter comme valeurs la liste des réponses possibles.

eedomus_commandes-externes-reponses-valeurs

  • Il faut obligatoirement créer la réponse pouvant être appelée par le script pour avertir l’utilisateur que la commande n’est pas comprise. Elle aura les caractéristiques suivantes :
    • le description “MSG Erreur”
    • l’URL : http://192.168.0.YY:9090/sendsms?password=MotDePAsse&
    • le type : “get”
    • les paramètres : phone=[LAST_VALUE PERIPH_ID=111111]&text=Désolé… Je n’ai pas compris la question.

Avec :

  • 192.168.0.YY : l’adresse ip du téléphone muni de la passerelle SMS
  • MotDePAsse : le mot de passe affecté lors de la mise en place de SMS Gateway
  • 111111 : l’id du périphérique Commandes Externes Sources

Vous l’aurez compris, les autres messages seront créés de la même manière en modifiant les texte du coprs du sms contenu après le mot “&text=” du paramètre

  • Créer l’état : “Commandes Externes”

eedomus_commandes-externes

  • Lui affecter comme valeurs la liste des actions possibles.

eedomus_commandes-externes-valeurs

  • Il faut obligatoirement créer l’action ayant :
    • la valeur brute :  “erreur”
    • le description “Erreur”
    • l’action associée : “Commandes Externes Réponses SMS –  MSG Erreur”

Le fait de relier un ordre avec une ou plusieurs actions a pour effet en arrière plan de générer automatiquement les règles qui produiront les actions souhaitées lorsque l’état “Commandes Externes” prendra une nouvelle valeurs.  avec cette méthode les liens actions/réponses sont simples à administrées et à maintenir!!!  Pour avoir une réponses générique pensez à relier vos ordres à une réponse du style “c’est fait”.  C’est toujours sympathique d’avoir un retour pour confirmer les bonnes réceptions des commandes

  • Créer l’état : “Messages

eedomus_messages

Mise en place du script sur la box eedomus

Pour mettre en place le script sur la box eedomus suivez les étapes suivantes:

Download

  • extraire du fichier ZIP le fichier execute_cmd.php
  • modifier le script pour référencer les id des 3 périphériques créés précédemment:
//Id de l'état virtuel contenant la liste des numéros autorisés (Commandes Externes Sources)
$phone_id = 111111;

//Id de l'état virtuel contenant les actions autorisées (Commandes Externes)
$action_id = 222222;

//Id de l'état virtuel contenant les messages reçus et communiqués à la box (Messages)
// est utile pour le deboguage et peut être supprimé par la suite
$log_message_id = 333333;

http://192.168.0.xx/script/

En remplaçant 192.168.0.xx avec l’adresse IP de votre eedomus

  • appuyer sur “Choisissez un fichier”
  • indiquer le chemin d’accès vers le fichier précédemment téléchargé et modifié et appuyer sur “ouvrir” pour valider
  • installer le script en appuyant sur le bouton “Envoyer”
  • Le script apparaît alors dans la liste des scripts disponibles sur votre eedomus

eedomus_upload_script_installe

Il est maintenant disponible est opérationnel.  La dernière brique est en place.  La discussion peut avoir lieu avec votre maison.

Conclusion

Cette manière de faire est assez souple.  Le paramétrage des règles, des réponses et des numéros de téléphones se fait via l’interface eedomus que vous avez l’habitude de manipuler. Le seul moment où vous devrez éventuellement vous pencher sur le script PHP c’est pour éventuellement rajouter des synonymes.

Elle vous permet de bénéficier d’une porte d’entrée de secours en cas de défaillance de votre connexion à Internet.  Vous pouvez par ce biais mettre un peu plus à contribution une passerelle SMS que vous auriez installé pour émettre des SMS depuis votre box domotique vers vos différents téléphones.

Par contre, par construction, si 2 smartphones envoient un SMS en même temps il y a une infime chance que la réponse du premier SMS reçu soit communiqué à celui qui a envoyé le SMS en second.  Cette chance est tout de même infime mais existe car les téléphones ne sont gérés que par un seul état dans l”exemple de mise en oeuvre présenté aujourd’hui.

Au CES de Las Vegas en janvier dernier, LG avait fait sensation en proposant un système de pilotage de son électroménager via langage naturel.  Ils faisaient appel à une application dédiée et un serveur dans le cloud LG.  Ici la solution permet la même chose mais tout est hébergé chez vous et la solution fonctionne avec n’importe quel téléphone pourvu qu’il ait accès aux SMS.

A vous maintenant d’inventer la communication avec votre maison.  Après la @MaisonQuiTweet, voici la maison qui SMS!

eedomus-sms

14 Comments

  1. […] A la maison, la passerelle SMS a été installée dans un premier temps afin de permettre à ma domotique de pouvoir me remonter des informations par ce biais. A l'époque, j'avais entrepris le développement qui consistait à utiliser la passerelle dans l'autre sens c'est à dire pour une communication du smartphone vers la domotique. Le but derrière cela était de me permettre de piloter ma box domotique via des SMS. Le terme passerelle SMS est tout à fait exact même si sa mise en oeuvre est peu orthodoxe bien que terriblement efficace car basée sur un vieux Smartphone recyclé sur lequel l'application SMS Gateway fait merveille. Le temps me manquait pour terminer les développements (la vie, le travail, le blog,…). La semaine dernière, les "vacances" méritées à l'issue du concours m'ont permis de terminer et de tester la solution envisagée. C'est la mise à jour récente de la box eedomus datée du 7 avril 2014 qui m'a remis le pied à l'étrier. Si vous souhaitez piloter votre box eedomus avec des SMS, je vous propose la solution suivante.  […]

    28 avril 2014
    Reply
  2. Avatar photo Enr37 said:

    Sympa et bonjour les “vacances” pour le boulot effectuė ^^

    Ca me rappelle en plus compliqué le myplug Orange. Un point sympa sur ce dernier cependant! en ecrivant “memo” celui ci renvoit une recap des commandes, la tienne ferait sans doute plus de 160 caracteres. Mais si au jour le jour tu utilises l appli, lors de tes vacances estivales au kazaksthan, tu auras certainement oublié celles ci. Ce “memo” est pratique 😉

    28 avril 2014
    Reply
  3. Aurel64 said:

    Enorme.
    Merci beaucoup pour ce tuto. Ca fonctionne nikel.
    Adopté à 100%

    29 avril 2014
    Reply
  4. Antislash said:

    Bonjour,

    Superbe idée et très bon tuto. Je viens de le mettre en œuvre.

    Je me permet de te signaler un problème que j’ai rencontré avec les synonymes : la fonction sdk_synonyme ne fonctionnait pas correctement. En regardant le code j’ai vu que tu utilisais pour les différents remplacements ( commandes on, off, retour temp, … ) la même instruction avec la même chaine de caractère en entrée : $chaine )


    $decode = trim(str_replace($recherche, $remplace, $chaine))

    Et comme tu l’appelles plusieurs fois de suite les remplacements successifs s’annulent.

    Pour ma part j’ai remplacé $chaine par $decode à partir de la deuxième instruction str_replace.

    Merci encore pour ce tuto.

    2 mai 2014
    Reply
  5. Nicolas said:

    Merci pour ce tuto qui est très clair et très détaillé.
    Je rencontre toutefois un défaut. Aucune action en cas de SMS entrant.
    Je pense avoir tout fait comme indiqué mais je constate une différence avec une des copies d’écran, celle des commandes externes sources.
    On peut voir qu’il y a un canal lié avec “commande externe individu SMS”. Je n’ai pas ce canal. S’agit’il de “commande externe SMS” ?
    Le défaut vient’il de là ?
    Merci d’avance.

    4 mai 2014
    Reply
  6. Nicolas said:

    Bon j’ai résolu le souci des commandes entrantes. J’avais mis une white list dans sms gateway (qui posait pb du coup :))
    J’ai tout de même un souci, sms gateway ne sait pas envoyer un sms à mon numéro en format : 33611223344.
    Je n’y arrive qu’en format 0611223344 ou 0033611223344.
    Du coup, la réponse automatique en utilisant LAST_VALUE PERIPH_ID n’est pas fonctionnelle. J’ai du rater qqchose encore ! 🙂

    4 mai 2014
    Reply
  7. Nicolas said:

    Je vais arrêter de spammer 🙂
    J’ai résolu le souci en mettant deux 0 dans l’appel à la fonction :
    phone=00[LAST_VALUE PERIPH_ID=111111]

    4 mai 2014
    Reply
  8. […] A la maison, la passerelle SMS a été installée dans un premier temps afin de permettre à ma domotique de pouvoir me remonter des informations par ce biais. A l'époque, j'avais entrepris le développement qui consistait à utiliser la passerelle dans l'autre sens c'est à dire pour une communication du smartphone vers la domotique. Le but derrière cela était de me permettre de piloter ma box domotique via des SMS. Le terme passerelle SMS est tout à fait exact même si sa mise en oeuvre est peu ortho  […]

    9 novembre 2014
    Reply
  9. joe moyiwabu said:

    j’ai vraiment aimer votre site et j’aimerai avoir quel

    18 novembre 2014
    Reply
  10. Ludovic said:

    Mouahaha ça marche !
    Merci beaucoup, c’est trop cool.

    9 mars 2015
    Reply
    • Avatar photo Hervé said:

      Top! Et un utilisateur de domotique heureux un plus!

      10 mars 2015
      Reply
  11. Fabien said:

    Bonjour,

    Je débute sur eedomus, je viens de suivre ce tuto … et apparemment mon sms est bien pris en charge par la gateway qui transmet l’info à l’eedomus car j’ai apres dans l’état Messages :
    “dernière valeur: 33611111111: A NOK on lumiere salon_Valeur Inexistante [on lumiere salon “et je n’ai rien qui se passe, ni mes lampes qui s’allument ni de message de retour … SOS SOS
    Merci d’avance,

    Fabien

    14 décembre 2016
    Reply
  12. gore- said:

    Bonjour,
    Après mise en place, et modification suivant les conseils de Antislash, tout fonctionne parfaitement !
    Un énorme merci pour l’article, comme quoi il est encore d’actualité malgré la date de publication !

    Juste une ou deux questions supplémentaires :
    – Comment est-ce que tu fais pour lister les ouvrant qui sont ouverts ?
    – Etant donné qu’on doit mettre le no dans donnée brute et description, comment pourrait-on répondre “Bonjour jojo” au lieu de “Bonjour 336xxxxx” ?

    Merci encore !

    18 octobre 2017
    Reply
  13. gore- said:

    Re,
    Il y a une autre particularité, je n’ai aps compris tout de suite pourquoi mais c’est plus clair maintenant :
    Dans cette configuration, on ne peut pas demander deux fois la même chose.
    Si on le fait, on n’aura ni action ni réponse.

    Je cherche un contournement, je posterais ici selon ce que je trouve

    19 octobre 2017
    Reply

Laisser un commentaire

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

Prouvez que vous êtes humain: * Time limit is exhausted. Please reload CAPTCHA.