MQTT bridge + web UI

Доброго дня!
Есть 5 контроллеров WB7 из которых один является головным.
Настроил на головном контроллере бриджи на все остальные контроллеры, пробовал 2 варианта.

Вариант 1. С размещением данных в корень

# wb-02
connection wb_2
address 192.168.1.48
remote_username wb-02
remote_password ********************
notifications true
notification_topic /client/wb_2/bridge_status
keepalive_interval 20
restart_timeout 20
topic /# in 0

Вариант 2. Считаю более верным, с размещением данных в отдельную директорию с названием контроллера откуда мы их забираем.

#wb-03
connection wb_3
address 192.168.1.52
remote_username wb-03
remote_password ********************
notifications true
notification_topic /client/wb_3/bridge_status
keepalive_interval 20
restart_timeout 20

topic /# in 0 /wb03 /devices

По итогу в первом варианте вижу в Web панели датчики температур кроме IO, во втором варианте вообще ничего в панели не вижу.

Через MQTT Explorer я все топики наблюдаю.

В Web панели топиков не вижу.

Отображается только, то что добавлено в корень и то не все (скорее всего это не правильно), как добавить отображение устройств и топиков в Web панель? Чтобы в можно было забирать данные в панели вида /wb$/# (где $ номер slave контроллера), требуется для настройки дашброда.

Добрый день!

Чтобы наладить отображение топиков в веб-интерфейсе при использовании MQTT-моста, убедитесь, что настройки выполнены корректно. Ниже приведены основные рекомендации:

  1. Проверьте указание топиков в настройках моста.
    Убедитесь, что в конфигурации указаны именно те топики, которые необходимо перенаправлять. Неверные или слишком общие топики могут не отображаться.
  2. Убедитесь, что префиксы заданы правильно.
    Добавленные префиксы в конфигурации моста должны соответствовать структуре, которую ожидает веб-интерфейс. Ошибки в префиксе могут привести к тому, что устройства не будут видны.
  3. Проверьте подписку веб-интерфейса на топики.
    Веб-интерфейс Wiren Board отображает только те устройства и каналы, которые присутствуют в настройках MQTT Channels. Убедитесь, что контроллер подписан на нужные топики.
  4. Сравните поведение с MQTT Explorer.
    Если топики видны в MQTT Explorer, но не отображаются в веб-интерфейсе, скорее всего, проблема в отображении или структуре топиков, не распознаваемой интерфейсом.

Подробности по настройке моста описаны в документации:
https://wirenboard.com/wiki/MQTT#Настройка_MQTT_моста_(bridge)

Документацию уже несколько раз всю прошерстил и пробовал различные варианты передачи топиков, при настроеном бридже нужно ли подписываться на топик головным контроллером? (п.3)

  1. /wb_02/devices - забираем сюда данные из подчиненных контроллеров, вот это дело хотелось бы увидеть в MQTT Channels.
  2. /devices и все дефолтные топики основного контроллера - оставляем без изменений.

Собственно не получается увидеть MQTT Channels и веб интерфейсе топки вида /контроллер_№/devices/# пока не очень понимаю как это сделать, буду рад если поможете с этим.

# wb-02
connection wb_2
address 192.168.1.48
remote_username wb-02
remote_password *****************
notifications true
notification_topic /client/wb_2/bridge_status
keepalive_interval 20
restart_timeout 20
#topic /wb02/# in 0
**topic /devices/# in 0 /devices/wb_02**

В такой конфигурации получилось увидеть устройства в MQTT Channels

Однако в устройства и в виджеты почему то залетело одним куском.

Добрый день!

Топик формируется некорректно — не происходит разделения по устройствам, из-за чего данные не отображаются должным образом.

Рекомендую ознакомиться с данной статьёй и привести структуру топиков к требуемому формату.

С датчиками температуры разобрался, их получается возможным прокинуть, а вот входы и выходы GPIO не выходит, так как у головного контроллера топики в каталоге wb-gpio полностью повторяют топики на других контроллерах.

Можно ли как то обойти эту коллизию, например переименовать топики IO на суб.контроллерах? К примеру к наименованием входов/выходов добавить суффикс с именем или ID контроллера?

Добрый день!

Да, вы можете создать виртуальные устройства с нужными названиями. Это самый простой способ убрать коллизию.

Спасибо, данный вариант подходит, в планах переименовать все IO входы/выходы на конечных контроллерах, а далее подписаться на них через бридж.

В данной схеме виртуальное устройство постит MQTT топик и отображается в Web UI.

Единственное пока не разобрался, почему то значения контрола IO не постится в ранее созданное виртуальное устройство.

defineVirtualDevice('wb02', {
    title: {en: 'Controller WB02', ru: 'Контроллер WB02'} ,
    cells: {
      EXT1_IN1: {
        readonly: true,
        title: "EXT1_IN1",
        type: "switch",
        value: false
      },
       EXT1_IN2: {
        readonly: true,
        title: "EXT1_IN2",
        type: "switch",
        value: false
      },
    }
});


defineRule({
  whenChanged: "wb-gpio/EXT1_IN1",
  then: function (newValue, devName, cellName) {
	dev["wb02/EXT1_IN1"] = newValue;

  }
});

defineRule({
  whenChanged: "wb-gpio/EXT1_IN2",
  then: function (newValue, devName, cellName) {
	dev["wb02/EXT1_IN2"] = newValue;

  }
});

Код элементарный, возможно здесь неуместно использовать whenChanged, так как правило срабатывает при изменении.

Буду рад если натолкнете в нужное направление, значение контрола wb-gpio/EXT1_IN1 не присваивается контролу wb02/EXT1_IN1.

Добрый день!

Если подписаться на соответствующие топики, данные поступают?