Таймеры, несколько команд устройству, TTS (NodeJS): различия между версиями
Нет описания правки |
Нет описания правки |
||
| Строка 20: | Строка 20: | ||
Схема работы: | Схема работы: | ||
* создаем обычный приватный диалог на [https://dialogs.yandex.ru/developer dialogs.yandex.ru] | * создаем обычный приватный диалог на [https://dialogs.yandex.ru/developer dialogs.yandex.ru] ([https://yandex.ru/dev/dialogs/alice/doc/protocol-docpage/ документация по работе навыков]) | ||
* устанавливаем и запускаем код навыка на сервере/хостинге | * устанавливаем и запускаем код навыка на сервере/хостинге | ||
* создаем нужные сценарии для умного дома в [[yandex.ru/quasar|квазаре]] и командуем | * создаем нужные сценарии для умного дома в [[yandex.ru/quasar|квазаре]] и командуем | ||
== Установка == | == Установка == | ||
<pre> | |||
# git clone https://github.com/subnetsRU/alice-command-skill.git | # git clone https://github.com/subnetsRU/alice-command-skill.git | ||
# cd alice-command-skill | # cd alice-command-skill | ||
# npm install | # npm install | ||
</pre> | |||
== Настройка == | |||
Создаём свой навык в [https://dialogs.yandex.ru/developer dialogs.yandex.ru] | |||
# Задаём имя навыка, то как мы будем к нему обращаться. | |||
# в ''Webhook URL'' нужно задать имя домена или IP-адрес где расположен скрипт ''alice-command-skill'', а так же указать порт (указан в объект ''config'', по умолчанию это порт 8443) | |||
# указываем приватность навыка | |||
# заполняем остальные обязательные поля | |||
# после чего отправляем навык на модерацию и ждём размещения в каталоге ''(вам придёт письмо когда это произойдёт)''. | |||
[[Файл:Create skill.png.png|мини|без]] | |||
Отредактируйте index.js и добавьте необходимую информацию в объект ''config'' | |||
Указываем путь до SSL сертификата и его ключа. | |||
Сертификат можно сделать самоподписанным ''(на момент написания статьи проверка валидности SSL сертификата со стороны Яндекса производится только для навыков Умного Дома, а так же если в навыке используется авторизация)''. Валидный сертификат можно бесплатно получить на [https://www.sslforfree.com/ sslforfree] или [https://letsencrypt.org/ru/ letsencrypt]. | |||
<pre> | |||
ssl: { | |||
crt: '/path/to/ssl.crt', //путь до файла с SSL сертификатом | |||
key: '/path/to/ssl.key', //путь до файла с ключом от SSL сертификата | |||
}, | |||
</pre> | |||
Указываем порт, на котором будут ожидаться запросы от яндекс диалогов и который мы указали в ''Webhook URL'' при [https://dialogs.yandex.ru/developer создании навыка]. | |||
<pre> | |||
port: 8443, | |||
</pre> | |||
Значение для параметра "cookie": | |||
Его можно получить открыв консоль браузера (F12, там вкладка network) и зайти на, например, https://iot.quasar.yandex.ru/m/user/devices | Его можно получить открыв консоль браузера (F12, там вкладка network) и зайти на, например, https://iot.quasar.yandex.ru/m/user/devices | ||
после чего тыкнуть в консоли на запрос и скопировать то, что будет в Request Headers после "Cookie". | после чего тыкнуть в консоли на запрос и скопировать то, что будет в Request Headers после "Cookie". | ||
[[Файл:Консоль браузера и куки.png|без]] | [[Файл:Консоль браузера и куки.png|без]] | ||
<pre> | |||
cookie: 'yandexuid=XXXXXXXXXXXXXXXXXX;uniqueuid=YYYYYYYYYYYYYYYYYYY;ну и так далее...', | |||
</pre> | |||
Далее зададим каким устройствам/пользователям разрешено использовать навык. | |||
<pre> | |||
auth:{ | |||
user_id: ['BBD3793D182F7C1842F0F1B99B9FE39DFA3E26557C99B7CDE2CAE116A3170301'], | |||
application: ['BBD3793D182F7C1842F0F1B99B9FE39DFA3E26557C99B7CDE2CAE116A3170301'], | |||
}, | |||
</pre> | |||
Их вы сможете узнать когда выполните своё первое обращение к навыку. Будет отображено в консоли (где вы запустили навык) в ''incoming JSON'', который отображает весь пришедший в навык запрос. | |||
[[Файл:User id.png|мини|без]] | |||
''user.user_id'' - Идентификатор пользователя Яндекса, единый для всех приложений и устройств. Присутствует когда вы выполнили вход в свой Яндекс аккаунт на устройстве и никогда не изменяется. | |||
''application.application_id'' - Идентификатор экземпляра приложения, в котором пользователь общается с Алисой. Присутствует всегда, но может изменяться (например если вы переустановите приложение). | |||
Если вы хотите дать возможность управления нескольким устройствам, то их можно перечислить через запятую. Пример: | |||
<pre> | |||
auth:{ | |||
user_id: ['BBD3793D182F7C1842F0F1B99B9FE39DFA3E26557C99B7CDE2CAE116A3170301','28D27CB412CAA0AB39DDBD9A6974BE2BCD75362DEFC9C7DE92799D8825EA5399'], | |||
application: ['BBD3793D182F7C1842F0F1B99B9FE39DFA3E26557C99B7CDE2CAE116A3170301','8E73021EA84D8432C264A6D75C30F2A654C22D3FCEB22D8BAAD30A807110FD0E'], | |||
}, | |||
</pre> | |||
Задайте интенты (слова на которые будет реагировать навык). | |||
* help - фразы для воспроизведения фраз команды "помощь". | |||
* enable - слова, которые будут означать команду для сценариев включения | |||
* disable - слова, которые будут означать команду для сценариев выключения | |||
<pre> | |||
intents: { | |||
help: ['справка', 'помощь', 'что ты умеешь'], | |||
enable: ['включи','включить'], | |||
disable: ['выключи','выключить'] | |||
}, | |||
</pre> | |||
Ну а теперь создадим сами сценарии, которые мы и собираемся выполнять. | |||
Сделать это можно как в приложении Яндекса ([https://mobile.yandex.ru/apps/android/search/ Android], [https://mobile.yandex.ru/apps/iphone/search/ IOS]), так и в [https://yandex.ru/quasar web-интерфейсе квазара]. | |||
<pre> | |||
scenarios: { //id взять на https://iot.quasar.yandex.ru/m/user/scenarios | |||
//формат: 'название сценария': 'ID сценария' | |||
enable: { //сценарии на включение | |||
'люстру': '1ca147ab-28a3-4c13-adcf-f71f986098ca', //сценарий: включи люстру | |||
'лампу': '1ca147ab-28a3-4c13-adcf-f71f986098ca', //сценарий: включи лампу | |||
'телек': 'ff1e8168-dd88-43cb-81aa-b3cc22e4c2ed', //сценарий: включи телек | |||
}, | |||
disable:{ //сценарии на выключение | |||
'люстру': 'b7386380-d2e4-4e1d-94f5-3fb4ad2409e9', //сценарий: выключи люстру | |||
'лампу': 'b7386380-d2e4-4e1d-94f5-3fb4ad2409e9', //сценарий: выключи лампу | |||
'телек': 'ff1e8168-dd88-43cb-81aa-b3cc22e4c2ed', //сценарий: выключи телек | |||
} | |||
}, | |||
</pre> | |||
запустите навык: | |||
<pre> | |||
# npm start | |||
</pre> | |||
== Послесловие == | == Послесловие == | ||
Версия от 09:37, 28 июня 2020
Телефон вызова экстренных служб - 112.
!!! ЭТО ЧЕРНОВИК !!!
Описание
По мотивам статьи Алиса, таймеры, TTS и Node-RED, идея взята оттуда.
Можно получить возможность выполнить несколько сценариев за одну команду, а так же выполнять сценарии по таймеру, но при этом node-red уже не нужен.
Пример команд:
- включи люстру и телевизор
- выключи люстру и включи телевизор
- включи аквариум и телевизор и выключи люстру
Для реализации этого вам понадобятся сервер/хостинг с поддержкой NodeJS и этот скрипт.
Таймеров на данный момент нет и они будут добавлены позднее.
Схема работы:
- создаем обычный приватный диалог на dialogs.yandex.ru (документация по работе навыков)
- устанавливаем и запускаем код навыка на сервере/хостинге
- создаем нужные сценарии для умного дома в квазаре и командуем
Установка
# git clone https://github.com/subnetsRU/alice-command-skill.git # cd alice-command-skill # npm install
Настройка
Создаём свой навык в dialogs.yandex.ru
- Задаём имя навыка, то как мы будем к нему обращаться.
- в Webhook URL нужно задать имя домена или IP-адрес где расположен скрипт alice-command-skill, а так же указать порт (указан в объект config, по умолчанию это порт 8443)
- указываем приватность навыка
- заполняем остальные обязательные поля
- после чего отправляем навык на модерацию и ждём размещения в каталоге (вам придёт письмо когда это произойдёт).

Отредактируйте index.js и добавьте необходимую информацию в объект config
Указываем путь до SSL сертификата и его ключа. Сертификат можно сделать самоподписанным (на момент написания статьи проверка валидности SSL сертификата со стороны Яндекса производится только для навыков Умного Дома, а так же если в навыке используется авторизация). Валидный сертификат можно бесплатно получить на sslforfree или letsencrypt.
ssl: {
crt: '/path/to/ssl.crt', //путь до файла с SSL сертификатом
key: '/path/to/ssl.key', //путь до файла с ключом от SSL сертификата
},
Указываем порт, на котором будут ожидаться запросы от яндекс диалогов и который мы указали в Webhook URL при создании навыка.
port: 8443,
Значение для параметра "cookie": Его можно получить открыв консоль браузера (F12, там вкладка network) и зайти на, например, https://iot.quasar.yandex.ru/m/user/devices после чего тыкнуть в консоли на запрос и скопировать то, что будет в Request Headers после "Cookie".

cookie: 'yandexuid=XXXXXXXXXXXXXXXXXX;uniqueuid=YYYYYYYYYYYYYYYYYYY;ну и так далее...',
Далее зададим каким устройствам/пользователям разрешено использовать навык.
auth:{
user_id: ['BBD3793D182F7C1842F0F1B99B9FE39DFA3E26557C99B7CDE2CAE116A3170301'],
application: ['BBD3793D182F7C1842F0F1B99B9FE39DFA3E26557C99B7CDE2CAE116A3170301'],
},
Их вы сможете узнать когда выполните своё первое обращение к навыку. Будет отображено в консоли (где вы запустили навык) в incoming JSON, который отображает весь пришедший в навык запрос.

user.user_id - Идентификатор пользователя Яндекса, единый для всех приложений и устройств. Присутствует когда вы выполнили вход в свой Яндекс аккаунт на устройстве и никогда не изменяется. application.application_id - Идентификатор экземпляра приложения, в котором пользователь общается с Алисой. Присутствует всегда, но может изменяться (например если вы переустановите приложение).
Если вы хотите дать возможность управления нескольким устройствам, то их можно перечислить через запятую. Пример:
auth:{
user_id: ['BBD3793D182F7C1842F0F1B99B9FE39DFA3E26557C99B7CDE2CAE116A3170301','28D27CB412CAA0AB39DDBD9A6974BE2BCD75362DEFC9C7DE92799D8825EA5399'],
application: ['BBD3793D182F7C1842F0F1B99B9FE39DFA3E26557C99B7CDE2CAE116A3170301','8E73021EA84D8432C264A6D75C30F2A654C22D3FCEB22D8BAAD30A807110FD0E'],
},
Задайте интенты (слова на которые будет реагировать навык).
- help - фразы для воспроизведения фраз команды "помощь".
- enable - слова, которые будут означать команду для сценариев включения
- disable - слова, которые будут означать команду для сценариев выключения
intents: {
help: ['справка', 'помощь', 'что ты умеешь'],
enable: ['включи','включить'],
disable: ['выключи','выключить']
},
Ну а теперь создадим сами сценарии, которые мы и собираемся выполнять. Сделать это можно как в приложении Яндекса (Android, IOS), так и в web-интерфейсе квазара.
scenarios: { //id взять на https://iot.quasar.yandex.ru/m/user/scenarios
//формат: 'название сценария': 'ID сценария'
enable: { //сценарии на включение
'люстру': '1ca147ab-28a3-4c13-adcf-f71f986098ca', //сценарий: включи люстру
'лампу': '1ca147ab-28a3-4c13-adcf-f71f986098ca', //сценарий: включи лампу
'телек': 'ff1e8168-dd88-43cb-81aa-b3cc22e4c2ed', //сценарий: включи телек
},
disable:{ //сценарии на выключение
'люстру': 'b7386380-d2e4-4e1d-94f5-3fb4ad2409e9', //сценарий: выключи люстру
'лампу': 'b7386380-d2e4-4e1d-94f5-3fb4ad2409e9', //сценарий: выключи лампу
'телек': 'ff1e8168-dd88-43cb-81aa-b3cc22e4c2ed', //сценарий: выключи телек
}
},
запустите навык:
# npm start
Послесловие
Для удобства чтения JSON на страницах можно использовать плагин для браузера: JSON Formatter
Есть ещё способ выполнить несколько сценариев - читайте "Несколько команд в одном сценарии".
Автор статьи: @VirusNet