Подскажите как правильно создать таймер!

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Подскажите как правильно создать таймер!

Сообщение xor » Вт апр 02, 2019 7:19 pm

Yashalta писал(а):так работает!

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

addScheduledJob("lightOnTimer50","fopen('http://192.168.18.110/state?c=set&n=60&o=1', 'r');say('Свет включен!',2);",time()+5);
Имейте ввиду, что использование аддшедуледджоб отличается от таймера не только заданием абсолютного времени вместо смещения, но и реализацией. Новое задание джоба с существующим именем создаст новый джоб с тем же именем (без очистки старого)

Отправлено с моего Redmi 4X через Tapatalk

Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Подскажите как правильно создать таймер!

Сообщение xor » Вт апр 02, 2019 7:21 pm

Yashalta писал(а):так работает!

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

addScheduledJob("lightOnTimer50","fopen('http://192.168.18.110/state?c=set&n=60&o=1', 'r');say('Свет включен!',2);",time()+5);
Ха, если в коде заменить аддшедуледджоб на сеттимеоут и убрать тиме()- ничего не изменится, только букв меньше и в таймере меньше ошибок))

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

setTimeOut("lightOnTutimer50","fopen('http://192.168.18.110/state?c=set&n=60&o=1', 'r');say('Свет включен!',2);",5);
Отправлено с моего Redmi 4X через Tapatalk
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Подскажите как правильно создать таймер!

Сообщение Chainik » Ср апр 03, 2019 8:56 pm

xor писал(а):
Вт апр 02, 2019 7:19 pm
Имейте ввиду, что использование аддшедуледджоб отличается от таймера не только заданием абсолютного времени вместо смещения, но и реализацией. Новое задание джоба с существующим именем создаст новый джоб с тем же именем (без очистки старого)
Интересно, если, допустим, запущен первый AddScheduledJob, а потом второй AddScheduledJob с тем же именем, а затем выполнен сброс

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

ClearScheduledJob('title');
Какой ScheduledJob при этом будет ликвидирован: первый, второй или оба?
Может кто знает?
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Подскажите как правильно создать таймер!

Сообщение tarasfrompir » Ср апр 03, 2019 9:01 pm

Chainik писал(а):
Ср апр 03, 2019 8:56 pm
xor писал(а):
Вт апр 02, 2019 7:19 pm
Имейте ввиду, что использование аддшедуледджоб отличается от таймера не только заданием абсолютного времени вместо смещения, но и реализацией. Новое задание джоба с существующим именем создаст новый джоб с тем же именем (без очистки старого)
Интересно, если, допустим, запущен первый AddScheduledJob, а потом второй AddScheduledJob с тем же именем, а затем выполнен сброс

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

ClearScheduledJob('title');
Какой ScheduledJob при этом будет ликвидирован: первый, второй или оба?
Может кто знает?
Вот содержимое функции

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

function clearScheduledJob($title)
{
    SQLExec("DELETE FROM jobs WHERE TITLE = '" . DBSafe($title) . "'");
}
Удалит все джобы с одинаковым названием
За это сообщение автора tarasfrompir поблагодарил:
Chainik (Ср апр 03, 2019 9:04 pm)
Рейтинг: 1.16%
Спасибо нам ПОМОЖЕТ..!
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Подскажите как правильно создать таймер!

Сообщение xor » Ср апр 03, 2019 9:16 pm

tarasfrompir писал(а):
Chainik писал(а):
Ср апр 03, 2019 8:56 pm
xor писал(а):
Вт апр 02, 2019 7:19 pm
Имейте ввиду, что использование аддшедуледджоб отличается от таймера не только заданием абсолютного времени вместо смещения, но и реализацией. Новое задание джоба с существующим именем создаст новый джоб с тем же именем (без очистки старого)
Интересно, если, допустим, запущен первый AddScheduledJob, а потом второй AddScheduledJob с тем же именем, а затем выполнен сброс

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

ClearScheduledJob('title');
Какой ScheduledJob при этом будет ликвидирован: первый, второй или оба?
Может кто знает?
Вот содержимое функции

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

function clearScheduledJob($title)
{
    SQLExec("DELETE FROM jobs WHERE TITLE = '" . DBSafe($title) . "'"); // а так будет
}
Удалит все джобы с одинаковым названием
Причем заявлено, что будет работать шаблон "title%" для удаления джобов по маске, а он не будет))

зы. SQLExec("DELETE FROM jobs WHERE TITLE like '" . DBSafe($title) . "'");

Отправлено с моего Redmi 4X через Tapatalk
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

Re: Подскажите как правильно создать таймер!

Сообщение Yashalta » Пт апр 05, 2019 4:57 pm

Я что-то делаю не так!
Я хочу, что бы мой 2-й "AddScheduledJob" выполнялся следом за первым. Но, он не выполняется, первый выполняется а второго как будто нет вообще!

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

if 
...
($key == 'civil_twilight_begin') {
  //echo 'Начало утренних сумерек: '.date("H:i", $val).'<br>';
  AddScheduledJob("job_civil_twilight_begin","cm('DarknessMode.deactivate');say('Начало утренних сумерек, через 20 минут выключаю свет во дворе!(script)',2);", $val); 
  AddScheduledJob("job_civil_twilight_begin2","fopen('http://192.168.18.110/state?c=set&n=65&o=0', 'r');say('Свет во дворе выключен!(script)',2);",time()+1200);
...
}
Что я не так делаю?
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Подскажите как правильно создать таймер!

Сообщение xor » Пт апр 05, 2019 6:30 pm

Yashalta писал(а):Я что-то делаю не так!
Я хочу, что бы мой 2-й "AddScheduledJob" выполнялся следом за первым. Но, он не выполняется, первый выполняется а второго как будто нет вообще!

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

if 
...
($key == 'civil_twilight_begin') {
  //echo 'Начало утренних сумерек: '.date("H:i", $val).'<br>';
  AddScheduledJob("job_civil_twilight_begin","cm('DarknessMode.deactivate');say('Начало утренних сумерек, через 20 минут выключаю свет во дворе!(script)',2);", $val); 
  AddScheduledJob("job_civil_twilight_begin2","fopen('http://192.168.18.110/state?c=set&n=65&o=0', 'r');say('Свет во дворе выключен!(script)',2);",time()+1200);
...
}
Что я не так делаю?
Зачем вы сами себя путаете, засовывая кучу кода в аддшедуледджобы?
Создайте скрипт, отладьте, и запускайте аддшедуледджобом этот скрипт в нужное время

Отправлено с моего Redmi 4X через Tapatalk

Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Подскажите как правильно создать таймер!

Сообщение Logrus » Пт апр 05, 2019 8:47 pm

Yashalta писал(а):
Пт апр 05, 2019 4:57 pm
Что я не так делаю?
готовое не читаете, не стал бы писать, но есть же готовое еще и помимо статического смещения еще и динамическое относительно облачности
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

Re: Подскажите как правильно создать таймер!

Сообщение Yashalta » Пт апр 05, 2019 8:57 pm

Logrus писал(а):
Пт апр 05, 2019 8:47 pm
готовое не читаете, не стал бы писать, но есть же готовое еще и помимо статического смещения еще и динамическое относительно облачности
Вот сейчас не понимаю о чем вы! Тем более про статическое и динамическое...
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Подскажите как правильно создать таймер!

Сообщение Chainik » Пт апр 05, 2019 11:31 pm

Yashalta писал(а):
Пт апр 05, 2019 8:57 pm
Logrus писал(а):
Пт апр 05, 2019 8:47 pm
готовое не читаете, не стал бы писать, но есть же готовое еще и помимо статического смещения еще и динамическое относительно облачности
Вот сейчас не понимаю о чем вы! Тем более про статическое и динамическое...
Это он про "динамическое относительно облачности". А чтобы учесть фактический уровень освещенности (и на основе этого смещать ежедневное время включения и выключения), естественно, нужны показания уличного датчика освещенности.
За это сообщение автора Chainik поблагодарил:
Yashalta (Сб апр 06, 2019 12:02 am)
Рейтинг: 1.16%
Ответить