Переименование топиков в MQTT

Здравствуйте коллеги! Возник вопрос по именованию оборудования. Есть оборудование /devices/MS1/controls/External Sensor 1. Wiren Board 5.8. Это с одной точки. Со второй точки оборудование так же называться будет. Как избежать повторения имен? Спасибо!

что вы называете “точками”?

Я сис.админ. Настройл сервер на принятия по mqtt и клиент утверждает что имена повторяются с разных мест. Разные wiren board как я понял.

Спереди к топикам добавляется еще один идентификатор
/client/WB1/devices/MS1/controls/External Sensor 1
и
/client/WB2/devices/MS1/controls/External Sensor 1

contactless/ wb-mqtt-serial Там соединение по RS-485. В этой библиотеке указывается? Если не трудно можете указать какие именно поля?)

Имеется ввиду в .conf файле.

Контроллеры с сервером соединяются через mqtt-bridge
и как раз в conf файле этих mqtt-bridge и надо добавлять свой идентификатор.
/etc/mosquitto/conf.d/bridge.conf
Простой пример без аутентификации:

connection amazon
address 34.239.120.000:1883
topic /devices/#  both 2 "" /client/wb_AV6U5XZP

Аккуратнее только изменяйте этот файл на удаленном контроллере.
Может уйти в цикличный перезагруз и тогда только по debug-порту сможете к нем подсоединиться для исправления ситуации.

connection ЧЧЧЧЧЧЧ
address XXX.XXX.XXX.XXX
clientid AJU2SSD
try_private false
start_type automatic
topic # both

Сейчас так стоит. Как я понял в топик надо добавлять?

И аппарат сам подставит данные в топик. Мне просто не понятен механизм работы bridge.conf. Указываемые данные перезаписывают данные устройств? Или они сами подставляют в поле topic свои данные?

topic /devices/# both 2 “” /client/wb_AV6U5XZP добавляет к исходящему топику дополнительное поле для идентификации контроллера на котором стоит этот conf
А на сервере по этому полю уже можно идентифицировать.

1 лайк

Добавляют к топику префикс. Тут, например,
описано подробнее: http://www.steves-internet-guide.com/mosquitto-bridge-configuration/

1 лайк

И еще, к RS-485 это не имеет никакого отношения.
Лучше переименовать ветку в “Переименование топиков в MQTT”

Там есть устройства по шине 1-Wire. Они идентифицируются без проблем. /devices/wb-w1/controls/28-000009ff8b8e. Вот вопрос задали как по RS сделать. Просто не шибко знаком с IoT. На сервер части демон стоит все пишет в бд. Можно по подробнее про Переименование топиков в MQTT

Переименуйте эту ветку обсуждения проблемы на форуме в “Переименование топиков в MQTT”

Когда измените топик на topic /devices/# both 2 “” /client/wb_AV6U5XZP, это решит и эту проблему.
Или если проблема не носит глобальный характер. то достаточно переименовать в настройках контроллера MQTT_name на подходящее, например
/devices/MS1_Controller1/controls/External Sensor 1
и
/devices/MS1_Controller2/controls/External Sensor 1
и так со всеми совпадающими именами
это делается в конфигураторе:

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

1 лайк

За месяц набегает очень большой траффик передачи данных MQTT-брокеру.
Как в brifge.conf можно оформить отправку списка только определенных топиков, если они содержат пробел в наименовании?
Например:

topic /devices/+/controls/External Sensor 1 both 2 "" /client/wb_AV6U5XZP

Нашел на https://github.com/eclipse/mosquitto/issues/658 некоторое объяснение:

I think it’s not a bug, but a current spec of mosquitto.

The bridge topic of mosquitto cannot include spaces implicitly, because there are some delimiters in the directive (bridge) topic. The bridge feature purely depends on each implementation of broker because there is no description of bridge in the standard. Therefore, I’m afraid I think your insist is a little rough.

We have two options:

  1. Express this spec of the directive topic.
  2. Add new directive you wish to support a bridge topics include spaces and keep backward compatibility.

Помогите разобраться, что за два варианта решения предлагается в данном случае!

Flagman, добрый день!
Я так понимаю, что речь идет о возможных доработках бриджа разработчиками, не о решениях для пользователей.
Подумаем над проблемой.

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