Прямое подключение
Только для продвинутых пользователей!
Для использования прямого подключения вы самостоятельно создаёте приватный навык в Яндекс.Диалогах, который будет напрямую подключаться к вашему Home Assistant (не используя навык Yaha Cloud).
Предварительные требования¶
- Доступность Home Assistant из интернета по доменному имени используя белый IP адрес или сторонние сервисы: Dataplicity, KeenDNS.
- Настроенный HTTPS сертификат. При наличии белого IP адреса можно воспользоваться официальным аддоном Let's Encrypt. При использовании Dataplicity или KeenDNS HTTPS настраивается автоматически. Самоподписанные сертификаты работать не будут.
- Добавленная интеграция Yandex Smart Home в режиме прямого подключения.
Настройка¶
- Установите компонент и добавьте интеграцию используя прямой тип подключения
- Проверьте доступность HA из интернета и корректность настройки компонента
-
Зайдите на dialogs.yandex.ru и создайте диалог (навык) с типом "Умный дом". Желательно это делать из под аккаунта, который планируется использовать для управления умным домом. При необходимости доступ к навыку можно предоставить другим пользователям Яндекса (вкладка Доступ).
-
Заполните параметры (вкладка
Настройки
):
Поле | Значение |
---|---|
Название | Любое (например Home Assistant ) |
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 |
- На вкладке
Настройки
обязательно нажмитеОпубликовать
(для приватных навыков публикация автоматическая и моментальная). В этот момент УДЯ попробует подключиться к вашему Home Assistant, и если у него не получится - появятся ошибки валидации.
Не используйте навык в режиме "Черновик", это может вызывать различные проблемы (дубли уcтройств, ошибки в нотификаторе)
При публикации навыка в журнале Home Assistant возникает ошибка Login attempt or request with invalid authentication
. Это нормально и не влияет на работу компонента.
- Откройте квазар или приложение Дом с Алисой
- Нажмите иконку в правом верхнем углу →
Устройство умного дома
- Найдите в списке и выберите производителя (ищите по названию диалога, который создали ранее)
- Нажмите кнопку
Привязать к Яндексу
, откроется страница авторизации Home Assistant. Рекомендуется создать отдельного пользователя специально для УДЯ и авторизоваться под ним. В этом случае в журнале событий будет видно, когда устройством управлял Яндекс. - Настройте отправку уведомлений об изменении состояний устройств
Уведомления об изменении состояний устройств¶
Для уведомления УДЯ об актуальном состоянии устройств и датчиков необходимо выполнить настройку службы notifier
(нотификатор).
Если этого не сделать, вас ждёт ряд проблем:
- УДЯ будет узнавать актуальное состояние только при входе в устройство или обновлении страницы
- Для датчиков не будет отображаться история изменений и графики, бинарные датчики работать не будут
- Устройства будет невозможно использовать в сценариях УДЯ в качестве условий
- Непредсказуемое поведение команд вида "Алиса, вентилятор" (без указания что именно нужно сделать)
Для настройки понадобятся:
oauth_token
: Получить по этой ссылке. Для получения правильного токена вы должны войти в Яндекс с аккаунта, на котором был создан навыкskill_id
:Идентификатор диалога
на вкладкеОбщие сведения
в консоли Яндекс.Диалоговuser_id
: ID пользователя в Home Assistant под которым выполнялась авторизация при связке аккаунтов, посмотреть вНастройки
→Люди
→Пользователи
→ (выбрать пользователя) →ID
(для видимости раздела включитеРасширенный режим
в профиле пользователя):
-
Добавьте в YAML конфигурацию:
configration.yaml
yandex_smart_home: notifier: # xxx замените реальными значениями - 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
-
Перезагрузите YAML конфигурацию
- Выполните Обновление списка устройств
Проблемы¶
Яндекс не может достучаться до Home Assistant¶
-
Проверьте доступность Home Assistant из интернета через сервис httpstatus.io:
- Вставьте ссылку
https://YOUR_HA_DOMAIN:PORT/api/yandex_smart_home/v1.0/ping
и нажмитеCheck status
. По этой ссылке должно возвращатьсяOK: количество_устройств_отдаваемых_в_УДЯ
- Убедитесь, что возвращается код
200
(столбецStatus codes
) -
Если возвращается
404
:- Компонент Yandex Smart Home не установлен
- Интеграция Yandex Smart Home не добавлена
- В настройках интеграции выбрано облачное подключение
-
Если возвращаются другие ошибки - нажмите на стрелку слева от ссылки, чтобы узнать подробнее. Пример ошибки некорректной настройки SSL сертификата:
- Вставьте ссылку
-
Если сертификат настраивался вручную: убедитесь, что используется fullchain сертификат (в случае штатного аддона Let's Encrypt он в файле fullchain.cer):
- Если 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 с фильтрацией. Попробуйте отключить фильтрацию, если вы её используете.
URL не найден¶
Возможные причины:
- Некорректно задан
Endpoint URL
в настройках навыка - Компонент Yandex Smart Home не установлен
- Интеграция Yandex Smart Home не добавлена
- В настройках интеграции выбрано облачное подключение
Внутренная ошибка навыка¶
Обычно возникает из-за проблем в разрешении IP-адреса из имени.
По состоянию на конец октября 2021 замечено, что без видимой причины могут не работать домены *.tplinkdns.com
(попробуйте использовать другой динамический DNS).
Ошибка [401] Unauthorized¶
Полный текст ошибки: Failed to send state notification: [401] b'Unauthorized\n'
Возникает из-за неверного OAuth токена в параметре oauth_token
в настройках нотификатора.
Для исправления: замените oauth_token
на актуальный, получить его можно по этой ссылке.
Для получения правильного токена вы должны войти в Яндекс с аккаунта, на котором был создан навык.