Добрый день!
Код скриптов был написан до меня. Прошу помощи с антидребезгом.
- Скрипт конкретного выключателя
defineRule("035", {
whenChanged: "wb-gpio/EXT3_IN7",
then: function (newValue){
if ( newValue > 0) {
dev["wb-mr6cu_93"]["K4"] =!dev["wb-mr6cu_93"]["K4"];
}
}
});
- Скрипт общий
function onButtonPress(ruleName, trigger, action, timeToNextPress, timeOfLongPress) {
var buttonPressedCounter = 0;
var timerWaitNextShortPress = null;
var timerLongPress = null;
var isLongPress = false;
defineRule(ruleName, {
whenChanged: trigger,
then: function (newValue, devName, cellName) {
// If button is pressed, wait for a long press
if (newValue) {
if (timerWaitNextShortPress)
clearTimeout(timerWaitNextShortPress);
timerLongPress = setTimeout(function () {
dev[action.longPress[0]][action.longPress[1]] = false;
dev[action.longPress00[0]][action.longPress00[1]] = false;
dev[action.longPress01[0]][action.longPress01[1]] = false;
dev[action.longPress02[0]][action.longPress02[1]] = false;
dev[action.longPress03[0]][action.longPress03[1]] = false;
dev[action.longPress04[0]][action.longPress04[1]] = false;
dev[action.longPress05[0]][action.longPress05[1]] = false;
dev[action.longPress06[0]][action.longPress06[1]] = false;
dev[action.longPress07[0]][action.longPress07[1]] = false;
dev[action.longPress08[0]][action.longPress08[1]] = false;
dev[action.longPress09[0]][action.longPress09[1]] = false;
dev[action.longPress10[0]][action.longPress10[1]] = false;
dev[action.longPress11[0]][action.longPress11[1]] = false;
dev[action.longPress12[0]][action.longPress12[1]] = false;
dev[action.longPress13[0]][action.longPress13[1]] = false;
dev[action.longPress14[0]][action.longPress14[1]] = false;
dev[action.longPress15[0]][action.longPress15[1]] = false;
dev[action.longPress16[0]][action.longPress16[1]] = false;
dev[action.longPress17[0]][action.longPress17[1]] = false;
dev[action.longPress18[0]][action.longPress18[1]] = false;
dev[action.longPress19[0]][action.longPress19[1]] = false;
dev[action.longPress20[0]][action.longPress20[1]] = false;
dev[action.longPress21[0]][action.longPress21[1]] = false;
dev[action.longPress22[0]][action.longPress22[1]] = false;
dev[action.longPress23[0]][action.longPress23[1]] = false;
dev[action.longPress24[0]][action.longPress24[1]] = false;
dev[action.longPress25[0]][action.longPress25[1]] = false;
dev[action.longPress26[0]][action.longPress26[1]] = false;
dev[action.longPress27[0]][action.longPress27[1]] = false;
dev[action.longPress28[0]][action.longPress28[1]] = false;
dev[action.longPress29[0]][action.longPress29[1]] = false;
dev[action.longPress30[0]][action.longPress30[1]] = false;
dev[action.longPress31[0]][action.longPress31[1]] = false;
dev[action.longPress32[0]][action.longPress32[1]] = false;
dev[action.longPress33[0]][action.longPress33[1]] = false;
dev[action.longPress34[0]][action.longPress34[1]] = false;
dev[action.longPress35[0]][action.longPress35[1]] = false;
dev[action.longPress36[0]][action.longPress36[1]] = false;
dev[action.longPress37[0]][action.longPress37[1]] = false;
dev[action.longPress38[0]][action.longPress38[1]] = false;
dev[action.longPress39[0]][action.longPress39[1]] = false;
dev[action.longPress40[0]][action.longPress40[1]] = false;
dev[action.longPress41[0]][action.longPress41[1]] = false;
dev[action.longPress42[0]][action.longPress42[1]] = false;
dev[action.longPress43[0]][action.longPress43[1]] = false;
dev[action.longPress44[0]][action.longPress44[1]] = false;
dev[action.longPress45[0]][action.longPress45[1]] = false;
dev[action.longPress46[0]][action.longPress46[1]] = false;
dev[action.longPress47[0]][action.longPress47[1]] = false;
dev[action.longPress48[0]][action.longPress48[1]] = false;
dev[action.longPress49[0]][action.longPress49[1]] = false;
dev[action.longPress50[0]][action.longPress50[1]] = false;
dev[action.longPress51[0]][action.longPress51[1]] = false;
dev[action.longPress52[0]][action.longPress52[1]] = false;
// log(">>>>>>> long press <<<<<<");
isLongPress = true; // Long press identified, we will skip short press
buttonPressedCounter = 0;
}, timeOfLongPress);
}
// If button is released, then it is not a "long press", start to count clicks
else {
if (!isLongPress) {
clearTimeout(timerLongPress);
buttonPressedCounter += 1;
timerWaitNextShortPress = setTimeout(function () {
switch (buttonPressedCounter) {
// Counter equals 1 - it's a single short press
case 1:
dev[action.singlePress[0]][action.singlePress[1]] = !dev[action.singlePress[0]+"/"+action.singlePress[1]];
// log(">>>>>> short press - single <<<<<<");
break;
// Counter equals 2 - it's a double short press
case 2:
dev[action.doublePress[0]][action.doublePress[1]] = !dev[action.doublePress[0]+"/"+action.doublePress[1]];
// log(">>>>>> short press - double <<<<<<");
break;
}
// Reset the counter
buttonPressedCounter = 0;
}, timeToNextPress);
}
isLongPress = false;
}
}
});
}
// Usage example
onButtonPress(
"on_button_press",
"wb-gpio/EXT1_IN1",
{
//singlePress: ["relay2", "K1"],
//doublePress: ["relay2", "K2"],
longPress: ["wb-mr6cu_95", "K1"],
longPress00: ["wb-mr6cu_95", "K2"],
longPress01: ["wb-mr6cu_95", "K3"],
longPress02: ["wb-mr6cu_95", "K5"],
longPress03: ["wb-mr6cu_95", "K4"],
longPress04: ["wb-mr6cu_95", "K6"],
longPress05: ["wb-mr6cu_94", "K1"],
longPress06: ["wb-mr6cu_94", "K2"],
longPress07: ["wb-mr6cu_94", "K3"],
longPress08: ["wb-mr6cu_94", "K4"],
longPress09: ["wb-mr6cu_94", "K5"],
longPress10: ["wb-mr6cu_94", "K6"],
longPress11: ["wb-mr6cu_145", "K1"],
longPress12: ["wb-mr6cu_145", "K2"],
longPress13: ["wb-mr6cu_145", "K3"],
longPress14: ["wb-mr6cu_145", "K4"],
longPress15: ["wb-mr6cu_145", "K5"],
longPress16: ["wb-mr6cu_145", "K6"],
longPress17: ["wb-mr6cu_132", "K1"],
longPress18: ["wb-mr6cu_132", "K2"],
longPress19: ["wb-mr6cu_132", "K3"],
longPress20: ["wb-mr6cu_132", "K4"],
longPress21: ["wb-mr6cu_132", "K5"],
longPress22: ["wb-mr6cu_132", "K6"],
longPress23: ["wb-mr6cu_130", "K1"],
longPress24: ["wb-mr6cu_130", "K2"],
longPress25: ["wb-mr6cu_130", "K3"],
longPress26: ["wb-mr6cu_130", "K4"],
longPress27: ["wb-mr6cu_130", "K5"],
longPress28: ["wb-mr6cu_130", "K6"],
longPress29: ["wb-mr6cu_93", "K1"],
longPress30: ["wb-mr6cu_93", "K2"],
longPress31: ["wb-mr6cu_93", "K3"],
longPress32: ["wb-mr6cu_93", "K4"],
longPress33: ["wb-mr6cu_93", "K5"],
longPress34: ["wb-mr6cu_93", "K6"],
longPress35: ["wb-mr6cu_177", "K1"],
longPress36: ["wb-mr6cu_177", "K2"],
longPress37: ["wb-mr6cu_177", "K3"],
longPress38: ["wb-mr6cu_177", "K4"],
longPress39: ["wb-mr6cu_177", "K5"],
longPress40: ["wb-mr6cu_177", "K6"],
longPress41: ["wb-mr6cu_44", "K1"],
longPress42: ["wb-mr6cu_44", "K2"],
longPress43: ["wb-mr6cu_44", "K3"],
longPress44: ["wb-mr6cu_44", "K4"],
longPress45: ["wb-mr6cu_44", "K5"],
longPress46: ["wb-mr6cu_44", "K6"],
longPress47: ["wb-mr6cu_17", "K1"],
longPress48: ["wb-mr6cu_17", "K2"],
longPress49: ["wb-mr6cu_17", "K3"],
longPress50: ["wb-mr6cu_17", "K4"],
longPress51: ["wb-mr6cu_17", "K5"],
longPress52: ["wb-mr6cu_17", "K6"],
},
200, 1000
);