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

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

Модератор: immortal

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пт ноя 20, 2015 11:50 am

triada13 писал(а):nick7zmail, а можно поподробнее про данный шаблон? где со временем.
Да без проблем. Шаблон поиска:

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

через (\d+) минут(.?) (.+) 
Код

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

setTimeOut('timer', "getURL('http://localhost/command.php?qry='.urlencode($matches[3]));", $matches[1]*60); 
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
triada13
Сообщения: 242
Зарегистрирован: Вт мар 11, 2014 8:36 pm
Откуда: Челябинск
Благодарил (а): 107 раз
Поблагодарили: 7 раз

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

Сообщение triada13 » Пт ноя 20, 2015 11:56 am

nick7zmail писал(а):
triada13 писал(а):nick7zmail, а можно поподробнее про данный шаблон? где со временем.
Да без проблем. Шаблон поиска:

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

через (\d+) минут(.?) (.+) 
Код

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

setTimeOut('timer', "getURL('http://localhost/command.php?qry='.urlencode($matches[3]));", $matches[1]*60); 
:shock:
Я дико смущаюсь, а можно по подробнее для особо одаренных как я? :oops:
Majordomo на Orange Pi Zero.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пт ноя 20, 2015 12:19 pm

triada13 писал(а): можно по подробнее для особо одаренных как я? :oops:
Что вы имеете ввиду? Могу картинку приложить))...и да, код поправил, а то задача то создавалась, но не выполнялась нормально

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

setTimeOut('timer', "getURL('http://localhost/command.php?qry=".urlencode($matches[3])."');", $matches[1]*60); 
Вложения
111.jpg
111.jpg (116.54 КБ) 12136 просмотров
За это сообщение автора nick7zmail поблагодарили (всего 3):
triada13 (Пн янв 18, 2016 10:07 pm) • Samir77 (Чт окт 25, 2018 12:58 am) • GriMax (Пт май 03, 2019 10:51 pm)
Рейтинг: 3.49%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
LocalBrownie
Сообщения: 66
Зарегистрирован: Пт июл 11, 2014 11:08 am
Благодарил (а): 16 раз
Поблагодарили: 9 раз

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

Сообщение LocalBrownie » Пн янв 18, 2016 3:20 am

Доброго времени суток!
Может кто-нидь подсказать, как такое может быть?
Решил я усовершенствовать себе напоминалку на МД, чтоб можно было больше одного ремайндера выставлять и наткнулся на такие грабли.... (лог перевёрнут для удобства чтения)

21:39 Андрей: Алиса Напомни через 5 минут тест номер 1
21:39 Алиса: Принято напоминание - через 5 минут напомнить: тест номер 1
(Гуд! )
21:39 Андрей: Алиса Напомни через 6 минут тест номер 2
21:39 Алиса: Принято напоминание - через 5 минут напомнить: тест номер 1
(Не понял?????)
21:42 Андрей: Алиса Напомни через 5 минут тест номер 1
21:42 Алиса: Принято напоминание - через 6 минут напомнить: тест номер 2
(WTF!!!????????????????????)
21:42 Андрей: Алиса через 7 минут напомни тест номер 3
21:42 Алиса: Принято напоминание - через 5 минут напомнить: тест номер 1
:evil: ??????????????????????????????

Прямо как в анекдоте:
- Мальчик, а как тебя зовут
- (молчит)
- Мальчик, ты тормоз?
- Меня зовут Вова
- А где ты живёшь?
- Я не тормоз!!!

"Маршрут" по шаблонам следующий...
Алиса ==> Напомни через (\d+) минут (.+)

стоят галки на "Не проверять" и "не реагировать", ограничение по времени - 0 секунд
Выполнение кода при совпадении: ("боевой" закоментил и ввёл say в качестве дебага.)

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

$rnumber = gg("ThisComputer.Reminders_count") + 1;
$rname = "Reminder_$rnumber";
 
//setTimeOut($rname,'say("Напоминаю: '.$matches[2].'"); sg("ThisComputer.Reminders_count", (gg("ThisComputer.Reminders_count") - 1));',$matches[1]*60); 
//sg("ThisComputer.Reminders_count", $rnumber);

say("Принято напоминание - через $matches[1] минут напомнить: $matches[2]");
Set context when matched: - пусто

Блин! Фсё просто, как липисин!!!
Где грабли? Ткните носом, плиз! Как эти $matches-ы могут пролазить из предыдущих вызовов?!
Или может какая-то добрая душа повторит эксперимент?
Я вообще заметил что что-то не так только минут через 10 - всё работало, задания устанавливались, счётчик ремайндеров увеличивался и сбрасывался как и было задумано, названия генерились. Красота!
Только вот задания ставились "предыдущие", а на это я внимание обратил в последнюю очередь... :(

МД перезагружал - не помогает.
Все обновления установлены...

Заранее спасибо!
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн янв 18, 2016 10:02 am

Интересный случай)) Как я понимаю "Алиса" - это контекст? Попробуй там время работы контекста установить 0 или 1 сек... Чтобы он заново входил в него при каждой команде.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

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

Сообщение Alien » Пн янв 18, 2016 10:44 am

У меня как-то так работает.
Шаблон:
(Н|н)апомни через (\d+) (минут|минуты) (.+)
Код:
$rnumber = gg("ThisComputer.Reminders_count") + 1;
$rname = "Reminder_$rnumber";

setTimeOut($rname,'say("Напоминаю: '.$matches[4].'");sg("ThisComputer.Reminders_count", (gg("ThisComputer.Reminders_count") - 1));',$matches[2]*60);
sg("ThisComputer.Reminders_count", $rnumber);

say("Принято напоминание - через $matches[2] минут напомнить: $matches[4]");
Ubuntu на Banana pi M2U Connect
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн янв 18, 2016 10:51 am

Я говорю...скорее всего из-за контекста такая фигня...просто система остается в контексте "Алиса" и $matches[х] сохраняется, пока не покинешь этот контекст. Правда под такую логику не подходят строчки:

21:42 Андрей: Алиса Напомни через 5 минут тест номер 1
21:42 Алиса: Принято напоминание - через 6 минут напомнить: тест номер 2

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

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

Сообщение LocalBrownie » Пн янв 18, 2016 6:56 pm

nick7zmail писал(а): ...
Если конечно вы из лога не выкинули пару строк)) Одним словом таймаут контекста "Алиса" выставите 1 сек, и отпишитесь...дальше будем придумывать, если не сработает))
Ну грешен, да! :) Выкинул две строчки с таймингом минут 5 уже после всего этого безобразия. Там было про "твою мать" и "неизвестную команду" ;)

Так, я в обед попробовал выставить шаблону "Алиса" ограничение по времени - 1сек, время ожидания команды - 1сек.
Галки стоят на "Не проверять" и "Не реагировать".
Ничего по сути не изменилось кроме того что в конце 2 раза нарвался на полное непонимание со стороны Алисы из-за того что торопился уже на работу и перепутал "кодовую фразу" (там где про 7-8 минут):

13:06 Андрей: Алиса Напомни через 5 минут тест номер 1
13:06 Алиса: Принято напоминание - через 5 минут напомнить: тест номер 1
13:06 Андрей: Алиса Напомни через 6 минут тест номер 2
13:06 Алиса: Принято напоминание - через 5 минут напомнить: тест номер 1

13:06 Андрей: Алиса через 7 минут напомнить тест номер 3
13:06 Алиса: Принято напоминание - через 6 минут напомнить: тест номер 2

13:06 Андрей: Алиса через 8 минут напомнить тест номер 4
13:06 Алиса: Я слушаю!
13:07 Андрей: Алиса через 8 минут напомни тест номер 8
13:07 Алиса: Я слушаю!

Самое интересное что на первую "перепутанную" фразу (там где про 7 минут) она таки сработала, хотя и не должна была. Мистика, блин!

Я вот тут сейчас вспомнил - у меня был похожий многоуровневый шаблон и он раньше работал вроде. Вечером проверю, работает ли он еще.
Там вообще целое "дерево".
Алиса ==> Свет ==> комната ==> стороны ==> (\d+)( процентов|%)
triada13
Сообщения: 242
Зарегистрирован: Вт мар 11, 2014 8:36 pm
Откуда: Челябинск
Благодарил (а): 107 раз
Поблагодарили: 7 раз

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

Сообщение triada13 » Вт янв 19, 2016 7:07 am

nick7zmail писал(а):
triada13 писал(а): можно по подробнее для особо одаренных как я? :oops:
Что вы имеете ввиду? Могу картинку приложить))...и да, код поправил, а то задача то создавалась, но не выполнялась нормально

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

setTimeOut('timer', "getURL('http://localhost/command.php?qry=".urlencode($matches[3])."');", $matches[1]*60);
Не получается ничего, таймер создается, но действие выполняется тут же. :cry:
Majordomo на Orange Pi Zero.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Вт янв 19, 2016 9:54 am

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