Страница 5 из 9

Re: Будильник

Добавлено: Пт авг 28, 2015 10:37 am
sega6549
доброе утро, у меня такая проблема, я говорю алисе поставить будильник на 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); 
что тут можно изменить чтоб ставило нормально?
задавал вопрос в другой ветке но че то молчат, извините за дублирование, просто скоро уезжаю и хотелось бы доделать его

Re: Будильник

Добавлено: Пт авг 28, 2015 11:06 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); 

Re: Будильник

Добавлено: Пт авг 28, 2015 11:17 am
sega6549
все, разобрался, может кому пригодится, код;

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

$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); 

Re: Будильник

Добавлено: Пт авг 28, 2015 11:20 am
sega6549
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);
а в чем разница?

Re: Будильник

Добавлено: Пт авг 28, 2015 1:02 pm
Amarok
В этом:

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

$hh=$h;
if ($h<10) {$h="0".$h;}
 

Re: Будильник

Добавлено: Пт авг 28, 2015 1:32 pm
LutsenkoDenis
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); // добавляет лидирующий ноль перед строкой до указанного кол-ва знаков  

Re: Будильник

Добавлено: Пт авг 28, 2015 6:13 pm
sega6549
Amarok писал(а):В этом:

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

$hh=$h;
if ($h<10) {$h="0".$h;}
че то не вижу этих срок в твоем коде...

Re: Будильник

Добавлено: Пт авг 28, 2015 8:24 pm
GreatBAO
кстати по поводу шаблона (поставь|установи|заведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)
в PHP регулярках я обычно игнорю заглавные буквы такой конструкцией /(поставь|установи|заведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)/i
но тут такая конструкция не отрабатывается, вопрос - как такой шаблон привести в регистронезависимый вариант без всяких (А|а) или [a-zA-Z]?
или лучше реализовать это сразу в коде ? что бы система, при обработке голосовых команд не учитывала регистр ?

Re: Будильник

Добавлено: Пт авг 28, 2015 8:36 pm
Amarok
$where = $matches[1];
$where = mb_strtolower ($where, UTF8);

Re: Будильник

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

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

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