Abavala !!!

IFTTT-2-API: lien entre IFTTT et les API de votre système domotique

Le service en ligne IFTTT commence à prendre de plus en plus d’ampleur et cela grâce aux multiples services qu’il peut rendre aux applications Web mais également aux objets connectés. Il permet de lier entre eux de manière simple et intuitive des services web qui n’auraient jamais pu discuter ensemble. Les objets physiques ne sont pas en reste pour autant. Belkin avait ouvert le bal des objets physiques compatibles avec ce service. Le dernier en date à avoir lié son service avec celui de IFTTT était l’ampoule LED HUE de Philips la semaine dernière. Avant cela il y avait eu la balance communicante de Withings ou bien le bracelet UP de Jawbone.

Et nos systèmes domotiques alors? Si vous vous sentez un peu en reste avec votre domotique et que vous souhaiteriez lui apporter également les multiples services rendus par IFTTT, je vous laisse faire connaissance avec IFTTT-2-API.

Cette application est réservée à des utilisateurs avertis qui sont à même de lire et de comprendre les implications de l’utilisation des API de leur serveur domotique.

Présentation

Comme son nom l’indique IFTTT-2-API est ma proposition pour jouer le rôle de chaînon manquant entre IFTTT et une API…quelle qu’elle soit. Cette application permet de lier les deux services web dans le sens IFTTT => API uniquement. Avec cette application les actions peuvent être déclenchées par IFTTT et être transmises pour être reçues par toute API disponible sur Internet qui respecterait le format:

http://seveurapi.com/aa?param1=val1&param2=val2 …

Bonne nouvelle pour beaucoup de monde! Les box domotiques Eedomus, Zibase, Zipato pour ne citer qu’elles ou bien encore les services web tels que PushingBox exposent de telles API et sont donc éligibles au raccordement! On va maintenant pouvoir connecter tout “Channel” IFTTT avec sa domotique… ou tout autre serveur ayant des API compatibles d’ailleurs.

Comme il est important que les identifiants et autre mots de passe donnant accès à votre maison ne soient pas communiqués à un tiers (nouveau venu sur la scène), ils vont être confiés tout simplement à votre environnement Google. Peut-on confier ces données à Google me direz-vous… Google Drive reste bien du domaine privé ((pour l’instant) pour la politique de l’entreprise américaine.

Pourquoi Google? Et bien tout simplement parce que IFTTT-2-API est un développement maison à base de Google Active Script de votre humble serviteur. Vous n’aurez donc pas besoin d’utiliser un quelconque serveur à la maison. IFTTT-2-API est exécuté directement sur les serveurs de Google… un peu partout dans le monde.

Via IFTTT-2-API, je vous le propose pour que vous puissiez interfacer, si vous le souhaitez, votre domotique avec IFTTT et par ce biais avec la météo, les mails, la bourse, Facebook, Twitter, les flux RSS, Worpress (et son utilisation domotique via HomePress), YouTube, Google Calendar, Foursquare, mais également les produits Withings, Belkin, le bracelet UP et tout ceux à venir…..

IFTTT-2-API est un développement à héberger sur votre compte Google Drive. Il s’agit d’une feuille de calcul Google intégrant un script que j’ai souhaité le plus générique possible pour que vous puissiez y rajouter tout autre API qui n’y serait pas intégrée.

Le principe et la mise en œuvre sont simples. Dans IFTTT il vous faut paramétrer le Channel Google Drive ainsi que tous ceux qui vous intéressent Vous créez ensuite une règle pour lier un Channel avec Google Drive, en fonction de critères que vous aurez défini, en indiquant à IFTTT qu’il doit rajouter dans une feuille de calcul Google un nouvel enregistrement. Cette feuille de calcul c’est IFTTT-2-API. Cet enregistrement qui suit quelques règles particulières est pris en compte par le code que je vous propose. Ce dernier va appeler l’API souhaitée…

Architecture de la feuille de calcul IFTTT-2-API

La feuille de calcul Google Spreadsheet que je vous propose possède plusieurs onglets permettant d’acceuillir la donnée et des scripts contenant l’intelligence pour la traiter.

Les onglets communs sont:

  • Data : l’onglet que recevra les données venant de IFTTT. Il doit impérativement être le premier onglet de la feuille de calcul.
  • DataErr : onglet accueillant les données de Data qui n’ont pas pu être relayées à un traitement pour un serveur paramétré.
  • Param : onglet utilisé pour saisir les paramètres des API des serveurs tels les logins, mot de passe, URL,…

Les onglets spécifique à une API de serveur. Ils sont de la forme:

  • serveur : onglet accueillant les données pour un serveur donné avant d’être traitées
  • serveurLog : onglet accueillant les données pour un serveur donné après avoir été traitées. Le nom est le nom du serveur préfixé par “Log”

Pour chaque serveur on aura donc 2 onglets : Eedomus/EedomusLog, Zibase/ZibaseLog … et ainsi de suite.

Onlget “Data”

Il doit obligatoirement être laissé en première place dans le classeur. En effet, IFTTT ne sait écrire que dans le premier onglet.  Toutes les données qui seront écrites par IFTTT doivent toujours avoir en colonne A le nom du serveur à contacter.

Onglet “DataErr”

Comprend les données qui ont été communiquées par IFTTT mais pour lesquelles le serveur n’a pas été reconnu parmi les serveurs disponibles.

Onglet “Param”

Il contient les données permettant d’identifier un serveur et de construire la partie générique de l’URL d’appel c’est à dire celle qui ne dépend par de la donnée à transmettre. Les quelques règles à respecter sont:

  • les noms des serveurs doivent être obligatoirement dans la première ligne
  • dans la première ligne on ne doit rien écrire d’autre que le nom des serveurs
  • le nom du serveur référencé dans la feuille “Param” doit être le même que le nom de la feuille de données correspondante (l’onglet serveur dans la présentation ci-dessus)
  • le début de l’URL doit être écrit dans la même colonne que le nom du serveur en ligne 6
  • les informations permettant de construite les paramètres de l’URL sont à placer juste en dessous de l’URL. L’entête de donnée en ligne sera utilisée pour comme identifiant de la variable.

L’exemple ci-dessus permet de construire l’URL:

http://api.eedomus.com/set?api_user=1fd45r44rs&api_secret=5gedfgfsdt855etry&

Onglet “Serveur”

Il accueille la data venant de l’onglet “Data” pour un serveur donné. Il suite les règles suivantes:

  • en première colonne on retrouvera l’ensemble des variables de l’URL qui sont spécifiques à la donnée à communiquer. Ces nom de variables sont mis en gras pour plus de lisibilité
  • sur cette première ligne et en dernière colonne on retrouvera toujours la colonne “URL” qui contiendra l’URL de l’API qui sera effectivement appelée.
  • l’onglet doit obligatoirement porter le même nom que le nom du serveur déclaré dans l’onglet “Param” en faisant attention aux majuscules/minuscules.
  • lors de la construction de l’URL les cellules de données vides ne sont pas utilisées pour construire l’URL. Par exemple si la variable “macro” ne contient aucune valeur il n’y aura pas dans l’URL “macro=&”

Onglet “ServeurLog”

Il accueille la data venant de l’onglet “Serveur” pour un serveur donné. Il suite les règles suivantes:

  • le nom de l’onglet est celui du serveur préfixé de “Log”
  • en première colonne on retrouvera l’ensemble des variables de l’URL qui sont spécifiques à la donnée à communiquer. Ces nom de variables sont mis en gras pour plus de lisibilité
  • sur cette première ligne et en dernière colonne on retrouvera toujours la colonne “URL” qui contiendra l’URL de l’API qui a effectivement été appelé suivi de la l’horodatage du traitement ainsi que le retour éventuel du serveur.

Mise en oeuvre de IFTTT-2-API

Installation de IFTTT-2-API sur Google Drive

La mise en œuvre est simple il vous faut:

  • créer un compte Google
  • activer ce compte pour Google Drive
  • créer un dossier “IFTTT”

  • récupérer la feuille de calcul IFTTT-2-API que je vous propose
  • créer une copie de la feuille de calcul

  • renommer la feuille de calcul de “Copie de IFTTT-2-API” à “IFTTT-2-API”
  • placer la feuille de calcul dans le dossier “IFTTT” créé précédemment
  • dans l’onglet “Param” renseigner vos identifiants en fonction des serveurs à utiliser

Ordonnancement de l’exécution de IFTTT-2-API

Pour que les données qui arrivent dans la feuille de calcul soient traitées il faut :

  • choisir “Outils=> Éditeur de Scripts…”

  • cliquer sur l’icône de gestion des déclencheurs pour programmer les déclenchements

  • définir la fréquence de traitement souhaitée pour la fonction “Lancement”
Vous pouvez maintenant fermer la feuille IFTTT-2-API. C’est terminé.  Vous n’aurez plus à intervenir dans la feuille.

Exemple d’utilisation

Pour terminer je vous propose un petit exemple rapide qui consiste à se présenter devant son compteur de gaz avec son smartphone à envoyer un mail avec le relevé et à récuperer automatiquement le relevé de l’indice dans la box Eedomus.

Mettez en place IFTTT-2-API comme présenté ci dessus.

Si l’on crée ensuite l’état virtuel suivant dans la box Eedomus:

Après avoir installé IFTTT-2-API il ne reste plus qu’à programmer la règle sur IFTTT

La règle sera la suivante:

L’ordre de saisie des valeurs dans “Formatted row” sera celui de réception dans la feuille IFTTT-2-API. La première valeur sera obligatoirement le serveur à contacter et les autres seront les valeurs à lui transmettre dans l’ordre des paramètres définis dans l’Onglet qui lui correspond.

Dans mon exemple j’ai saisi:

Eedomus|||periph.value|||34178|||{{Body}}

pour pouvoir communiquer la donnée au serveur Eedomus pour les paramètres :

action, periph_id, value, value_date, update_only, et macro

Comme les valeurs des paramètres value_date, update_only, et macro n’ont pas été renseignés ils n’ont pas été non plus communiqués à la box Eedomus via l’URL résultante:

http://api.eedomus.com/set?api_user=123465&api_secret=abcdef&action=periph.value&periph_id=12465&value=45856&

Pour savoir à quoi ils correspondent je vous conseille de bien lire la documentation du constructeur.

On remarque que pour séparer les données dans à écrire dans la feuille de calcul de IFTTT il suffit de les séparer par 3 caractère ‘|’ successifs (obtenus en faisant la combinaison de touches “Alt Gr + 6”).

Ensuite, il suffit d’envoyer un mail depuis l’adresse que j’ai renseignée lors de mon enregistrement au service IFTTT.com :

  • à: trigger@ifttt.com
  • dont le sujet est: #gaz
  • dont le message est: 45856

Et le tour est joué.

Le mail est parvenu à IFTTT pour être transmis à Google Drive dans la feuille “Data”.

IFTTT-2-API qui l’a communiqué à son tout à la box Eedomus.

Conclusion

Si vous avez suivi l’exemple, vous avez sûrement constaté que l’on n’a pas touché à IFTTT-2-API.  C’est normal.  Une fois paramétré, cet outil vit sa vie et sera le serviteur efficace de vos envies et besoins d’interconnexion.

Vous voici avec un outil souple permettant d’utiliser la puissance de IFTTT au service de votre domotique. Je laisse votre imagination prévoir l’utilisation que vous pouvez en faire. N’hésitez pas à partager vos réalisations.

Dans de prochains articles je vous présenterez quelques exemples d’utilisations avec les différentes box ou services mis en place dans IFTTT-2-API. On peut bien s’amuser.