Добрый день.
Проверил ваши скрипты на вашей конфигурации. По сути повторяются все изложенные мысли в данной теме: Отработка правил завязанных на счетчики при перезагрузке - #8 от пользователя vkl62. Используемые вами скрипты не покрывали ситуацию, когда занулялись счетчики после перезагрузки модуля по питанию.
Т.к. проблема еще не решена, могу предложить подобное решение как в указанной выше теме.
gate.js
var timeout = 100
gateTopics = ["wb-mio-gpio_70:3/K1", "wb-mio-gpio_70:3/K2", "wb-mio-gpio_70:3/K3", "wb-mio-gpio_70:3/K4", "wb-mio-gpio_70:3/K8",]
gateNames = ["открыть главные ворота", "закрыть главные ворота", "SBS главные ворота", "остановить главные ворота", "SBS гаражные ворота",]
defineVirtualDevice("GarageGateControl", {
title: "Управление гаражными воротами",
cells: {
Up: {
title: "ВВЕРХ",
type: "switch",
value: false,
},
Down: {
title: "ВНИЗ",
type: "switch",
value: false,
},
Stop: {
title: "СТОП",
type: "switch",
value: false,
}
}
});
defineRule("GateControl", {
whenChanged: gateTopics,
then: function (newValue, devName, cellName) {
var index = gateTopics.indexOf(devName + '/' + cellName);
if (newValue == true) {
setTimeout(function (){
dev[gateTopics[index]]=false;
}, timeout);
SendTelegramMsg('Нажата кнопка ' + gateNames[index] + ' в Южном');
}
}
});
// гаражные ворота открываются от длинного нажатия левого выкл в коридоре
defineRule({
whenChanged: "wb-mr6c_118/Input 5 Long Press Counter",
then: function(newValue, devName, cellName) {
log("Срабатывание правила newValue: {}, предыдущее значение: {}".format(newValue, this.prevValue));
if (newValue === null) return;
if (newValue == this.prevValue) return;
if (newValue == 0) {
if (this.prevValue < (65536 - 5)) {
return;
}
}
if (newValue > 0) {
log("Выход переключился")
dev["wb-mio-gpio_70:3/K8"] = !dev["wb-mio-gpio_70:3/K8"];
}
this.prevValue = newValue;
}
});
// гаражные ворота открываются от длинного нажатия выкл в гараже
defineRule({
whenChanged: "wb-mr6c_118/Input 2 Long Press Counter",
then: function(newValue, devName, cellName) {
log("Срабатывание правила newValue: {}, предыдущее значение: {}".format(newValue, this.prevValue));
if (newValue === null) return;
if (newValue == this.prevValue) return;
if (newValue == 0) {
if (this.prevValue < (65536 - 5)) {
return;
}
}
if (newValue > 0) {
log("Выход переключился")
dev["wb-mio-gpio_70:3/K8"] = !dev["wb-mio-gpio_70:3/K8"];
}
this.prevValue = newValue;
}
});
light.js
// master switch OFF all light when leave home
defineRule("MasterSwitch", {
whenChanged: "wb-mr6c_118/Input 6 Long Press Counter",
then: function (newValue, devName, cellName) {
dev["wb-mr6c_118"]["K1"] = false; // свет в подсобке
dev["wb-mr6c_118"]["K2"] = false; // свет в гараже
dev["wb-mr6c_118"]["K3"] = false; // резерв для парковки
dev["wb-mr6c_118"]["K4"] = false; // свет в гардеробной
dev["wb-mr6c_118"]["K5"] = false; // свет в коридоре
dev["wb-mr6c_118"]["K6"] = false; // свет на крыльце
dev["wb-mr6c_120"]["K1"] = false; // резерв для подсветки крыши
dev["wb-mr6c_120"]["K2"] = false; // свет на чердаке
dev["wb-mr6c_120"]["K3"] = false; // свет в холле 2 этажа
dev["wb-mr6c_120"]["K4"] = false; // свет в сортире
dev["wb-mr6c_120"]["K5"] = false; // люстра в гостиной
dev["wb-mr6c_120"]["K6"] = false; // свет на веранде
dev["wb-mr6c_126"]["K1"] = false; // Варькин ночник
dev["wb-mr6c_126"]["K2"] = false; // Варькина люстра
dev["wb-mr6c_126"]["K3"] = false; // Люстра в спальне
dev["wb-mr6c_126"]["K4"] = false; // Настин ночник
dev["wb-mr6c_126"]["K5"] = false; // Свет в ванной 2 эт
dev["wb-mr6c_126"]["K6"] = false; // Викин ночник
dev["wb-mr6c_128"]["K1"] = false; // Викина люстра
dev["wb-mr6c_128"]["K2"] = false; // Люстра на кухне
dev["wb-mr6c_128"]["K3"] = false; // Точечные светильники на кухне
dev["wb-mr6c_128"]["K4"] = false; // свет в кабинете
dev["wb-mr6c_128"]["K5"] = false; //
dev["wb-mr6c_128"]["K6"] = false; //
SendTelegramMsg('MasterSwitch ON - весь свет выключен.');
log ('MasterSwitch ON - весь свет выключен.');
}
});
// Люстра на кухне включается от двойного нажатия выкл на кухне (который управляет светом на веранде)
defineRule({
whenChanged: "wb-mr6c_120/Input 6 Double Press Counter",
then: function(newValue, devName, cellName) {
log("Срабатывание правила newValue: {}, предыдущее значение: {}".format(newValue, this.prevValue));
if (newValue === null) return;
if (newValue == this.prevValue) return;
if (newValue == 0) {
if (this.prevValue < (65536 - 5)) {
return;
}
}
if (newValue > 0) {
log("Выход переключился")
dev["wb-mr6c_128/K2"] = !dev["wb-mr6c_128/K2"];
}
this.prevValue = newValue;
}
});
// Викина люстра включается от двойного нажатия выкл у Викиной кровати
defineRule({
whenChanged: "wb-mr6c_126/Input 6 Double Press Counter",
then: function(newValue, devName, cellName) {
log("Срабатывание правила newValue: {}, предыдущее значение: {}".format(newValue, this.prevValue));
if (newValue === null) return;
if (newValue == this.prevValue) return;
if (newValue == 0) {
if (this.prevValue < (65536 - 5)) {
return;
}
}
if (newValue > 0) {
log("Выход переключился")
dev["wb-mr6c_128/K1"] = !dev["wb-mr6c_128/K1"];
}
this.prevValue = newValue;
}
});
// Викин ночник включается от двойного нажатия главного выкл в Викиной комнате
defineRule({
whenChanged: "wb-mr6c_128/Input 1 Double Press Counter",
then: function(newValue, devName, cellName) {
log("Срабатывание правила newValue: {}, предыдущее значение: {}".format(newValue, this.prevValue));
if (newValue === null) return;
if (newValue == this.prevValue) return;
if (newValue == 0) {
if (this.prevValue < (65536 - 5)) {
return;
}
}
if (newValue > 0) {
log("Выход переключился")
dev["wb-mr6c_126/K6"] = !dev["wb-mr6c_126/K6"];
}
this.prevValue = newValue;
}
});
Для временного решения вашей проблемы, попробуйте данный вариант и сообщите, пожалуйста, о результате.