Контексты в шаблонах поведения

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

Модератор: immortal

sleepy
Сообщения: 24
Зарегистрирован: Чт июн 11, 2015 9:17 pm
Откуда: Ростов-на-Дону
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Re: Контексты в шаблонах поведения

Сообщение sleepy » Пт июн 12, 2015 12:42 pm

спасибо за ответ!
может лучше данные функции
context_activate($id)
context_getuser() - я так и не понял как работает
clearTimeOut('user_'.context_getuser().'_contexttimeout') - тоже не понял, что чистит.
добавить в справку http://majordomo.smartliving.ru/Main/Pr ... gFunctions
причём я о данных функциях узнал случайно, просматривая коннекты других людей. Мне прям очень не хватает общей полной справки по всем функциям :(

а можно по подробнее как работает "set context when matched"
и тоже было бы не плохо добавить описание в справку
http://majordomo.smartliving.ru/Main/ModulePatterns

p.s.
я часть реализовал, через "Время ожидания команды:1"(что кстати даёт небольшую задержку)
и "По истечении времени переключить в: фильм"(а там уже ожидание команды 60, а выхожу через "Спасибо" с очисткой контекста или "забудь")
Аватара пользователя
slgeo
Сообщения: 551
Зарегистрирован: Чт фев 05, 2015 2:35 pm
Откуда: РнД
Благодарил (а): 139 раз
Поблагодарили: 74 раза

Re: Контексты в шаблонах поведения

Сообщение slgeo » Пт июн 12, 2015 10:49 pm

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

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

http://192.168.0.2/admin.php?pd=cGFuZWw6e2FjdGlvbj1wYXR0ZXJuc30%3Dpz_&md=patterns&inst=adm&
 Error:
 0: 
INSERT INTO `patterns`(`TITLE`, `PATTERN`, `SCRIPT`, `SCRIPT_ID`, `TIME_LIMIT`, `IS_CONTEXT`, `IS_COMMON_CONTEXT`, `MATCHED_CONTEXT_ID`, `TIMEOUT`, `IS_LAST`, `PRIORITY`, `SKIPSYSTEM`, `ONETIME`, `TIMEOUT_CONTEXT_ID`, `TIMEOUT_SCRIPT`, `PARENT_ID`) VALUES('помощь', '', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '', '0')
 
Выполнил этот запрос в phpmysqladmin, получаю:

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

Unknown column 'SKIPSYSTEM' in 'field list' 
Как такое может быть? Обновление на половину установилось, поле в базу так и не добавилось?
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение sergejey » Пн июн 15, 2015 10:33 am

slgeo писал(а):Выполнил этот запрос в phpmysqladmin, получаю:

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

Unknown column 'SKIPSYSTEM' in 'field list'
Как такое может быть? Обновление на половину установилось, поле в базу так и не добавилось?
Видимо так. Если система на Linux, то не хватило прав удалить и пересоздать файл modules/patterns/installed, а потому не прошла процедура добавления полей в базу данных.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Mescaline
Сообщения: 29
Зарегистрирован: Вт июн 09, 2015 6:03 pm
Благодарил (а): 4 раза
Поблагодарили: 15 раз

Re: Контексты в шаблонах поведения

Сообщение Mescaline » Вт июн 23, 2015 4:43 pm

С чем может быть связана следующая проблема:
есть шаблон поведения, реагирующий на фразу вида "включи (.+) музыку", в коде обрабатывается $matches[1] и в зависимости от фразы, включает плейлист. Например, команда "включи классическую музыку" выполнит

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

getURL(http\\:localhost:8080\requests\status.xml?command=in_play&input=C:\playlists\classic.xspf);
Все хорошо, регулярное выражение перехватывает сказанную (введенную) фразу и весь скрипт успешно выполняется. НО выполняется он только 1 раз. К примеру, он отработал, и если сказать такую же фразу через несколько минут, он отработает, но не включит музыку, при этом Алиса не ругается ни на что. Все бы ничего, но вчера заметил такую особенность - спустя некоторое время скрипт опять отработает 1 раз, после этого опять не работает. Примерно через каждые полчаса он может один раз отработать и все :(
Почему такое происходит, кто-нибудь знает?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение sergejey » Вт июн 23, 2015 5:10 pm

Mescaline писал(а):С чем может быть связана следующая проблема:
есть шаблон поведения, реагирующий на фразу вида "включи (.+) музыку", в коде обрабатывается $matches[1] и в зависимости от фразы, включает плейлист. Например, команда "включи классическую музыку" выполнит

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

getURL(http\\:localhost:8080\requests\status.xml?command=in_play&input=C:\playlists\classic.xspf); 
Все хорошо, регулярное выражение перехватывает сказанную (введенную) фразу и весь скрипт успешно выполняется. НО выполняется он только 1 раз. К примеру, он отработал, и если сказать такую же фразу через несколько минут, он отработает, но не включит музыку, при этом Алиса не ругается ни на что. Все бы ничего, но вчера заметил такую особенность - спустя некоторое время скрипт опять отработает 1 раз, после этого опять не работает. Примерно через каждые полчаса он может один раз отработать и все :(
Почему такое происходит, кто-нибудь знает?
Может быть стоит галочка для этого шаблона "использовать как контекст"? Если так, то её стоит убрать.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Mescaline
Сообщения: 29
Зарегистрирован: Вт июн 09, 2015 6:03 pm
Благодарил (а): 4 раза
Поблагодарили: 15 раз

Re: Контексты в шаблонах поведения

Сообщение Mescaline » Ср июн 24, 2015 9:07 am

sergejey писал(а): Может быть стоит галочка для этого шаблона "использовать как контекст"? Если так, то её стоит убрать.
Нет, галочка не стоит.
Mescaline
Сообщения: 29
Зарегистрирован: Вт июн 09, 2015 6:03 pm
Благодарил (а): 4 раза
Поблагодарили: 15 раз

Re: Контексты в шаблонах поведения

Сообщение Mescaline » Ср июн 24, 2015 10:44 am

Может я немного не понятно описал ситуацию. Поэтапно:
1. Создаю шаблон поведения. Ничего в нем не меняю, только вписываю название "включи (.+) музыку"
2. В скрипт шаблона помещаю код следующего вида:

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

$type = $matches[1];

if ($type == "классическую") {
getURL(getGlobal('VLC.Host').getGlobal('VLC.Port').getGlobal('VLC.Req').'in_play&input='.'C:\classic.xspf');
} elseif ($type == "рок") {
getURL(getGlobal('VLC.Host').getGlobal('VLC.Port').getGlobal('VLC.Req').'in_play&input='.'C:\rock.xspf');
} elseif ($type == "house") {
getURL(getGlobal('VLC.Host').getGlobal('VLC.Port').getGlobal('VLC.Req').'in_play&input='.'C:\house.xspf');
}
После чего сохраняю.
3. Дальше начинается магия. Я по очереди выполняю команды "включи классическую музыку", "включи рок музыку", "включи house музыку". Каждая из них отрабатывается и запускается нужный плейлист. Но при попытке выполнить повторный запрос любой из команд приводит к тому, что Алиса игнорирует это. Команда выполняется, $matches[1] содержит произнесенное слово, ссылка корректная. На деле тишина, только свою команду в чате вижу. Через некоторое время (через полчаса-час) каждая из этих команд еще по разу отработает и опять перекур на полчаса-час.
VLC перезапускал, думал в его плейлистах косяк, после конструкции if дописывал unset $matches[1] и unset $type, не помогло :(
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение sergejey » Ср июн 24, 2015 11:55 am

А, всё, разобрался :)
В общем надо в getURL ещё второй параметр передать ,0
Т.е. так:

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

getURL(getGlobal('VLC.Host').getGlobal('VLC.Port').getGlobal('VLC.Req').'in_play&input='.'C:\classic.xspf',0); 
Дело в том, что getURL по-умолчанию работает с 60-ти секундным кэшированием, т.е. 0 это сколько хранить кэш в секундах.
Пожалуй, в будущем сделаю, чтобы по-умолчанию вообще без кэширования работало, но пока так.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Mescaline
Сообщения: 29
Зарегистрирован: Вт июн 09, 2015 6:03 pm
Благодарил (а): 4 раза
Поблагодарили: 15 раз

Re: Контексты в шаблонах поведения

Сообщение Mescaline » Ср июн 24, 2015 2:20 pm

sergejey писал(а):А, всё, разобрался :)
В общем надо в getURL ещё второй параметр передать ,0
Т.е. так:

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

getURL(getGlobal('VLC.Host').getGlobal('VLC.Port').getGlobal('VLC.Req').'in_play&input='.'C:\classic.xspf',0);
Дело в том, что getURL по-умолчанию работает с 60-ти секундным кэшированием, т.е. 0 это сколько хранить кэш в секундах.
Пожалуй, в будущем сделаю, чтобы по-умолчанию вообще без кэширования работало, но пока так.
Понятно, спасибо :)
Я видел, везде использовался этот параметр, но так и не понял, зачем он и по своей недальновидности не стал использовать в некоторых кодах, теперь все встало на свои места. Благодарю.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Контексты в шаблонах поведения

Сообщение nick7zmail » Пт авг 21, 2015 6:54 am

Добрый день.
Недавно начал знакомиться с шаблонами. До этого использовал класс voice_command и объекты в нем, с изменениями в commandReceived.

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

$objects=getObjectsByClass("voice_command");
foreach($objects as $obj){
 $fl=1;
 
 foreach(explode(" ",mb_strtolower($obj['TITLE'],'utf-8')) as $wo){
  if (!(preg_match('/'.$wo.'(.*)/is',mb_strtolower($command,'utf-8'),$m))) {
   $fl=0;
  }
 }
 if ($fl==1) {
    callMethod($obj['TITLE'].".action",array("command"=>$m[1]));
    return;
 }
Полазив в шаблонах - понял что это гораздо нагляднее, проще, и функциональнее. Но возникло пару вопросов.
Как я понял шаблоны срабатывают до метода commandReceived, и он не активируется? в таком случае отсылки к voice_command можно снести?

Создал я шаблоны как то так

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

(включ|выключ)
    свет
        кухне
        ванн
И по идее команда "включи свет на кухне и в ванной" должна отрабатывать, если, скажем в шаблоне "кухне" стоит пункт возвращать контекст "свет", так ведь? Но как только ставлю галочку - после отработки шаблона, при попытке выставить контекст, вылетает вот такая ошибка.
111.jpg
111.jpg (41.86 КБ) 11948 просмотров
И еще один вопросик - как заставить отрабатывать шаблоны формата "включи свет в ванной и выключи (свет) в коридоре". Из существующего контекста "свет" по логике должно срабатывать только 1 указание "включи", а для второго - надо как то сбросить контекст. Че то пока не дошло до меня - как?

PS проверил еще один момент - два шаблона друг за другом не срабатывают...галочка "не проверять другие шаблоны при совпадении" не стоит нигде. В чем причина?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить