Install
openclaw skills install yandex-smart-homeУправление устройствами умного дома Яндекса (Алиса) через официальный IoT API. Позволяет получать список устройств, читать их состояние, включать/выключать и управлять параметрами (яркость, температура, режимы и т.д.), а также запускать сценарии. Требует переменную окружения YANDEX_IOT_TOKEN с OAuth-токеном Яндекса.
openclaw skills install yandex-smart-homeУправление устройствами умного дома Яндекса через API https://api.iot.yandex.net.
YANDEX_IOT_TOKEN — OAuth-токен Яндекса с правами iot:view и iot:control.curl (есть в большинстве систем по умолчанию).iot:view и iot:controlhttps://oauth.yandex.ru/authorize?response_type=token&client_id=<ВАШ_CLIENT_ID>YANDEX_IOT_TOKEN=y0_AgAAAA...
BASE_URL=https://api.iot.yandex.net/v1.0
AUTH=Authorization: Bearer $YANDEX_IOT_TOKEN
Используй эту команду в начале, чтобы узнать ID устройств:
curl -s -X GET "$BASE_URL/user/info" \
-H "$AUTH" | python3 -m json.tool
Ответ содержит:
devices[] — список всех устройств с полями id, name, type, capabilities[], properties[]rooms[] — комнаты с устройствами внутриscenarios[] — сценарии с id и namegroups[] — группы устройствВсегда начинай с этого запроса, если пользователь не указал конкретный ID устройства.
curl -s -X GET "$BASE_URL/devices/{DEVICE_ID}" \
-H "$AUTH" | python3 -m json.tool
Возвращает текущее состояние всех capabilities (умений) и properties (свойств, например температура датчика).
curl -s -X POST "$BASE_URL/devices/actions" \
-H "$AUTH" \
-H "Content-Type: application/json" \
-d '{
"devices": [
{
"id": "{DEVICE_ID}",
"actions": [
{
"type": "{CAPABILITY_TYPE}",
"state": {
"instance": "{INSTANCE}",
"value": {VALUE}
}
}
]
}
]
}' | python3 -m json.tool
curl -s -X POST "$BASE_URL/groups/{GROUP_ID}/actions" \
-H "$AUTH" \
-H "Content-Type: application/json" \
-d '{
"actions": [
{
"type": "{CAPABILITY_TYPE}",
"state": {
"instance": "{INSTANCE}",
"value": {VALUE}
}
}
]
}' | python3 -m json.tool
curl -s -X POST "$BASE_URL/scenarios/{SCENARIO_ID}/actions" \
-H "$AUTH" | python3 -m json.tool
devices.capabilities.on_off{
"type": "devices.capabilities.on_off",
"state": {
"instance": "on",
"value": true
}
}
value: true — включитьvalue: false — выключитьdevices.capabilities.range (instance: brightness){
"type": "devices.capabilities.range",
"state": {
"instance": "brightness",
"value": 70
}
}
value — от 0 до 100 (проценты)devices.capabilities.color_setting (instance: temperature_k){
"type": "devices.capabilities.color_setting",
"state": {
"instance": "temperature_k",
"value": 4000
}
}
devices.capabilities.color_setting (instance: rgb){
"type": "devices.capabilities.color_setting",
"state": {
"instance": "rgb",
"value": 16711680
}
}
value — цвет в десятичном формате RGB (16711680 = красный #FF0000)devices.capabilities.range (instance: temperature){
"type": "devices.capabilities.range",
"state": {
"instance": "temperature",
"value": 22
}
}
devices.capabilities.mode{
"type": "devices.capabilities.mode",
"state": {
"instance": "program",
"value": "auto"
}
}
Значения instance: program, work_speed, fan_speed, heat, clean, swing
Конкретные значения value зависят от устройства — смотри в ответе /user/info.
devices.capabilities.toggle{
"type": "devices.capabilities.toggle",
"state": {
"instance": "ionization",
"value": true
}
}
Значения instance: backlight, controls_locked, ionization, keep_warm, mute, oscillation, pause
| Что сказал пользователь | Что сделать |
|---|---|
| «включи свет в гостиной» | найти устройства типа light в комнате с «гостиная» в названии → on_off: true |
| «выключи всё» | on_off: false для всех активных устройств |
| «сделай свет потеплее» | color_setting/temperature_k → уменьшить текущее значение |
| «приглуши лампу до 30%» | range/brightness → value: 30 |
| «поставь 23 градуса» | range/temperature → value: 23 |
| «запусти сценарий "Кино"» | найти в scenarios[] по имени → POST /scenarios/{id}/actions |
| «какие устройства онлайн?» | GET /user/info → отфильтровать online: true |
GET /user/info, найди нужное устройство по имени или комнате.capability есть у устройства в поле capabilities[].POST /devices/actions.action_result.status:
DONE — успех, сообщи пользователю.ERROR — сообщи код ошибки из error_code и error_message.| HTTP-код | Причина | Действие |
|---|---|---|
| 401 | Невалидный токен | Попроси пользователя проверить YANDEX_IOT_TOKEN |
| 403 | Нет прав iot:control | Токен выдан только с iot:view, нужно переполучить |
| 404 | Устройство не найдено | Проверь ID через /user/info |
| 429 | Превышен лимит запросов | Подожди несколько секунд и повтори |
Включить лампу:
curl -s -X POST "https://api.iot.yandex.net/v1.0/devices/actions" \
-H "Authorization: Bearer $YANDEX_IOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"devices":[{"id":"DEVICE_ID","actions":[{"type":"devices.capabilities.on_off","state":{"instance":"on","value":true}}]}]}'
Выключить и уменьшить яркость одновременно (два действия сразу):
curl -s -X POST "https://api.iot.yandex.net/v1.0/devices/actions" \
-H "Authorization: Bearer $YANDEX_IOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"devices": [{
"id": "DEVICE_ID",
"actions": [
{"type":"devices.capabilities.range","state":{"instance":"brightness","value":30}},
{"type":"devices.capabilities.on_off","state":{"instance":"on","value":true}}
]
}]
}'
Список всех устройств с именами и ID:
curl -s "https://api.iot.yandex.net/v1.0/user/info" \
-H "Authorization: Bearer $YANDEX_IOT_TOKEN" | \
python3 -c "
import json,sys
data=json.load(sys.stdin)
for d in data.get('devices',[]):
print(f\"{d['name']:<30} id={d['id']} type={d['type']} online={d.get('online','?')}\")
"