Подписка контроллера WB на топики

Добрый день.
Итак вопрос:
Имеется сервер в сети с поднятым москито на него собираем информацию по MQTT с различных девайсов.
Возможно ли получать на контроллер WB информацию с этого сервера по подписке на топики MQTT и затем использовать эти данные для в контроллере для работы (wb-rules)

Да, конечно возможно. Достаточно настроить мост, - данные будут. Но для использования именно в wb-rules без костылей надо их, топики (формат, расположение) проверить (преобразовать).

А можно пример как оформить подписку?
Или все настраивается абсолютно аналогично при подключении к облачному брокеру?

Да, совершенно так же. С точки зрения настройки - нет разницы где располоден другой брокер MQTT.

Файл bridge.conf сейчас имеет следующую строку, определяющую передачу данных с контроллера в облачный брокер
notification_topic /client/demidov/bridge_status
topic /devices/# both 2 “” /client/demidov

На облачном брокере есть топик с температурой /client/temp1/temp , получаемый с 3го устройства
Как мне прописать в bridge.conf чтобы мой контроллер забирал температуру с этого топика?

Есть два контроллера в одной сети, адреса:

  • 10.0.0.40
  • 10.0.0.70
    Итак, на контроллере “40” добавляем в конфиг:
mcedit /etc/mosquitto/conf.d/bridge.conf

следующее:

connection wb_40
address 10.0.0.70
notifications true
notification_topic /client/wb_40/bridge_status
keepalive_interval 20
restart_timeout 20

topic /temp1/# in 2 /devices /client

Перезапускаем на нем же mosquitto:

systemctl restart mosquitto; systemctl status mosquitto

Важно! перед перезапуском я б остановил watchdog. Просто для экономии времени - вдруг ошибка и брокер не запустится. Потом ловить момент для его остановки после перезагрузки - некомфортно.
Вкратце опишу строчку:
topic /temp1/# in 2 /devices /client
где:
/temp1/# это топик от “корня”
in - только забираем, изменения на контроллере не передадутся на сервер
/devices - “корень” куда располагаем локально
/client - “корень” откуда забираем на удаленном

Проверяем:
Дожидаемся статуса бриджа “1” в топике “/client/wb_40/bridge_status” на удаленном сервере.
На удаленном сервере публикуем:

for i in {1..25}
do
mosquitto_pub  -t "/client/temp1/temp" -m "$i" -r
done

Подписавшись при этом на локальном на топик, получаем:

mosquitto_sub -v -t /devices/temp1/# 
/devices/temp1/temp
/devices/temp1/temp 1
/devices/temp1/temp 2
/devices/temp1/temp 3
/devices/temp1/temp 4
/devices/temp1/temp 5
/devices/temp1/temp 6
/devices/temp1/temp 7
/devices/temp1/temp 8
/devices/temp1/temp 9
/devices/temp1/temp 10
/devices/temp1/temp 11
/devices/temp1/temp 12
/devices/temp1/temp 13
/devices/temp1/temp 14
/devices/temp1/temp 15
/devices/temp1/temp 16
/devices/temp1/temp 17
/devices/temp1/temp 18
/devices/temp1/temp 19
/devices/temp1/temp 20
/devices/temp1/temp 21
/devices/temp1/temp 22
/devices/temp1/temp 23
/devices/temp1/temp 24
/devices/temp1/temp 25

Читать mosquitto.conf man page | Eclipse Mosquitto
Поиском находим “To remap an entire topic tree” - там как раз подходящий пример. Но лучше сначала.

Но! Вот так, “напрямую” использовать, в wb-rules например, значение выйдет только если его публикует контроллер (другой). Читать тему:

обращая внимание на сообщения @EvgenyBoger
Но можно схитрить, заранее создав на локальном контроллере виртуальное устройство с полем нужного типа и “принимая” значения в него.

Кажется все описал?