50. Home Assistant и Google Home

При использовании данной связки продуктов можно управлять голосом устройствами умного дома, прямо с телефона на операционной системе Android или любом другом подходящем устройстве от Google. Сразу стоит сказать что процесс настройки кому-то может показаться сложным, т.к. статья получилась довольно большая. Но данный случай это как раз когда чем больше материала тем понятнее.


Перед началом настройки следует убедиться в следующем:
- что на сервере Home Assistant настроен удалённый доступ из интернета. (ссылка1, ссылка2 и ссылка3)
- что эти настройки позволяют подключаться серверам Google к Home Assistant. (ссылка3)
- что включена двухэтпная аутентификация. (ссылка)
- что включен режим блокировки адресов с неудачными поптками входа (IP Ban).

Весь процесс настройки состоит из пяти этапов. Каждый из этапов состоит из нескольких пунктов.

1. Создание проекта в консоли Google.

1.1 Заходим на https://console.actions.google.com/ и создаём новый проект


1.2 Даём ему имя, указываем предпочитаемый язык и указываем свою страну.


 1.3 Выбираем категорию для умного дома и начинаем строить, нажав на Start Building.
 
 
1.4 Задаём любое какое хотим имя, нажав на Name your Smart Home action и затем на Save чтобы сохранить изменения.


 
 
1.5 Теперь переходим на вкладку Overview и нажимаем на Build Your Action.
 

Добавляем действия с помощью Add Action(s) и вставляем внешний URL своего Home Assistant. Именно в таком виде, в каком вы настроили к нему доступ.
 
Если через доменное имя и номер порта в конце - то и здесь пишем так же.
https://YOUR_HOME_ASSISTANT_URL:PORT/api/google_assistant
 
Если настроен доступ через туннель Cloudflare (имеются в виду стандартные порты 80 и 443), то номер порта указывать не нужно.
 
Обязательно, важно и критично указать протокол по которому настроено подключение, HTTP или HTTPS.


Снова сохраняем изменения, нажав на Save справа вверху.
 
1.6 Затем в той же части экрана нажимаем на три точки и выбираем Project settings

Здесь нас интересуют имя проекта и его идентификатор. Поэтому просто запишем где-то в стороне  Project Name и Project ID. Они нам пригодятся в будущем
 

1.7 Переходим на вкладку Overview и в разделе Quick Setup нажимаем на Setup Account Linking.


И заполняем строчки следующим образом:
Client ID: https://oauth-redirect.googleusercontent.com/r/имя_проекта
Client Secret: не имеет значения, можно написать что угодно.
Authorization URL: https://HOME_ASSISTANT_EXTERNAL_URL:PORT/auth/authorize
Token URL: https://HOME_ASSISTANT_EXTERNAL_URL:PORT/auth/token

Если настроен доступ через туннель Cloudflare (имеются в виду стандартные порты 80 и 443), то номер порта указывать не нужно.

Нажимаем Next и ещё раз Next.

1.8 В третьем пункте Configure your client (optional), пишем в строке слово "email" (без кавычек) и нажимаем на Add scope, затем так же без кавычек слово "name", и сохраняем изменения нажав на Save.

1.9 Теперь нажимаем на Test справа вверху. Если с настройками доступа и прочими параметрами на этом этапе всё в порядке, то получим сообщение что тест включен.


 

2. Создание служебной учётной записи Google (Service Account).

2.1 Заходим на https://console.cloud.google.com/ и выбираем проект созданный в пункте 1.2

Нажимаем на меню (три полоски в левом верхнем углу) и идём в APIs and services > Credentials.

 

2.2 Кликаем на Create Credentials и выбираем Service account

2.3 Указываем (любое) имя для нового аккаунта и нажимаем на "Создать и Продолжить".


2.4 Из списка ролей выбираем Service Account Token Creator и жмём Done.



2.5 В разделе Service Accounts нажимаем на только что созданную учётную запись

 
 
2.6 И переходим на вкладку ключей. Там выбираем добавление ключа - создать новый.
 

2.7 В открывшемся окне выбираем формат JSON и жмём создать.
 
Файл ключа доступа будет автоматически скачан на компютер. Он понадобится чуть позже. Очень важно хранить его и предотвратить попадание в чужие руки.
 
После скачивания, можно переименовать файл в SERVICE_ACCCOUNT.json

2.8 Здесь же, в поиске сверху находим и устанавливаем Home Graph API




 

3. Настройка Home Assistant

 
3.1 Загружаем в ХА ранее скачанный и переименованный файл ключа.
 

3.2 И добавляем в файл configuration.yaml следующий код:
 
google_assistant:
  project_id: имя_проекта_из_пункта_1.6
  service_account: !include SERVICE_ACCOUNT.json
  report_state: true
 
Сохраняем файл, проверяем конфигурацию и перезагружаем ХА.

4. Публикация мобильного приложения.

До недавнего времени этого пункта в подобных инструкциях не было. Однако, после того как Google решили у себя поменять подход к издателям приложений, приходится делать дополнительные телодвижения. Не исключено что в будущем будут сделаны ещё какие-либо новшества с их стороны.

4.1 Снова заходим на https://console.actions.google.com/ и выбираем свой ранее созданный проект.
Переходим на закладку Deploy и в меню слева Directory information.
Обращаем внимание на надпись сверху.
Приложение не будет опубликовано, пока не будут указаны необходимые данные. Именно их и нужно указать в последующих шагах.

4.2 Заполняем описание:

Connect Google Assistant to a private Home Assistant server.
This Action is intended for personal use. It exposes smart home devices controlled by a local Home Assistant server to Google Assistant and by extension the Google Home mobile app.

4.3 Логотип подбираем самостоятельно, главное обращать внимание на трбуемые размеры изображения.

4.4 Так же указываем адрес электронной почты и имя разработчика приложения, и оставляем ссылку на документ с политикой конфиденциальности.
https://docs.google.com/document/d/12p8vN4kHJQnk3a141mDde_CXAuuqMjJ00FAvdUxW17w/edit?usp=sharing

При желании можно отредактировать языковые настройки и добавить ту же инфромацию в переводе на другие языки. Главное не забыть сохранить все изменения с помощью кнопки вверху справа.

На этом самая замороченная часть позади, и впереди ождает раздел в котором нужно сделать буквально пару действий, но при этом максимально быстро.


5. Настройка Home Assistant в приложении Google Home.

5.1 Прежде всего рекомендуется зайти на внешний адрес своего ХА через дефолтный браузер смартфона. Крайне рекомендуется делать это с помощью Google Chrome.

Всё дело в следующем:

Чтобы повысить безопасность и сократить вероятность проникновения в нашу систему извне, был включен механизм двухэтапной аутентификации. Как известно, при его использовании номер обновлятся каждые 30 секунд. А значит за это время надо успеть нажать пару кнопок в приложении, написать имя пользователя и пароль для входа в ХА и собственно сам код подтверждения. Переключаться между экранами в этот момент нельзя.

Поэтому, заходим в Home Assistant через браузер и сохраняем в своей учётной записи Google имя пользователя и пароль к этому сайту, для последующего автозаполнения. При желании, эти данные потом можно будет стереть.

5.2 Открываем приложение Google Home, Нажимаем на плюс в левом верхнем углу и выбираем "Настроить устройство". На следующем экране тыкаем в "Устройство совместимое с Google"

5.3. В открывшемся списке будут отображены приложения с которыми можно осуществить связь. Нажав на значок увеличительного стекла пишем название созданного ранее приложения. Оно отобразится в списке с пометкой [test] перед именем. Выбираем его.

5.4 Теперь-то и пригодится автозаполнение сделанное в пункте 5.1.

Переключаемся на приложение двухфакторной аутентификации, ждём когда обновится код чтобы иметь максимальный запас по времени. Переключаемся обратно в Google Home и стараемся максимально быстро авторизоваться.

Если все шаги до этого были сделаны точно, и в Гугле не произойдёт никаких изменений за время между публикацией этой статьи и тем когда ты её читаешь, то новое приложение соединится с аккаунтом умного дома от Гугл, и произойдёт односторонняя синхронизация устройств, из Home Assistant в Google Home.

5.5. И немного тонкой конфигурации напоследок.

К уже добавленным строкам в файле configuration.yaml дописываем те домены и устройства, которые хотим чтобы были синхронизированы с Google Home.Как правило, без ущерба для жизнедеятельности и во избежание ошибок, лучше всего разрешить автоматически добавляться устройствам из домена освещения. Остальные же устройства лучше всего добавлять выборочно, вручную.

google_assistant:
  project_id: имя_проекта_из_пункта_1.6
  service_account: !include SERVICE_ACCOUNT.json
  report_state: true
  exposed_domains:
    - light
    - outlet
  entity_config:
      switch.fan_light:
        name: Fan Light
        expose: true

После указания всех необходимых устройств и сохранения файла конфигурации, проверяем настройки системы и перезагружаем её. По завершении загрузки отправим в Google Home обновлённый список устройств.

Заходим в раздел интеграций, там будет присутствовать одна от Google Assistant с именем ранее созданного приложения. У этой интеграции есть всего одна сущность - кнопка односторонней синхронизации. 


На этом всё. Можно говорить телефону "ОК Гугл" и давать команду на управление тем или иным устройством.

Комментарии