nubes Nubes · IoT {{VERSION}}
nubes

IoT тестирование

Приём и хранение телеметрии устройств: MQTT → шина SQS → PostgreSQL → REST API и консоль. Устройства изолированы по namespace, каждому namespace — отдельная база данных.

Что это и зачем

Платформа принимает телеметрию от устройств по протоколу MQTT (WebSocket с TLS) и доставляет её в базу данных по цепочке:

устройство → wss://…/mqtt (EMQX) → очередь iot-telemetry (shared-sqs) → потребитель → PostgreSQL → REST API / консоль.

Устройства регистрируются через REST API и получают собственный пароль. Каждое устройство публикует только в свой топик {namespace}/telemetry/{device_id} — чужие топики отклоняются брокером.

Порядок действий — 3 шага
1
Регистрация устройства

Устройство создаётся через REST API с Bearer-JWT (структура sub + exp). В ответе — mqtt_username; пароль возвращается только запросом GET по имени устройства.

TOKEN="…jwt…"
curl -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"name":"dev1","device_id":"dev-001"}' \ https://iot.containerk8s.dev.nubes.ru/v1/namespaces/test/iot/devices
curl -H "Authorization: Bearer $TOKEN" \ https://iot.containerk8s.dev.nubes.ru/v1/namespaces/test/iot/devices/dev1
2
Подключение устройства к MQTT

Endpoint wss://exqx.containerk8s.dev.nubes.ru/mqtt, подпротокол WebSocket — mqtt; username {namespace}_{device_id}, пароль из шага 1; публикация в топик {namespace}/telemetry/{device_id}.

import paho.mqtt.client as mqtt
c = mqtt.Client(transport="websockets")
c.ws_set_options(path="/mqtt")
c.username_pw_set("test_dev-001", "<пароль>")
c.connect("exqx.containerk8s.dev.nubes.ru", 443)
c.publish("test/telemetry/dev-001", '{"temp":23.5}')
3
Чтение телеметрии

История сообщений — REST API (Bearer-JWT):

curl -H "Authorization: Bearer $TOKEN" \ "https://iot.containerk8s.dev.nubes.ru/v1/namespaces/test/iot/telemetry?limit=50"
Открыть консоль →
Подключение
MQTT endpoint
wss://exqx.containerk8s.dev.nubes.ru/mqtt
Протокол
MQTT 3.1.1 / 5.0 over WebSocket (subprotocol mqtt), TLS
REST API
https://iot.containerk8s.dev.nubes.ru
Аутентификация MQTT
username {namespace}_{device_id} + пароль из API
Аутентификация REST
Bearer JWT (sub, exp)
Топик устройства
{namespace}/telemetry/{device_id}
Консоль
/console — устройства, эмулятор, телеметрия
Админ-статистика
/iot-admin (токен ADMIN_STATS_TOKEN)
Health
MQTT endpoint (exqx)

https://exqx.containerk8s.dev.nubes.ru — это MQTT-брокер (EMQX), а не веб-страница. Точка подключения — только /mqtt через WebSocket. Открытие этого адреса в браузере или HTTP-запрос вернёт 400 — это штатное поведение (нет WebSocket-подпротокола mqtt).

Ограничения: размер сообщения — до ~250 КБ (лимит SQS 256 КБ); платформа может разрывать внешние WebSocket-соединения примерно раз в 150 секунд — устройства должны автоматически переподключаться (для QoS 1 повторы выполняются клиентом).