Здравствуйте.
Судя по логам, cron молчит.
В терминале вижу вот это:
root@wirenboard-ARAXKJYF:~# ps wax | grep cron
13052 pts/2 S+ 0:00 grep cron
Может что-то надо было ещё установить после полной переустановки системы?
Здравствуйте.
Судя по логам, cron молчит.
В терминале вижу вот это:
root@wirenboard-ARAXKJYF:~# ps wax | grep cron
13052 pts/2 S+ 0:00 grep cron
Может что-то надо было ещё установить после полной переустановки системы?
Нужно установить крон
Если речь идёт о кроне, который используется в движке правил, то там используется своя внутренняя реализация, а не общесистемный cron, так что отдельного процесса это не порождает.
Если Вам для каких-то целей нужен общий, тогда его действительно нужно установить: apt-get install cron
, но это уже не связано с движком правил.
Именно так.
Вот сценарии в скрипте, ни один не срабатывает.
//Контроль за отключением определенных приточных клапанов в полночь
defineRule(“Air_Valves_Midnight_Time_Control”, {
when: cron(“@midnight”), // in 00:00 every day
then: function () {
for (var i=1; i<4; i++) {
if (dev[“Air_Valve_Stroke_1_”+String(i)][“open”]) {
dev[“wb-mio-gpio_191:2”][“DIR”+String(i)] = false;
dev[“Air_Valve_Stroke_1_”+String(i)][“open”] = false;
log(“AIR VALVE{}: {} BY SCHEDULE”,String(i),air_valve_finish_status[Number(dev[“Air_Valve_Stroke_1_”+String(i)][“open”])]);
}
}
}
});
//Контроль за включением определенных приточных клапанов утром
defineRule(“Air_Valves_Midnight_Time_Control”, {
when: cron(“0 7 * * *”), // in 07:00 every day
then: function () {
for (var i=3; i<4; i++) {
if (!dev[“Air_Valve_Stroke_1_”+String(i)][“open”]) {
dev[“wb-mio-gpio_191:2”][“DIR”+String(i)] = true;
dev[“Air_Valve_Stroke_1_”+String(i)][“open”] = true;
log(“AIR VALVE{}: {} BY SCHEDULE”,String(i),air_valve_finish_status[Number(dev[“Air_Valve_Stroke_1_”+String(i)][“open”])]);
}
}
}
});
//Контроль за температурой в подвале с проверкой каждый час
defineRule(“CELLAR_VENTILATION_Control”, {
when: cron(“@hourly”), // hourly check
then: function () {
if (dev[“wb-w1/28-000006aad7ae”] > dev.Cellar_Temperature.volume + delta_temp) { //если температура датчика больше установленного значения
dev[“wb-gpio”][“EXT1_R3A1”] = 1;
delta_temp = 0;
} else {
dev[“wb-gpio”][“EXT1_R3A1”] = 0;
delta_temp = 1;
}
schedule_vent = true;
log("SCHEDULE CELLAR TEMPERATURE CHECKING… [{} vs {}] VENT status: {} ", dev[“wb-w1/28-000006aad7ae”],dev.Cellar_Temperature.volume + delta_temp, switch_status[1-delta_temp]);
}
});
Очень странно. Самый простой вариант вроде этого работает?
defineRule("test_cron", {
when: cron("* * * * * *"),
then: function() { log("Cron!"); }
});
На всякий случай, кое в чём параметры внутреннего cron немного отличаются от традиционных - там добавлен параметр “секунда” - самое первое поле означает секунды, а не минуты. Подробнее о синтаксисе здесь.
cron("* * * * * *") выполняется каждую секунду.
cron(“0 * * * * *”) выполняется каждую минуту.
вообщем надо разбираться как он тогда работает.
В остальном он должен работать так же, как классический cron, только добавляется ещё один столбец спереди для секунд. Для совместимости с обычным cron можно просто ставить туда 0.
Если при этом Ваши правила всё ещё не работают, значит, где-то в этом скрипте есть другая ошибка, из-за которой правила либо не регистрируются, либо не выполняются корректно.
Можете прислать весь скрипт?
Нашёл проблему. Некоторые правила имели одинаковые имена. Исправил на уникальные и заработало. ))
Добрый день.
Не работает правило:
defineRule("startAthome", {
when: cron("0 0 7 ? * MON,TUE,WED,THU,FRI *") ||
cron("0 15 18 ? * MON,TUE,WED,THU,FRI *") ||
cron("0 0 9 ? * SUN,SAT *"),
then: function () {
dev["homeState"]["At home"] = true;
dev["homeState"]["Asleep"] = false;
log("At home mode start");
}
});
В чем может быть ошибка?
changer, извините за задержку с ответом, у вас 7 позиций в cron-выражении, а надо 6:
(подробнее по ссылке https://godoc.org/github.com/robfig/cron#hdr-CRON_Expression_Format из статьи https://github.com/contactless/wb-rules )
Ок, спасибо. Значит несколько крон выражений с логическими операторами как в примере должны работать. Отлично!
Вот проверил сейчас еще и логические операторы и не получается с ними. Похоже, все сложнее, чем кажется.