Переключение контролов через бридж

есть топики, на состояние которых подписываюсь через бридж в одну сторону на исполнение.
настройки моста на получателе топиков.
состояние определяется виртуальным устройством /devices/mydev/controls/light
если я меняю состояние через приложение (mqtt DASH)с прописанным /on, то все работает.
но состояние изменяется на основании правил и в explorer mqtt вижу, что топик
/devices/mydev/controls/light 1, а
/devices/mydev/controls/light/on 0
соответственно, исполнительное устройство команду не отрабатывает.
пробовал в скрипте прописать dev[“mydev”][“light/on”] = true;
не помогло.
как выйти из этого тупика? или я туплю?

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

  • попробовать поменять состояние топика /on из консоли на контроллере к которому подключено устройство.
  • то же самое - но на другом контроллере, через бридж.

В скриптах дописывать /on не надо.

последил за топиками.
состояние виртуального устройства контроллера-приемника меняется, но реле исполнительное не отрабатывает.
на приемном wb есть скрипт для вирт.устр:
function dev_control(name, sensor, actuator) {
defineRule(name, {
whenChanged: “mydev/”+sensor,
then: function(newValue, devName, cellName) {
dev[“wb-mrps6_32”][actuator] = dev[“mydev”][sensor];
log("sensor= ",sensor, ",actuator= ", actuator, newValue);
}
});
}
по нажатию в dash все работает. а при изменении состояния топика правило не срабатывает и лог не отображается.
где-то тут надо рыть, но что именно?

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

завтра только буду у wb. сделаю

205 - приемный wb, подписанный на другой контроллер. мониторю включение света через счетчик, нормально ловить выключение получилось только через параметр Q. По Irms при выключении последнее значение не приходило.

на всякий случай.
включение руками v3
205_man_on
включение топиком через исх контроллер

Честно говоря - не понял.
Воспроизвести поведение как?
Вижу скриншот “приемного” в котором топик не тот о котором говорилось в начале.

Если можно - сначала:
есть два контроллера. Надо их как-нибудь назвать. На одном изних, на “X” настроен бридж (настройки)
На одном (имя) выполняем команду: (…)
Ожидаем увидеть: …
при этом на “X” в топиках:
на “Y” в топиках:

я писал обобщенно.
теперь фактаж.
есть wb с ip 204 и 205. 205 - приемник, на нем и настроен бридж.
на 204 есть виртуальные ус-ва “devices/vent/controls/v3”, “/devices/vent/controls/v6”
на 205 те же вирт. ус-ва “/devices/vent/controls/v3”, “/devices/vent/controls/v6”
при изменении состояния v3 и v6 на 204 происходит изменение v3 и v6 на 205, но не активируются исп. реле.
при изменении состояния v3 wb205 в веб-интерфейсе реле включается.
то же самое происходит, если тапнуть на v3 в mqtt dash, подключенному к wb205, но там команда с /on на конце

Отлично.
А бридж натроен (топики) - как?
Теперь - подписываемся на “/devices/vent/controls/#” на 205 - и смотрим в чем разница.

connection wb_204
address 192.168.88.204
notifications true
notification_topic /devices/wb_204/controls/bridge_status
#keepalive_interval 20
#restart_timeout 20

topic /vent/controls/v3 in 2 /devices /devices
topic /vent/controls/v6/on in 2 /devices /devices

205 /#


205 v3/#

и на всякий случай 204(исх wb, на который подписаны) /#

вам бы исправить на /vent/controls/v3/#

а почему 205 получает топики всех v2-v12, если подписка была на конкретные v3 и v6?
первый скрин предыдущего моего ответа

Воспроизведу-ка у себя полностью.Получанеи неподписанных топиков - ненормальное поведение.

исправил. не помогло.
в bridge.conf у меня приписаны два бриджа
connection wb_1
#############

connection wb_2
#############

так можно?

Да, конечно. Можно и в одном файле несколько описать.
Сейчас воспроизвожу вашу конфигурацию.

никаких подвижек пока?
может от меня допинфа нужна какая?

На контроллере-приемнике сделан конфиг бриджа:

connection wb_70
address 10.0.0.70
notifications true
notification_topic /devices/wb_70/bridge_status
#keepalive_interval 2
#restart_timeout 5

topic /mydev/# in 2 /devices /devices

На контроллере источнике соответствующее виртуальное устройство:

//02_22_test_01.js
defineVirtualDevice("mydev", {
  title: "mydev", //
  cells: {
    test0 : {
        type : "switch",
        value : false,
        readonly: false,
    },
  }
})
  

Топик устройства на источнике (в момент переключения):

mosquitto_sub -v -t /devices/mydev/#
/devices/mydev/meta/name mydev
/devices/mydev/meta/driver wb-rules
/devices/mydev/controls/test0 0
/devices/mydev/controls/test0/meta/type switch
/devices/mydev/controls/test0/meta/order 1
/devices/mydev/controls/test0/meta/readonly 0
/devices/mydev/controls/test0/on 1
/devices/mydev/controls/test0 1
/devices/mydev/controls/test0/on 0
/devices/mydev/controls/test0 0

На приемнике:

mosquitto_sub -v -t /devices/mydev/#
/devices/mydev/meta/name mydev
/devices/mydev/meta/driver wb-rules
/devices/mydev/controls/test0 0
/devices/mydev/controls/test0/meta/type switch
/devices/mydev/controls/test0/meta/order 1
/devices/mydev/controls/test0/meta/readonly 0
/devices/mydev/controls/test0/on 1
/devices/mydev/controls/test0 1
/devices/mydev/controls/test0/on 0
/devices/mydev/controls/test0 0

На приемнике также правило:

//02_22_test_01.js
defineRule("testRule", {
  whenChanged: "mydev/test0",
    then: function(newValue, devName, cellName) {
      log.info("rule executed newValue=", newValue);
    }
});

При переключении виртуального устройства на источнике - правило срабатывает.
При публикации на “источнике”:

mosquitto_pub  -t /devices/mydev/controls/test0 -m 1

На “приемник” приходит

/devices/mydev/controls/test0 1

Ну и правило срабатывает

Если само значение = 0, важно, то есть НЕ совпадает с текущим опубликованным.
и опубликовать на источнике в .on “1” - тоже срабатывает.

Андрей, приветствую.
чудес не бывает, все подчиняется железной логике. но


источник слева
быть может дело в том, что у меня виртуальные устройства vent и на источнике, и на приемнике ? больше в голову ничего не приходит…
сами эти виртуальные устройства состояние меняют синхронно. но правило на приемнике не срабатывает:
function vent_control(name, sensor, actuator) {
defineRule(name, {
whenChanged: “vent/”+sensor,
then: function(newValue, devName, cellName) {
dev[“wb-mrps6_101”][actuator] = dev[“vent”][sensor];
log("sensor= ",sensor, ",actuator= ", actuator, newValue);
}
});

У меня на приемнике - сначала пробовал как без устройства вообще, так и с устройством. В общем для правила - оно не нужно наприемнике. Правило следит за топиком брокера.
Предлагаю, для диагностики, подписаться на приемнике просто на топик с помощью mosquitto_sub - и попереключать.
И если вывод соответствуем моему, приходит “1” - тогда правило записать отдельным скриптом, не передавая в него имена переменными.
Но, думаю, дело все же в “topic”
У вас заисано:
“topic /vent/controls/v3 in 2 /devices /devices”
и при этом вся “структура” не передается.
Если как у меня:
“topic /vent/# in 2 /devices /devices” то скорее всего заработает. Ну или использовать trackMqtt вместо правила вот так:

С помощью такого способа можно следить за произвольным топиком вообще.