Новое в работе с терминалами, sayTo, sayReply

Новые релизы, обновления и т.п.

Модератор: immortal

olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение olehs » Чт мар 01, 2018 9:49 pm

Vovix писал(а): какой смысл в sayTo для ChromeGateMJD, если ChromeGateMJD либо произносит ВСЁ что идет в лог Алисы, либо это просто пишет всплывающими сообщениями, но опять ВСЁ!
Вот когда ChromeGateMJD научиться выделять сообщения для себя, тогда будет другое дело!!! Сейчас увы так!!!

В некоторых случаях, sayTo для терминала на ChromeGateMJD может привести к двойному проговариванию, т.к. поскольку
ChromeGateMJD через веб-соккеты подписывается на события ASK, SAY и SAYTO.
и это ни кто, я думаю, не оспаривает,
ChromeGateMJD сначала возьмет say а потом sayTo (или наоборот) и в итого произнесет (или напишет два раза)

UPD:
хотя я не проводил основательных испытаний sayTo у себя, и конечно могу ошибаться...
и у себя чаще использую просто say
С самим sayTo у ChromeGateMJD проблем нету. Он четко понимает, для него сообщение или нет.

А вот проблема с sayReply известная и давно, так же как и ее причина. На место, где это все происходит я указывал еще в ноябре
https://github.com/sergejey/majordomo/issues/148

Здесь есть 2 проблемы:
1. У МЖД просто нет информации о том, обработал ли кто-то событие SAYTO по веб-сокетам.
2. sayTo возвращает 1 только в том случае, если запрос отработал MajorDroid, потому происходит двойное прогаваривание для всех модулей, подписаных на SAYTO.
Потому в sayReply после SAYTO шлется SAY для всех случаев, кроме ответа на запрос с Majordroid, а потом еще и SAYREPLY - безусловно.

Если заглянуть в тот код, что я привел под спойлером, то можно увидеть, что ChromeGateMJD отфильтровывает сообщения и не произносит в обработчике SAY повторно одну и ту же фразу, потому Vovix, двойное проговаривание выглядит странно. Если есть возможность потестить, с удовольствием поучаствую.

Как разрулить ситуацию с sayReply для ChromeGateMJD, я не знаю. Для остальных обработчиков (типа api.ai) решение есть (немного поправить sayTo), но я не понимаю, почему Сергей так сделал изначально потому и создал issue на гитхабе.

С MajorDroid ситуация обстоит лучше всего, т.к. тут сам МЖД инициирует события на терминале и точно знает, получилось у него или нет.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение olehs » Пт мар 02, 2018 12:33 am

yurik писал(а): И то же самое если написать в чат на дроиде, то тоже ответит всем(((
В Настройках/Терминалы должен быть правильно указан IP устройства с MajorDroid и стоять галочка
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение ZyaK » Пт мар 02, 2018 6:25 am

Идем на 9-ю страницу темы и смотрим что там сказано
Пример кода в сценарии:

global $session; //Обращаемся к глобальной переменной
sayTo("Ваш ответ на сценарий", 2, $session->data['TERMINAL']); // 2 - меньше звука нет. $session->data['TERMINAL'] - это имя терминала, которое хранится в сессии.

у меня везде сделано именно так, и все работает, отвечает куда нужно
За это сообщение автора ZyaK поблагодарили (всего 2):
yurik (Пт мар 02, 2018 10:57 am) • leodev (Чт июл 26, 2018 6:25 pm)
Рейтинг: 2.33%
PI2 + MQTT + 5 ESP8266 + Atmega16
yurik
Сообщения: 52
Зарегистрирован: Вс фев 11, 2018 7:32 pm
Благодарил (а): 10 раз
Поблагодарили: 2 раза

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение yurik » Пт мар 02, 2018 10:57 am

ZyaK писал(а):Идем на 9-ю страницу темы и смотрим что там сказано
Пример кода в сценарии:

global $session; //Обращаемся к глобальной переменной
sayTo("Ваш ответ на сценарий", 2, $session->data['TERMINAL']); // 2 - меньше звука нет. $session->data['TERMINAL'] - это имя терминала, которое хранится в сессии.

у меня везде сделано именно так, и все работает, отвечает куда нужно
Ну походу это пока единственное решение!
Электрик-любитель II-го разряда, java, matlab, php, DIY
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение olehs » Пт мар 02, 2018 11:03 am

yurik писал(а):Ну походу это пока единственное решение!
Но, к сожалению, не до конца рабочее. Глобальная переменная $session содержит имя терминала только если к ней обращаться напрямую из кода в шаблонах поведения.
Если у Вас там стоит вызов скрипта или метода, то не сработает. Как вариант, можно в скрипт передавать имя терминала. Но все же, хочется чтобы sayReply правильно заработала.
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение Vovix » Пт мар 02, 2018 11:35 am

olehs писал(а):...
потому Vovix, двойное проговаривание выглядит странно. Если есть возможность потестить, с удовольствием поучаствую.
...
Если есть желание получить эффект двойного проговаривания можно попробовать сделать следующее:

Имеем MDM в локальной сети и можем пока про нее забыть!!!
Имеем удаленную сеть (назовем ее Office) в интернете со статическим IP - пусть внешний ip будет zzz.zzz.zzz.zzz
в этой удаленно сети, предположим, имеем ПК с Windows - ip 192.168.0.10 (ну и расширением для хром)
и по wi-fi телефон на Андроид с MajorDroid на борту - ip 192.168.0.12

И так.
В MDM создаем терминал - например с именем DroidOffice и естественно с ip адресом zzz.zzz.zzz.zzz
ну а поскольку мы хотим использовать MajorDroid, то поставим соответствующую галочку в настройках этого терминала!

Далее настраиваем переброску порта 8001 в сети Office на внутренний 192.168.0.10 (Windows)
и до кучи проброску порта 7999 в этой же сети Office на 192.168.0.12 (MajorDroid) и вот это как раз и есть наш терминал DroidOffice по сути!

как вы думаете что будет происходить на ПК с Windows - ip 192.168.0.10 ?
...
А он будет ловить оба и say и sayTo... и мы получаем двойное проговаривание...
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение olehs » Пт мар 02, 2018 11:55 am

Ничего себе схема :o

Есть пара вопросов:
1. Что прописано в ChromeGateMJD в настройках в поле Имя терминала
2. Что передается в sayTo ?
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение Vovix » Пт мар 02, 2018 12:09 pm

olehs писал(а):Ничего себе схема :o

Есть пара вопросов:
1. Что прописано в ChromeGateMJD в настройках в поле Имя терминала
2. Что передается в sayTo ?
когда я разобрался почему у меня были двойные проговаривания, я от этого всего быстро избавился...
но в том, то и дело (правильный вопрос кстати) в настройках в поле Имя терминала было как раз DroidOffice
(ну там ранее даже везде вместо DroidOffice было просто Office)

Двойное проговаривание было именно на команды say в моём коде!
и видно было что расширение для хром отрабатывает одно и тоже два раза, сначала как SAY потом SAYTO
...
я посмотрел, мы же уже с вами переписывались по этому поводу: https://majordomo.smartliving.ru/forum/ ... =90#p63246
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение olehs » Пт мар 02, 2018 12:23 pm

Да, помню ту переписку.
С say такое происходит, если в МЖД в терминалах для теримнала с ChromeGateMJD поставить галку MajorDroid
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Новое в работе с терминалами, sayTo, sayReply

Сообщение Vovix » Пт мар 02, 2018 12:42 pm

olehs писал(а):Да, помню ту переписку.
С say такое происходит, если в МЖД в терминалах для теримнала с ChromeGateMJD поставить галку MajorDroid
вот мне кажется не хватает логики работы с ChromeGateMJD такой-же как с MajorDroid!
и галочку ввести ChromeGateMJD для терминалов!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Ответить