Выполнение задач по времени с заданной периодичностью

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Выполнение задач по времени с заданной периодичностью

Сообщение karsotrade » Чт мар 22, 2018 1:28 pm

Добрый день, подскажите пожалуйста как реализовать такую задачу: Предположим в меню есть выбор двух параметров - времени для выполнения задачи и периодичность выполнения в сутках (через 1, 2, 3 суток),. Необходимо чтобы задача выполнилась в заданное время, и каждое повторное выполнение было через заданное кол-во суток в это же время. Проще говоря, чтобы срабатывало реле допустим в 9 утра и последующие срабатывания были через 3-е суток (выбираем кол-во) в это же время.
Поискал на форуме, но не нашёл похожего решения, подскажите пожалуйста с какой стороны подойти к решению данной задачи.
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Выполнение задач по времени с заданной периодичностью

Сообщение Chainik » Чт мар 22, 2018 2:35 pm

Вот такой код

Код: Выделить всё

$day_num=(int)date('w');
if ($day_num == "3") {
if (timeIs('02:05'))  cm('Имя_объекта.Имя_метода');}  //что-то там делаем  
запускает метод ночью каждую неделю по средам в «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/).
За это сообщение автора Chainik поблагодарил:
karsotrade (Чт мар 22, 2018 8:36 pm)
Рейтинг: 1.16%
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Выполнение задач по времени с заданной периодичностью

Сообщение xor » Чт мар 22, 2018 2:46 pm

Вам нужен самоустанавливающийся будильник, который после сработки заводил бы сам себя на следующий запуск в зависимости от параметров.
Кроме свойства времени ему ещё нужно свойство дата.
А в минутном цикле ловить дату и время.

Отправлено с моего Redmi 4X через Tapatalk
За это сообщение автора xor поблагодарил:
karsotrade (Чт мар 22, 2018 8:53 pm)
Рейтинг: 1.16%
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Выполнение задач по времени с заданной периодичностью

Сообщение karsotrade » Чт мар 22, 2018 8:39 pm

В том то и дело, что дата (день недели и т д) не нужна, нужно что бы тупо исполнялось через определённое количество дней. Ну всё равно, большое спасибо за подсказки.
Jilber
Сообщения: 717
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 117 раз
Поблагодарили: 113 раз

Re: Выполнение задач по времени с заданной периодичностью

Сообщение Jilber » Чт мар 22, 2018 8:53 pm

В данном случае под датой подразумевается, что к текущей дате прибавляется нужное кол-во дней и таким образом устанавливается дата следующего включения. Кстати хорошая идея. У самого суточный график и сейчас приходится включать будильник вручную. Наверное стоит добавить такую функцию.
За это сообщение автора Jilber поблагодарил:
karsotrade (Чт мар 22, 2018 8:57 pm)
Рейтинг: 1.16%
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Выполнение задач по времени с заданной периодичностью

Сообщение karsotrade » Чт мар 22, 2018 8:58 pm

Jilber писал(а):В данном случае под датой подразумевается, что к текущей дате прибавляется нужное кол-во дней и таким образом устанавливается дата следующего включения. Кстати хорошая идея. У самого суточный график и сейчас приходится включать будильник вручную. Наверное стоит добавить такую функцию.
Вот это уже интересно! Спасибо, вариант классный, буду думать как прописать.
Jilber
Сообщения: 717
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 117 раз
Поблагодарили: 113 раз

Re: Выполнение задач по времени с заданной периодичностью

Сообщение Jilber » Чт мар 22, 2018 10:04 pm

Подскажите правильный код.

Код: Выделить всё

  if (getGlobal($obj['TITLE'].".AlarmOn") && gg("ThisComputer.dateNow")= gg("AlarmOne.AlarmDate") && timeIs(getGlobal($obj['TITLE'].".AlarmTime"))){ //если будильник включен, дата и время совпадают 
Т.е. если свойство "AlarmOn"=1, "ThisComputer.dateNow" и "AlarmOne.AlarmDate" совпадают и "AlarmTime" равно текущему времени.
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Выполнение задач по времени с заданной периодичностью

Сообщение Chainik » Чт мар 22, 2018 10:22 pm

Jilber писал(а):Подскажите правильный код.

Код: Выделить всё

  if (getGlobal($obj['TITLE'].".AlarmOn") && gg("ThisComputer.dateNow")= gg("AlarmOne.AlarmDate") && timeIs(getGlobal($obj['TITLE'].".AlarmTime"))){ //если будильник включен, дата и время совпадают     
Т.е. если свойство "AlarmOn"=1, "ThisComputer.dateNow" и "AlarmOne.AlarmDate" совпадают и "AlarmTime" равно текущему времени.

Код: Выделить всё

 if (getGlobal($obj['TITLE'].".AlarmOn") == 1 && gg("ThisComputer.dateNow") == gg("AlarmOne.AlarmDate") && timeIs(getGlobal($obj['TITLE'].".AlarmTime")) == time()){что-то делаем} //если будильник включен, дата и время совпадают     
Только это все, конечно, надо проверять. Может быть время [time()] надо конвертировать в формат "мм:чч".
За это сообщение автора Chainik поблагодарил:
Jilber (Чт мар 22, 2018 10:32 pm)
Рейтинг: 1.16%
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Выполнение задач по времени с заданной периодичностью

Сообщение Chainik » Чт мар 22, 2018 10:35 pm

Или даже так, если функция timeIs возвращает 1/0.

Код: Выделить всё

if (getGlobal($obj['TITLE'].".AlarmOn") == 1 && gg("ThisComputer.dateNow") == gg("AlarmOne.AlarmDate") && timeIs(getGlobal($obj['TITLE'].".AlarmTime")) == 1){что-то делаем} //если будильник включен, дата и время совпадают      
karsotrade
Сообщения: 113
Зарегистрирован: Пт июн 09, 2017 11:18 pm
Благодарил (а): 17 раз
Поблагодарили: 13 раз

Re: Выполнение задач по времени с заданной периодичностью

Сообщение karsotrade » Пт мар 23, 2018 10:40 pm

Вот набросал код, исходя из советов форумчан.
В меню выставляются 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('Обьект.Метод'); //выполнить метод
}}};
Ответить