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

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

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 вместо правила вот так:

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

хотел же и этот вариант попробовать… но вечер - пятница - фонарь - аптека
mea culpa
теперь в понедельник отпишусь.

1 лайк

так не заработало.
осталось только trackMqtt попробовать. для этого ничего доставлять не нужно? в той ветке все про zigbee пишут.

Мой пример - тоже?

Нет, доставлять - не надо. Вообще это универсальный способ, который может работать с любыми топиками, любого формата и расположения. Поэтому для zigbee и применяется.

сам в шоке - в чем отличие не пойму, но не работает.
буду пробовать trackMqtt

identifier ‘trackMqtt’ undefined

wb-rules обновлять нужно?

/etc/mosquitto/conf.d$ apt-cache policy wb-rules
wb-rules:
Installed: 2.5.0
Candidate: 2.6.0

Желательно, добавили уже в свежих.

ну и команду до кучи подскажите, плз.

apt update && apt upgrade -y

на объекте лвс под контролем других людей. обратился по этому вопросу, говорят следующее:
контроллер пингуется, но запросов наружу от него нет. микротик видит интерфейсы eth0 обоих конроллеров, а eth1 только одного. подключены оба через eth1.
eth0 и eth1 настроены на разные подсети.
попробовал поставить apt install dnsutils на контроллер, но та же ошибка по resolve
куда смотреть вместе с админами?

“та же” - это какая?
Смотреть в

cat /etc/resolv.conf

Если там неверный DNS-сервер - то прописать верный.

// ловим команду на вкл v3,v6,v11
function v3_on(inValue){
if (inValue == true) {
dev[“wb-mrps6_101”][“K1”] = true;
log.info(“включаем вентилятор v3”, inValue);
}
if (inValue == false) {
dev[“wb-mrps6_101”][“K1”] = false;
log.info(“выключаем вентилятор v3”, inValue);
}
}
//Два аргумента: сам топик (строка) и каллбэк. Ну или просто операторы.
//Возвращает ОБЪЕКТ состоящий из: .topic и .value
//Имя изменившегося топика и значение
trackMqtt("/devices/vent/controls/v3", function(newValue) {
v3_on(newValue.value); // теперь всё работает
});

вот мои ловушки для вентиляторов.
статусы ловит, логи пишутся, НО реле не активируется соuласно команде. КАК такое может быть?
2021-03-11 14:41:08включаем вентилятор v3 1
2021-03-11 14:41:09выключаем вентилятор v3 0
2021-03-11 14:41:09включаем вентилятор v3 1
2021-03-11 14:41:12выключаем вентилятор v3 0
2021-03-11 14:41:12включаем вентилятор v3 1
2021-03-11 14:41:13выключаем вентилятор v3 0
2021-03-11 14:41:13включаем вентилятор v3 1

Ну, разве что “K” русская… Хотя я проверил - нет, и имя устройства верное.
Может быть все же адрес устройства неверный?
Подпишитесь mosquitto_sub на топик реле - туда “1” приходит?

подписаться теперь уже завтра смогу.
раньше даже условие не отрабатывало на изменение статуса “vent/v3”. сейчас с этим все нормально. только вот реле не щелкает как положено.

все приходит, все видится, по выполнению условий логи отрабатывают, “K” латиницей прописана. но реле не включается.

Андрей, все решилось.
При попытке открытия настроек serial device driver выскочила ошибка. залил чистый conf, добавил устройства и все заработало.
Спасибо!

1 лайк

Замечательно! А что за ошибка была? Старый конфиг сохранился, интересно на него глянуть?

wb-mqtt-serial.conf (1.9 КБ)

вообще ничего криминального. на мой взгляд.