IFTTT et Yoctopuce

IFTTT et Yoctopuce

Les YoctoHubs ne peuvent pas se connecter directement au service de cloud IFTTT, mais il est quand même possible d'utiliser nos modules avec cette plateforme à l'aide des Webhooks. Nous allons voir comment publier les valeurs mesurées d'un Yocto-Meteo-V2 sur différents services à l'aide d'IFTTT et des Webhooks.




Avant toute chose, expliquons pourquoi les modules Yoctopuce ne sont pas supportés nativement par IFTTT. Le concept d'IFTTT est de permettre à différents services cloud de pouvoir interagir entre eux, par exemple tweeter le contenu d'un post Instagram. IFTTT ne fait "que" passer des informations d'un cloud à l'autre.

Le problème est que les modules Yoctopuce ne nécessitent pas l'utilisation d'un service de cloud. Il est possible de configurer les YoctoHubs ou le VirtualHub pour poster directement des mesures sur certains services Web, mais aucun n'est supporté par IFTTT.

La solution est d'utiliser les Webhooks IFTTT qui permettent à des objets connectés de poster jusqu'à trois valeurs directement sur IFTTT. Malheureusement, il n'est pas possible d'ajouter le support pour les WebHooks directement dans les YoctoHubs car leur processeur n'est pas assez puissant pour cela. Il est toutefois possible d'écrire un petit script Python qui prend les valeurs des capteurs Yoctopuce et les poste sur IFTTT à l'aide des Webhooks.

Un exemple


Pour illustrer l'utilisation des Webhooks IFTTT, nous allons créer un Applet IFTTT qui, chaque heure, va ajouter une ligne dans une feuille de calcul Google Sheets avec les mesures du Yocto-Meteo-V2 (température, humidité et pression atmosphérique).

Pour se faire, nous allons écrire un petit script en Python qui va lire les valeurs du Yocto-Meteo-V2 et les poster sur IFTTT à l'aide des Webhooks. Il faudra aussi configurer une Applet IFTTT qui ajoutera ces mesures à une feuille de calcul Google Sheets.

Les mesures sont transmises à IFTTT grâce aux Webhooks et les valeurs sont ensuite tranférées à Google
Les mesures sont transmises à IFTTT grâce aux Webhooks et les valeurs sont ensuite tranférées à Google



Configurer l'Applet


Avant de s'attaquer au code Python qui va poster les valeurs des capteurs du Yocto-Meteo-V2 sur IFTTT, il faut créer une Applet.

Une fois loggé sur le site IFTTT, il faut choisir "create" et sélectionner le service Webhooks comme trigger (la partie If This).

  



Il faut ensuite nommer ce trigger. Ce nom permet de différencier les différents Webhooks et sera utilisé plus tard dans notre script Python. Pour notre exemple, nous allons l'appeler yocto_meteo_measures.



Il faut ensuite configurer la partie "Then That" de l'Applet. Dans notre cas, on sélectionne Google Sheets. Le wizard s'occupe de l'authentification auprès de Google et nous demande ce qu'il faut faire avec les valeurs postées. Dans notre cas, on veut simplement ajouter une ligne à une feuille de calcul "IFTTT_Maker_Webhooks_Events".

 



Le dernier panel affiche un résumé de l'Applet.



Tester le Webhook


La deuxième étape consiste à retrouver les paramètres du Webhook et le tester. Pour ce faire, il faut aller dans le menu My services et ensuite choisir Webhooks, ou plus simplement aller sur la page https://ifttt.com/maker_webhooks.

Cette page liste tous les Applets qui utilisent des Webhooks. Pour tester les Webhooks et pour retrouver les paramètres à utiliser dans notre script Python, il faut cliquer sur le bouton Documentation.



Ce bouton ouvre un popup qui affiche la clef à utiliser lors de la requête pour le Webhook.



Il est aussi possible de tester directement l'Applet en remplissant les champs event, value1, value2 et value3. Dans notre cas, on va simplement copier la clef que l'on va utiliser dans notre script Python.


L'application Python


Il ne reste plus qu'a écrire notre script Python. Le code est très simple, nous avons simplement modifié l'exemple de la documentation du Yocto-Meteo-V2. Au lieu d'afficher les valeurs des trois capteurs,ll il les poste sur IFTTT à l'aide de la fonction ifttt_webhook.

import requests

def ifttt_webhook(webhook_key, ev_name, first, second, third):
    report = {"value1": first, "value2": second, "value3": third}
    res = requests.post("https://maker.ifttt.com/trigger/" + ev_name + "/with/key/" + webhook_key, data=report)



Cette fonction a 5 paramètres: La clef du Webhook, le nom du Webhook, et les 3 valeurs à transmettre. Avec ces 5 valeurs, elle forge un requête HTTP qui est envoyée à IFTTT.

Note: Si vous n'avez jamais utilisé l'API Yoctopuce, nous vous recommandons de commencer par notre tutoriel "Comment débuter en Python avec des modules Yoctopuce".

Le reste du code est du classique Yoctopuce: On utilise YAPI.RegisterHub pour accéder aux modules présents sur les ports USB de la machine, et on énumère les fonctions disponibles à l'aide des méthodes FindXXX et FirstXXXX.

Notez que nous avons installé la librairie Yoctopuce à l'aide de PyPI et par conséquent nous utilisons la syntaxe from yoctopuce.yocto_XXX import * pour les imports.

import requests
from yoctopuce.yocto_temperature import *
from yoctopuce.yocto_humidity import *
from yoctopuce.yocto_pressure import *


def ifttt_webhook(webhook_key, ev_name, first, second, third):
    report = {"value1": first, "value2": second, "value3": third}
    res = requests.post("https://maker.ifttt.com/trigger/" + ev_name + "/with/key/" + webhook_key, data=report)


def main():
    errmsg = YRefParam()
    # Setup the API to use local USB devices
    if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
        sys.exit("init error" + errmsg.value)

    humSensor = YHumidity.FirstHumidity()
    if humSensor is None:
        print('No Yocto-Meteo-V2 connected on USB')
        return
    m = humSensor.get_module()
    serial = m.get_serialNumber()
    pressSensor = YPressure.FindPressure(serial + '.pressure')
    tempSensor = YTemperature.FindTemperature(serial + '.temperature')

    while True:
        ifttt_webhook("fxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXGX",
                      "yocto_meteo_measures",
                      tempSensor.get_currentValue(),
                      pressSensor.get_currentValue(),
                      humSensor.get_currentValue())
        msdelay = 60*60*1000
        YAPI.Sleep(msdelay)

if __name__ == '__main__':
    main()



Une fois le script lancé, on peut vérifier qu'IFTTT ajoute bien une ligne dans notre fichier Google Sheets:

Les mesures se retrouvent bien dans notre fichier Google Sheets
Les mesures se retrouvent bien dans notre fichier Google Sheets




Conclusion


Comme nous venons de le voir, il est possible de déclencher des événements IFTTT à partir de modules Yoctopuce en utilisant un script Python. Nous avons utilisé Python, mais il est tout à fait possible d'utiliser n'importe quel autre langage de programmation que nous supportons ou même un shell script et la ligne de commande.

Notez que l'on a parlé uniquement de la manière de déclencher un événement depuis un module Yoctopuce. Utiliser un module Yoctopuce en sortie d'une Applet IFTT, par exemple changer la couleur d'un Yocto-Color-V2, est plus compliqué. En effet, il faut implémenter un serveur Web qu'IFTTT puisse contacter directement. En dehors du code qui est plus compliqué que notre petit exemple, il faut que la machine ait un adresse publique ou avoir configuré son routeur pour qu'il redirige le trafic HTTP vers la bonne machine. Nous ne trouvons pas cette solution très élégante et on réfléchit à une alternative...

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.