Добрый день!
Пытаюсь создать правило на нажатие группы зигби кнопок, и оно работает, но криво.
При одиночном нажатии кнопка в /action имеет “single” и не возвращает его на null. Красивых идей как ловить одиночное нажатие нет. WhenChanged ловит только первое нажатие или после двойного нажатия, когда /action меняет состояние single->double->single
Можно срабатывать на все виды нажатий, но тоже бред…
Помогите на правильную мысль выйти.
Спасибо!
Вот код:
function buttomDetect(name, timeout_ms, buttom_name) {
var motion_timer_id = null;
defineRule(name, {
whenChanged: buttom_name + “/action”,
then: function(newValue, devName, cellName) {
log(“Кнопка значение” ,newValue )
if ( newValue == “single” ) {
dev[“wb-mr6cu_33/K3”] = true;
log(“Вхождение по условию” ,newValue, "Устройство ", devName )
if (motion_timer_id) {
clearTimeout(motion_timer_id);
}
motion_timer_id = setTimeout(function() {
dev[“wb-mr6cu_33/K3”] = false;
motion_timer_id = null;
}, timeout_ms);
}
}
});
}
buttomDetect(“buttom_1”, 1000, “0x00158d00027be3fb”);
buttomDetect(“buttom_2”, 1000, “0x00158d00027cdc79”);
buttomDetect(“buttom_3”, 1000, “0x00158d0008385611”);
buttomDetect(“buttom_4”, 1000, “0x00158d000205a7e1”);
1 Like
Temcher:
При одиночном нажатии кнопка в /action имеет “single” и не возвращает его на null. Красивых идей как ловить одиночное нажатие нет. WhenChanged ловит только первое нажатие или после двойного нажатия, когда /action меняет состояние single->double->single
Можно срабатывать на все виды нажатий, но тоже бред…
Помогите на правильную мысль выйти.
Так записывайте в топик Null, проблем-то.
whenChanged: buttom_name + “/action”,
then: function(newValue, devName, cellName) {
log(“Кнопка значение” ,newValue )
if ( newValue == “single” ) {
dev[buttom_name + "/action"] = "";
dev[“wb-mr6cu_33/K3”] = true;
log(“Вхождение по условию” ,newValue, "Устройство ", devName )
if (motion_timer_id) {
clearTimeout(motion_timer_id);
}
motion_timer_id = setTimeout(function() {
dev[“wb-mr6cu_33/K3”] = false;
motion_timer_id = null;
}, timeout_ms);
}
}
});
PS: кавычки из вашего кода скопированы неверные.
Пробовал, вот так
dev[buttom_name + “/action”] = null;
ругается:
23-05-2023 13:29:57.014
ERROR: [rule error] ECMAScript error: TypeError: type error (rc -105)
anon native strict preventsyield
anon /usr/share/wb-rules-system/scripts/lib.js:113 preventsyield
setDevValue /usr/share/wb-rules-system/scripts/lib.js:123 preventsyield
anon /etc/wb-rules/buttom.js:17 preventsyield
23-05-2023 13:29:57.010
ERROR: invalid control definition
А как, предположительно, должно разрешиться null
при записи в топик? Нет, советую именно пустую строку.
Вот тут посмотрите: Zigbee беспроводной выключатель - #9 от пользователя BrainRoot
Спасибо!
Да, просто “” помогло.
В переменные можно null, и в устройства false передавать, а в топик нельзя… ну пусть будет так)))
1 Like
system
Closed
June 1, 2023, 10:41am
6
Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.