Google Home et IFTTT

Chose promise chose due, après une brève introduction et prise en main de Google Home je vous propose de découvrir comment l’utiliser avec IFTTT.  Dans cet article, nous verrons ainsi comment étendre les possibilités que nous offrent ce produit en le connectant à des systèmes a priori incompatibles. Afin de ne pas s’éparpiller, je vais suivre un cas d’usage simple mais assez complet. Cependant, ne vous inquiétez pas, si vous ne voulez pas mettre en place les mêmes actions il vous sera très facile d’adapter ces instructions à d’autres usages.

Cas d’usage

Mon but est de rendre ma télé connectée pilotable par Google Home. Cette dernière n’étant pas toute jeune, il y a peu de services encore compatibles… Heureusement Home Assistant en fait partie. Nous allons donc tenter de lancer des commandes via Home Assistant lorsqu’une commande vocale est prononcée. Comme il n’y a pas aujourd’hui de lien officiel permettant de lier Home Assistant et Google Home, nous allons passer par IFTTT.

 

Home-assistant + IFTTT et Google Home

Home Assistant + IFTTT et Google Home

 

D’autres méthodes d’interconnexion sont possibles. Il est notamment possible d’émuler un équipement Hue grâce au composant Emulated Hue Bridge. Cependant, dans ce cas, je trouve que cette solution est moins naturelle. Nous explorerons probablement d’autres pistes ultérieurement.

 

API Home Assistant

Si vous ne souhaitez pas travailler avec Home Assistant, vous pouvez passer directement à l’étape suivante.

Prérequis

Pour fonctionner, vous aurez besoin d’une installation Home Assistant fonctionnelle et accessible d’internet. Si ce n’est pas votre cas vous trouverez plus d’informations dans cette série d’articles.

Découverte de votre installation

Pour déclencher des actions partant d’Home Assistant, nous allons utiliser des requêtes HTTP. Dans un premier temps, il est donc important de préparer les requêtes nécessaires. Dans un précédent article (Utiliser l’API REST Home Assistant) nous avions vu comment utiliser ces APIs. Nous allons nous baser sur ce que nous avions appris pour construire nos différents éléments.

Dans un premier temps, identifions le matériel que nous devons contrôler. Avec postman lancez la requête suivante :

GET https://url-home-assistant/api/states

Je vois que mon périphérique est media_player.living_room_tv je peux avoir plus d’informations sur ce dernier avec la requête suivante :

GET https://url-home-assistant/api/states/media_player.living_room_tv

 

C’est un media_player, partant de ce constat nous allons rechercher les actions disponibles pour ce dernier. Lancez la requête suivante :

GET https://url-home-assistant/api/services

Recherchez “domain”: “media_player” et vous aurez toutes les actions qu’il est possible de lancer sur un media_player.

Grâce à ces informations déduisez les requêtes dont vous aurez besoin :

Baisser le son

Adresse de la requête

POST https://url-home-assistant/api/services/media_player/volume_down

Body de la requête

{
"entity_id":"media_player.living_room_tv"
}

 

Augmenter le son

Adresse de la requête

POST https://url-home-assistant/api/services/media_player/volume_up

Body de la requête

{
"entity_id":"media_player.living_room_tv"
}

 

Couper le son

Adresse de la requête

POST https://url-home-assistant/api/services/media_player/volume_mute

Body de la requête

{
"entity_id":"media_player.living_room_tv",
"is_volume_muted" : "true/false"
}

 

Changer de chaîne

Adresse de la requête

POST https://url-home-assistant/api/services/media_player/select_source

Body de la requête

{
"entity_id":"media_player.living_room_tv",
"source" :  "M6"
}

Je pense qu’avec ces quelques requêtes vous avez de quoi vous amuser. Cependant n’hésitez pas à explorer et à tester d’autres éléments.

IFTTT

Côté IFTTT nous allons utiliser le service Webhooks que nous avons déjà abordé ici. Nous allons donc créer une applet du type IF Google Assistant THEN Webhooks.

Gestion du son

Dans un premier temps, mettons en place la gestion du son de notre télévision.

Cliquez sur this pour choisir un service, sélectionnez Google Assistant et choisissez say a simple phrase

IFTTT trigger

IFTTT trigger

Configurez entre une et trois phrases qui déclencheront l’action et pensez bien à sélectionner votre langue.

Configuration applet google assistant

Configuration applet Google Assistant

Ensuite, cliquez sur Create trigger et sélectionnez webhook. Ici, cliquez sur Make a web request

IFTTT: Make a web request

IFTTT: Make a web request

Ensuite, comme l’exemple ci-dessous, configurez le trigger en vous appuyant sur les requêtes que vous avez préalablement préparées. N’oubliez pas d’ajouter ?api_password=votre_mot_de_passe à la fin de l’URL de votre API.

 

Vous n’avez plus qu’a créer deux autres applets sur le même modèle appelant l’API pour baisser le son et pour le couper.

 

Gestion des chaînes

La gestion des chaînes est un peu plus complexe puisque nous allons avoir besoin d’isoler un paramètre dans la phrase. Pour ce faire, IFTTT nous propose d’utiliser les ingredients.

Les APIs Home Assistant demandent que les chaînes soient indiquées d’une manière assez précise. Par exemple pour mettre M6 les termes m6 m 6 ou 6 ne seront pas pris en compte. On voit donc vite le problème qui peut se poser avec de la reconnaissance vocale. Pour pallier celui-ci, j’ai développé un petit Add-on pour Hass.io qui offre des APIs plus flexibles https://github.com/quentinchap/hassio-repo/tree/master/tv-custom-api.

 

Créez une nouvelle applet en sélectionnant cette fois-ci le trigger Say a phrase with a text ingredient.

trigger say a phrase with text ingredient

Trigger say a phrase with text ingredient

La configuration de ce trigger est presque la même que précédemment, il vous suffit juste d’ajouter $ pour symboliser votre paramètre. Par exemple, si je souhaite dire “Ok Google, Zap sur tf1” mon paramètre (tf1) doit être, comme ci-dessous, remplacé par $.

text ingredient IFTTT

Text ingredient IFTTT

Ensuite, sélectionnez une fois encore le service webhook. La configuration de ce dernier ne diffère pas des exemples précédents, vous devez seulement insérer le paramètre nécessaire et l’insérer dans le body de votre requête. Pour ce faire, rien de plus simple. Cliquez sur add ingredient en dessous du champ Body et choisissez TextField. Ainsi, la valeur se cachant derrière le $ que nous avons paramétrée juste avant sera insérée à l’endroit où vous avez ajouté l’ingrédient. Ainsi dans l’exemple ci-dessous, pour la phrase “OK Google, Zap sur tf1” on enverra une requête avec le body :

{
"chaine":"tf1",
"key" :  "key"
}

 

Requête pour changer de chaîne

Requête pour changer de chaîne

 

Conclusion

Vous savez tout ! Vous pouvez dès à présent créer toutes sortes de commandes personnalisées à condition qu’il existe un service IFTTT ou qu’il y ait une API Rest. Il est donc très facile d’étendre les fonctionnalités de notre Assistant, cependant, cette méthode a ces limites.

En effet, la communication est unilatérale. Il n’est pas possible d’avoir un retour d’information sur Google Home 🙁 Par exemple, je n’ai pas aujourd’hui trouvé de moyen, via IFTTT d’avoir la température dans ma maison car mon matériel n’est pas supporté (Hue motion + Hack du Hue Motion ) et que je ne peux pas déclencher Google Home via un autre événement que ma voix.

D’autres méthodes existent. Certaines plus complètes que d’autres mais aussi plus techniques. De plus elles ne sont pas toutes disponibles en français pour le moment. Nous les explorerons très certainement rapidement 😉

J’espère que cet article vous a plu. N’hésitez pas à partager les idées/applications que vous avez mis en place.

 

Avant de partir, n’oubliez pas qu’en ce moment vous pouvez gagner un kit raspberry pi 3 sur notre site ! Cliquez ici pour plus d’information

concours raspberry

Cadre en informatique dans une multinationale je suis un touche-à-tout passionné de nouvelles technologies.
Tu aimes cet article ? Alors partage le Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInPin on PinterestShare on RedditShare on Tumblr

12 réponses

  1. cedb dit :

    Bonjour, merci pour ce tuto. Cependant je bute sur une bêtise, coté IFTTT et webhook, l’applet plante : Applet failed ou skipped (Ingredients
    CreatedAt (none)),d’apres les log il attend l’ingredient. Néanmoins mon Google repond bien aux nouvelles questions parametrées dans IFTTT. Une idée ?

    • Bonjour,
      J’ai déjà rencontré des problèmes similaires. La causes étant dans mon cas un problème de configuration côté webhook.

      Pouvez-vous m’en dire plus sur les configurations de votre applet? (en remplaçant les données sensible bien-sure)

      Merci 🙂

  2. rodymary dit :

    Salut, pour ton retour d’état, pourquoi tu balance pas un simple text-to-speech sur une sonos ou un simple hp relié à un raspberry pi, c’est simple et efficace.

  3. Bonjour,
    Le text-to-speech est une possibilité à laquelle j’ai pensé mais les résultats que j’ai obtenu pour le moment ne sont pas extra… En théorie il est même possible d’utiliser cette méthode directement sur le Google Home puisqu’il est considéré comme étant un media player par home assistant. As-tu essayé cette solution ? Si oui les résultats sont-ils satisfaisants chez toi ?

    Je suis entrain de regarder en détail les solutions possibles mais ce que je voulais dire dans cette article c’est qu’il n’y a pas de moyen “intégré” pour avoir ce type de retour.

    • rodymary dit :

      Non, GH est encore trop jeune pour faciliter ce genre de manip.
      En attendant, utilises tes sonos pour faire causer ta maison, node-sonos-http-api est très simple à installer et à utiliser, avec le choix entre plusieurs moteurs tts de qualité.
      En bonus tu peux t’amuser à faire converser GH et sonos, et créer des scénarii via ta box domotique ou node.red

  4. cedb dit :

    If You say “Éteint le décodeur”, then make a web request :
    Make a web request
    URL :
    http://xxxxxxxxx:8123/api/services/switch/turn_off?api_password=xxxxxxxxxxx
    Method POST
    Content Type(optional) :
    apllication/json
    Optional
    Body(optional) :
    {“entity_id”:”switch.fibaro_system_fgwpef_wall_plug_switch”}

    l’applet est sythematiquement skipped sans ingrédient ( details : Ingredients CreatedAt(none) )
    Je comprend pas…

    • Avez vous testez l’api avec un client REST comme Postman ? Car l’ingrédient manquant n’est pas forcément le problème. De mon côté j’ai systématiquement ce message mais l’applet n’est pas en erreur et tout est ok.

      J’ai tester de mon côté sur un switch et la requête semble bonne (à condition que l’entity_id soit le bon). Êtes vous certain que votre installation est disponible de l’extérieur?

  5. cedb dit :

    Bonjour, suivant vos conseils et après une rapide vérification via Postman, j’ai pu identifier un problème de routage vers home assistant. une histoire de virgule. Que de temps perdu. Dans tous les cas merci pour ce tuto qui me permet desormais de TOUT piloter avec mon Google Home.
    Merci 😉

  6. Content d’avoir pu aider 😉
    A bientôt 🙂

Laisser un commentaire