IFTTT-2-API: lien entre IFTTT et les API de votre système domotique10 minute(s) de lecture

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:

  • 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.

36 Comments

  1. Cédric said:

    Superbe astuce, Hervé, bravo ! La possibilité de faire des requêtes HTTP depuis IFTTT est justement l’un des gros manques, même si cela figure sur leur todolist. Mais ton astuce contourne parfaitement le problème, c’est top ! 😀

    mardi 21 mai 2013
    Reply
    • Hervé Hervé said:

      C’était effectivement le manque que je souhaitais tenter de combler. Fais-en bon usage!

      mardi 21 mai 2013
      Reply
  2. Super merci !

    J’avais la communication RSS de SARAH vers IFFFT, le IFTTT interne et maintenant je vais pouvoir faire communiquer de IFTTT vers SARAH !

    mardi 21 mai 2013
    Reply
    • Hervé Hervé said:

      Aie, dommage. En effet, L’API a besoin d’être exposée sur Internet pour être joignable. Tu peux peut être faire du pulling de feuille de calcul Google. Elle se transforment très facilement en CSV, TXT, ATOM, RSS, XLS,… Tu pourrais y trouver ton bonheur! (faire Fichier=> publier sur le web…)

      mardi 21 mai 2013
      Reply
    • Cédric said:

      Et si on “expose” cette URL à l’extérieur avec une redirection de port ? Par contre il faudrait sécuriser avec un login et un mot de passe.

      mardi 21 mai 2013
      Reply
  3. enr37 said:

    quel boulot ! bravo !!

    mardi 21 mai 2013
    Reply
  4. Cédric said:

    Bon, bah testé à l’instant en suivant à la lettre le guide, ca marche impec ! Y’a plus qu’à mettre en application avec les évènements de la maison 😀
    Hate de voir les prochains articles pour les exemples 😉

    mardi 21 mai 2013
    Reply
    • Hervé Hervé said:

      Merci! Fais-en bon usage

      vendredi 24 mai 2013
      Reply
  5. Olive said:

    Bravo et merci !
    J’ai pu ajouter LiveNotifier facilement avec titre, message, image et URL de rebond.

    Note: ça n’empêche pas de suggérer des channels à IFTTT sur https://ifttt.com/help/channel_suggestion

    jeudi 23 mai 2013
    Reply
  6. Olive said:

    Bonjour Hervé,

    Petite correction sur le script Code.gs.
    Il faut encoder les valeurs reçues de manière à ce qu’elles soient correctement traitées.

    J’ai eu le problème avec le caractère ‘%’ par exemple.

    Pour cela, utiliser encodeURIComponent() dans la fonction CreeURL() ; remplacer la ligne 222 :
    var sData = feuille.getRange(ligneData,i).getValue();
    sData = encodeURIComponent(sData);
    URL = URL + feuille.getRange(ligneEntete,i).getValue() + "=" + sData +"&";

    vendredi 24 mai 2013
    Reply
    • Hervé Hervé said:

      Bonjour Olive,
      Merci pour ce retour. Toute amélioration est bonne à prendre. J’ai rajouté l’utilisation de “encodeURIComponent” dans le code mis à disposition. Je n’avais pas eu de soucis dans mes différentes utilisations. C’est maintenant plus propre comme cela.
      Merci!
      Hervé

      vendredi 24 mai 2013
      Reply
  7. yayasimpson said:

    on pourrait avoir un exemple avec la ZIBASE si possible ?
    MERCI c’est top .

    lundi 27 mai 2013
    Reply
  8. nico said:

    Bonjour et merci pour le fichier. C’est génial et ça marche vraiment bien !
    Y a-t-il un moyen de ne récupérer que la première ligne de l’email envoyé ?
    Si je fais un mail auto toutes les semaines par IFTTT “quel est ton poids aujourd’hui ?” avec le bon tag dans le sujet, je n’ai qu’à lui répondre pour que le capteur eedomus se mette à jour.
    Par contre il faut faire attention à ne pas garder l’historique parce que tout le texte est envoyé à l’eedomus..
    d’où ma question..
    Merci, et bravo pour ce blog !

    mercredi 29 mai 2013
    Reply
    • nico said:

      Je me réponds : il faut aller voir dans l’article suivant.. tout est expliqué. Reste plus qu’à coder la fonction.

      mercredi 29 mai 2013
      Reply
      • Hervé Hervé said:

        Tu as répondu plus vite que moi ;). Par contre ton idée du mail automatique est pas mal du tout. N’hésites pas à me recontacter dès que tu auras pu coder cela. On pourra le rajouter dans l’outil IFTTT-2-API proposé.

        mercredi 29 mai 2013
        Reply
    • David said:

      Salut,

      Peut tu me dire comment ce que tu as mis comme paramètre pour EEDOMUS dans le champ « Formatted row » car je galère ???

      Merci de ton aide

      mercredi 29 mai 2013
      Reply
      • nico said:

        Bonjour, pour ma part j’ai juste copié collé le tutoriel :
        Eedomus|||periph.value|||34178|||{{Body}}
        et j’ai changé avec 34178 par mon numéro de périphérique.
        Par contre j’ai un peu pagayé avec le tag : j’avais mis un _ dans le texte du tag et a priori ça ne déclenche pas le trigger.

        mercredi 29 mai 2013
        Reply
        • Hervé Hervé said:

          Intéressant cette limitation pour le tag. Je ne l’avais pas encore rencontré. C’est bon à savoir.

          mercredi 29 mai 2013
          Reply
  9. mika said:

    bonsoir
    J’ai une question bete
    j’ai un message comme quoi le caractere | n’est pas valide.
    J’ai copié collé Eedomus|||periph.value|||34178|||{{Body}} dans drive folder path

    merci a vous

    mardi 16 juillet 2013
    Reply
    • Hervé Hervé said:

      Bonsoir,
      Cette donnée ne doit pas être collée dans “Driver folder path” qui est le répertoire dans le quel se trouve le fichier IFTTT-2-API. Cette donnée est à utiliser dans le champ “Formatted row”.
      Ca devrait mieux marcher ensuite 😉

      mardi 16 juillet 2013
      Reply
      • mika said:

        je ne trouve pas Formatted row 🙂

        jeudi 18 juillet 2013
        Reply
  10. christophe said:

    Bonjour Hervé et bravo pour ce tuto qui ouvre beaucoup de portes…
    Après essai sur la zibase, il s’avère que nous n’arrivons qu’a communiquer avec le password+login et non avec le token+device:
    (https://zibase.net/m/zapi_remote_zibase_set.php?login=xxxx&password=xxxx&action=rowzibasecommand&param1=X&param2=X&param3=X&param4=X)

    Seulement le fichier que tu nous mets précieusement à disposition ne fait appel que avec token+device..

    Nous n’avons pas trouver comment tu génères cette url, penses tu pouvoir faire la modification?

    En te remerciant d’avance….

    jeudi 2 janvier 2014
    Reply
  11. Benjamin said:

    Bonjour Hervé et félicitation pour ce tuto.
    Mon problème est que je n’arrive pas télécharger le chiffre IFTTT-2-api. Je me retrouve avec une feuille google vierge.
    Cordialement,
    B

    dimanche 23 novembre 2014
    Reply
  12. nash68 said:

    Bonjour,
    super travail.

    Deux petits “bugs” à signaler sur Eedomus :

    1/ Chez moi il faut mettre HTTPS et non pas HTTP dans l’oglet Param.
    2/ A priori il considère le 0 comme une valeur à ne pas prendre en compte. Cela peut être embêtant avec certains etats virtuels commençant à 0 justement (grrr le temps de comprendre d’où ça venait) 🙂

    mercredi 24 décembre 2014
    Reply
    • Egainmoney said:

      Je confirme

      Très fonctionnel avec un HTTPS et pas de zéro comme valeur pour Eedomus
      me reste plus cas faire la même chose avec les autres compteur

      merci

      samedi 31 octobre 2015
      Reply
  13. Olive said:

    C’est super. Merci pour ce boulot !
    Est ce que c’est possible de l’adapter pour activer ou désactiver un module virtuel sur une box en fonction de la géolocalisation ?
    Dans mon cas c’est pour activer ou désactiver des scénarios sur ma Zipabox en fonction de la présence/absence des occupants. On peut activer ou désactiver un module virtuel au travers d’une requête http. Du coup je voudrais lancer cette requêtte http vi IFTTT-2-API.
    N’étant pas assez calé en informatique je pose ici la question
    Merci d’avance à ceux qui pourraient me répondre.

    vendredi 9 janvier 2015
    Reply
    • kevin said:

      pour la geolocalisation cela est simple utilise l apli ifttt sur le device
      cree le recipe
      if location them google drive

      config google drive)
      upload file from urdans file url saisir l adresse du module https

      mercredi 21 janvier 2015
      Reply
  14. Simon said:

    Peut on faire la meme chose avec la vera lite ?

    jeudi 29 janvier 2015
    Reply
  15. Sébastien said:

    Bonjour,
    Déjà un grand bravo pour cette feuille qui devient un outil extra!
    J’ai un soucis avec des caractères qui sont modifiés.
    J’utilise cette feuille pour envoyer de commande à mon IPX800v4 et la ou je voudrais par exemple:
    “MON URL DE BASE&SetVI=003” (mettre a 1 l’entrée virtuelle N°3)
    j’obtiens:
    “MON URL DE BASE&action=SetVI%3D003&”
    Pour “action” j’ai tout simplement effacé la case mais j’ai toujours le “=” qui se met.
    Du coup pour pallier au problème j’ai créé différentes feuilles en remplaçant “action” par la commande nécessaire.
    Exemple en remplaçant “action” par “SetVI” j’arrive dans ce cas à obtenir “MON URL DE BASE&SetVI=…”
    Mais les commandes API sont nombreuse SetVI=, ClearVI=, SetVO=, ClearVI=, SetR=, … et créer des feuilles pour chacune de ces commandes, c’est un coup à s’embrouiller les pinceaux!
    Quelqu’un à t’il une solution? J’ai lu la remarque d’Olive concernant la ligne 222, modifié mais sans amélioration.

    Merci

    mardi 20 décembre 2016
    Reply
  16. RenardBlanc said:

    Bonjour,
    avez vous une correction possible du script
    il semblerais que ce dernier ne fonctionne plus avec google sheet et je n’arrive pas a comprendre pourquois ??

    et vous

    samedi 15 septembre 2018
    Reply

Laisser un commentaire

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

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