Всех с наступившим новым годом.
Решил поучиться новым сценариям управления белой лентой. Хочу сделать автоматическую регулировку яркости ленты по нескольким условиям:
- По времени - допустим с 4 дня должна включаться автоматическая регулировка яркости, а в 6 утра отключаться.
- По уровню освещенности - в указанный промежуток времени, в зависимости от уровня освещенности, меняем уровень яркости ленты
- По состоянию выключателя - лента должна регулировать яркость не только в указанные диапазоны времени и уровня освещенности, но и при условии что мы эту ленту включили кнопкой (физической или виртуальной)
- Если мы вручную отрегулировали яркость, допустим чтобы сделать комфортный свет для работы, то она уже не должна меняться автоматически до следующего временного цикла.
Имею 3 куска кода:
- На вкл/выкл ленты
defineRule({
whenChanged: "wb-mcm8_180/Input 3 Single Press Counter",
then: function (newValue, devName, cellName) {
dev["wb-led_101"]["Channel 4"] = !dev["wb-led_101"]["Channel 4"];
}
});
- на управление яркостью по длинному нажатию кнопки
var direction = false;
defineRule({
whenChanged: "wb-mcm8_180/Input 3 Long Press Counter",
then: function (newValue, devName, cellName) {
// Запуск таймера для изменения значения уровня яркости
startTicker("wb-mcm8_180/input3_long_press", 40);
}
});
// Правило для регулировки яркости по таймеру удерживания кнопки
defineRule({
when: function () { return timers["wb-mcm8_180/input3_long_press"].firing; },
then: function () {
var i = dev["wb-led_101/Channel 4 Brightness"];
if (dev["wb-mcm8_180/Input 3"]) {
if ( i < 100 && direction) {
i++
}
else if (i > 0 && !direction) {
i--
}
dev["wb-led_101/Channel 4 Brightness"] = i
} else {
timers["wb-mcm8_180/input3_long_press"].stop();
direction = !direction;
}
}
});
- изменение яркость в зависимости от уровня освещенности
defineRule ("led_white", { //
whenChanged: "wb-msw-v4_83/Illuminance",
then: function(newValue, devName, cellName) {
//
var date = new Date();
//
var date_start = new Date(date);
date_start.setHours(00);
date_start.setMinutes(00);
//
var date_end = new Date(date);
date_end.setHours(23);
date_end.setMinutes(59);
if ((date > date_start) && (date < date_end)) {
if (newValue < 10) {
dev["wb-led_101/Channel 4 Brightness"] = 100;
}
if ((newValue > 11) && (newValue < 20)) {
dev["wb-led_101/Channel 4 Brightness"] = 85;
}
if ((newValue > 21) && (newValue < 30)) {
dev["wb-led_101/Channel 4 Brightness"] = 70;
}
if ((newValue > 31) && (newValue < 40)) {
dev["wb-led_101/Channel 4 Brightness"] = 55;
}
if ((newValue > 41) && (newValue < 50)) {
dev["wb-led_101/Channel 4 Brightness"] = 45;
}
if ((newValue > 51) && (newValue < 60)) {
dev["wb-led_101/Channel 4 Brightness"] = 35;
}
if ((newValue > 61) && (newValue < 70)) {
dev["wb-led_101/Channel 4 Brightness"] = 20;
}
if ((newValue > 71) && (newValue < 80)) {
dev["wb-led_101/Channel 4 Brightness"] = 10;
}
if ((newValue > 81) && (newValue < 90)) {
dev["wb-led_101/Channel 4 Brightness"] = 50;
}
if (newValue > 91) {
dev["wb-led_101/Channel 4 Brightness"] = 0;
}
} else {
dev["wb-led_101/Channel 4 Brightness"] = 0;
}}
});
Как эти куски лучше срастить?
В теории понимаю что вкл/выкл это отдельный, вышестоящий код. Код регулировки яркости по длинному нажатию кнопки это основной код, в котором еще прописаны вторичные условия по времени и уровню освещенности, которые выполняются если ленту включили кнопкой, но уровень яркости не регулировали кнопкой. Но не пойму как корректно и последовательно прописать условия и приоритетность или последовательность выполнения правила