Облачное подключение¶
http://<ip-платы>/cloud.html — admin-only. Привязать плату к проекту в облачном кабинете.
Это опциональная фича: если хотите удалённый доступ, расшаривание, OTA по кнопке через web — заполняйте. Если только локальная LAN — оставьте пустым.
Форма¶
| Поле | Назначение |
|---|---|
| Cloud URL | Корень облачного сервиса. Для нашего — https://cloud.kavlev.ru/. |
| Project API key | Длинная строка, генерится при создании проекта в облачном кабинете. |
| Heartbeat interval (сек) | Как часто плата шлёт heartbeat. Дефолт 15. Меньше — быстрее доставка команд, больше трафика; больше — наоборот. Диапазон 5..300. |
После сохранения плата сразу пытается отправить первый heartbeat. Если в UI облачного кабинета через 30–60 секунд плата не появилась — проверьте:
- URL — без опечатки, со слешом на конце.
- API key — скопировался целиком (длинный, иногда обрезается при копировании).
- Wi-Fi подключение работает (плата в STA-режиме, не в AP).
- Внешний интернет работает (можете в Настройках → Время увидеть
source: ntpесли NTP подключился).
Как это работает¶
плата ──── каждые 15 сек ──→ POST cloud.kavlev.ru/api/v1/devices/{uuid}/heartbeat
↑ │
│ ▼
│ {pending_commands: [...]}
└────── выполнение команды ───────┘
Тело heartbeat'а:
{
"fw_version": "0.4.7-esp8266",
"ip": "192.168.1.50",
"uptime_sec": 3600,
"interval_sec": 15,
"state": { "devices": [/* relays, sensors */] },
"tasks": [/* короткие саммари */],
"applied_command_ids": [42, 43]
}
Подписан HMAC-SHA256 от project_api_key. Если ключ неверный — облако ответит 401 и не примет данные.
В ответ облако возвращает:
{
"server_ts": 1778080000,
"pending_commands": [
{ "id": 44, "type": "set_relay", "payload": {"device_id": 1, "state": true} }
]
}
Плата выполняет команды и на следующем heartbeat'е возвращает applied_command_ids. У каждой команды TTL 1 час — если плата офлайн, команды копятся; если её нет дольше — облако чистит просроченные.
Что можно делать из облака¶
Когда плата подключена:
- Управлять реле через UI проекта (как с дашборда платы, только удалённо).
- OTA по кнопке — обновить прошивку без USB / без локального доступа.
- Видеть последний heartbeat-state на дашборде проекта.
- Заметки и алерты через email когда условие срабатывает.
- Голосовые ассистенты — Алиса / Маруся / Салют могут управлять реле платы.
Подробнее — Облачный сервис.
Отвязать плату¶
Очистить Project API key в форме и сохранить. Плата перестанет слать heartbeat'ы; в облачном кабинете она через ~5 минут станет "offline" и через сутки помечается как inactive (не удаляется, чтобы можно было вернуть).
Безопасность¶
- API key никогда не передаётся в URL или query string — только в header.
- Каждый heartbeat подписывается. Replay-атаки защищены
X-Device-Ts(отвергается если разница с server time > 60 секунд). - В обратную сторону (cloud → plate) — никакой attack surface, плата сама pull'ит. Никакого port-forwarding'а на плату не нужно.