Таймер обратного отсчета

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

Модератор: immortal

Ответить
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Таймер обратного отсчета

Сообщение ZyaK » Пн мар 25, 2019 6:36 am

Здравствуйте, подскажите, может есть какое приложение для запуска таймера с обратным отсчётом?
Имеются некоторые устройства, которые очень хочется выключать по таймеру, действия уже прописаны в сценарии, хотелось бы, что бы время обратного отсчета устанавливалось из шаблона поведения.
Пробовал переделать шаблон от одноразового будильника и модуля аларм клок, но что то пошло не так :) тяжеловато с ПХП :?
PI2 + MQTT + 5 ESP8266 + Atmega16
JackOfShadows
Сообщения: 104
Зарегистрирован: Ср янв 09, 2019 8:37 pm
Благодарил (а): 23 раза
Поблагодарили: 26 раз

Re: Таймер обратного отсчета

Сообщение JackOfShadows » Пн мар 25, 2019 7:32 am

https://kb.mjdm.ru/vstroennie-v-majordomo-funkcii/

SetTimeOut('title','commands', $timeout); -- $timeout в секундах
ClearTimeOut('title'); -- аналог ClearScheduledJob('title');
timeOutExists('title'); -- возвращает идентификатор запланированной задачи (или 0, в случае отсутствия)
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: Таймер обратного отсчета

Сообщение ZyaK » Вс мар 31, 2019 11:24 am

Так и не разобрался я как поставить таймер, решил вот таким способом:

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

global $session;
$h1=gg('ThisComputer.timeH');//взять значерие часов
$m1=gg('ThisComputer.timeM');//взять значерие минут
$h=$matches[4]; 
$i=$matches[5]; 
$m=$matches[6];
$hh=$h;
$h2=$h1+$h;
$m2=$m1+$m;
if ($h2<10) {$h2="0".$h2;}
if ($h2>24) {
 $h2=$h2-24;
}
if (($m2>59)|(!$m2)) {
 $h2=$h2+1;
 $m2=$m2-60;
}
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h2.':'.$m2);
$obj=getObject($AlarmOne);
$h2=gg('AlarmOne.AlarmTime',$h2);
sayTo("Ставлю таймер на ".$h2 ,2, $session->data['TERMINAL']);
Но какой то не понятный косяк с прибавлением часов, то есть вообще часы не прибавляет ,например если говорю установить на 1 час, или на 1 час 30 минут, минуты прибавляет, если получается больше 60 минут, то час добавляет. а вот если именно на 1 час ставить, то ни в какую.
шаблон поведения выглядит так ((В|в)ключи|(П|п)оставь|(У|у)станови|(З|з)аведи) таймер на (\d+)(\D+)(\d*)
PI2 + MQTT + 5 ESP8266 + Atmega16
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Таймер обратного отсчета

Сообщение xor » Вс мар 31, 2019 12:14 pm

ZyaK писал(а):
Вс мар 31, 2019 11:24 am
Так и не разобрался я как поставить таймер, решил вот таким способом:

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

global $session;
$h1=gg('ThisComputer.timeH');//взять значерие часов
$m1=gg('ThisComputer.timeM');//взять значерие минут
$h=$matches[4]; 
$i=$matches[5]; 
$m=$matches[6];
$hh=$h;
$h2=$h1+$h;
$m2=$m1+$m;
if ($h2<10) {$h2="0".$h2;}
if ($h2>24) {
 $h2=$h2-24;
}
if (($m2>59)|(!$m2)) {
 $h2=$h2+1;
 $m2=$m2-60;
}
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h2.':'.$m2);
$obj=getObject($AlarmOne);
$h2=gg('AlarmOne.AlarmTime',$h2);
sayTo("Ставлю таймер на ".$h2 ,2, $session->data['TERMINAL']);
Но какой то не понятный косяк с прибавлением часов, то есть вообще часы не прибавляет ,например если говорю установить на 1 час, или на 1 час 30 минут, минуты прибавляет, если получается больше 60 минут, то час добавляет. а вот если именно на 1 час ставить, то ни в какую.
шаблон поведения выглядит так ((В|в)ключи|(П|п)оставь|(У|у)станови|(З|з)аведи) таймер на (\d+)(\D+)(\d*)
попробуй шаблон (поставь|установи|заведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)
потом в скрипте замени на своё

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

$h=$matches[2];
$m=$matches[6];

if ($h>24) {
say("Непонятно на который час завести будильник, определитесь и сообщите снова.",5);
return;
}
if (($m>59)|(!$m)) {
say("Непонятно на сколько минут завести будильник, поэтому пусть будет ровно 00.",5);
$m="00";
}
say("Ставлю будильник на ".$h." часов ".$m." минут. Постарайтесь не проспать.",5);
setGlobal('AlarmOnce.Enable',1);
setGlobal('AlarmOnce.start',$h.':'.$m);
некоторые движки голос-текст в фразах заменяют 1, 2, 3 ... на числительные один, два, три, тогда такой шаблон будет это пропускать(
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Таймер обратного отсчета

Сообщение Chainik » Вс мар 31, 2019 12:17 pm

Не совсем понял задачу, но может быть тут рецепт по решению (второй пост):
viewtopic.php?f=4&t=1760
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: Таймер обратного отсчета

Сообщение ZyaK » Вс мар 31, 2019 1:54 pm

Дак вот дело в том, что толком не понятно как и каким образом реализовывать таймер, то ли он живёт где то в коде пхп в виде переменной, или надо создать объект, задать ему свойства и прописать в методе минутном опрос этого объекта и его свойств, черт его пойми.
Мне вообще проще на мк или на той же еспи написать таймер с получением значения по mqtt и с сохранением в еепром.
Спасибо, попробую шаблон изменить, потом отпишусь как и чего
PI2 + MQTT + 5 ESP8266 + Atmega16
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Таймер обратного отсчета

Сообщение xor » Вс мар 31, 2019 2:19 pm

ZyaK писал(а):
Вс мар 31, 2019 1:54 pm
Дак вот дело в том, что толком не понятно как и каким образом реализовывать таймер, то ли он живёт где то в коде пхп в виде переменной, или надо создать объект, задать ему свойства и прописать в методе минутном опрос этого объекта и его свойств, черт его пойми.
Мне вообще проще на мк или на той же еспи написать таймер с получением значения по mqtt и с сохранением в еепром.
Спасибо, попробую шаблон изменить, потом отпишусь как и чего
и чо, АлярмОне нету?
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Таймер обратного отсчета

Сообщение xor » Вс мар 31, 2019 2:33 pm

ZyaK писал(а):
Вс мар 31, 2019 11:24 am

Но какой то не понятный косяк с прибавлением часов, то есть вообще часы не прибавляет ,например если говорю установить на 1 час, или на 1 час 30 минут, минуты прибавляет, если получается больше 60 минут, то час добавляет. а вот если именно на 1 час ставить, то ни в какую.
шаблон поведения выглядит так ((В|в)ключи|(П|п)оставь|(У|у)станови|(З|з)аведи) таймер на (\d+)(\D+)(\d*)
в коде шаблона первой строкой вставьте
debmes('входная фраза ->'.$original);
в иксрее посмотрите, как входная фраза формируется - цифра пишется или слово
Ответить