Только для продвинутых пользвателей! Для использования прямого подключения вы самостоятельно создаёте приватный навык в Яндекс.Диалогах, который будет напрямую подключаться к вашему Home Assistant минуя облако.
- Доступность Home Assistant из интернета по доменному имени используя белый IP адрес или сторонние сервисы: Dataplicity, KeenDNS.
- Настроенный HTTPS сертификат. При наличии белого IP адреса можно воспользоваться официальным аддоном Let's Encrypt. При использовании Dataplicity или KeenDNS HTTPS настраивается автоматически. Самоподписанные сертификаты работать не будут.
- Настроенный компонент Yandex Smart Home в режиме прямого (direct) подключения.
-
Ознакомьтесь с разделом подготовка к настройке и выполните настройку интеграции.
-
Проверьте доступность HA из интернета и корректность настройки компонента
-
Зайдите на dialogs.yandex.ru и создайте диалог (навык) с типом "Умный дом". Желательно это делать из под аккаунта, который планируется использовать для управления умным домом. При необходимости доступ к диалогу можно предоставить другим пользователям Яндекса (вкладка Доступ).
-
Вкладка "Настройки":
Поле Значение Название Любое Backend Endpoint URL: https://[YOUR_HA_DOMAIN:PORT]/api/yandex_smart_home
(пример:https://XXXX.dataplicity.io/api/yandex_smart_home
)Тип доступа Приватный Подзаголовок Любой Имя разработчика Любое Официальный навык Нет Описание Любое Иконка Любая (например эта) -
Вкладка "Связка аккаунтов":
Поле Значение Идентификатор приложения https://social.yandex.net/ Секрет приложения Любой, например: secret
URL авторизации https://[YOUR_HA_DOMAIN:PORT]/auth/authorize
URL для получения токена https://[YOUR_HA_DOMAIN:PORT]/auth/token
URL для обновления токена https://[YOUR_HA_DOMAIN:PORT]/auth/token
-
-
На вкладке "Настройки" обязательно нажмите "Опубликовать" (для приватных навыков публикация автоматическая и моментальная). Не используйте навык в режиме "Черновик", это может вызывать различные проблемы (дубли уcтройств, ошибки в нотификаторе). В этот момент УДЯ попробует подключиться к вашему Home Assistant, и если у него не получится - появятся ошибки валидации.
-
Откройте квазар или раздел "Устройства" в мобильном приложении Яндекс.
-
Нажмите иконку "плюс" в правом верхнем углу, выберите "Устройство умного дома".
-
Найдите в списке и выберите производителя (ищите по названию диалога, который создали ранее).
-
Нажмите кнопку "Привязать к Яндексу", откроется страница авторизации Home Assistant. Рекомендуется создать отдельного пользователя специально для УДЯ и авторизоваться под ним. В этом случае в журнале событий будет видно, когда устройством управлял Яндекс.
-
Настоятельно рекомендуется настроить уведомления об изменении состояний.
Для уведомления УДЯ об актуальном состоянии устройств и датчиков настоятельно рекомендуется выполнить настройку службы notifier
.
Если этого не сделать, УДЯ будет узнавать актуальное состояние только при входе в устройство или обновлении страницы.
Так же однозначно будут проблемы при использовании команд вида "Алиса, вентилятор" (без указания что именно нужно сделать),
так как состояние устройства меняется не только через УДЯ, но и в Home Assistant напрямую.
Кроме передачи состояний notifier
инициирует обновление списка устройств в УДЯ при перезапуске Home Assistant или перезагрузке конфигурации.
Благодаря этому можно не нажимать "Обновить список устройств" при появлении нового устройства или изменении фильтров,
а достаточно просто перезапустить HA или перезагрузить конфигурацию компонента, обновление произойдёт в течение 10-20 секунд.
Иногда УДЯ не подхватывает изменения автоматически. В этом случае необходимо выполнить обновление списка устройств вручную.
Для настройки понадобятся:
-
oauth_token
: Получить по этой ссылке с аккаунта владельца диалога. -
skill_id
: "Идентификатор диалога" на вкладке "Общие сведения" в консоли Яндекс.Диалоги. -
user_id
: ID пользователя в Home Assistant под которым выполнялась авторизация при привязке диалога. Посмотреть в Настройки > Пользователи > (выбрать пользователя) > ID (для видимости раздела включите "Расширенный режим" в профиле пользователя):
Добавить в конфигурацию yandex_smart_home
(xxxx
заменить реальными значениями):
yandex_smart_home:
notifier:
- oauth_token: XXXXXXXXXXXXXXXXXXXXXXXXXXX
skill_id: xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx
user_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Если в диалоге авторизовано несколько пользователей Home Assistant или
# к одному Home Assistant подключено несколько навыков - на каждое сочетание
# диалог/пользователь_HA нужно добавить отдельные записи:
- oauth_token: XXXXXXXXXXXXXXXXXXXXXXXXXXX # запрашивается с аккаунта владельца диалога, в котором авторизован user_id
skill_id: xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx
user_id: yyyyyyyyyyyyyyyyyyyyyyyyyyyy
- Проверьте доступность Home Assistant из интернета через сервис https://httpstatus.io:
-
Вставьте ссылку
https://YOUR_HA_DOMAIN:PORT/api/yandex_smart_home/v1.0/ping
и нажмитеCheck status
. По этой ссылке должно возвращатьсяOK: количество_устройств_отдаваемых_в_УДЯ
-
Убедитесь, что возвращается код
200
(столбецStatus codes
) -
Если возвращается
404
- скорее всего интеграция не установлена или не настроена -
Если возвращаются другие ошибки - нажмите на стрелку слева от ссылки, чтобы узнать подробнее. Пример ошибки некорректной настройки SSL сертификата:
- Если сертификат настраивался вручную: убедитесь, что используется fullchain сертификат (в случае штатного аддона Let's Encrypt он в файле fullchain.cer):
http:
ssl_certificate: /config/acme.sh/YOUR_HA_DOMAIN/fullchain.cer
ssl_key: /config/acme.sh/YOUR_HA_DOMAIN/YOUR_HA_DOMAIN.key
- Если DNS запись добавлялась вручную, убедитесь, что у используемого домена нет AAAA записи (должна быть только A).
Скорее всего часть устройств были добавлены в "Черновик" навыка. Удалите их оттуда вручную через dialogs.yandex.ru/developer (вкладка "Тестирование").
При публикации навыка кнопкой "Опубликовать" могут появляться ошибки валидации. Подробнее об ошибке можно узнать, нажав на стрелочку вниз в правом верхнем углу ошибки.
Если Home Assistant доступен из интернета, но публикация навыка даёт ошибку "Превышено время ожидания ответа", скорее всего проблема в неработающем (или частично работающем) DNSе внутри контейнера Home Assistant.
Такое иногда встречается на NAS (например QNAP). Для исправления:
- Зайдите внутрь контейнера Home Assistant:
docker exec -it homeassistant sh
- Укажите DNS сервер Яндекса:
echo nameserver 77.88.8.8 > /etc/resolv.conf
Исправление актуально только для публикации навыка и не требуется для обычной работы УДЯ.
Другая причина возникновения проблемы - использование Яндекс.DNS с фильтрацией. Попробуйте отключить фильтрацию, если вы её используете.
- Убедитесь, что интеграция включена на странице "Интеграции".
- Попробуйте удалить интеграцию и добавить снова. При настройке обязательно выберите "Прямое подключение".
Обычно возникает из-за проблем в разрешении IP-адреса из имени. По состоянию на конец октября 2021 замечено, что без видимой причины могут не работать домены *.tplinkdns.com
(попробуйте использовать другой динамический DNS).
Попробуйте "Обновить список устройств" в УДЯ, а если это не помогло:
- Включите отладку
- Выполните обновление списка устройств в УДЯ
- В
home-assistant.log
найдите запрос/user/devices
и убедитесь, чтоuser_id
в нём совпадает сuser_id
в конфигурации нотификатора
- Зайдите в диалог на dialogs.yandex.ru/developer
- Вкладка "Тестирование" > выбрать "Опубликованная версия"
- Нажать иконку "Добавить" > "Устройство умного дома" > "Обновить список устройств"
- В окне отладки появится:
Нужно только то, что в строчке Got Response и ниже. Пожалуйста, не включайте строку "Sending request", в ней адрес вашего Home Assistant, пусть эта информация лучше остается в тайне :)
Sending request to provider: GET https://YOUR_HA_DOMAIN/api/yandex_smart_home/v1.0/user/devices Got response from provider XXXXX: 200 {"request_id": .... (большой json)
- Включите отладку через
configuration.yaml
:logger: default: warning logs: custom_components.yandex_smart_home: debug
- Перезапустите Home Assistant
- Выполните "Обновление списка устройств" в УДЯ, в логе Home Assistant появятся строчки:
Нужно только то, что в строчке Response. Если до этих строк есть ошибки, захватите и их тоже.
[custom_components.yandex_smart_home.http] Request: https://YOUR_HA_DOMAIN/api/yandex_smart_home/v1.0/user/devices [custom_components.yandex_smart_home.http] Response: {"request_id": ...