Чуть изменить правило JS, прошу

Уважаемые добрый день.
Подскажите, что изменить, чтоб только выключался свет мастер кнопкой. при повторном длинном нажатии не включался?

defineVirtualDevice(“power_off”, {
title: “Мастер-гостинная”,
cells: {
power_off: {
type: “pushbutton”
},
}
});

var ps = new PersistentStorage(“power-storage”, { global: true });
var lights = [“wb-mr6c_22/K1”, “wb-led_194/Channels 3_4”, “wb-mr6c_48/K5”];

var isPowerOff = true;

defineRule({
whenChanged: [“wb-mcm8_211/Input 3 Long Press Counter”, “power_off/power_off”],
then: function (newValue, devName, cellName) {
if (isPowerOff) {
lights.forEach(function (light) {
ps[light] = dev[light];
dev[light] = false;
});
} else {
lights.forEach(function (light) {
dev[light] = ps[light];
});
}
isPowerOff = !isPowerOff;
}
});

Пока задержку изменил на 5000 мс

Ткните, пожалуйста, начинающего программиста)) где прописать, чтоб при повторном длинном нажатии не включалось?

А еще вопрос, будет около 40 отключаемых мастер кнопкой источников света.
Как прописать задержку примерно 500 мс, чтоб по очереди гасли включенные источники.

Замените вот это:

На вот это:
lights.forEach(function (light) {
ps[light] = dev[light];
dev[light] = false;
});

Супер, помогло.

А как задержку поставить при отключении 40 устройств ? чтоб они не разом все обесточивались и скачков не было напряжения, да и красиво будет когда последовательно все тухнет.

Добрый день!

С помощью таймеров GitHub - wirenboard/wb-rules: Rule engine for Wiren Board

О! хорошая ссылка.
Спасибо.
Ещё бы в том разобраться…

А вот на комнаты уже есть мастер выключатели, так думаю, что надо в общем мастер включателе дергать уже существующие в комнатах.
Как такая функция будет называться?

У вас же уже срабатывание правила триггерится по нескольким контролам. В тот же массив предлагаю добавить контрол от мастер-выключателя мастер-выключателей.

1 лайк

Подскажите, есть ли ещё вопросы?

Да, если можно про массив и тригерение по нескольким контролам подробнее расскажите.
я в итого добавил все устройства на общий выключатель, не разобрался как обращаться к локальным…

А погодите.
var lights = [“wb-mr6c_22/K1”, “wb-led_194/Channels 3_4”, “wb-mr6c_48/K5”];
Суда вписать название “off_gostinnaya/power_off”
?

Коллеги, уважаемые, такой вопрос.
defineRule({
whenChanged: “wb-led_20/Input 1 Double Press Counter”,
then: function (newValue, devName, cellName) {
dev[“wb-mr6c_22/K2”] = true;
}
});

Как написать, чтоб при повторном нажатии mr6c-22/K2 перешло в статус false ?
т.е. переключал свет двойным нажатием.

dev[“wb-mr6c_22/K2”] = !dev[“wb-mr6c_22/K2”];

SyntaxError: error parsing token (line 4)
duk_lexer.c:1272

Кавычки руками перепишите. Они тут форматируются на “красивые”.

Спасибо!!!

А сюда как вписать мастер выключатель описанный так.

defineVirtualDevice(“power_off_kabinet”, {
title: “ВЫКЛ кабинет”,
cells: {
power_off: {
type: “pushbutton”
},
}
});

var ps = new PersistentStorage(“power-storage”, { global: true });
var lights = [“wb-led_194/Channel 1”,“wb-mdm3_18/K1”];

var isPowerOff = true;

defineRule({
whenChanged: [“wb-mcm8_211/Input 1 Single Press Counter”, “power_off/power_off”],
then: function (newValue, devName, cellName) {
lights.forEach(function (light) {
ps[light] = dev[light];
dev[light] = false;
});
}
});

не могу физически проверить, надеюсь, все работает…

Подскажите, вопрос:

Ещё актуален?

Вот этот вопрос, к сожалению не поняла. Опишите подробнее, пожалуйста.