Пробелы в названиях топиков mosquitto


#1

Может кто-нибудь объяснить, с какой целью в шаблонах устройств WirenBoard в названиях топиков, в конечных переменных, используются пробелы?

Зачем было называть /devices/wb-m1w2_0x004e/controls/External Sensor 1?
При этом почему-то правильно назван /devices/wb-gpio/controls/EXT1_R3A1. Почему бы его тоже было не назвать /devices/wb-gpio/controls/EXTERNAL 1 RELE 3A 1, “до кучи”?

Я понимаю, что правила http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718109 позволяют использовать пробелы в названиях. То есть спецификации соблюдены, нарушений нет. Но!

Мало того, что постоянно возникают разные проблемы в передаче подобных параметров.
Для меня самое главное, - при фильтрации топиков в mosquitto.conf невозможно использовать топики с пробелами, потому что пробел воспринимается системой разделителем.
Я не нашел никакого способа передать парсеру правильное название с пробелом, - ни разнообразные кавычки, - ничего не работает.

В реальности мы используем (передаем, записываем в БД) только несколько значений со счетчиков WB. Но сами счетчики генерируют такое количество параметров, что нужные значения теряются в этом море, не говоря об износе флеш-памяти. Фильтрация топиков решает эту проблему, - но она невозможна из-за пробелов!

Может быть кто-то знает, как фильтровать эти… ммм “непрограммистские названия переменных”?
Единственное найденное рабочее решение - редактировать шаблоны из поставки, заменяя пробелы символом “_”. Но это не самое хорошее решение, т.к. при обновлении они будут перезаписаны.

Может я чего-то не вижу, не понимаю? Какой-нибудь %20 может помочь?


#2

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


#3

Что удалось тоже в свое время найти:


#4

Но можно же было сразу сделать External_Sensor_1, ИМХО, ничего бы не изменилось… Программисты ведь работали. Ну почему, - в именах переменных (!), - пробелы?!..

А потом пишешь в поддержку, а тебе говорят: “тут какой-то шаблон не наш… замените на стандартный, ваш никто проверять не будет”. Или шаблон сам разработчик изменил, - опять все менять…

Эх… (((


#5

Добрый день!
Я отчасти разделяю ваши чувства.
Но, переходя к сути, вижу за ними только одну реальную проблему (настройки бриджа в mosquitto не работают с топиками с пробелами, потому что так захотели разработчики mosquitto) с простым обходным решением (создать свои копии шаблонов без пробелов).
Сталкивались ли вы ещё с какими-то проблемами из-за пробелов?


#6

а у меня была проблема с VOC топиком , из-за круглых скобок не работает в OpenHab

Решается проблема у меня таким способом:

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


#7

Уже пробовал - не помогло


#8

Даже с небольшим количеством модулей через бридж по умолчанию “летит” большое количество данных.
Траффика за месяц набегает более 1,5 Gb
Лишние деньги за превышение приходится отдавать и забивается БД на сервере.


#9

Отладить приложение не просто, когда валит чухом состояние всего, что, как я понимаю, и предлагается делать, если забить на пробелы и, тем самым, бриджем не заниматься.
Ну и очень интересно все-таки узнать причины такого положения дел. Что побудило разработчиков таким образом поименовать топики.
Или так, раз уж mosquitto такой кастомный и ну никак не работает с пробелами, может есть предложение, какой еще брокер можно использовать, который так же пользуется спросом, но не имеет этих ограничений? Ну чтоб он был распространен и т.д.
Мне показалось, что вы, разработчики, упоминаете mosquitto, вероятно, пользуетесь. А такой ляп не торопитесь исправлять… Возможно, причины в другом? Может глючить начинает контроллер, если много записей будет в бридже, может еще какие косяки, и потому вы и не наводите в этом вопросе порядок.


назначил(а) ответственного EvgenyBoger #10

#11

А мне это очень странно. Программисты использовали архитектурно в названия переменных пробелы (спецсимволы)?!. Интернет, как бы, однозначно говорит, - да, спецификация позволяет, но не делайте этого, пожалуйста, никогда! Иначе замучаетесь потом глюки ловить.

Я логику не понимаю. Одно с пробелом, другое - с подчеркиванием.

Главное, ведь, - конечный пользователь никогда не увидит этих названий. Ему все равно, что там написано в топиках, он увидит “Свет в гостиной”. Только инсталлятор их видит, а ему эти пробелы (скобки, …) - “очень мешают”. И даже инсталлятор в большинстве случаев не пишет эти жуткие названия, он их копипастит из интерфейса.

Ну то есть ни одного плюса в названии “External Sensor 1” лично я не вижу, - одни минусы. А ответ разработчика - “это не работает, потому что так захотели разработчики mosquitto”.

Причем здесь разработчики mosquitto? Они пробелы и скобки в названиях переменных в шаблонах wirenboard использовали? Их косяк (такое поведение бриджа “супротив спецификации”) - это их косяк. Так косяков разных много, поэтому разумный интернет и пишет в white paper, чтобы не нарываться на чужие грабли, и обходить даже будущие возможные ошибки, - “никогда не используйте пробелы и спецсимволы в названиях переменных”.


#12

и вот этот разброд в логике очень напрягает) Сразу понимаешь, что где-то еще будут недоделки и косяки( И такое знакомое чувство ожидания подвоха на каждом шагу)