Есть два контроллера в одной сети, адреса:
- 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
Но можно схитрить, заранее создав на локальном контроллере виртуальное устройство с полем нужного типа и “принимая” значения в него.
Кажется все описал?