Stupid House

Интеграция Home Assistant и Алисы по фамилии Яндекс


logo home assistant yandex alisa

Умный дом Яндекс представляет из себя некий аккумулятор разных систем автоматизации, позволяющий управлять устройствами голосовыми командами при помощи Яндекс колонки или приложения Яндекс в телефоне. Имея большое количество готовых плагинов для подключения к различным устройствам, системам умного дома и автоматизации можно за пару минут получить голосовое управление устройствами в своем доме. К сожалению, решения из коробки для Home Assistant нет, но мир не без умных людей на GitHub есть проект Yandex Smart Home custom component for Home Assistant позволяющий выполнить подключение.

 

Необходимые требования

При интеграции умного дома Xiaomi и Yandex вся магия происходит в электронных облаках: отданная голосовая команда обрабатывается в облаке Yandex, затем команда на действие летит в облако Xiaomi и обрабатывается там, далее на шлюз, к которому подключено устройство и, в конечном итоге, на управляемое устройство. При этом, для выбранного региона "Китай" заметен лаг в пару секунд, но Яндекс об этом предупреждает.

При интеграции Home Assistant и Yandex путь от голоса к действию будет короче: отданная голосовая команда обрабатывается в облаке Yandex, а команда на действие летит непосредственно в наш Home Assistant, который перенаправляет команду на устройство. Т.к. облако Яндекс взаимодействует непосредственно с нашим сервером, то сервер Home Assistant должен быть доступен из сети Internet. Требования для интеграции:

  • Необходим белый статический или динамический IP адрес (Данный вопрос решается с интернет провайдером)
  • Необходимо доменное имя второго или третьего уровня (Покупается отдельно или используется сервис DDNS)
  • Необходим SSL сертификат для используемого домена (Как установить SSL сертификат описано здесь)
  • Зарегистрированный Yandex аккаунт
  • При нахождении сервера Home Assistant в локальной сети за NAT, пробросить порт до сервера на маршрутизаторе

 

Настройка интеграции

Подключаемся по SSH к серверу Home Assistant. В каталоге настроек .homeassistant создаем папку custom_componеnts. Для систем, установленных на Ubuntu по этой статье и Raspberry Pi с установленным Home Assistant вручную, будет так:

$ sudo mkdir /home/homeassistant/.homeassistant/custom_componеnts

Скачиваем архив с компонентами:

$ sudo wget https://github.com/dmitry-k/yandex_smart_home/archive/master.zip -P /home/homeassistant/

Распаковываем и копируем папку yandex_smart_home в папку custom_components:

$ sudo unzip -a /home/homeassistant/master.zip
$ sudo cp -r /home/homeassistant/yandex_smart_home-master/custom_components/yandex_smart_home/ /home/homeassistant/.homeassistant/custom_components/

Удаляем ненужные распакованные файлы:

$ sudo rm -r /home/homeassistant/yandex_smart_home-master/

В файл configuration.yaml добавляем строчку:

yandex_smart_home:

Сохраняем, проверяем конфигурацию и перезагружаем Home Assistant.

Заходим на сайт https://dialogs.yandex.ru/developer/ аккаунтом под которым будут работать устройства для управления домом. Создаем новый Диалог -> Умный дом.

yandex create new dialog for smart home

Создаем черновик нового навыка заполняя поля:

  • Название - Отображается в списке доступных навыков при подключении. Вводим любое понятное значение, например, My Home Assistant
  • Backend - Адрес, на который будут отправляться запросы. Выбираем Endpoint URL, ниже в поле вписываем путь до API на нашем сервере. https://_your_home_assistent_addr_:8123/api/yandex_smart_home. Где _your_home_assistent_addr_ - адрес, по которому доступен сервер Home Assistant из сети интернет. 8123 - порт, на котором работает сервер Home Assistant и если сервер находится в локальной сети за NAT, то этот порт необходимо пробросить на маршрутизаторе. Кто-то делает внешний порт 443 и пробрасывает с него в локальную сеть на порт 8123, но лучше иметь единую конфигурацию внутри и снаружи
  • Тип доступа - Приватный. Навык будет доступен только Вам
  • Подзаголовок - Копируем из названия
  • Имя разработчика - Все что угодно
  • E-Mail разработчика - Должен подставиться автоматически ваш адрес Yandex почты, либо указываем вручную
  • Официальный навык - Нет!
  • Описание - Все что угодно
  • Иконка - Загружаем иконку размером 224х224 пикселя. Иконку нужного размера и в нужном формате можно взять здесь https://commons.wikimedia.org/wiki/File:Home_Assistant_Logo.svg
yandex create dialog for home assistantyandex create dialog for home assistant 02

Теперь настраиваем связку аккаунтов - в пункте Авторизация кнопка Изменить. Заполняем необходимые поля:

  • Идентификатор приложения - https://social.yandex.net/
  • Секрет приложения - Вписал слово password, на сколько понимаю в нашем случае это поле роли не играет
  • URL авторизации - https://_your_home_assistent_addr_:8123/auth/authorize
  • URL для получения токена - https://_your_home_assistent_addr_:8123/auth/token
  • URL для обновления токена - https://_your_home_assistent_addr_:8123/auth/token
yandex create diaolig for home assistant 03

Сохраняем все настройки и переходим на вкладку Тестирование. В тестировании выбираем Черновик, в окне Умный дом нажимаем +, добавить Другое устройство. В списке выбираем созданный нами диалог и нажимаем кнопку Обновить список.

yandex test dialog

Если всё выполнено верно, то должен загрузиться список устройств из вашего Home Assistant.

yandex test dialog for home assistant

Помимо управляемых устройств, будут загружены созданные помощники, датчики и скрипты. Датчики и скрипты отображаются как Умное устройство, но если в них зайти, то датчики показывают значение, а у скриптов доступна кнопка на выполнение.

yandex test dialog for home assistant 03

Если в настройках Диалога всё создано верно, но подключения не происходит, то попробуйте удалить диалог и создать заново, у меня подключился только со второго раза.

После удачных тестов, возвращаемся на вкладку Настройки и нажимаем кнопку Опубликовать. Заходим в телефоне в приложение Яндекс -> Устройства -> Управление устройствами, если устройства не подтянулись во время тестирования, то нажимаем кнопку + -> Другое устройство, в списке производителей находим созданный наш навык.

 

Детальная настройка интеграции

Если в файл configuration.yaml добавить только строчку yandex_smart_home:, то в устройства умного дома от Yandex приедут все устройства, датчики, выключатели, вспомогательные элементы, их свойства, а также сцены и скрипты. В основном много что оказывается в умном доме Яндекса из Home Assistant совершенно ненужно. При удалении лишнего и последующем обновлении устройств всё лишнее прилетает обратно. В файле конфигурации можно настроить только те устройства, которыми необходимо управлять голосом, в основном это розетки и выключатели.

Для добавления в Yandex Smart Home только необходимых устройств файл конфигурации configuration.yaml будет выглядеть следующим образом:

yandex_smart_home:
  filter:
    include_domains:
      - light
      - switch
    include_entities:
      - input_boolean.room_heating_automatic_on_off
      - scene.room_nightlight
      - script.home_turn_off_all_lights_in_home
    exclude_entities:
      - light.gateway_light_xxxxxxxxxxxx
      - switch.xiaomi_switch_1ch_room_bed_switch
      - switch.xiaomi_relay_2ch_switch_l1
      - switch.xiaomi_relay_2ch_switch_l2
      - switch.ble_esp32_restart
      - switch.zigbee2mqtt_main_join
  entity_config:
    # Helpers
    input_boolean.room_heating_automatic_on_off:
      name: "Автоматический обогрев"
      room: "Комната"
    # Устройства
    switch.xiaomi_switch_2ch_right_switch:
      name: "Верхний свет в комнате"
      room: "Комната"
    switch.xiaomi_switch_2ch_left_switch:
      name: "Светильник в комнате"
      room: "Комната"
    switch.xiaomi_socket_room_heater_switch:
      name: "Обогреватель в комнате"
      room: "Комната"
    light.xiaomi_night_light:
      name: "Ночник в комнате"
      room: "Комната"
    # Сцены
    scene.room_nightlight:
      name: "Успокаивающий эффект"
      room: "Сцены"
    # Скрипты
    script.home_turn_off_all_lights_in_home:
      name: "Отключить весь свет"
      room: "Скрипты"

В разделе Filter мы перечисляем устройства, которые необходимо включить в умный дом Яндекс или наоборот, которые не должны в него попадать.

  • include_domains - включаем в Yandex Smart Home все устройства, относящиеся к перечисленным классам. В нашем случае это light и switch. Это будут все источники света (лампы, светильники и т.д.) и все выключатели, розетки, реле, но приедут только управляемые элементы, ничего лишнего.
  • include_entities - если нам необходимы только какие-то конкретные устройства, а не весь класс, в котором могут быть десятки устройств, то перечисляем их в этом разделе. В конфигурации выше добавлен переключатель, отвечающий за автоматический обогрев комнаты, сцена ночника и скрипт отключающий весь свет в квартире. Сцены и скрипты находятся всегда в состоянии OFF и их можно только включить, поэтому звучит немного смешно фраза: "Алиса! Включи отключение всего света".
  • exclude_entities - здесь перечисляются устройства, которые необходимо исключить из списка добавляемого класса. В нашем случае это светильник шлюза, выключатель у кровати, обе линии реле, переключатель перезагрузки модуля ESP32 и переключатель добавления новых устройств ZigBee2MQTT.

В разделе entity_config описываем свойства добавляемых устройств так, как они будут отображаться в умном доме Яндекса. Обычно задается имя и помещение. Имя устройства обязательно должно быть на русском языке и не более 25 символов, иначе оно попадает в не настроенные устройства. Наименование помещения рекомендую тоже задавать сразу т.к. в Yandex устройства привязываются к помещению, если у устройства не указана локация, то оно попадает в не настроенные.

После настройки всех необходимых устройств проверяем конфигурацию Home Assistant, Configuration -> Server Controls -> Check Configuration, если все хорошо перезапускаем Home Assistant.

При смене конфигурации в Home Assistant в Yandex Smart Home удаляем все ненужные устройства, устройства у которых изменилась конфигурация и устройства, отображаемые как не настроенные. Нажимаем +, выбираем добавить устройство, выбираем наш диалог и обновляем привязку.

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

 

Проблемы, возникающие в интеграции Home Assistant и Yandex Smart Home

Проблема #1. При настройке диалога не происходит подключение к Home Assistant, но всё настроено верно и доступ снаружи до сервера Home Assistant есть.

Решение: Удалить диалог и настроить заново.

Проблема #2. Периодически отсыхает авторизация на Home Assistant, выражается это так: колонка не может управлять устройствами, из интерфейса умного дома Yandex невозможно управлять устройствами, выводится ошибка.

Решение простое в интерфейсе устройств Яндекса нажимаем +, выбираем добавить устройство, выбираем наш диалог и обновляем привязку, в процессе обновления авторизуемся на сервере Home Assistant.

Проблема #3. После обновления Home Assistant отсыхает авторизация, симптомы как в проблеме #2, но решение, описанное в ней, не помогает.

Решение: Необходимо обновить компонент Yandex Smart Home. Смотрим раздел Настройка интеграции описанный выше. В совсем запущенных случаях бывает необходимо удалить диалог и настроить его заново. У меня после удаления диалога из списка в Яндексе удалились не все устройства, при заходе в них выдавало ошибку. Что бы удалить такие устройства сначала необходимо в настройках Yandex Smart Home удалить Комнаты, к которым привязывались устройства, после чего устройства будут отображаться как не настроенные и их можно будет удалить.

Автор: muxa, 29.09.2020
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии