Выполнение задач по времени с заданной периодичностью
Модератор: immortal
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Выполнение задач по времени с заданной периодичностью
Добрый день, подскажите пожалуйста как реализовать такую задачу: Предположим в меню есть выбор двух параметров - времени для выполнения задачи и периодичность выполнения в сутках (через 1, 2, 3 суток),. Необходимо чтобы задача выполнилась в заданное время, и каждое повторное выполнение было через заданное кол-во суток в это же время. Проще говоря, чтобы срабатывало реле допустим в 9 утра и последующие срабатывания были через 3-е суток (выбираем кол-во) в это же время.
Поискал на форуме, но не нашёл похожего решения, подскажите пожалуйста с какой стороны подойти к решению данной задачи.
Поискал на форуме, но не нашёл похожего решения, подскажите пожалуйста с какой стороны подойти к решению данной задачи.
-
- Сообщения: 1465
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 262 раза
- Поблагодарили: 455 раз
Re: Выполнение задач по времени с заданной периодичностью
Вот такой код
запускает метод ночью каждую неделю по средам в «02:05». (Вот тут о том, как это было использовано https://ab-log.ru/forum/viewtopic.php?f ... 789#p28789).
Вот ув.Amarok создал тему "на все времена" (viewtopic.php?f=23&t=2160). Надеюсь, для вас эта информация послужит "источником вдохновения".
Ну и в справочнике по функциям может быть что-то полезное найдете (https://kb.smartliving.ru/vstroennie-v- ... o-funkcii/).
Код: Выделить всё
$day_num=(int)date('w');
if ($day_num == "3") {
if (timeIs('02:05')) cm('Имя_объекта.Имя_метода');} //что-то там делаем
Вот ув.Amarok создал тему "на все времена" (viewtopic.php?f=23&t=2160). Надеюсь, для вас эта информация послужит "источником вдохновения".
Ну и в справочнике по функциям может быть что-то полезное найдете (https://kb.smartliving.ru/vstroennie-v- ... o-funkcii/).
- За это сообщение автора Chainik поблагодарил:
- karsotrade (Чт мар 22, 2018 8:36 pm)
- Рейтинг: 1.16%
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Выполнение задач по времени с заданной периодичностью
Вам нужен самоустанавливающийся будильник, который после сработки заводил бы сам себя на следующий запуск в зависимости от параметров.
Кроме свойства времени ему ещё нужно свойство дата.
А в минутном цикле ловить дату и время.
Отправлено с моего Redmi 4X через Tapatalk
Кроме свойства времени ему ещё нужно свойство дата.
А в минутном цикле ловить дату и время.
Отправлено с моего Redmi 4X через Tapatalk
- За это сообщение автора xor поблагодарил:
- karsotrade (Чт мар 22, 2018 8:53 pm)
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Re: Выполнение задач по времени с заданной периодичностью
В том то и дело, что дата (день недели и т д) не нужна, нужно что бы тупо исполнялось через определённое количество дней. Ну всё равно, большое спасибо за подсказки.
-
- Сообщения: 717
- Зарегистрирован: Ср май 03, 2017 7:41 pm
- Благодарил (а): 117 раз
- Поблагодарили: 113 раз
Re: Выполнение задач по времени с заданной периодичностью
В данном случае под датой подразумевается, что к текущей дате прибавляется нужное кол-во дней и таким образом устанавливается дата следующего включения. Кстати хорошая идея. У самого суточный график и сейчас приходится включать будильник вручную. Наверное стоит добавить такую функцию.
- За это сообщение автора Jilber поблагодарил:
- karsotrade (Чт мар 22, 2018 8:57 pm)
- Рейтинг: 1.16%
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Re: Выполнение задач по времени с заданной периодичностью
Вот это уже интересно! Спасибо, вариант классный, буду думать как прописать.Jilber писал(а):В данном случае под датой подразумевается, что к текущей дате прибавляется нужное кол-во дней и таким образом устанавливается дата следующего включения. Кстати хорошая идея. У самого суточный график и сейчас приходится включать будильник вручную. Наверное стоит добавить такую функцию.
-
- Сообщения: 717
- Зарегистрирован: Ср май 03, 2017 7:41 pm
- Благодарил (а): 117 раз
- Поблагодарили: 113 раз
Re: Выполнение задач по времени с заданной периодичностью
Подскажите правильный код.
Т.е. если свойство "AlarmOn"=1, "ThisComputer.dateNow" и "AlarmOne.AlarmDate" совпадают и "AlarmTime" равно текущему времени.
Код: Выделить всё
if (getGlobal($obj['TITLE'].".AlarmOn") && gg("ThisComputer.dateNow")= gg("AlarmOne.AlarmDate") && timeIs(getGlobal($obj['TITLE'].".AlarmTime"))){ //если будильник включен, дата и время совпадают
-
- Сообщения: 1465
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 262 раза
- Поблагодарили: 455 раз
Re: Выполнение задач по времени с заданной периодичностью
Jilber писал(а):Подскажите правильный код.Т.е. если свойство "AlarmOn"=1, "ThisComputer.dateNow" и "AlarmOne.AlarmDate" совпадают и "AlarmTime" равно текущему времени.Код: Выделить всё
if (getGlobal($obj['TITLE'].".AlarmOn") && gg("ThisComputer.dateNow")= gg("AlarmOne.AlarmDate") && timeIs(getGlobal($obj['TITLE'].".AlarmTime"))){ //если будильник включен, дата и время совпадают
Код: Выделить всё
if (getGlobal($obj['TITLE'].".AlarmOn") == 1 && gg("ThisComputer.dateNow") == gg("AlarmOne.AlarmDate") && timeIs(getGlobal($obj['TITLE'].".AlarmTime")) == time()){что-то делаем} //если будильник включен, дата и время совпадают
- Рейтинг: 1.16%
-
- Сообщения: 1465
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 262 раза
- Поблагодарили: 455 раз
Re: Выполнение задач по времени с заданной периодичностью
Или даже так, если функция timeIs возвращает 1/0.
Код: Выделить всё
if (getGlobal($obj['TITLE'].".AlarmOn") == 1 && gg("ThisComputer.dateNow") == gg("AlarmOne.AlarmDate") && timeIs(getGlobal($obj['TITLE'].".AlarmTime")) == 1){что-то делаем} //если будильник включен, дата и время совпадают
-
- Сообщения: 113
- Зарегистрирован: Пт июн 09, 2017 11:18 pm
- Благодарил (а): 17 раз
- Поблагодарили: 13 раз
Re: Выполнение задач по времени с заданной периодичностью
Вот набросал код, исходя из советов форумчан.
В меню выставляются 2 параметра: периодичность срабатывания (в днях) и время срабатывания. Выставляем время, когда нужно что то включить и периодичность в днях (через сколько дней нужно это включать в назначенное время). Делаю сейчас контроллер управления теплицей, вот и понадобилась такая функция для полива. Поправьте пожалуйста, если есть ошибки.
$day_num=(int)date('w'); //присваиваем номер дня недели
$day_period=(int)gg('Обьект.Свойство'); //присваиваем периодичность срабатывания
$day_set=($day_num+$day_period); //устанавливаем день срабатывания (день недели+периодичность)
if ($day_set<7){ //если день срабатывания меньше значения "7"
if ($day_num == $day_set){ //если настоящий день недели равняется дню срабатывания
if (timeIs==gg('Обьект.Свойство')){ //если настоящее время равняется установленному времени
cm('Обьект.Метод'); //выполнить метод
}}};
if ($day_set>=7){ //если день срабатывания больше или равен значению "7"
$day_set-7; //вычесть из числа дня срабатывания число "7"
if ($day_num == $day_set){ //если настоящий день недели равняется дню срабатывания
if (timeIs==gg('Обьект.Свойство')){ //если настоящее время равняется времени установленному из меню
cm('Обьект.Метод'); //выполнить метод
}}};
В меню выставляются 2 параметра: периодичность срабатывания (в днях) и время срабатывания. Выставляем время, когда нужно что то включить и периодичность в днях (через сколько дней нужно это включать в назначенное время). Делаю сейчас контроллер управления теплицей, вот и понадобилась такая функция для полива. Поправьте пожалуйста, если есть ошибки.
$day_num=(int)date('w'); //присваиваем номер дня недели
$day_period=(int)gg('Обьект.Свойство'); //присваиваем периодичность срабатывания
$day_set=($day_num+$day_period); //устанавливаем день срабатывания (день недели+периодичность)
if ($day_set<7){ //если день срабатывания меньше значения "7"
if ($day_num == $day_set){ //если настоящий день недели равняется дню срабатывания
if (timeIs==gg('Обьект.Свойство')){ //если настоящее время равняется установленному времени
cm('Обьект.Метод'); //выполнить метод
}}};
if ($day_set>=7){ //если день срабатывания больше или равен значению "7"
$day_set-7; //вычесть из числа дня срабатывания число "7"
if ($day_num == $day_set){ //если настоящий день недели равняется дню срабатывания
if (timeIs==gg('Обьект.Свойство')){ //если настоящее время равняется времени установленному из меню
cm('Обьект.Метод'); //выполнить метод
}}};