Массив всех девайсов со всеми топиками


#1

Здравствуйте!
Есть ли способ (прямой/кривой), чтобы получить JSON объект всех инициализированных устройств из WB с именами их контроллов (топиками)? И реальных и виртуальных, тех, что в морде. Чтобы не создавать ручками, зная что и как, а чухом перебрать их все, что есть и присвоить свои поля.
Например, хочу создать массив объектов, где будет имя модуля, а дальше в свойствах имя поля и текущее состояние.
[
{“device”:{“name”:“MR3”, “K1”:dev.MR3.K1, и т.д.}
]
Конечно, мне не надо прямо пример решения, только натолкнуть где можно пачкой вытащить то, что мне потребуется для формирования такого массива.
Подозреваю, что все эти данные где-то хранятся, но где - не знаю(

Или так: как вытащить страницу Settings через js?


#2

Утилита mosquitto_sub вам в помощь! Веб-интерфейс так же подписывается на mqtt-брокере, получает сначала все retained-значения, а потом изменения.


#3

я не совсем понимаю о чем речь, извините, можно подробнее?
Эта утилита на WB, и к ней есть доступ через JS в движке правил?
Не могли бы мне пример наталкивающий показать, куда надо обратиться, какой функцией, чтобы вытащить в скрипт данные из Settings? Вообще я ведь в правильном направлении движусь, если мне надо в движ. правил получить текущие состояния всех девайсов?


#4

или же мне не стоит полагаться на mosquitto_sub и тащить отдельно каждое значение через dev.MR3.K1, например? Если, конечно, данные не получены этой же mosquitto_sub.


#5

Утилита mosquitto_sub — находится на контроллере, входит в пакет modbus-utils. Это CLI-утилита для доступа к очереди сообщений mqtt-брокера. У нас есть, вы читали ее, наверное, страница документации про принципы работы MQTT: https://wirenboard.com/wiki/index.php/MQTT

Сама утилита, так же как и движок правил, страница Settings, страница Devices обращаются к брокеру через вызов API-функций. В принципе, вы можете взять Python, mqtt-библиотеку и обращаться к очереди сообщений из своей собственно программы. Утилита mosquitto_sub – просто удобный интерфейс к очереди.

То же самое с отправкой сообщений в очередь. В ней публикуют сообщения драйверы, которые общаются с устройствами разного типа: modbus, 1-wire, виртуальные устройства и т.п.

MQTT обеспечивает взаимодействие с устройствами на прикладном уровне.

Таким образом нет особого смысла обращаться к странице Settings. Вы можете использовать утилиту mosquitto_sub для получения информации об устройствах. Для публикации используется утилита mosquitto_pub.

Получилось понятнее?:slight_smile:


#6

Спасибо за развернутый ответ. Я понял, что есть возможность через, напр, python работать с очередью “напрямую”, а ваша web оболочка, как и движок правил также обращаются через эту утилиту mosquitto_sub. верно понял?

Я с питоном мало работал, и поднять сейчас еще и это, когда только начал разбираться с WB выглядит страшновато) тем более, что мне надо будет обеспечить интерфейс и в движок правил этого моего приложения на питоне %) Холодные тихие зимние вечера все никак не наступят)) и приходится одновременно делать много чего.

Если отбросить питон, и средствами js и движком правил вытаскивать данные, это будет слишком пошло и ненадежно?
Вот например что я делаю, чтобы получить значение:
dev.switch_both.currstates = “K1=” + dev[“MR3-1”][“K1”] + “, K2=” + dev[“MR3-1”][“K2”];
я создал вирт девайс, и по команде изменить его состояние я в топик currstates передаю брокеру пока что в таком убогом виде текущее состояние двух реле на MR3.
Я планировал передать таким образом, в формате JSON состояние всех интересующих меня девайсов. Но ручками их каждый вписывать и поддерживать может оказаться накладно с позиции надежности, вероятность ошибок и неточностей будет велика. Вот я и заинтересовался, можно ли получить массив всего что есть в WB (а наглядно это демонстрирует страница Settings), чтобы потом преобразовать скриптами в JSON и отправить в брокер.


#7

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


#8

Страница Settings использует API, подключаясь к брокеру через web-sockets, очень грубо говоря. Считайте, что она работает с очередью, так же, как и mosquitto_sub.
Если вы хотите получить готовую json-структуру с устройствами, то лучше парсить вывод mosquitto_sub или использовать свое ПО,например, питон с paho-mqtt https://pypi.org/project/paho-mqtt/. Наверняка есть и библиотеки для Node.js.
Если проще, можно программировать все в движке правил.
Но, с другой стороны, у вас набор устройств фиксированный, набор топиков тоже фиксированный, получить список один раз и всё.


#9

да, но потом я буду добавлять устройства, и мне надо будет ручками прописывать их в скрипте, а я пока не понимаю, как это сделать без портянки на неск. страниц. А так бы чухом получил все, отправил бы со 100% соответствующими наименованиями себе в интерфейс и там работал бы этими данными, не волнуясь что где-то что-то упустил, изменил тип, запятую не поставил и прочее((
Полагаю, через движок нет возможности такой массив создать без описания каждого в отдельности топика?
В идеале я это вижу так: прошу выдать объект со всем что есть (как я раньше описывал) потом парсю в движке, привожу к JSON, и строкой засылаю в брокер. Мой интерфейс подписан на этот топик, получает строку, распарсивает обратно в объект и работаю уже со свойствами в человеческом формате.


#10

вот вы пишите - получить список - я не знаю как через движок. Я его могу только создать, т.е. ручками все заносить каждый девайс, каждый топик и тд %(