Правила на зигби кнопку

Добрый день!
Пытаюсь создать правило на нажатие группы зигби кнопок, и оно работает, но криво.
При одиночном нажатии кнопка в /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 лайк

Так записывайте в топик Null, проблем-то. :slight_smile:

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 лайк

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.