WB rules JS библиотека time

Имею голову аппаратной версии 6.8.2 на прошивке wb-2504. Во второй модуль вставлен модуль opentherm. Подключены три реле mr6cv3. Хочу, настроить пару правил. Первое правило должно выключать один канал реле через условные 15 минут. Речь пойдёт о нём. Java script не знаю. Воспользовался шаблонами с сайта wirenboard и знакомым программистом.
Налепил следующее, создал файл lib_schedules.js, его вообще не трогал, скопировал готовым с сайта. Я так понимаю что это функция планировщика.

[details=" lib_schedules.js"] global.proto.Schedules = {};

(function(Schedules) { // замыкание

function todayAt(now, hours, minutes) {
var date = new Date(now);
// i.e. “today, at HH:MM”. All dates are in UTC!
date.setHours(hours);
date.setMinutes(minutes);
return date;
}

function checkScheduleInterval(now, start_time, end_time) {
var start_date = todayAt(now, start_time[0], start_time[1]);
var end_date = todayAt(now, end_time[0], end_time[1]);
log(“checkScheduleInterval {} {} {}”.format(now, start_date, end_date));

if (end_date >= start_date) {
  if ((now >= start_date) && (now < end_date)) {
    return true;
  }
} else {
  // end date is less than start date, 
  // assuming they belong to a different days (e.g. today and tomorrow)

  // option 1: what if it's now the day of "end" date?
  // in this case the following is enough:
  if (now < end_date) {
    return true;
  }

  // well, that seems not to be the case. ok,
  // option 2: it's the day of "start" date:

  if (now >= start_date) {
    return true;
  }
}
return false;

}

function checkSchedule(schedule, now) {
if (now == undefined) {
now = new Date();
}

for (var i = 0; i < schedule.intervals.length; ++i) {
  var item = schedule.intervals[i];
  if (checkScheduleInterval(now, item[0], item[1])) {
    log("found matching schedule interval at {}".format(item));
    return true;
  }
}
return false;

}

function updateSingleScheduleDevStatus(schedule) {
log(“updateSingleScheduleDevStatus {}”.format(schedule.name));
dev[“_schedules”][schedule.name] = checkSchedule(schedule);
};

function addScheduleDevCronTasks(schedule) {
for (var i = 0; i < schedule.intervals.length; ++i) {
var interval = schedule.intervals[i];
for (var j = 0; j < 2; ++j) { // either start or end of the interval
var hours = interval[j][0];
var minutes = interval[j][1];
log("cron at " + “0 " + minutes + " " + hours + " * * *”);
defineRule(“schedule_dev{}{}{}”.format(schedule.name, i, j), {
when: cron(“0 " + minutes + " " + hours + " * * *”),
then: function () {
log(“schedule_dev {}{}{}”.format(schedule.name, i, j));
updateSingleScheduleDevStatus(schedule);
}
});
}
}
}

function addScheduleAutoUpdCronTask(schedule) {
defineRule(“schedule_auto_upd{}”.format(schedule.name), {
when: cron("@every " + schedule.autoUpdate),
then: function() {
dev._schedules[schedule.name] = dev._schedules[schedule.name];
}
});
}

var _schedules = {};

Schedules.registerSchedule = function(schedule) {
_schedules[schedule.name] = schedule;
};

Schedules.initSchedules = function() {
var params = {
title: “Schedule Status”,
cells: {}
};

for (var schedule_name in _schedules) {
  if (_schedules.hasOwnProperty(schedule_name)) {
    var schedule = _schedules[schedule_name];
    params.cells[schedule_name] = {type: "switch", value: false, readonly: true};
  }
};

defineVirtualDevice("_schedules", params);


for (var schedule_name in _schedules) {
  if (_schedules.hasOwnProperty(schedule_name)) {
    var schedule = _schedules[schedule_name];

    // setup cron tasks which updates the schedule dev status at schedule
    //   interval beginings and ends
    addScheduleDevCronTasks(schedule);

    // if needed, setup periodic task to trigger rules which use this schedule
    if (schedule.autoUpdate) {
      addScheduleAutoUpdCronTask(schedule);
    }

    // set schedule dev status as soon as possible at startup
    (function(schedule) {
      setTimeout(function() {
        updateSingleScheduleDevStatus(schedule);
      }, 1);
    })(schedule);

  };
};

};

})(Schedules); [/details]

Создал файл svet_podval_auto_off.js

[details=“svet_podval_auto_off.js”]
defineRule({
whenChanged: “wb-mr6cv3_145/K5”,
then: function (newValue, devName, cellName) {
dev[“wb-mr6cv3_145/K5”] = true;
setTimeout(function () {
dev[“wb-mr6cv3_145/K5”] = false;
}, 500000);
}})
[/details] В целом всё работает, но у меня есть две претензии. В каких величинах указывается время? Думал, что в секундах, но не так. Подобрал методом тыка число, которое обеспечивает отключение канала реле через около 20 минут. И самый главный косяк, что мне нужно, чтобы скрипт отслеживал включение реле и выключал его через 15 минут. А он не просто это делает, а зачем-то держит реле в установленный период времени включённым. А мне так не надо, мне надо чтобы по событию включения канала реле запускался таймер, который через 15 минут перевод канал реле в положение выключено и больше ничего не делает. Ныне имеющийся скрипт меня не утраивает тем, что в течение таймера я не могу выключить канал сам, он зачем-то сразу его включает, хотя я об этом не просил (могу быть не прав, т.к. не знаю язык программирования). Суть в итоге простая, если я забыл выключить свет в погребе, он должен выключить его сам.

Добрый день!

Благодарю за обращение! Понадобится время, чтобы разобраться в вашем вопросе.

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

Как параметры модуля описаны в его документации?

Добрый день!

Вам удалось разобраться?

[quote=“BrainRoot, post:4, topic:28925”]
А с какого сайта? Точнее - дайте пожалуйста ссылку на документацию этого модуля.
[/quote] Если я не указал сайт, значит это сайт wirenboard. Примеры правил — Wiren Board
Оттуда полностью скопирован файл lib_schedules.js

[quote=“BrainRoot, post:4, topic:28925”]
Как параметры модуля описаны в его документации?
[/quote] Никак.

[quote=“DmitryKur, post:5, topic:28925”]
Вам удалось разобраться?
[/quote] Пока нет.