Удаленный доступ к MQTT брокеру

У меня стоит задача организовать прием и передачу информации на MQTT брокер контролера для разработчиков приложения. Подскажите, пожалуйста, есть ли сейчас возможность получить доступ к mqtt брокеру контролера через wb-cloud? Или надо настраивать доступ через OpenVPN для таких целей? Или может лучше использовать пересылку сообщений на внешний MQTT брокер? Задача стоит отслеживать статус топиков и передавать команды по нескольких контроллерам, поэтому хотелось бы использовать wb-cloud если это возможно. Какой бы вы способ посоветовали в моем случае?

Добрый день.

Да, можно. Веб-интерфейс при работе через облачный сервис имеет доступ через /mqtt URL, используя Web socket. Но как можно использовать этот же механизм в сторонних приложениях - не подскажу, не пробовал.

Возможно, но не совсем соответствует задаче.

Да, интеграторы так делали - это вполне работает.

Спасибо за ответ. Пытаюсь протестировать связь через WebSocket в Postman, но не удается установить соединение, несмотря на то, что получаю статус 101 Switching Protocols. Получаю следующую ошибку:

**Error:** Invalid Sec-WebSocket-Accept header

###### Handshake Details

Request URL: https://ahh6gwts.http.wirenboard.cloud/mqtt

Request Method: GET

Status Code: 101 Switching Protocols

▶Request Headers

sec-websocket-version: 13

sec-websocket-key: dY2QeIy5olJ8O5x9r123yA==

Connection: Upgrade

Upgrade: websocket

cookie: tunnel_key=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiODY1ODlkZi02NWUxLTQ1MWEtYmU5Ni1iNTFlMDEwZDZhNjgiLCJpYXQiOjE3NjM3MjA5MDUsImV4cCI6MTc2MzcyMTgwNSwidHVubmVsX2lkIjoiM2QxMmVkNGItZjE4NC00YmI2LTkzZWUtYmUwMGYxMTZmODBkIiwidHVubmVsX3BvcnQiOiI0NzI2MyIsInR1bm5lbF90eXBlIjoiaHR0cCIsIm93bmVyX2lkIjoiNjdjZWFkNDktNzdkMC00MGMyLWI3NjgtZTZjZGNiYjkzMmQyIn0.cb5aG2Kibi6YJy5W6Mpf5470i9MEjeOjDWDDVhT9Y84nSPC04ZYR1v9WAd3t-21dmF_5e4hOC9TL28G9RWW2w2iXhMhwZSssMl4x15vSsuge0mRenwF6vVFSE_sLNj8Ekp9n8u90r6VYJDgxrZX0-pBYTdxBqTCgPgOaCy8uTCLrIIqJYliYXpo_8PSXFVQ08bfhaOsrjM5_qSNgstfAYcxL5PSHXV_d1Na5bTxOOJJtXztbX6JJayavnn5-jr294ee8cTWlwo7e0fesE3PQ6kdj-oTXO8iIs-LjoupnNVd06ZRY-10a05EhYYQ5mgmnbaZIjXTlPvo8Jiq7rw9XUnJaRj5Qh0uo-kxkRhXwRjrxNGvBjNMFil60dGgVDH7PEHTai5h2MkOrYDp55j6VZl1Ju6jeimfIs9yCjMH9SCVQyTrn9aykcVDVM2AnTsbghTGXca0Xtmny3iL5RCKgicx7OEYBUjEJawJkqyMCa90cERs87akZIGCmDZv6EpDQTa0VAQHrzISjiPOsjLMwxSR44TWzFl-coMgxbXZQ0bMRAkM6pgXMqCwYCanVywtrHND668BGK2jRZ393c0Ik1N1nMihVb1Andn6OrTajJ6KSf7c_ih5VFB9olhfAefOJjnP6WJUPya1JbNjv3KZ55OoSIXQ-CNCqlVpKj18OMkQ

Sec-WebSocket-Protocol: mqtt

server: nginx

origin: https://ahh6gwts.http.wirenboard.cloud

Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Host: ahh6gwts.http.wirenboard.cloud

▶Response Headers

Connection: upgrade

Date: Fri, 21 Nov 2025 10:37:24 GMT

Sec-Websocket-Accept: V9k0ByQdnbrktZrXfLmpG35wCoA=

Sec-Websocket-Protocol: mqtt

Server: nginx

Upgrade: WebSocket

Все данные скопировал из devtools. Мне нужно как-то поправить запрос или есть другой способ протестировать соединение с MQTT брокером через wb cloud?

для ws не используются, насколько знаю http методы. Но на самом деле по методу подключения через сервис облака не подскажу - у меня не хватает компетенций.
Но могу проверить локально

npm install -g wscat

added 9 packages in 11s
npm notice
npm notice New major version of npm available! 10.9.2 -> 11.6.3
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.6.3
npm notice To update run: npm install -g npm@11.6.3
npm notice

sysadmin@brain:~# wscat -c ws://localhost:18883/mqtt
Connected (press CTRL+C to quit)
> {"topic":"/devices/wb-gpio/controls/EXT1_IN1","qos":0,"retain":false,"command":"subscribe"}
> {"topic":"/devices/wb-adc/controls/Vin","qos":0,"retain":false,"command":"subscribe"}

Спасибо, буду пробовать дальше. Убрал хэдеры Sec-Websocket-Accept и Sec-Websocket-key и соединение установилось. Но пока после отправки сообщения идет дисконнект

Поделитесь результатами пожалуйста.

В итоге через postman и wscat сообщения не принимались и соединение закрывалось. Но удалось подсоединиться к брокеру через js скрипт. Теперь успешно получаются сообщения об изменениях в топике. Но при публикации в топик /devices/buzzer/controls/enabled значения 1 брокер успешно его записывает, и даже в веб-интерфейсе меняется значение переключателя на вкл, но при этом сирена звуков не издает. Прикладываю скрипт и вывод в консоли
test_mqtt.js (3,1 КБ)

node test_auto.js
Connecting with MQTT.js...
MQTT Connected! Subscribing...
MESSAGE RECEIVED - Topic: /devices/buzzer/controls/enabled, Message: 0
Subscribed to /devices/buzzer/controls/enabled
Now try switching the buzzer on/off...
Publishing to turn buzzer ON...
Published: 1 (buzzer ON)
MESSAGE RECEIVED - Topic: /devices/buzzer/controls/enabled, Message: 1
Publishing to turn buzzer OFF...
Published: 0 (buzzer OFF)
MESSAGE RECEIVED - Topic: /devices/buzzer/controls/enabled, Message: 0
MESSAGE RECEIVED - Topic: /devices/buzzer/controls/enabled, Message: 1
MESSAGE RECEIVED - Topic: /devices/buzzer/controls/enabled, Message: 0
MESSAGE RECEIVED - Topic: /devices/buzzer/controls/enabled, Message: 1
MESSAGE RECEIVED - Topic: /devices/buzzer/controls/enabled, Message: 0
MESSAGE RECEIVED - Topic: /devices/buzzer/controls/enabled, Message: 1
MESSAGE RECEIVED - Topic: /devices/buzzer/controls/enabled, Message: 0
MQTT connection closed

В истории эти значения также отражаются.


При этом ручное управление через веб-интерфейс работает, сирена успешно издает звуки

Обратите пожалуйста внимание: MQTT в контроллерах Wiren Board — Wiren Board
на то что уставки пишутся в /on
То есть вы пишете не в тот топик.
И выложите сам текст скрипта в txt например пожалуйста, js форум режет.

Спасибо, совсем забыл про /on. Теперь всё работает. Вот полный скрипт:
test_mqtt.txt (3,6 КБ)

Отредактировал ваше сообщение, испортив в файле сохраненный ключ.
Благодарю что делитесь!

Может у вас есть информация, как можно сгенерировать tunnel_key для авторизации и как его следует обновлять?

К сожалению не подскажу - могу в понедельник спросить у разработчиков.

Хорошо, спасибо большое, буду ждать!

Пока, к сожалению не ответили.

По получению первичного tunnelKey нашел в апи wb-cloud подходящий запрос https://wirenboard.cloud/api/v1/controllers/{serialNumber}/tcp-tunnels/http/

А с обновлением токена еще не успел разобраться, так что буду ждать информации!

Добрый день! Появилась ли какая-то информация от разработчиков?

Да. К сожалению нет точной инструкции.

“API-ручка возвращает не ws-endpoint, а ссылку на web tunnel.
web tunnel — это живая сессия, которая запускается только через браузер и автоматически поддерживается фронтендом.
Без открытия в браузере туннель не активируется, не обновляется и автоматически закрывается FRP.”

“токен получается сразу когда дергается ручка туннеля, но потом надо каждые несколько секунд слать правильные пост запросы в облако что бы поддерживать его работу”

То есть механизм работы на такое использование не рассчитывался, нельзя гарантировать что работать будет как ожидается - существуют лимиты и таймауты, которые достаточны для работы web-интерфейса но внешним сервисом легко в них упереться.