Intégration de Google Assistant dans Home Assistant

licence

Etant amené comme certains d’entre vous à trouver d’autres alternatives à IFTTT, j’ai décidé de basculer à des commandes vocales de GA vers HA.

Pour ce tutoriel, j’ai déroulé la procédure officielle : Google Assistant - Home Assistant

Niveau requis

  • Débutant / Intermédiaire / Avancé

Matériels nécessaires / Matériels utilisés / Prérequis

  • L’intégration manuelle de Google Assistant nécessite plus de configurations que la version cloud en raison de la façon dont Google exige que les apps Assistant soient configurées. Donc prenez du temps devant vous, car il faut un peu s’accrocher :wink:
  • Posséder un compte Google
  • Votre configuration HA doit être accessible à l’extérieur avec un nom d’hôte et un certificat SSL.

Créer un compte de service

Vous devrez créer un compte de service Create Service account key qui vous permettra de mettre à jour vos devices sans avoir à reconnecter votre compte (voir ci-dessous).

Si vous ne fournissez pas le compte de service, le service « google_assistant.request_sync » ne sera pas exposé sous HA.

Il est recommandé de configurer cette clé car elle permet également l’utilisation de la commande suivante, « Ok Google, synchronise mes appareils ».

Une fois que vous aurez configuré ce composant, vous devrez appeler ce service (ou commande) chaque fois que vous ajoutez un nouvel appareil dans Home Assistant que vous souhaitez contrôler via l’intégration de l’Assistant Google.

  1. Dans la console Google Cloud Platform, accédez à la page Create Service account key.
  2. En haut à gauche de la page à côté du logo « Google Cloud Platform », sélectionnez votre projet créé dans les actions de la console Google. Confirmez cela en examinant le project_id et assurez-vous qu’il correspond.
  3. Dans la liste de compte Service, sélectionnez « Nouveau compte de service ».
  4. Dans le champ Nom de compte Service, entrez un nom.
  5. Dans le champ ID de compte de service, entrez un ID.
  6. Dans la liste Rôle, sélectionnez Comptes de service > Créateur de jetons de compte de service.
  7. Pour le type de clé, sélectionnez l’option JSON.
  8. Cliquez sur Créer. Un fichier JSON qui contient vos clés sur votre ordinateur.
  9. Utilisez les informations de ce fichier ou directement le fichier pour ajouter les clés « service_account » dans configuration.yaml (cf. le code ci-dessous.
  10. Accédez à Google API Console.
  11. Sélectionnez votre projet et cliquez sur Activer « HomeGraph API ».

Créez un nouveau projet dans Actions on Google console

  1. Cliquez sur New project et donnez un nom à votre projet.
  2. Cliquez sur Smart Home, puis cliquez sur le bouton Start Building.
  3. Cliquez sur Build your Action, puis sur Add Action(s).
  4. Ajoutez votre URL de votre HA : https://xxxxx.duckdns.org:8123/api/google_assistant dans la zone Fulfillment URL
  5. Cliquez sur Save.
  6. Cliquez sur l’onglet Overview, ce qui vous ramène à l’écran des détails de l’application.

'Account linking` est nécessaire pour que votre application interagisse avec Home Assistant

  1. Configurez cette mise en place en cliquant sur Setup account linking sous la section Quick Setup de la page Overview.
  2. Si demandé, laisser les options comme ils sont par défaut No, I only want to allow account creation on my website et sélectionnez Next.
  3. Ensuite, si demandé, pour le Linking type sélectionnez OAuth et Authorization Code. Cliquez sur Next
  4. Entrez ce qui suit : 1. client ID: https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID. (Trouvez votre YOUR_PROJECT_ID en cliquant sur l’icône 3 petits points dans le coin supérieur droit de la console, en sélectionnant Project Settings, votre ID de projet sera répertorié sous l’onglet GENERAL de la page Settings.) 2. Client secret: Tout ce que vous voulez, Home Assistant n’a pas besoin de ce champ. 3. URL d’autorisation (remplacer par votre URL réelle) : https://[YOUR HOME ASSISTANT URL:PORT]/auth/authorize. 4. URL de jeton (remplacer par votre URL actuelle) : https://[YOUR HOME ASSISTANT URL:PORT]/auth/token. Cliquez sur Next, puis Next à nouveau.
  5. Dans Configure your client Scopes, tapez mail et cliquez sur Add scope, puis tapez name, puis cliquez à nouveau sur Add scope.
  6. Ne vérifiez PAS Google to transmit clientID and secret via HTTP basic auth header.
  7. Cliquez sur Next, puis sur Save

Générer l’application

  • Sélectionnez l’onglet Develop en haut de la page, puis, dans le coin supérieur droit, sélectionnez le bouton Test pour générer l’application de test de version préliminaire. Si cette option ne s’affiche pas, accédez plutôt à l’onglet Test, cliquez sur le bouton Settings en haut à droite sous l’en-tête et assurez-vous que On device testing est activé (si ce n’est pas le cas, activez-le).

  • Ajoutez la configuration d’intégration google_assistant à votre fichier configuration.yaml de la manière ci-dessous et redémarrez HA.

google_assistant:
  project_id: home-assistant-votre_project_ID
  service_account: !include le_fichier_json_que_vous avez_genere_precedemment.json
  exposed_domains:
    - script

Se référer au tuto officiel pour affiner vos possibilités HA.

Synchroniser HA dans Google Home

  • Sous l’app Home Cliquez sur + en haut à gauche de l’application, + Configurer un appareil, puis cliquez sur Vous avez déjà configuré des services. Vous devez avoir [test] + votre nom d’application répertorié sous ‹ Ajouter nouveau ›.
    La sélection qui devrait vous conduire à un navigateur pour connecter votre instance Home Assistant, puis rediriger vers un écran où vous pouvez définir des chambres et des surnoms pour vos appareils si vous le souhaitez.

Routines

Enfin, je reprends intégralement le tuto de routines sous l’app Home de @Clemalex pour la dernière étape (merci à lui :wink: ):

Sur l’application Home : image

Tu clique sur Routines :

Puis, en bas sur Gérer les routines :

Puis Ajouter une routine :

Ensuite sur Ajouter des commandes (requis) :

Il faut maintenant renseigner la commande vocale (ou manuscrite) puis cliquer sur OK :

Il faut maintenant cliquer sur Ajouter une action :

Il faut passer sur l’onglet Parcourir les actions populaires , puis cliquer sur la roue dentée pour afficher la fenêtre de choix d’exécution de script :

Il faut cliquer sur le script qui est a lancer puis cliquer sur OK (le script provient de HA) :

Dans la fenêtre de choix des actions, faire défiler tous en bas pour sélectionner Dire quelque chose puis inscrire la réponse de l’Assistant Google :

Une fois la phrase de retour configurer, tu devrais avoir ça :

Il suffit maintenant de cliquer sur Enregistrer tout en haut et ta routine est créé et disponible sur tous les appareils connectés à ce compte :

Autre source que je vous conseille de suivre en parallèle pour trouver des similitudes : le tutoriel de @fredarro et la video de Paradis Artificiels, commençant à dater un peu, on retrouve à peu près les mêmes instructions

Suivi des modifications

7 « J'aime »

Merci pour le partage.
:+1:

1 « J'aime »

Bonjour, j’ai bien réussi à intégrer google assistant dans home assistant mais j’ai été obligé pour cela de ouvrir à toute les adresses mon pare-feu sur le port 443. Je voudrais restreindre par région mais je n’arrive pas à trouver de quelle pays viennent les requêtes de google assistant. Est ce quelqu’un sait ? merci

Super merci beaucoup !

Hello,
Je ne sais pas si cela vous arrive aussi, mais régulièrement j’ai besoin de dire « Ok Google resynchroniser tous les appareils » pour reconnecter HA aux commandes vocales Home Assistant.
Avez-vous également ce genre de souci et avez-vous trouvé une manière de « resynchroniser automatiquement tous les appareils » ?

Salut
Sauf quand j’ajoute/supprime un nouveau truc, j’ai jamais besoin de resynchoniser…

Salut tout le monde, je vois dans le tuto que tu utilises une adresse duckdns.org, est ce que ça fonctionne si on met l’adresse fournie par nabu casa ?

Avec l’abonnement nabucasa, il y a un système dédié pour Google Home qui se veut plus simple que l’installation faite manuellement. La config reste à priori la même mais toute la déclaration coté Google n’est pas nécessaire

2 « J'aime »

Salut !
Apparemment il y a des nouveaux prérequis pour connecter home assistant a google assistant,
J’ai une erreur apres l’étape de login dans home assistant : Could not reach [test.monprojet]

Je suis tout d’abord tombé sur ca :

Mais encore j’ai encore l’erreur.
Il n’y a aucun log quelque part pour avoir plus d’infos ?

Ca marche desolé c’etait une erreure dans un URL

Bonjour, je bloque à cette étape, j’ai ce message

Ok j’ai trouvé il fallait mettre dans configuration.yaml

exposed_domains:
- switch
- light
- sensor
- script

Tout simplement…

Merci pour le tuto, ça fonctionne bien.
J’ai beaucoup d’entité et exposé des domaines complet n’est pas terrible. J’expose donc que les entités une par une. Mais c’est assez fastidieux car contrairement a Alexa ou il suffit juste d’indiqué l’entité , avec google on est a priori obligé d’ajouter au minimum le nom en plus.
Ma question est donc de savoir si un composant customisé permettrait de choisir les entités a exposer (a la façon cloud nabucasa) ou si un programme existe pour générer une liste d’entité avec les noms associés ?
Merci

Hello @bucolo très bonne question.
Si jamais quelqu’un a la réponse, ça m’intéresse aussi :sweat_smile:

Il n’y a pas moyen de faire ça via l’ui, mais on peut parfaitement faire le tri dans le yaml à la place de prendre les domaines complets
Par exemple:

project_id: !secret ghome_project_id
service_account: !include ../.googlehome.json
report_state: true
expose_by_default: false
entity_config:
  ###########################################################################
  #COVERS
  cover.volet_salon_rue_prop:
    name: "Volet rue"
    aliases:
      - "Volet coté rue"
      - "Volets rez de chaussée"
      - "Volets coté ouest"
    room: >
      {{ area_name('cover.volet_salon_rue_prop') }}
  ###########################################################################
  #CLIMATE
  climate.radiateur_amis:
    name: "Radiateur"
    aliases:
      - "Radiateurs étage"
    room: >
      {{ area_name('climate.radiateur_amis') }}
  climate.radiateur_cuisine:
    name: "Radiateur"
    aliases:
      - "Radiateurs rez de chaussée"
    room: >
      {{ area_name('climate.radiateur_cuisine') }}
  ###########################################################################
  #SWITCH
  switch.portillon:
    name: "Portillon"
    room: "Le jardin"
  switch.portail:
    name: "Portail"
    room: "Le jardin"
  switch.pompe:
    name: "Pompe"
    room: >
      {{ area_name('switch.pompe') }}
  switch.brumisateurs:
    name: "Brumisateurs"
    room: >
      {{ area_name('switch.brumisateurs') }}

une fois en place c’est assez figé donc on n’a pas forcement mettre à jour (à la main ou en auto)
A noter que pour certaines entités on arrive à récupérer la « piece » dynamiquement

2 « J'aime »

C’est nouveau, le aliases: et room: ?
Je savait pas que c’était possible :stuck_out_tongue:

1 « J'aime »

Salut.
Oui depuis 2 ans chez moi😂

1 « J'aime »

Ce qui est nouveau depuis la version 2023 c’est que l’alias peut etre ajouté a l’entité par l’ui , d’apres les release-note nabucasa l’utilise mais je sais pas si c’est utilisé par la methode « manuel » .

Tu entends quoi par manuel : via le yaml ? si c’est ça alors je te confirme que c’est là depuis très longtemps

Bonjour. Je vous expose mon problème car je n’ai trouvé aucune info sur le net.

Tout marche très bien entre Home assistant et mes Google home. J’ai fait des routines lié à des scène/scripts de Home assistant, tout marche.

Cependant, si ma conjointe parle aux Google home, cela ne marche pas. Quand je vais sur l’application Google home de son téléphone/compte, je vois bien tout les appareil que Home assistant à remonter, je vois les routines que j’ai créé, mais dans ces routines il n’y a pas la partie où j’appelle la scène/script de Home asssitant. Et je ne peux l’ajouter…

Comment faire pour que ma conjointe puisse avoir ces même routines/accès?

PS : je passe par le système tout fait de nabu casa