Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
actions_on_google_et_domotique [2018/03/07 23:11] 88.164.131.165 [Dialogflow] |
actions_on_google_et_domotique [2018/03/18 09:48] (Version actuelle) 88.164.131.165 [Etapes] |
||
---|---|---|---|
Ligne 21: | Ligne 21: | ||
* 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 "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 | * Dans Language sectionner French | ||
+ | |||
+ | {{::trigger.png?200|}} | ||
+ | |||
* Cliquer sur +that pour créer l'action | * Cliquer sur +that pour créer l'action | ||
* Dans le choix du service sélectionner Webhook | * 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 | * 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) | * (ex : http:\\ip_serveur\api\volets?montetous=1) | ||
+ | |||
+ | {{::action.png?200|}} | ||
==== Coté serveur === | ==== Coté serveur === | ||
Ligne 116: | Ligne 121: | ||
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 | 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 | ||
+ | Une fois votre URL paramétré, retournez dans votre intent et activer "Enable webhook call for this intent". | ||
+ | Dès que cette intent sera déclenché, par "monter les volets ...", une requête sera faite votre page. Un POST content des données JSON vers votre page. | ||
+ | Ce JSON contiendra plein d'information dont deux qui nous intéressent, le nom de l'intent et le paramètre. | ||
+ | |||
+ | Il faudra que votre page, réponde à ce post en envoyant un JSON avec deux paramètres "speech" qui correspondra à la phrase que votre Google Home répondra et diplayText qui sera la même phrase. | ||
+ | |||
+ | La class équivalent/serializable en C# est la suivante | ||
+ | |||
+ | <code csharp> | ||
+ | public class JsonReponse | ||
+ | { | ||
+ | public string speech { get; set; } | ||
+ | public string displayText { get; set; } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Voici un exemple en ASP MCV pour le traitement du JSON envoyé par Google | ||
+ | |||
+ | <code csharp> | ||
+ | [HttpPost] | ||
+ | public async Task<JsonReponse> IndexAsync() | ||
+ | { | ||
+ | JsonReponse resp = await DecodeRequest(); | ||
+ | return resp; | ||
+ | } | ||
+ | | ||
+ | async Task<JsonReponse> DecodeRequest() | ||
+ | { | ||
+ | string jsonData = await this.Request.Content.ReadAsStringAsync(); | ||
+ | string question = (string)jObject["result"]["resolvedQuery"]; | ||
+ | string intent = (string)jObject["result"]["metadata"]["intentName"]; | ||
+ | |||
+ | JsonReponse resp = new JsonReponse(); | ||
+ | resp.speech = "Cette demande n'a pas pû être traitée"; | ||
+ | resp.displayText = "Cette demande n'a pas pû être traitée"; | ||
+ | |||
+ | switch (intent) | ||
+ | { | ||
+ | case "question_volets": | ||
+ | resp = DecodeQuestionVolets(jObject); | ||
+ | break; | ||
+ | default: | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | return resp; | ||
+ | } | ||
+ | | ||
+ | private JsonReponse DecodeQuestionVolets(Newtonsoft.Json.Linq.JObject jObject) | ||
+ | { | ||
+ | JsonReponse resp = new JsonReponse(); | ||
+ | resp.speech = "pièce inconnue"; | ||
+ | resp.displayText = "inconnue inconnue"; | ||
+ | |||
+ | Dictionary < string, string> parametres = jObject["result"]["parameters"].ToObject<Dictionary<string, string>>(); | ||
+ | |||
+ | if (parametres.Count > 0) | ||
+ | { | ||
+ | var parametre = parametres.First(); | ||
+ | string piece = parametre.Value; | ||
+ | | ||
+ | if (piece.Contains("chambre")) | ||
+ | { | ||
+ | //Monte le volet de la chambre | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Il peut aussi être utile d'enregistrer les données JSON qui sont envoyées par Google. | ||
+ | Pour cela vous pouvez faire une simple fonction de log pendant votre période de debuggage | ||
+ | |||
+ | <code csharp> | ||
+ | /// <summary> | ||
+ | /// Enregistrement dans un fichier de log | ||
+ | /// </summary> | ||
+ | /// <param name="JsonData"></param> | ||
+ | void log(string JsonData) | ||
+ | { | ||
+ | string directory = @"C:\inetpub\wwwroot\webservice\log"; | ||
+ | if (!Directory.Exists(directory)) | ||
+ | { | ||
+ | try | ||
+ | { | ||
+ | Directory.CreateDirectory(directory); | ||
+ | } | ||
+ | catch (Exception ex) | ||
+ | { | ||
+ | } | ||
+ | } | ||
+ | try | ||
+ | { | ||
+ | File.AppendAllText(directory + @"\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString("HH:mm:ss") + " : " + JsonData + "\r\n\r\n"); | ||
+ | } | ||
+ | catch (Exception ex) | ||
+ | { | ||
+ | } | ||
+ | </code> | ||
+ | L'étape suivante et de publier votre application sur votre Google Home. Pour cela, aller dans le menu "Integrations" cliquer sur Google Assistant puis test. | ||
+ | Vous pourrez tester votre application sur le site mais elle sera aussi deployé sur votre Google Home. | ||
+ | Pour la démarrer il suffira de dire "Ok google parler avec <nom_de_votre_application>" | ||
| |