Перейти к содержанию

Таймеры, несколько команд устройству, TTS (NodeJS): различия между версиями

Материал из Wiki yaboard
Нет описания правки
Нет описания правки
Строка 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>


Отредактируйте index.js и добавьте необходимую информацию в блоке ''config'', а затем запустите навык:
Указываем порт, на котором будут ожидаться запросы от яндекс диалогов и который мы указали в ''Webhook URL'' при [https://dialogs.yandex.ru/developer создании навыка].
''npm start''
<pre>
port: 8443,
</pre>


По значению для параметра "cookie":
Значение для параметра "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>


Что  вписывать в остальные параметры, пока, я надеюсь, будет понятно по комментариям в скрипте index.js.
запустите навык:
<pre>
# npm start
</pre>


== Послесловие ==
== Послесловие ==

Версия от 09:37, 28 июня 2020

Черновая версия Cтраница не завершена
Информация на этой странице не проверена до конца. Текст дорабатывается, обозначенные решения могут быть неполными или не совсем точными.
Требуются прямые руки И вдумчивое отношение к инструкции
Мы не несём никакой ответственности за правильное или неправильное применение, или неприменение, и/или неспособность применить данное руководство.
Телефон вызова экстренных служб - 112.

!!! ЭТО ЧЕРНОВИК !!!

Описание

По мотивам статьи Алиса, таймеры, TTS и Node-RED, идея взята оттуда.

Можно получить возможность выполнить несколько сценариев за одну команду, а так же выполнять сценарии по таймеру, но при этом node-red уже не нужен.

Пример команд:

  • включи люстру и телевизор
  • выключи люстру и включи телевизор
  • включи аквариум и телевизор и выключи люстру

Для реализации этого вам понадобятся сервер/хостинг с поддержкой NodeJS и этот скрипт.

Таймеров на данный момент нет и они будут добавлены позднее.

Схема работы:

Установка

# git clone https://github.com/subnetsRU/alice-command-skill.git
# cd alice-command-skill
# npm install

Настройка

Создаём свой навык в dialogs.yandex.ru
  1. Задаём имя навыка, то как мы будем к нему обращаться.
  2. в Webhook URL нужно задать имя домена или IP-адрес где расположен скрипт alice-command-skill, а так же указать порт (указан в объект config, по умолчанию это порт 8443)
  3. указываем приватность навыка
  4. заполняем остальные обязательные поля
  5. после чего отправляем навык на модерацию и ждём размещения в каталоге (вам придёт письмо когда это произойдёт).
Отредактируйте 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