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

MQTT vs REST API

Сравнение двух способов интеграции с Sber Smart Home: MQTT DIY протокол и C2C REST API (webhooks).

Сводная таблица

Параметр MQTT DIY C2C REST API (Webhooks)
Модель Pub/Sub (асинхронная) Request/Response (синхронная)
Инициация Агент подключается к брокеру Облако вызывает webhook вендора
Аутентификация Username/Password (MQTT) Bearer Token (HTTP)
Endpoint mqtts://mqtt-partners.iot.sberdevices.ru:8883 https://partners.iot.sberdevices.ru/v1/...
TLS MQTT over TLS (порт 8883) HTTPS
Регистрация устройств up/config (publish) POST /v1/devices
Регистрация моделей inline model в device POST /v1/models
Отправка состояния up/status (publish) Webhook POST /query (response)
Получение команд down/commands (subscribe) Webhook POST /command (request)
Запрос состояния down/status_request (subscribe) GET /v1/state
Гарантии доставки MQTT QoS HTTP status codes

Ключевые различия payload

Регистрация устройств

MQTT (up/config): устройство с inline model или model_id:

{
    "devices": [
        {
            "id": "temp1",
            "name": "temp1",
            "default_name": "temp1",
            "model_id": "my_temp_sensor"
        }
    ]
}

REST (POST /v1/devices): аналогичная структура, но модели регистрируются отдельно через POST /v1/models.

Состояние устройств

MQTT (up/status): словарь device_id → {states}:

{
    "devices": {
        "temp1": {
            "states": [
                {"key": "temperature", "value": {"type": "INTEGER", "integer_value": "256"}}
            ]
        }
    }
}

REST (GET /v1/state response): идентичная структура.

integer_value

Контекст Тип Пример
C2C REST API (docs) string "integer_value": "220"
MQTT DIY (agent-connect example) number "integer_value": 256

Расхождение в документации

В C2C спецификации integer_value определён как string (long, записанное в виде строки). В примерах MQTT DIY (agent-connect) встречается числовой вариант. Сбер, вероятно, принимает оба формата, но C2C API формально требует строку.

Когда использовать какой протокол

Сценарий Рекомендация
DIY интеграция (Home Assistant, локальный контроллер) MQTT — проще в настройке, не требует публичного endpoint
Коммерческий продукт (облако вендора) REST API — стандартный webhook-based подход
Интеграторы (Wiren Board, zigbee2mqtt) MQTT — нативная поддержка через mqtt-integrators

REST API Endpoints

Метод Endpoint Описание
POST /v1/devices Добавить устройства пользователя
GET /v1/devices Получить список устройств
PUT /v1/devices Обновить устройства
DELETE /v1/devices Удалить устройства
POST /v1/models Добавить модели устройств
PUT /v1/models Обновить модели
GET /v1/state Получить состояние устройств

Webhook Endpoints (реализуемые вендором)

Метод Endpoint Описание
POST /v1/devices Облако запрашивает список устройств
POST /query Облако запрашивает состояние устройств
POST /command Облако отправляет команду на устройство