Управління IoT через Яндекс.Алісу в мобільному додатку
Управління розумним домом через Яндекс.Алісу — це або Розумний дім API (для пристроїв в екосистемі Яндекса), або Skills API (голосовий навик з власним бекендом), або пряма інтеграція через Yandex IoT Core MQTT-брокер. Для мобільного додатка, що хоче управляти пристроями через Алісу, шлях майже завжди такий: OAuth 2.0 → Розумний дім API → управління пристроями.
Розумний дім API та привязка аккаунту
OAuth-авторизація через https://oauth.yandex.ru/authorize з client_id вашого додатка. Scope: iot:view iot:control. Після авторизації додаток отримує access token (живе 1 рік) та refresh token.
Список пристроїв користувача:
GET https://api.iot.yandex.net/v1.0/user/info
Authorization: Bearer {access_token}
Відповідь містить devices з capabilities та properties. Розумна розетка повертає:
{
"id": "device-id",
"name": "Розумна розетка кухня",
"type": "devices.types.socket",
"capabilities": [
{
"type": "devices.capabilities.on_off",
"state": {"instance": "on", "value": true}
}
]
}
Управління — через Actions API:
func turnDevice(id: String, on: Bool) async throws {
let url = URL(string: "https://api.iot.yandex.net/v1.0/devices/actions")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let body: [String: Any] = [
"devices": [
[
"id": id,
"actions": [
[
"type": "devices.capabilities.on_off",
"state": ["instance": "on", "value": on]
]
]
]
]
]
request.httpBody = try JSONSerialization.data(withJSONObject: body)
let (_, response) = try await URLSession.shared.data(for: request)
// Перевіряємо HTTP 207 Multi-Status — кожен пристрій має свій статус
}
Важлива деталь API: відповідь на Actions — HTTP 207 з масивом статусів по кожному пристрою. Команда може частково виконатися: один пристрій включится, інший повернет ошибку DEVICE_UNREACHABLE. Парсинг кожного статусу обов'язковий.
Skills API: голосові команди з власною логікою
Якщо пристрої не в екосистемі Яндекса, потрібен діалог (навик) у Яндекс.Діалогах. Алиса відправляє POST-запити на webhook розробника:
{
"request": {
"command": "включи свет в гостиной",
"nlu": {
"intents": {
"turn.on": {
"slots": {
"room": {"value": "гостиная"},
"device": {"value": "свет"}
}
}
}
}
},
"session": {
"user": {"user_id": "yandex-user-id"}
}
}
Webhook відповідає в межах 5 секунд (жорсткий таймаут) з TTS-текстом для ответу Алисы та опціонально з кнопками або картою для екранів з дисплеєм.
Для привязки аккаунту користувача до навика — OAuth через форму в налаштуваннях навика. Після привязки кожен запит до webhook містить access_token користувача в session.user.access_token.
Yandex IoT Core: пряма MQTT-інтеграція
Для реального часу замість REST підходит Yandex IoT Core — managed MQTT-брокер. Пристрої публікують дані в топики виду $devices/{device_id}/events, мобільний додаток підписується та отримує оновлення.
// Android, Paho MQTT
val client = MqttAsyncClient(
"ssl://mqtt.cloud.yandex.net:8883",
MqttClient.generateClientId(),
MemoryPersistence()
)
val options = MqttConnectOptions().apply {
userName = "unused" // Для JWT-авторизації
password = generateJwt(serviceAccountId, privateKey).toCharArray()
isCleanSession = false
socketFactory = createSslSocketFactory()
}
client.connect(options).waitForCompletion()
client.subscribe("\$devices/+/events", 1) { topic, message ->
val deviceId = topic.split("/")[1]
val payload = String(message.payload)
handleDeviceEvent(deviceId, payload)
}
JWT для авторизації генерується з service account key через алгоритм RS256, термін життя 1 година. Обновлення токена — окремий корутин з таймером.
Особливості для російського ринку
Розумний дім API вимагає аккаунт розробника Яндекса з підтвердженим ІНН для публікації навиків та для реєстрації OAuth-додатка з розширеними правами. Для тестування в період розробки достатньо звичайного аккаунту.
Строки інтеграції: Розумний дім API в існуючий iOS або Android додаток: 1-2 тижні. Skills API з OAuth-привязкою та webhook-бекендом: 2-3 тижні. IoT Core MQTT-інтеграція з реальними пристроями: 3-4 тижні. Вартість розраховується індивідуально.







