Страница 1 из 1
Выполнение задач по времени с заданной периодичностью
Добавлено: Чт мар 22, 2018 1:28 pm
karsotrade
Добрый день, подскажите пожалуйста как реализовать такую задачу: Предположим в меню есть выбор двух параметров - времени для выполнения задачи и периодичность выполнения в сутках (через 1, 2, 3 суток),. Необходимо чтобы задача выполнилась в заданное время, и каждое повторное выполнение было через заданное кол-во суток в это же время. Проще говоря, чтобы срабатывало реле допустим в 9 утра и последующие срабатывания были через 3-е суток (выбираем кол-во) в это же время.
Поискал на форуме, но не нашёл похожего решения, подскажите пожалуйста с какой стороны подойти к решению данной задачи.
Re: Выполнение задач по времени с заданной периодичностью
Добавлено: Чт мар 22, 2018 2:35 pm
Chainik
Вот такой код
Код: Выделить всё
$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/).
Re: Выполнение задач по времени с заданной периодичностью
Добавлено: Чт мар 22, 2018 2:46 pm
xor
Вам нужен самоустанавливающийся будильник, который после сработки заводил бы сам себя на следующий запуск в зависимости от параметров.
Кроме свойства времени ему ещё нужно свойство дата.
А в минутном цикле ловить дату и время.
Отправлено с моего Redmi 4X через Tapatalk
Re: Выполнение задач по времени с заданной периодичностью
Добавлено: Чт мар 22, 2018 8:39 pm
karsotrade
В том то и дело, что дата (день недели и т д) не нужна, нужно что бы тупо исполнялось через определённое количество дней. Ну всё равно, большое спасибо за подсказки.
Re: Выполнение задач по времени с заданной периодичностью
Добавлено: Чт мар 22, 2018 8:53 pm
Jilber
В данном случае под датой подразумевается, что к текущей дате прибавляется нужное кол-во дней и таким образом устанавливается дата следующего включения. Кстати хорошая идея. У самого суточный график и сейчас приходится включать будильник вручную. Наверное стоит добавить такую функцию.
Re: Выполнение задач по времени с заданной периодичностью
Добавлено: Чт мар 22, 2018 8:58 pm
karsotrade
Jilber писал(а):В данном случае под датой подразумевается, что к текущей дате прибавляется нужное кол-во дней и таким образом устанавливается дата следующего включения. Кстати хорошая идея. У самого суточный график и сейчас приходится включать будильник вручную. Наверное стоит добавить такую функцию.
Вот это уже интересно! Спасибо, вариант классный, буду думать как прописать.
Re: Выполнение задач по времени с заданной периодичностью
Добавлено: Чт мар 22, 2018 10:04 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" равно текущему времени.
Re: Выполнение задач по времени с заданной периодичностью
Добавлено: Чт мар 22, 2018 10:22 pm
Chainik
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()] надо конвертировать в формат "мм:чч".
Re: Выполнение задач по времени с заданной периодичностью
Добавлено: Чт мар 22, 2018 10:35 pm
Chainik
Или даже так, если функция
timeIs возвращает 1/0.
Код: Выделить всё
if (getGlobal($obj['TITLE'].".AlarmOn") == 1 && gg("ThisComputer.dateNow") == gg("AlarmOne.AlarmDate") && timeIs(getGlobal($obj['TITLE'].".AlarmTime")) == 1){что-то делаем} //если будильник включен, дата и время совпадают
Re: Выполнение задач по времени с заданной периодичностью
Добавлено: Пт мар 23, 2018 10:40 pm
karsotrade
Вот набросал код, исходя из советов форумчан.
В меню выставляются 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('Обьект.Метод'); //выполнить метод
}}};