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

Яндекс Алиса

Голосовое управление реле и просмотр датчиков через Яндекс Алису как умный дом провайдер. После настройки — «Алиса, включи свет на улице» без отдельного навыка.

Что нужно

Сетап делается один раз на проект. После этого все участники могут привязывать свои Yandex-аккаунты.

Шаг 1. Зарегистрировать OAuth-приложение в Яндексе

Открыть oauth.yandex.ru/client/new:

Поле Значение
Название Kavlev Smart Home (любое)
Платформа Web-сервисы
Callback URI https://cloud.kavlev.ru/oauth/yandex/callback
Доступы Smart Home: «Управление умным домом»

После создания получите:

  • Client ID (длинная строка)
  • Client secret (показывается один раз — сохраните)

Шаг 2. Создать навык «Умный дом» в SmartHome Console

Открыть yandex.ru/dev/dialogsСоздать диалогУмный дом.

Заполнить:

Поле Значение
Тип навыка Умный дом
Backend URL https://cloud.kavlev.ru/v1.0/
OAuth: Client ID Из шага 1
OAuth: Client secret Из шага 1
OAuth: Authorization URL https://oauth.yandex.ru/authorize
OAuth: Token URL https://oauth.yandex.ru/token
Доступы Управление устройствами

Сохранить как черновик. Полноценная публикация не нужна — для приватного использования хватает.

Шаг 3. Прописать OAuth-client в облаке

В интеграциях проектаЯндекс Алиса → Подключить:

Поле Значение
Client ID Из шага 1
Client secret Из шага 1
Backend hostname cloud.kavlev.ru (дефолт)

После «Сохранить» — oauth_client записан в БД, backend готов отвечать на запросы Алисы.

Шаг 4. Привязать Яндекс-аккаунт к проекту

В мобильном приложении Яндекс → Устройства → + Добавить → Производитель → Kavlev (имя из шага 2).

Откроется OAuth-flow:

  1. Алиса редиректит на oauth.yandex.ru/authorize
  2. Яндекс просит подтверждения доступа
  3. После подтверждения — редирект на наш cloud.kavlev.ru/oauth/yandex/callback с кодом
  4. Облако обменивает код на refresh_token
  5. Запись linked_accounts создана

После этого Алиса делает discovery-запрос — облако возвращает список реле + датчиков платы в формате Smart Home API.

Шаг 5. Использовать

Попросите Алису:

  • «Алиса, включи свет на улице» — реле name=="Свет на улице" переключится в on.
  • «Алиса, какая температура в спальне» — Алиса прочитает значение dht22_temp-датчика по имени.
  • «Алиса, выключи всё в гараже» — Алиса соберёт реле в группе/комнате «гараж» и пошлёт всем off.

Команды доставляются плате на следующем heartbeat'е (≤ интервала). Для меньшей задержки — включите MQTT.

Маппинг устройств → типов Алисы

Тип платы Тип Алисы Чем управляется
relay devices.types.switch on / off / toggle
relay (свет) devices.types.light on / off + (опц) brightness если PWM
ds18b20, dht22_temp, bme280_temp devices.types.sensor.temperature read-only
dht22_hum, bme280_hum devices.types.sensor.humidity read-only
bme280_pres devices.types.sensor.atmospheric_pressure read-only
analog_input devices.types.sensor (generic) read-only
digital_input devices.types.sensor.open read-only

Маппинг устанавливается через device-теги в облаке → Устройства → детальная. По умолчанию реле — switch, теплоту-датчик — temperature. Для смены типа (например, реле = «свет», не «выключатель») — выбрать вручную.

Что делать если устройство не появилось

  1. В облаке устройства видно? Если нет — проверьте, что плата online.
  2. OAuth-флоу прошёл успешно? Интеграции → Linked accounts — список привязанных Yandex-аккаунтов. Если пусто — повторить шаг 4.
  3. Discovery вернул всё? В Алисе → Устройства → провести вниз для обновления. Если плата new — Алиса перепросит discovery.
  4. Тип устройства не поддержан Алисой? Maps в коде — список в cloud-service/src/cloud_service/voice/yandex/device_types.py. Если ваш тип не в списке — нужно расширить (PR).

Disconnect

В интеграциях проектаЯндекс Алиса → Disconnect:

  • Удаляет oauth_client и все linked_accounts.
  • Алиса теряет доступ к устройствам проекта.
  • В Алисе нужно убрать «Kavlev Smart Home» из связанных навыков (она этого сама не сделает).

Технические детали

  • Discovery POST /v1.0/user/devices — выдаёт все устройства всех плат проекта.
  • Query POST /v1.0/user/devices/query — текущее состояние группы устройств.
  • Action POST /v1.0/user/devices/action — команда плате (через cloud → board → command queue).
  • Push POST .../skill/<skill_id>/callback/state — облако пушит изменения состояния обратно в Алису (свет включился вручную — Алиса узнает).

Подробнее в cloud-service/docs/yandex-smart-home-setup.md.