diff --git a/doc/progress.md b/doc/progress.md index 18fea40..fbefc5e 100644 --- a/doc/progress.md +++ b/doc/progress.md @@ -31,8 +31,23 @@ ### Текущий статус - ✅ Все баги телеметрии задеплоёны - ✅ Ветка `iot-pg-telemetry`, последний коммит `5e3c82d` +- ✅ MQTTX Web протестирован — внешний эмулятор работает через `wss://iot.kube5s.ru/mqtt` - ⏳ Merge в main — когда пользователь скажет +### MQTTX Web — настройки подключения + +| Поле | Значение | +|------|----------| +| Protocol | `wss` | +| Host | `iot.kube5s.ru` | +| Port | `443` | +| Path | `/mqtt` | +| Username | `{namespace}_{deviceId}` (из IoT Console → Credentials) | +| Password | из того же экрана Credentials | +| Topic для publish | `{namespace}/telemetry/{deviceId}` | + +**Важно:** ACL строгий — топик должен совпадать точно. `{namespace}/telemetry/{deviceId}` — не wildcards. + --- ## 2026-04-01 — PG_TEST: создание и отладка lifecycle-тестов для nubes PostgreSQL diff --git a/doc/thinking/2026-04-05.md b/doc/thinking/2026-04-05.md index 3797cb6..7d88114 100644 --- a/doc/thinking/2026-04-05.md +++ b/doc/thinking/2026-04-05.md @@ -49,4 +49,38 @@ Postgres для invocations есть, для IoT телеметрии — нет ### Итог autoTimer теперь не убивается при переключении вкладок. -Останавливается только явным нажатием "Стоп", mqttDisconnect, или nav() (уход со страницы устройства). +Останавливается только явным нажатием "Стоп", mqttDisconnect, или nav() (уход со страницы устройства) + +--- + +## Задача 2 — Подключение MQTTX Web как внешнего эмулятора + +### Анализ инфраструктуры +- Ingress `emqx-mqtt-websocket` уже существовал (создан 20ч назад): `wss://iot.kube5s.ru/mqtt` → emqx-ws:8083 +- TLS сертификат Let's Encrypt на `iot.kube5s.ru` — валидный +- TCP MQTT 1883 торчит наружу через LoadBalancer: `185.247.187.147:31406` +- Nginx правильно настроен: Upgrade/Connection/proxy_http_version 1.1 уже в nginx.conf + +### Проблемы по порядку + +**1. Reconnecting после публикации** +- Версия nginx-ingress 1.12.6 — `configuration-snippet` отключён по умолчанию → моя аннотация была проигнорирована +- Добавил `websocket-services=emqx-ws` и `use-http2=false` аннотации +- НО реальная проблема была не в этом — nginx.conf уже содержал правильные WebSocket заголовки + +**2. not_authorized при публикации (настоящая причина)** +- MQTTX Web по умолчанию предлагает вписать topic в поле subscribe/publish +- Пользователь ввёл `55667` и `5566711` вместо правильного топика +- EMQX ACL жёстко: `sless-ffd1f598c169b0ae_s1` может публиковать ТОЛЬКО в `sless-ffd1f598c169b0ae/telemetry/s1` +- После исправления topic → всё заработало + +### Итог: MQTTX Web работает +- Подключение: `wss://iot.kube5s.ru` port `443` path `/mqtt` +- Username: `sless-ffd1f598c169b0ae_s1` +- Password: из секрета `iot-s1` в namespace `sless-ffd1f598c169b0ae` +- Topic для publish: `sless-ffd1f598c169b0ae/telemetry/s1` +- Данные доходят до bridge → Postgres → REST API ✅ + +### Урок +ACL устроен так, что топик должен совпадать точно с `{namespace}/telemetry/{deviceId}`. +Это нужно явно указывать в документации для пользователей IoT Console..