есть топики, на состояние которых подписываюсь через бридж в одну сторону на исполнение.
настройки моста на получателе топиков.
состояние определяется виртуальным устройством /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 при выключении последнее значение не приходило.
Честно говоря - не понял.
Воспроизвести поведение как?
Вижу скриншот “приемного” в котором топик не тот о котором говорилось в начале.
Если можно - сначала:
есть два контроллера. Надо их как-нибудь назвать. На одном изних, на “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 вместо правила вот так:
С помощью такого способа можно следить за произвольным топиком вообще.