подскажите по таймеру

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

Модератор: immortal

Ответить
gagarin74
Сообщения: 331
Зарегистрирован: Пн апр 06, 2015 9:51 am
Благодарил (а): 37 раз
Поблагодарили: 22 раза

подскажите по таймеру

Сообщение gagarin74 » Пн сен 05, 2016 11:51 pm

Жена попросила сделать ей таймер в умном доме. На 3,5,10,20,30,60 минут.
кроме как OnNewMinute ни чего в голову не лезет. Может существует что то более простое ?
Интерфейс может быть любой. Я вообще то задумал сделать через TELEGRAMM. Планшет всегда на кухне :)
Может кто поможет ? С телегой разобрался -проблем там нет. Вопрос как заставить что то говорить после 3 минут :) после нажатия кнопки(в телеги или в веб интерфейсе Алисы).
OnNewMinute- то же не все так просто как кажется.Счетчик запустить там не проблема.Проблема в том что для 3 минут (для варки яиц),очень нужно точные три минуты.Если нажать на кнопку на 30 секунде то используя этот метод мы получим 3 минуты и 30 секунд чистого времени.

За ранее спасибо.
zoz
Сообщения: 74
Зарегистрирован: Чт авг 11, 2016 1:19 am
Откуда: Киев
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: подскажите по таймеру

Сообщение zoz » Вт сен 06, 2016 12:23 am

Не знаю кто автор, но у многих в конекте есть шаблон поведения:


напомни через (\d+) минут (.+)

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

say("Запомнила, что через ".$matches[1]." минут надо напомнить ".$matches[2],15);
setTimeOut('timer','say("Прошло '.$matches[1].' минут. Напоминаю: '.$matches[2].'",15);',$matches[1]*60); 
думаю вам подойдет.
ну а если хотите интерфейс, то вяжите его уже на кнопки.
Домик Алисы - Orange Pi PC, DietPi | +BroadlinkRM+esp8266(espEasy)+zigbee(sonoff,Aqara)
gagarin74
Сообщения: 331
Зарегистрирован: Пн апр 06, 2015 9:51 am
Благодарил (а): 37 раз
Поблагодарили: 22 раза

Re: подскажите по таймеру

Сообщение gagarin74 » Вт сен 06, 2016 12:29 am

по ходу тут тоже округляется грубо. для 3 минут не подайдет.
gagarin74
Сообщения: 331
Зарегистрирован: Пн апр 06, 2015 9:51 am
Благодарил (а): 37 раз
Поблагодарили: 22 раза

Re: подскажите по таймеру

Сообщение gagarin74 » Вт сен 06, 2016 12:31 am

скорее всего нужен не таймер а секундомер!!!
C_3AXAPOB
Сообщения: 510
Зарегистрирован: Ср июн 08, 2016 4:17 pm
Благодарил (а): 124 раза
Поблагодарили: 101 раз

Re: подскажите по таймеру

Сообщение C_3AXAPOB » Чт дек 01, 2016 9:14 pm

Подскажите как сделать обратный отсчет таймера на сцене?
У меня свет отключается по таймеру через 10 минут при отсутствии движения в комнате и я хочу чтобы на сцене отображался обратный отсчет до выключения света.
Orange pi pc plus, megaD-2561, Xiaomi
--------------------------------------------------
http://connect.smartliving.ru/profile/908
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 183 раза

Re: подскажите по таймеру

Сообщение Jager » Чт дек 01, 2016 9:52 pm

gagarin74 писал(а):Жена попросила сделать ей таймер в умном доме. На 3,5,10,20,30,60 минут.
кроме как OnNewMinute ни чего в голову не лезет. Может существует что то более простое ?
У меня сделано так
Изображение

Изображение

Изображение

Изображение

При обновлении свойства выполняется метод

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

function pForm($n, $form1, $form2, $form5) {
    $n = abs($n) % 100;
    $n1 = $n % 10;
    if ($n > 10 && $n < 20) return $form5;
    if ($n1 > 1 && $n1 < 5) return $form2;
    if ($n1 == 1) return $form1;
    return $form5;
}
$timer=gg("KitchenTimer.Timer"); //берем длительность таймера (задается через меню)
$timetext= $timer.' ' .pForm($timer, 'минуту', 'минуты', 'минут'); //склоняем
say("Установлен таймер на $timetext",2); //уведомляем в чат
setTimeOut("kitchenTimer","say('Внимание! Закончился таймер на $timetext',2);",$timer*60); // запускаем таймер, после окончания пишем в чат  
За это сообщение автора Jager поблагодарил:
server (Пн янв 30, 2017 12:55 pm)
Рейтинг: 1.16%
server
Сообщения: 47
Зарегистрирован: Ср окт 12, 2016 11:21 pm
Благодарил (а): 18 раз
Поблагодарили: 7 раз

Re: подскажите по таймеру

Сообщение server » Пн янв 30, 2017 2:07 pm

Jager писал(а):
gagarin74 писал(а):Жена попросила сделать ей таймер в умном доме. На 3,5,10,20,30,60 минут.
кроме как OnNewMinute ни чего в голову не лезет. Может существует что то более простое ?
У меня сделано так

При обновлении свойства выполняется метод

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

function pForm($n, $form1, $form2, $form5) {
    $n = abs($n) % 100;
    $n1 = $n % 10;
    if ($n > 10 && $n < 20) return $form5;
    if ($n1 > 1 && $n1 < 5) return $form2;
    if ($n1 == 1) return $form1;
    return $form5;
}
$timer=gg("KitchenTimer.Timer"); //берем длительность таймера (задается через меню)
$timetext= $timer.' ' .pForm($timer, 'минуту', 'минуты', 'минут'); //склоняем
say("Установлен таймер на $timetext",2); //уведомляем в чат
setTimeOut("kitchenTimer","say('Внимание! Закончился таймер на $timetext',2);",$timer*60); // запускаем таймер, после окончания пишем в чат      
Добрый день!
Подскажите по таймеру. Слайдер срабатывает четко, а вот кнопки нет не хотят - время на слайдере меняется а сам метод через раз запускается.

PS. Вроде заработало.
Добавил в код

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

sg("KitchenTimer.Timer",5);
callMethod("KitchenTimer.Timer"); 
server
Сообщения: 47
Зарегистрирован: Ср окт 12, 2016 11:21 pm
Благодарил (а): 18 раз
Поблагодарили: 7 раз

Re: подскажите по таймеру

Сообщение server » Пн янв 30, 2017 5:36 pm

Как сделать, куда вписать

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

callMethod("Switch_t2.turnOff"); 
чтобы выключалось реле
Включать - включает , а выключать не знаю как сделать

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

function pForm($n, $form1, $form2, $form5) {
    $n = abs($n) % 100;
    $n1 = $n % 10;
    if ($n > 10 && $n < 20) return $form5;
    if ($n1 > 1 && $n1 < 5) return $form2;
    if ($n1 == 1) return $form1;
    return $form5;
}
$timer=gg("TimerAuto.Timer"); //берем длительность таймера (задается через меню)
$timetext= $timer.' ' .pForm($timer, 'минуту', 'минуты', 'минут'); //склоняем
sayReply("Установлен таймер прогрева на $timetext",2); //уведомляем в чат
callMethod("Switch_t2.turnOn");
setTimeOut("TimerAuto","say('Внимание! Закончился таймер прогрева на $timetext',2);",$timer*60); // запускаем таймер, после окончания пишем в чат 
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 183 раза

Re: подскажите по таймеру

Сообщение Jager » Пн янв 30, 2017 5:55 pm

server писал(а):Как сделать, куда вписать

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

callMethod("Switch_t2.turnOff");
чтобы выключалось реле
Включать - включает , а выключать не знаю как сделать

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

function pForm($n, $form1, $form2, $form5) {
    $n = abs($n) % 100;
    $n1 = $n % 10;
    if ($n > 10 && $n < 20) return $form5;
    if ($n1 > 1 && $n1 < 5) return $form2;
    if ($n1 == 1) return $form1;
    return $form5;
}
$timer=gg("TimerAuto.Timer"); //берем длительность таймера (задается через меню)
$timetext= $timer.' ' .pForm($timer, 'минуту', 'минуты', 'минут'); //склоняем
sayReply("Установлен таймер прогрева на $timetext",2); //уведомляем в чат
callMethod("Switch_t2.turnOn");
setTimeOut("TimerAuto","say('Внимание! Закончился таймер прогрева на $timetext',2);",$timer*60); // запускаем таймер, после окончания пишем в чат      
Можете добавить еще один таймер

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

setTimeOut("TimerAuto","say('Внимание! Закончился таймер прогрева на $timetext',2);",$timer*60);
setTimeOut("TimerAuto2","callMethod("Switch_t2.turnOff");",$timer*60); 
но если вам нужно выполнить несколько действий то лучше прописать их в скрипт и вызывать его

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

setTimeOut("TimerAuto","runScript("TimerAuto");",$timer*60); 
За это сообщение автора Jager поблагодарил:
server (Пн янв 30, 2017 6:45 pm)
Рейтинг: 1.16%
server
Сообщения: 47
Зарегистрирован: Ср окт 12, 2016 11:21 pm
Благодарил (а): 18 раз
Поблагодарили: 7 раз

Re: подскажите по таймеру

Сообщение server » Пн янв 30, 2017 6:44 pm

Так и сделал
Сделал сценарий auto_timer_off в нем повторил почти тоже самое

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

function pForm($n, $form1, $form2, $form5) {
    $n = abs($n) % 100;
    $n1 = $n % 10;
    if ($n > 10 && $n < 20) return $form5;
    if ($n1 > 1 && $n1 < 5) return $form2;
    if ($n1 == 1) return $form1;
    return $form5;
}
$timer=getGlobal("TimerAuto.Timer"); //берем длительность таймера (задается через меню)
$timetext= $timer.' ' .pForm($timer, 'минуту', 'минуты', 'минут'); //склоняем
callMethod("Switch_t2.turnOff");
sayReply("Внимание! Закончился таймер прогрева на $timetext.",2); 
а в строке setTimeOut в методе

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

setTimeOut("TimerAuto","runScript('auto_timer_off');",$timer*60); 
Ответить