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

**URL:** <https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491>\
**Category:** Rule Engine\
**Created:** [January 29, 2019, 10:16pm UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491 "2019-01-29T22:16:05Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![polygon](https://avatars.discourse-cdn.com/v2/letter/p/6de8d8/32.png) [@polygon](https://support.wirenboard.com/u/polygon)\
**Post date:** [January 29, 2019, 10:16pm UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/1 "2019-01-29T22:16:05Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![Kilpio](https://avatars.discourse-cdn.com/v2/letter/k/3ab097/32.png) [@Kilpio](https://support.wirenboard.com/u/Kilpio)\
**Post date:** [January 30, 2019, 10:32am UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/2 "2019-01-30T10:32:16Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![polygon](https://avatars.discourse-cdn.com/v2/letter/p/6de8d8/32.png) [@polygon](https://support.wirenboard.com/u/polygon)\
**Post date:** [January 30, 2019, 10:36am UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/3 "2019-01-30T10:36:28Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![polygon](https://avatars.discourse-cdn.com/v2/letter/p/6de8d8/32.png) [@polygon](https://support.wirenboard.com/u/polygon)\
**Post date:** [January 30, 2019, 10:37am UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/4 "2019-01-30T10:37:56Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Kilpio](https://avatars.discourse-cdn.com/v2/letter/k/3ab097/32.png) [@Kilpio](https://support.wirenboard.com/u/Kilpio)\
**Post date:** [January 30, 2019, 11:22am UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/5 "2019-01-30T11:22:23Z")

</div>

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

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

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

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

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

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

---

<div class="post-metadata">

**Author:** ![polygon](https://avatars.discourse-cdn.com/v2/letter/p/6de8d8/32.png) [@polygon](https://support.wirenboard.com/u/polygon)\
**Post date:** [January 30, 2019, 11:38am UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/6 "2019-01-30T11:38:54Z")

</div>

Спасибо за развернутый ответ. Я понял, что есть возможность через, напр, 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 и отправить в брокер.

---

<div class="post-metadata">

**Author:** ![polygon](https://avatars.discourse-cdn.com/v2/letter/p/6de8d8/32.png) [@polygon](https://support.wirenboard.com/u/polygon)\
**Post date:** [January 30, 2019, 11:42am UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/7 "2019-01-30T11:42:58Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Kilpio](https://avatars.discourse-cdn.com/v2/letter/k/3ab097/32.png) [@Kilpio](https://support.wirenboard.com/u/Kilpio)\
**Post date:** [January 30, 2019, 12:01pm UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/8 "2019-01-30T12:01:16Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![polygon](https://avatars.discourse-cdn.com/v2/letter/p/6de8d8/32.png) [@polygon](https://support.wirenboard.com/u/polygon)\
**Post date:** [January 30, 2019, 12:08pm UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/9 "2019-01-30T12:08:41Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![polygon](https://avatars.discourse-cdn.com/v2/letter/p/6de8d8/32.png) [@polygon](https://support.wirenboard.com/u/polygon)\
**Post date:** [January 30, 2019, 12:10pm UTC](https://support.wirenboard.com/t/massiv-vseh-devajsov-so-vsemi-topikami/2491/10 "2019-01-30T12:10:04Z")

</div>

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