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

И еще, к 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, добрый день!
Я так понимаю, что речь идет о возможных доработках бриджа разработчиками, не о решениях для пользователей.
Подумаем над проблемой.

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

Пока как временное решение - свой conf-файл для устройства с контролами без пробелов.

1 лайк

пробелы и кириллица всегда зло) Я теперь тоже сделал свои конфиги и все пробелы убрал.

попробовал два варианта пробелов.
http://jkorpela.fi/chars/spaces.html
Скрипты их понимают, отображают в логах верно, бридж не ругается. Но брокер их все-равно не видит. Пробелов в юникоде много, потому да, не использовать, наверное лучший вариант. Ну а производителям, получается, все топики переименовать, пробелы лучше заменить на _. Или, быть может, кто-то найдет какой именно этот “тот самый” пробел) Но везде, где видел по mosquitto - не использовать.

PS. Попробовал явно задать пробел \u0020 и в бридже и в темплейте. Отобразилось в морде норм, бриджо не сглючило, но брокер не принимает. Он сам что-то с пробелами у себя делает, причем не трет, проверил.

Брокер их не то чтобы не понимает, он их понимает как топик с этими символами и ждёт их, но так как их физически нет, то и отображать нечего.

как вы поняли, что брокер ждет топик с пробелом, что он этот пробел не преобразовал к чему-то и не ждет вот это преобразованное значение, которое не совпадает с тем, что в бридже?

  1. bridge не падает
  2. Подписавшись на этот топик на брокере мы его не наблюдаем

Можно для чистоты эксперимента создать control с “\u0020” вместо пробела и он должен считаться.
У меня это не вышло, так как я это стал делать через Виртуальное устройство (проверку синтаксиса не прошло)
Возможно это получится если создать через конфигурационный файл устройства.

я это делал:

“PS. Попробовал явно задать пробел \u0020 и в бридже и в темплейте. Отобразилось в морде норм, бридж не сглючило, но брокер не принимает. Он сам что-то с пробелами у себя делает, причем не трет, проверил.”

не принимает, в смысле не реагирует на изменения этого топика

Здравствуйте, вы показали как переименовать устройство подключенное по RS-485? а как переименовать датчик температуры подключенный к 1W? или по Zigbee?

А у них номера вообще уникальные. Как MAC-адреса.

Если нужно красивое название в интерфейсе, желательно использовать виртуальные устройства: https://wirenboard.com/wiki/index.php/Движок_правил_wb-rules#.D0.9F.D0.B5.D1.80.D0.B2.D0.BE.D0.B5_.D0.BF.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.BE_.D1.81_.D0.B2.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.BC_.D1.83.D1.81.D1.82.D1.80.D0.BE.D0.B9.D1.81.D1.82.D0.B2.D0.BE.D0.BC

1 лайк