Расписание
Функция расписания и ограничений очень часто встречается в разных проектах, где есть устройства, уведомления и привязки. Например, может выглядеть следующим образом:
Как правило, расписание находится внизу окна и содержит следующие поля: "Приоритет", "Начало", "Окончание", "Ограничения". Рассмотрим их подробно на примере задачи для какого-то устройства.
Приоритет
Принимает значения от 1 до 100. Определяет приоритетность этой задачи относительно других. То есть, если получилось так, что Вы задали несколько задач на одно и то же время, то выберется та, которая имеет более высокий приоритет. Первый - самый высокий, дальше по убывающей.
Например, мы хотим организовать подсветку светильником дома, исходя от освещенности на улице, но при этом точно знаем, что ночью его следует выключать, чтобы экономить электричество. В этом случае мы создадим два задания: первое - с высоким приоритетом будет всегда выключать свет в интервале с 00:00 до 07:00 (ночью) независимо от освещенности. И второе задание, с более низким приоритетом, которое будет работать круглосуточно, но будет иметь низкий приоритет. Это задание будет анализировать освещенность и утром или вечером будет автоматически включать свет, но как мы помним, благодаря низкому приоритету будет игнорироваться в определенный диапазон времени.
Начало и Окончание
Период действия или активность задачи, который определяется временем начала и временем окончания. Можно задавать как в рамках одного дня, например с 07:00 до 15:00. Так и с учетом перехода одного дня в другой, например с 21:30 до 02:15.
Ограничения
Нередко возникает ситуация, когда требуется настроить время выполнения задач более гибко, чем просто в определенное время, например в определенные дни. Либо требуется такая логика работы, что придётся составлять множество задач, например для включения проветривания помещения на 15 минут каждого часа. Чтобы выполнить это просто и красиво можно задействовать ограничения, которые задаются через символ пробела в следующем формате:
- день недели (от 1 до 7, где 1 - понедельник, 7 - воскресенье)
- день месяца (от 1 до 31)
- часы (от 0 до 24)
- минуты (от 0 до 59)
Эти четыре параметра имеют одинаковые настройки и по умолчанию они выглядят так: /1 /1 /1 /1, что собственно означает, что ограничений нет. Любые настройки же состоят из:
[управляющий символ][значение],[управляющий символ][значение],[управляющий символ][значение], ... и т.д.
Управляющими символами могут быть:
- / - косая черта вправо, означает каждый
- = - равенство, означает только
Значения - это любые цифры, плюс возможность указать диапазон через дефис.
Рассмотрим несколько примеров настроек ограничений:
- /1 - каждый, который кратен единице, то есть по сути любой.
- /2 - каждый, который кратен двум. То есть, если говорить о часах, то это будут 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22.
- /5 - каждый, который кратен пяти. То есть, если говорить о часах, то это будут 0, 5, 10, 15, 20.
- =7 - только седьмой. То есть, если говорить о часах, то это будет только седьмой час.
- =10-12 - диапазон с 10 до 12. То есть, если говорить о часах, то это будет интервал с 10 до 12 часов.
- /1 /1 =8 =30-39 - каждый день недели, каждый день месяца, только в восьмом часу, когда минуты в диапазоне 30-39
- /1 /1 =9,=14,=19 =50-59 - каждый день недели, каждый день месяца, в 9, 14 и 19 часу, когда минуты в диапазоне 50-59
- /1 =1 =12 /20 - каждый день недели, только первого числа месяца, только в 12 часу, каждые 20 минут (итого время срабатывания 12:00, 12:20, 12:40)
- =1,=2,=3,=4,=5 /1 =7 =20-25 - в Пн, Вт, Ср, Чт, Пт, каждый день месяца, только в семь часов, когда минуты в диапазоне 20-25