Да уж… с двойным нажатием через правила получилось не очень. На шине 12 модулей. Считаю изменение счетчика нажатий за интервал времени. Если быстро нажать аппаратно модуль светодиодных лент отрабатывает включение/выключение, а по mqtt события изменения счетчика нажатия не происходит (( в итоге получается что если нажал очень коротко, то нужно нажимать больше 2х раз.
Посмотрите пожалуйста код. Может есть очевидные недоработки и ошибки?
var vent_su1_timeout_ms = 180 * 1000; //время работы вентилятора в мс
var vent_su1_timer_id = null;
defineVirtualDevice(“vent_wc1”, {
title: “Вентилятор су1”,
cells: {
OnOff: {
type: “switch”,
value: false
},
lastUpdated: {
type: “value”,
value: 0
}
}
});
defineRule(“vent1_switch_rule”, {
whenChanged: “vent_wc1/OnOff”,
then: function (newValue, devName, cellName) {
dev[“wb-gpio/EXT2_R3A6”] = newValue;
}
});
defineRule(“vent1_push_rule”, {
whenChanged: “wb-mrgb_97/Input 1 counter”,
then: function (newValue, devName, cellName) {
//log("New value = ",newValue);
timeStamp = new Date();
lapsed = timeStamp.getTime() - Number(dev[“vent_wc1”][“lastUpdated”]);
dev[“vent_wc1”][“lastUpdated”] = timeStamp.getTime();
//log("lapsed ", lapsed);
//log("now is ", timeStamp.getTime());
//log ("last updated ", Number(dev["vent_wc1"]["lastUpdated"]));
//log("Time lapsed", timeStamp.getTime() - Number(dev["vent_wc1"]["lastUpdated"]));
if (lapsed < 8500) { //запуск вентилятора если кнопка была нажата дважды в течении 8.5 секунд
log("wb-gpio_EXT2_R3A6", dev["wb-gpio/EXT2_R3A6"]);
dev["vent_wc1"]["OnOff"] = true;
if (vent_su1_timer_id) {
clearTimeout(vent_su1_timer_id);
}
vent_su1_timer_id = setTimeout(function () {
dev["vent_wc1"]["OnOff"] = false;
timeStamp = new Date();
dev["vent_wc1"]["lastUpdated"] = timeStamp.getTime();
vent_su1_timer_id = null;
}, vent_su1_timeout_ms);
}
}
});
][“lastUpdated”] = timeStamp.getTime();
vent_su1_timer_id = null;
}, vent_su1_timeout_ms);
}
}
});