Сработка автоподсветки в определнный интервал времени

Здравствуйте.
Подобную задачу уже видел обсуждали и не одну. Но саму даже с подсказками из этих обсуждений справиться не получилось.
В общем задача такая чтобы подсветка включалась только ночью т.е. в определенный временной промежуток при наличии движения.

Сейчас на временной интервал внимание можно не обращать, это в целях тестирования чисто.

var motion_timer_1_timeout_ms = 10 * 1000;
var motion_timer_1_id = null;
var motion = 50;
var autolight = false;

defineRule("Start circulation cron job", { 
  when: cron("0 0 6,14 * * *"), 
  then: function () {
   autolight = true;
    }
});

defineRule("Stop circulation cron job", {
  when: cron("0 0 8,18 * * *"),  
  then: function () {
    autolight = false;
    }
});

defineRule("motion_detector_1", {
whenChanged: "wb-msw-v4_36/Current Motion",
    then: function (newValue) {
      if (autolight === true) {  
      if (newValue > motion) {
            dev["wb-mr6c_122/K1"] = true;
            if (motion_timer_1_id) {
                clearTimeout(motion_timer_1_id); //если на входе что то будет, то К1 включится, а счетчик сбросится, т.е. if проверяет переменную и если она отлична от null то срабатывает сброс
            }
            motion_timer_1_id = setTimeout(function () { //через время 10с, К1 будет отключенно, а переменная станет не задана 
                dev["wb-mr6c_122/K1"] = false;
                motion_timer_1_id = null;
            }, motion_timer_1_timeout_ms);
        }
      }
    },
});

Добрый день!

Пример правила может выглядеть так:

var motion_timer_1_timeout_ms = 10 * 1000;
var motion_timer_1_id = null;
var motion = 50;
var autolight = false;

// включаем ночью
defineRule("autolight_on", {
  when: cron("0 0 22 * * *"), // 22:00 каждый день
  then: function () {
    autolight = true;
  }
});

// выключаем утром
defineRule("autolight_off", {
  when: cron("0 0 6 * * *"), // 06:00 каждый день
  then: function () {
    autolight = false;
  }
});

// реакция на движение
defineRule("motion_detector_1", {
  whenChanged: "wb-msw-v4_36/Current Motion",
  then: function (newValue) {
    if (autolight && newValue > motion) {
      dev["wb-mr6c_122/K1"] = true;

      if (motion_timer_1_id) {
        clearTimeout(motion_timer_1_id);
      }

      motion_timer_1_id = setTimeout(function () {
        dev["wb-mr6c_122/K1"] = false;
        motion_timer_1_id = null;
      }, motion_timer_1_timeout_ms);
    }
  }
});

Из личного опыта: удобно учитывать не только движение, но и яркость в помещении. Часто бывает, что днём темно, и тогда подсветка рабочих зон включается автоматически.

Также рекомендую рассмотреть применение астро-таймера — он позволяет привязывать логику включения/выключения к времени восхода и захода солнца.

Спасибо большое, сегодня испытаю.

1 лайк

Буду ждать обратной связи