Форум » » Crestron + Алиса » Ответить

Crestron + Алиса

johnytsat: Добрый день,коллеги. Пытался кто-нибудь связать Алису с Crestron с помощью новой API "Умный дом" от Яндекс?

Ответов - 41, стр: 1 2 3 All

Вячеслав: Да, но https так и не осилил. Поэтому связал через чужой навык, который отдает все по http, да ещё и с плюшками в виде регулярных выражений. Кроме http еще ненужные особо IFTTT, MQTT, вроде и по https тоже может.

johnytsat: не через MajorDomo случаем?

Вячеслав: Нет, через Домовенка Кузю Сейчас навык добавили в приложение как умные устройства и можно говорить Алисе команды без вызова навыка домовенка. Можно сказать «Алиса, включи свет на 82%» Или «Алиса, включи канал 101», но в этом варианте нельзя самому задать контрольное слово ( яндекс генерит варианты сам на основе имени устройства) и нельзя сформировать свой ответ алисы как в случае стандартного вызова команды через навык. Т.е. Через раздел умных устройств на «Алиса, включи свет» она ответит типа «окей, включаю», а если говорить “Алиса, попроси домовенка кузю включить свет» она может ответить пользовательское “Спокойной ночи, сладких снов» вечером и “Включила, нет проблем» в дневные часы


SuHo: Доброго дня, Вячеслав Можете поподробнее описать что использовали качестве шлюза и какие его настройки?

Вячеслав: Шлюзом можно назвать только сервер владельца навыка "Домовенок Кузя" (alexstar.ru) Начнем с того что нужен аккаунт на яндексе к которому вы регистрируете устройства умного дома и собственно Яндекс станцию. Есть приложение Яндекс для телефонов в котором выполняются необходимые привязки Яндекс станции и создание/привязка прочих умных устройств. Яндекс станция понимает куда отправлять запрос анализируя того что вы сказали. Если к примеру сказать "Алиса, включи свет" Первым делом Алиса проверит, зарегистрированы ли для вашего аккаунта какие то умные устройства которые управляются словами "включи свет", если таких нет, то Алиса скажет просто типа "Я еще не умею такого делать, ну или поставит вам песню с таким названием" Если устройство есть (например вы добавили "лампа" сервиса Домовенок Кузя, в последствии переименовав на сайте alexstart "Лампа" в "Свет" ) то алиса генерит для такого устройства на основании его типа и имени пару десятков активационных фраз. Среди которых само собой есть фраза "Включи свет" Ваша фраза совпала с имеющейся фразой для одного из "виртуальных устройств", значит алиса отправляет команду серверу alexstar.ru данные в которых содержится инфа о пользователе (ваш уникальный id на яндексе идентификатор устройства и его состояние вкл/выкл/value) Ресурс alexstar тоже знает Вас как пользователя яндекс и на странице настроек ваших устройств выполняет для устройства "Свет" пункт меню "Правило на включение" в котором указано правило созданное вами на этом же сайте ("Включить свет"). В моем случае это url строка которая формирует GET запрос http://vyacheslav.ddns.net:6000/svet{value} Соответственно это GET запрос прилетает на мой домашний роутер и по порту 6000 редиректится на контроллер Crestron. Внутри этого Get запрос содержится фраза svet1 Я парсю её и понимаю что надо включить свет (средствами крестрон). Устройства можно создавать прямо на сайте alexstar они автоматически появятся в приложении яндекс. Подтверждает Алиса такую команду без тру фидбэка, на основании нескольких вариантов, которые генерит её AI. Это был вариант который через умные устройства. Другой базовый вариант (куда более мощный но требует добавлять в общем случае к команде название навыка) это голосовая команда непосредственно через навык "Алиса, попроси домовенка кузю включить свет" Алиса, зная свой зарегистрированный разработчиком Alex навык "Домовенок Кузя" перенаправляет вашу голосовую команду на сайт alexstar.ru (в ней есть куча полей согласно API яндекс диалогов), среди полей есть Ваш идентификатор (под которым объединены ваши устройства голосового управления телефон, яндекс станцию, браузер и т.п.) и собственно текст "включить свет". Ресурс находит нужного пользователя и в списке его правил находит правило с именем "включить свет" к которому вы привязали Get запрос вида http://vyacheslav.ddns.net:6000/{in}{1} Далее он прилетает к вам на роутер и т.д. как описано выше. Кроме GET может быть использована еще куча всяких вариантов на любой вкус и цвет. Преимущество второго варианта, 1) это несколько регулярных выражений а не только единственное {value} как в первом варианте (в примере {in}{1} ) с помощью которых вы можете дополнять GET запрос. См. на сайте alexstar описание. Вместо {in} в поле GET запроса прилетает та фраза которую вы сказали "включить свет". Вместо {1} прилетает "1" если в вашей фразе было "вкл" и "0" если в фразе было "выкл" Т.е. на контроллере я получаю "включить свет1" 2)Могу отправить свой ответ для озвучивания или написать его прямо в разделе правила на сайте. Если я отправлю в ответ на GET фразу "Включаю, нет проблем", алиса её озвучивает через колонку Яндекс станции. 3) Я сам полностью придумываю фразу которую потом могу парсить из голосовой команды. С помощью ответов и фраз я даже могу некий диалог реализовать между шлюзом и мной. Например: Я: Алиса, попроси домовенка кузю выключить режим охраны Алиса: Назовите, пароль Я: Алиса, ээээ 12345 Алиса: Пароль принят, выключаю режим охраны К сожалению, яндекс не хочет лечить "баг" с невыходом из навыка из браузера и наоборот бодрым выходом из навыка при работе со станцией по тайм ауту. Если бы они оставили выход только по фразе "Алиса, вернись", то можно было бы запустив навык однажды "Алиса, запусти навык Домовенок Кузя", потом говорить команды коротко без префикса как в варианте 1, при этом имея широкий функционал варианта 2. А уж если приперло музычку включить, то выйти из навыка "Алиса, вернись" и потом уже "Алиса, включи радио семь". Т.е. внутри навыка Алиса будет понимать только те команды, которым вы её обучили, на остальное говорить голосом домовенка "Команда не найдена". Кстати, первый вариант работы через умные устройства ещё хорош еще тем, что не нужно слушать противный голос домовенка Кузи. Быстрее это все попробовать и все станет понятно. Тем более вы можете поупражняться с голосовым помощником встроенным в Яндекс Браузер, необязательно покупать голосовые устройства Яндекса. Я описал лишь часть функционала, а там еще тележка плюшек.

olegny: Вячеслав пишет: Далее он прилетает к вам на роутер и т.д. как описано выше. Кроме GET может быть использована еще куча всяких вариантов на любой вкус и цвет. А как же с безпасностью? Эдак каждый может включить свет в вашем доме? ;)

Вячеслав: Может, если знает что и куда отправить. Для тех кому критична безопасность https тоже доступен Есть еще промежуточный вариант c basic авторизацией, да и acl никто не отменял, принимайте пакет только с доверенного сервера

SuHo: Вячеслав пишет: Я парсю её и понимаю что надо включить свет Вячеслав, спасибо огромное за подробный ответ. Я ещё не так глубоко изучил Crestron, поэтому у меня ещё вопрос - какой модуль вы используете для "приёма" пакетов от Алисы?

Вячеслав: Я использую самописный модуль на simpl+. Если не владете навком написания модулей на simpl+, то я варианта корректно обработать приходящие длинные строки стандартными кубиками с трудом представляю. Может коллеги подскажут. Могу конечно за небольшую плату предложить Вам модуль на simpl+ или дописать его под вашу задачу. В модуле в качестве параметров пишите искомые строки (типа: svet1 / свет1 / свет0 / выключить дисплей) каждой искомой строке соответствует параметр со строкой ответа (типа: включаю свет/ включаю дисплей для Яндекс станции), можно выбирать отправлять ответ или ответ формируется на сервере. Так же есть аналоговый выход для значений присылаемых через регулярные выражения {d1} или {value} чтоб реализовать управление каналами, температурой или % света. Ну и понятно, что каждому параметру соответствует digital выход для управления реакцией оборудования. В планах еще возможность добавить в ответы целочисленные значения, ну и наверно basic авторизацию. Добавил в версии 6 модуля Модуль используется на контроллере 2 -серии, под 3 серию может придётся править для поддержки кириллических символов, хотя может и заработает. В любом случае на латинице точно будет работать.

SuHo: с simpl+ нормально как обработать запрос с WEB-страницы с поиском я умею вот с получением не работал вы используете SocetServerStartListen?

Вячеслав: Да, его

SuHo: Спасибо. Буду пробовать

SuHo: Почти всё победил. Осталось только разобраться с настройкой Алисы при работе не через Кузю. Вячеслав, вам удалось уменьшить интервал посыла команд? У меня команды ходят только с интервалом 15 сек.

Вячеслав: Было у меня такое.)) Совершаете мои же ошибки на раннем этапе интеграции с сервисом. {текст удален} Но собственные ошибки и их поиск конечно полезны в плане саморазвития. Могу сэкономить Вам пару дней и скажу из-за чего это, если хотите )

SuHo: :) хочу

Вячеслав: 1.Используйте поле Content-Length 2.Используйте размерность переменной для TX не менее 500 символов (Тут я попался, так как использовал внешний клиент сначала, поменял потом на сокет, а размерность осталась прежняя, потерял время пока увидел что команда ушла обрезанной, хоть и с правильной длиной). Причина в кропнутом ответе. Из за некорректной команды сервак начинает тупить и время перед нормальным приёмом повторной команды иногда составляло до 20с

SuHo: не смог разобраться и понять :( пора с бутылкой пива в личку ;)

Вячеслав: Пивом тут не обойдётся

johnytsat: Вячеслав пишет: А возможно использовать вместо самописного модуля модуль TCP/IP Server для приема GET запроса на него? Или из-за длины команды он никогда его не увидит?

Вячеслав: Да, возможно использовать внешний TCP/IP Server. Просто вы будете ограничены по длине голосовых команд. Но в 80% случаев, особенно при использовании идентификаторов заменителей (например для варианта работы через умные устройства, так как символьное выражение голосовой команды там всё равно Яндексом не пересылается) внешнего модуля будет достаточно. RX запрос с идентификатором "tv0" составляет всего 66 символов, т.е. 66-3=63. 63 это минимальная служебная информация добавляемая к вашему идентификатору команды+value. 255-63=192 Итого 192 символа останется на вашу команду вместе со статусом/value. Или половину (96) от этого если будет использоваться кириллица. Чуть хуже ситуация с ответом. В моем случае служебный оверхед составляет порядка 184 символа (но это лишь в моем варианте). С другой стороны по методу 1, ответы вообще не нужны, так как Алиса не позволяет их озвучивать. Главная сложность парсить приходящие команды. В случае SIMPL+ эта задача решается куда более ловко. А если уж дошли то SIMPL+, то добавить сокет сервера пользуясь справкой не составит труда.



полная версия страницы