Перейти к содержанию

Прямое подключение

Только для продвинутых пользователей!

Для использования прямого подключения вы самостоятельно создаёте приватный навык в Яндекс.Диалогах, который будет напрямую подключаться к вашему Home Assistant (не используя навык Yaha Cloud).

Предварительные требования

  • Доступность Home Assistant из интернета по доменному имени используя белый IP адрес или сторонние сервисы: Dataplicity, KeenDNS.
  • Настроенный HTTPS сертификат. При наличии белого IP адреса можно воспользоваться официальным аддоном Let's Encrypt. При использовании Dataplicity или KeenDNS HTTPS настраивается автоматически. Самоподписанные сертификаты работать не будут.
  • Добавленная интеграция Yandex Smart Home в режиме прямого подключения.

Настройка

Поле Значение
Название Любое (например 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 (нотификатор).

Если этого не сделать, вас ждёт ряд проблем:

  1. УДЯ будет узнавать актуальное состояние только при входе в устройство или обновлении страницы
  2. Для датчиков не будет отображаться история изменений и графики, бинарные датчики работать не будут
  3. Устройства будет невозможно использовать в сценариях УДЯ в качестве условий
  4. Непредсказуемое поведение команд вида "Алиса, вентилятор" (без указания что именно нужно сделать)

Для настройки понадобятся:

  • 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

  1. Проверьте доступность Home Assistant из интернета через сервис httpstatus.io:

    • Вставьте ссылку https://YOUR_HA_DOMAIN:PORT/api/yandex_smart_home/v1.0/ping и нажмите Check status. По этой ссылке должно возвращаться OK: количество_устройств_отдаваемых_в_УДЯ
    • Убедитесь, что возвращается код 200 (столбец Status codes)
    • Если возвращается 404:

      1. Компонент Yandex Smart Home не установлен
      2. Интеграция Yandex Smart Home не добавлена
      3. В настройках интеграции выбрано облачное подключение
    • Если возвращаются другие ошибки - нажмите на стрелку слева от ссылки, чтобы узнать подробнее. Пример ошибки некорректной настройки SSL сертификата:

  2. Если сертификат настраивался вручную: убедитесь, что используется 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
    

  3. Если 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 не найден

Возможные причины:

  1. Некорректно задан Endpoint URL в настройках навыка
  2. Компонент Yandex Smart Home не установлен
  3. Интеграция Yandex Smart Home не добавлена
  4. В настройках интеграции выбрано облачное подключение

Внутренная ошибка навыка

Обычно возникает из-за проблем в разрешении IP-адреса из имени. По состоянию на конец октября 2021 замечено, что без видимой причины могут не работать домены *.tplinkdns.com (попробуйте использовать другой динамический DNS).

Ошибка [401] Unauthorized

Полный текст ошибки: Failed to send state notification: [401] b'Unauthorized\n'

Возникает из-за неверного OAuth токена в параметре oauth_token в настройках нотификатора.

Для исправления: замените oauth_token на актуальный, получить его можно по этой ссылке.

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