Пожалуйста немного больше о таймерах.

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

Модератор: immortal

Ответить
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Пожалуйста немного больше о таймерах.

Сообщение Bagir » Чт сен 04, 2014 11:10 pm

В разделе Встроенные функции есть указания как создать теймер, как его удалить, и как проверить есть ли такой сейчас. timeOutExists возвращает идентификатор таймера, а если его нет, вернет 0. Отлично подходит в конструкции if.
Можно легко сделать вариант отодвигания таймера. Допустим у нас есть условие, что свет должен гореть 5 минут после обнаружения движения. Сделать это просто. При срабатывании датчика мы удаляем и вновь создаем новый таймер с периодом 5 минут.
А теперь вопрос знатокам: Как быть, если таких условий несколько, и период у них разный. Допустим, по событию дотчика движения, свет должен гореть 5 минут. По событию геркона на двери - 10 минут. А по значку в сценах - 15 минут. В чем прикол? а втом, что если мы запустили таймр на 15 минут, то по событию датчика движения таймер перезапустится всего она 5. Следовательно, при перезапуске таймера нам надо знать, сколько времени он будет еще работать, и сравнить это время со временем нового таймера. И возможно, что время нового таймера будет меньше, чем остаточное время у текущего таймера.
Ну вот собственно и вопрос: Как узнать, сколько еще время будет работать таймер. Это полюбому уже где то и не раз обсуждалось. Ну вот не находится у меня многое поиском.
В будущем наверное еще буду приставать с подобным вопросом, но уже про события. Штука тоже крайне интересная, но чтобы ей пользоваться, надо уметь получать данные из всех ее полей.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Пожалуйста немного больше о таймерах.

Сообщение sergejey » Пт сен 05, 2014 10:29 am

А вот кстати такого вопроса и не было :)
Честно говоря, мне не приходилось сталкиваться с тем, что необходимо один таймер "отодвигать" на разное время. Могу предложить такой "хак" для того, чтобы узнать, через какое время установлен таймер:

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

$timerId=timeOutExists('myTimer');
if ($timerId) {
 $timer_job=SQLSelectOne("SELECT UNIX_TIMESTAMP(RUNTIME) as TM FROM jobs WHERE ID='".$timerId."'");
 $diff=(int)$timer_job['TM']-time(); // получаем время в секундах, оставшееся до запланированного срабатывания таймера
} 
За это сообщение автора sergejey поблагодарили (всего 4):
Bagir (Пт сен 05, 2014 9:15 pm) • SmoKE_xDDD (Чт янв 16, 2020 11:10 pm) • slax (Чт янв 30, 2020 4:42 pm) • olis (Ср окт 20, 2021 11:37 am)
Рейтинг: 4.65%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Пожалуйста немного больше о таймерах.

Сообщение Ivan » Пт сен 05, 2014 1:26 pm

Я делаю отдельную переменную в ThisComputer и в ней храню значение последнего срабатывания.
И когда нужно беру из неё значение

Использую при срабатывании будильника.
Смысл такой. Будильник выключает NightMode (Или 11:00 часов). Но я то встаю не сразу, долго слушаю радио :) и встаю через 10-20 мин.

При этом срабатывает проверка датчиков движений. Понятное дело что движений нет, и Алиса переводит в режим NobadyHome (говорит: Кажется никого нет дома). А когда я встаю переводит в "Кто то дома". (говорит: добро пожаловать)

Чтобы такого не было, сохраняю время последнее срабатывание будильника. И отодвигает проверку на NobadyHome
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Пожалуйста немного больше о таймерах.

Сообщение Bagir » Пт сен 05, 2014 9:15 pm

sergejey, благодарю! Отлично работает!
Не то уж, чтобы для меня было так важно сделать разные периоды задержки включения освещения от разных источников событий, но вот чую, что в будущем мне это очень пригодится. Например с вентиляцией. И на примере этих фонарей я хотел просто отработать тему. Опять выручайте меня с хитрым вопросом )) Пожалуй пора создавать в ./lib/ свой закуток.
Ivan, я думал сделать так. И в Вашем случае это отличный вариант. Но вот для каждого случая мне просто не хотелось заводить лишние свойства. У меня уже есть опыт с предыдущей системой, когда в попытках получить желаемое, и за нехваткой инструментов, я на прикручивал кучу скриптов, и своих небольших программ. А когда пришлось немного изменить поведение системы, в конечном итоге и сам запутался. Тут же все офигенно, прозрачно и понятно. Объектная модель + язык программирования просто рвут в клочья любой планировщик. Жаль, что я понял это не сразу.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Пожалуйста немного больше о таймерах.

Сообщение Bagir » Ср сен 10, 2014 7:41 pm

А вот скажите, обязательно ли надо в случае отодвигания таймера, перед созданием нового с тем же именем, удалять предыдущий?
То есть такая ситуация: Мы точно знаем, что таймер с именем "test_timer" сейчас существует, и ему еще тикать несколько минут. А нам надо отодвинуть таймер на час. Не добавить, а заменить, хотя к вопросу это уже не имеет отношение. Алгоритм такой: Удаляем существующий таймер, и добавляем новый. А зачем удалять, если новый перезаписывает существующий?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Пожалуйста немного больше о таймерах.

Сообщение sergejey » Чт сен 11, 2014 12:22 pm

Удалять не обязательно -- при создании нового таймера с таким же именем старый удалится сам собой.
За это сообщение автора sergejey поблагодарил:
Bagir (Чт сен 11, 2014 12:25 pm)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Пожалуйста немного больше о таймерах.

Сообщение Bagir » Чт сен 11, 2014 12:25 pm

Спасибо за комментарий! Я видел что так происходит, но после Вашего подтверждения как то спокойней ))
И к стати, определение оставшегося времени работы таймера мне уже пригодилось дважды. Очень полезная функция!
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ответить