Состояние устройства в правиле инверсно реальному

Добрый день!
Не могу понять почему значение устройства инверсное относительно того что есть на самом деле (в интерфейсе).
Есть виртуальное устройство, которое должно управлять реле WBIO-DO-R10A-8,
определяю правило которое при нажатии и отпускании кнопки меняет значение реле:
dev[“wb-gpio”][“EXT2_R3A3”] = !dev[“wb-gpio”][“EXT2_R3A3”];
Ожидаю что если реле включено, то его значение ==true, а в логе получаю false

defineRule(“MasterSwitch1”, { //реагируем на виртуальную кнопку
whenChanged: “master_switches/LongTimeAway”,
then: function (newValue, devName, cellName) { if (!newValue){
log.info(“R3A3 before”, newValue, dev[“wb-gpio”][“EXT2_R3A3”]);
dev[“wb-gpio”][“EXT2_R3A3”] = !dev[“wb-gpio”][“EXT2_R3A3”]; log(“Master switch <> switched to {}”,dev[“wb-gpio”][“EXT2_R3A3”]);
log.info(“R3A3 after”, newValue, dev[“wb-gpio”][“EXT2_R3A3”]);
}}
});

вывод в лог:

2021-09-28 21:33:18R3A3 before false false
2021-09-28 21:33:18Master switch <> switched to false
2021-09-28 21:33:18R3A3 after false false

Здравствуйте! Да, воспроизвелось странный вывод статуса реле. Хотя само реле переключается нормально. У вас также? Какая версия пакета wb-rules?

Да, у меня также.

А как посмотреть версию пакета?
Судя по всему старая, 1.7

dpkg -s wb-rules

После переключения статуса реле, например, в true, движок правил wb-rules записывает новое значение в топик /on состояния выхода, затем драйвер wb-mqtt-gpio включает соответствующий канал реле и потом обновляет значение в топике состояния выхода в соответствии с его реальным состоянием. Только после этого можно проверять изменения статуса реле. Если проверять состояние выхода в правилах сразу после его изменения, то мы обычно получаем предыдущее значение, так как драйвер не успевает так быстро переключить реле чтобы уже в следующей строке его статус изменился.

Для корректного получения статуса его нужно запрашивать с небольшой паузой. Например, так:

 setTimeout(function () { log.info("R3A3 changed state (delayed) = " + dev["wb-gpio"]["EXT2_R3A3"]) }, 50);
1 Like

спасибо!
попробую и отпишусь по результатам

Это помогло!
Хотя, конечно, конструкция не выглядит красивой:(