Будильник

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

Модератор: immortal

sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

Re: Будильник

Сообщение sega6549 » Пт авг 28, 2015 10:37 am

доброе утро, у меня такая проблема, я говорю алисе поставить будильник на 8 часов 10 минут, она так и ставить, 8:10 но системное время и время алисы 08:10 и потому будильник не срабатывает, помогите решить проблему плиз, ставлю таким шаблоном:

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

((В|в)ключи|(П|п)оставь|(У|у)станови) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*) 
,
код такой:

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

$h=$matches[5];
$m=$matches[9];
if ($h>24) {
say("Непонятно на который час завести будильник, определитесь и сообщите снова.",5);
return;
}
if (($m>59)|(!$m)) {
say("Непонятно на сколько минут завести будильник, поэтому пусть будет ровно 00.",5);
$m="00";
}
say("Ставлю будильник на ".$h." часов ".$m." минут. Постарайтесь не проспать.",5);
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m); 
что тут можно изменить чтоб ставило нормально?
задавал вопрос в другой ветке но че то молчат, извините за дублирование, просто скоро уезжаю и хотелось бы доделать его
Последний раз редактировалось sega6549 Пт авг 28, 2015 11:24 am, всего редактировалось 1 раз.
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Будильник

Сообщение Amarok » Пт авг 28, 2015 11:06 am

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

(поставь|установи|заведи) будильник на (\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('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m); 
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

Re: Будильник

Сообщение sega6549 » Пт авг 28, 2015 11:17 am

все, разобрался, может кому пригодится, код;

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

$h=$matches[5];
$m=$matches[9];
$hh=$h;
if ($h<10) {$h="0".$h;}
if ($h>24) {
say("Непонятно на который час завести будильник, определитесь и сообщите снова.",5);
return;
}
if (($m>59)|(!$m)) {
say("Непонятно на сколько минут завести будильник, поэтому пусть будет ровно 00.",5);
$m="00";
}
say("Ставлю будильник на ".$h." часов ".$m." минут. Постарайтесь не проспать.",5);
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m); 
Последний раз редактировалось sega6549 Пт авг 28, 2015 11:28 am, всего редактировалось 4 раза.
За это сообщение автора sega6549 поблагодарил:
Amarok (Пт авг 28, 2015 1:06 pm)
Рейтинг: 1.16%
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

Re: Будильник

Сообщение sega6549 » Пт авг 28, 2015 11:20 am

Amarok писал(а):

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

(поставь|установи|заведи) будильник на (\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('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m);
а в чем разница?
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Будильник

Сообщение Amarok » Пт авг 28, 2015 1:02 pm

В этом:

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

$hh=$h;
if ($h<10) {$h="0".$h;}
 
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Будильник

Сообщение LutsenkoDenis » Пт авг 28, 2015 1:32 pm

Amarok писал(а):В этом:

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

$hh=$h;
if ($h<10) {$h="0".$h;}
 
Где в коде используется переменная $hh?
Это

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

if ($h<10) {$h="0".$h;}
можно заменить на это

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

$h = str_pad($h, 2, '0', STR_PAD_LEFT); // добавляет лидирующий ноль перед строкой до указанного кол-ва знаков  
За это сообщение автора LutsenkoDenis поблагодарил:
Amarok (Пт авг 28, 2015 2:04 pm)
Рейтинг: 1.16%
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

Re: Будильник

Сообщение sega6549 » Пт авг 28, 2015 6:13 pm

Amarok писал(а):В этом:

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

$hh=$h;
if ($h<10) {$h="0".$h;}
че то не вижу этих срок в твоем коде...
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
GreatBAO
Сообщения: 119
Зарегистрирован: Пн авг 24, 2015 11:24 am
Откуда: Сочи
Благодарил (а): 4 раза
Поблагодарили: 14 раз

Re: Будильник

Сообщение GreatBAO » Пт авг 28, 2015 8:24 pm

кстати по поводу шаблона (поставь|установи|заведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)
в PHP регулярках я обычно игнорю заглавные буквы такой конструкцией /(поставь|установи|заведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)/i
но тут такая конструкция не отрабатывается, вопрос - как такой шаблон привести в регистронезависимый вариант без всяких (А|а) или [a-zA-Z]?
или лучше реализовать это сразу в коде ? что бы система, при обработке голосовых команд не учитывала регистр ?
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Будильник

Сообщение Amarok » Пт авг 28, 2015 8:36 pm

$where = $matches[1];
$where = mb_strtolower ($where, UTF8);
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
GreatBAO
Сообщения: 119
Зарегистрирован: Пн авг 24, 2015 11:24 am
Откуда: Сочи
Благодарил (а): 4 раза
Поблагодарили: 14 раз

Re: Будильник

Сообщение GreatBAO » Пт авг 28, 2015 8:47 pm

Amarok писал(а):$where = $matches[1];
$where = mb_strtolower ($where, UTF8);
ну пока так и делаю, но считаю это "костылями"
В основном, все запросы к системе идут по микрофону, отсюда делаем вывод что система примет запрос в нижнем регистре, но если делать запрос руками, то можно по привычке набрать первую заглавную (либо включен капс) и тогда шаблоны поведения уже не отрабатывают корректно без обработки регистра.

мне все таки кажется что можно научить систему правильным шаблонам согласно регуляркам PHP в виде //i
нужно будет потом поглядеть как обрабатываются эти шаблоны в основном коде

add: в общем немного поэкспериментировав, получил рабочий парсер заглавных букв в виде (\S{1}айди|\S{1}окажи)
может кто-то предложит вариант покрасивше ?)
Ответить