Ceci est une ancienne révision du document !
Table des matières
Introduction
Le but est d'utiliser Google home pour piloter des équipements domotiques ou récupérer des valeurs lors d'une interrogation.
IFTTT
IFTTT est la solution la plus simple pour piloter un équipement.
Principe de fonctionnement
Vous créez des scénario sur IFTTT avec une condition et un action.
La condition sera une commande vocale et l'action sera l'envoi d'une commande vers un serveur.
Le serveur recevra la commande et pilotera l'équipement de votre maison.
Etapes
Créer un compte IFTTT
Créer une nouvelle applet
Cliquer sur +this pour créer un nouvelle condition
Dans le choix du service sélectionner Google Assistant
Puis sélectionner “Say a simple phrase”
Dans “What do you want to say”, écrivez la phrase qui déclenchera votre l'action (ex : Monte les volets)
Dans “What do you want the Assistant to say in response?”, écrivez la phrase qui sera répondu par votre Google Home (ex : Ok je monte les volets)
Dans Language sectionner French
Cliquer sur +that pour créer l'action
Dans le choix du service sélectionner Webhook
Dans URL, mettez l'URL de la page sur votre serveur qui sera en charge d'actionner votre équipement (ex : http:\\ip_serveur\api\volets?montetous=1)
Coté serveur
Pour ma part j'utilise ASP .NET MCV J'ai créé un contrôleur volets dans lequel j’intercepte l'URL et je vérifie le parametre est bien à “1”. Si c'est le cas, j’exécute une commande qui va faire monter mes volets. Dans mon cas, une trame UDP est envoyée à un application C# qui se charge de faire monter les volets.
public class FreeboxController : ApiController { /// <summary> /// Commandes volets /// </summary> /// <param name="id"></param> /// <returns></returns> public HttpResponseMessage Get() { string montetous = Request.RequestUri.ParseQueryString()["montetous"]; if(montetous == "1") { //Execute une commande permettant de monter les volets Models.Network.UdpSocket.Send("#VOLETS,MONTETOUS\r\n"); } return TextResponse("OK"); } /// <summary> /// Conversion de la réponse en texte simple /// </summary> /// <param name="text"></param> /// <returns></returns> HttpResponseMessage TextResponse(string text) { HttpResponseMessage resp = new HttpResponseMessage(HttpStatusCode.OK); resp.Content = new StringContent(text, System.Text.Encoding.UTF8, "text/plain"); return resp; } }
Cette solution fonctionne très bien mais elle ne permet que d'envoyer une action et pas de recevoir une donnée du serveur.
Exemple, on ne peut pas savoir si les volets sont montés ou descendus.
La solution suivante permet de palier à ce problème.