Яндекс Алиса¶
Голосовое управление реле и просмотр датчиков через Яндекс Алису как умный дом провайдер. После настройки — «Алиса, включи свет на улице» без отдельного навыка.
Что нужно¶
- Активный проект в
cloud.kavlev.ruс хотя бы одной привязанной платой. - Аккаунт Яндекс ID для разработчиков (oauth.yandex.ru).
- Доступ к Diadocs/SmartHome Developer Console.
- Роль
adminилиownerв проекте.
Сетап делается один раз на проект. После этого все участники могут привязывать свои 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:
- Алиса редиректит на
oauth.yandex.ru/authorize - Яндекс просит подтверждения доступа
- После подтверждения — редирект на наш
cloud.kavlev.ru/oauth/yandex/callbackс кодом - Облако обменивает код на refresh_token
- Запись
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. Для смены типа (например, реле = «свет», не «выключатель») — выбрать вручную.
Что делать если устройство не появилось¶
- В облаке устройства видно? Если нет — проверьте, что плата online.
- OAuth-флоу прошёл успешно? Интеграции → Linked accounts — список привязанных Yandex-аккаунтов. Если пусто — повторить шаг 4.
- Discovery вернул всё? В Алисе → Устройства → провести вниз для обновления. Если плата new — Алиса перепросит discovery.
- Тип устройства не поддержан Алисой? 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.