Пробую разобраться со скриптом приведенным по ссылке.
Запихал в один скрипт и библиотеку и правила, которые её дергают.
В упор ничего не исполняется нормально.
Ни один log() из библиотеки в консоль не выводится.
Есть сообщения такие. Что они означают?
Особо последние 2… Что за А1?
листинг
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);
//
//
// скрипт обработки событий по теплице
//
//
(function() { // замыкание
defineAlias(“greenhouse_temp”, “wb-w1/controls/28-0000069be3c5”); //
defineAlias(“outdoor_day”, “wb-adc/controls/A1”); //датчик освещенности на улице
defineAlias(“ligth_barrel”, “wb-gpio/EXT2_R3A8”); // для работы заменить на R3A1
defineAlias(“light_garden_bed_1”, “wb-gpio/EXT2_R3A8”); // для работы заменить на R3A2
defineAlias(“light_garden_bed_6”, “wb-gpio/EXT2_R3A8”); // для работы заменить на R3A3
Schedules.registerSchedule({
“name” : “light_cucumber”, // освещение теплица
“autoUpdate” : “1m”,
“intervals” : [
[ [5, 30], [20, 58] ], // UTC+6, 05:30 - 23:59
]
});
// Освещение грядок
defineRule(“lighting_garden_bed_On”, {
when: function() {
return (dev._schedules.light_cucumber) && (outdoor_day > 1);
},
then: function (newValue, devName, cellName) {
log(“lighting_garden_bed_OnOff newValue={}, devName={}, cellName={}”, newValue, devName, cellName);
var on = dev._schedules.light_cucumber; //
dev[“ligth_barrel”] = on; // 136 вт лампа
dev[“light_garden_bed_1”] = on; // люминисцентные лампы
dev[“light_garden_bed_6”] = on; // 400 вт лампа
}
});
defineRule(“lighting_garden_bed_Off”, {
when: function() {
return (dev._schedules.light_cucumber) && (outdoor_day < 1);
},
then: function (newValue, devName, cellName) {
log(“lighting_garden_bed_OnOff newValue={}, devName={}, cellName={}”, newValue, devName, cellName);
dev[“ligth_barrel”] = 0; // 136 вт лампа
dev[“light_garden_bed_1”] = 0; // люминисцентные лампы
dev[“light_garden_bed_6”] = 0; // 400 вт лампа
}
});
})()