WikiElectronique

Wiki sur l'électronique et l'informatique

Outils pour utilisateurs

Outils du site


actions_on_google_et_domotique

Ceci est une ancienne révision du document !


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.

Actions on Google

Dialogflow

Actions on Google permet de développer une application pour votre Google Home. En gros, elle remplacera IFTTT que nous avions utilisé avant. L'avantage de cette solution et qu'elle permet un paramétrage plus précis des conditions (Demandes). (Exemple, demander de monter ou descendre le volet d'une pièce en particulier sans devoir recréer une conditions pour chaque pièce et chaque état. La pièce deviendra un paramètre et l'action monter et descendre aussi.

Il y a néanmoins des inconvénients à cette solution : * Les applications ont vocations a être public même si vous pouvez les tester sur votre Google Home de manière privée. Lors du lancement de l'application, votre Google Home vous dira “Ok je lancer la version de test de <nom_de_votre_application> * Il faut invoquer votre application pour l'utiliser. Vous devriez dire “Ok Google parler avec <nom_de_votre_application>. C'est seulement ensuite que vous pourrez l'interroger sur l'état de vos volets.

Etapes

2 menus sont important “Intents” et Entities

  • Intents : Ce sont les intentions/questions/demandes que vous allez envoyer à votre Google Home
  • Entities : Ce soit les parametres variables de vos Intents

Exemple pour une demande du type “Monte les volets du salon.” Monte les volets” ca sera votre demande et “du salon” sera une des valeurs possible de votre groupe d'entities @pieces qui contiendra aussi toutes vos autres pièces. Chaque valeur pourra avoir des synonymes. “du salon, salon, dans le salon etc …”

Ce qui permettra a votre Google Home de reconnaitre toutes les variantes possibles Monte les volets du salon, monte les volets dans le salon, monte les volets salon etc …

* Créer dans Entities, un groupes “pieces” et renseigner les noms de vos différentes pièces * Créer dans Intents un nouvel intent qui s'appellera par exemple “demande_monte_volets” * Dans Training phrases taper “Monte les volets du salon” puis taper “Entrer” * Sélectionner “du salon” et sélectionner dans parametre votre entities “pieces” * Sauvegardez votre intent

Dans intents, vous trouverez deux intent par defaut “Default Fallback intent” qui correspond aux phrases par defaut que vous dira votre Google Home et “Default Welcome Intent” qui correspond aux phrases de lancement de l'application. Vous pouvez personnaliser les deux et trouver des phrases plus amusantes ;)

Maintenant que notre commande est paramétrée, il faut créer l'interface avec notre serveur. Pour cela, il faut aller dans “Fulfillment” et définir l'URL de votre page qui sera en charge de traiter les commandes envoyé par votre Google Home.

Attention, votre page doit être en HTTPS.

Si votre serveur est héberge chez vous et que vous ne souhaitez pas payer pour avoir un certificat SSL, vous pouvez utiliser letsencrypt qui est gratuit: https://letsencrypt.org/ Le certificat n'est valable que 3 mois. Il faudra le renouveler tous les 3 mois. Il existe des systèmes de renouvellement automatique. (Faites recherche sur Google avec Letsencryt ACME). Par ma part j'utilise WIN-ACME qui est surement la solution la plus simple d'utilisation sous Windows https://github.com/PKISharp/win-acme

actions_on_google_et_domotique.1520460681.txt.gz · Dernière modification: 2018/03/07 23:11 par 88.164.131.165