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

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

Материал из Wiki yaboard
м Ark rusinov-9121383 переименовал страницу Выполнить несколько сценариев за один раз, таймеры для сценариев в [[Таймеры, несколько команд устрой…
Нет описания правки
Строка 1: Строка 1:
{{metadesc| Отправка текста и команд на колонку с Алисой при помощи NodeJS }}
__NOEDITSECTION__
__TOC__
{{Hands}}
{{Hands}}


== Описание ==


По мотивам статьи [[Алиса, таймеры, TTS и Node-RED]], идея работы навыка взята [https://flows.nodered.org/node/node-red-contrib-yandex-alice-command оттуда].
== Постановка задачи ==
 
 
По мотивам статьи [[Алиса, таймеры, TTS и Node-RED]], идея работы навыка взята [https://flows.nodered.org/node/node-red-contrib-yandex-alice-command здесь]. По предлагаемой инструкции точно так же можно выполнять несколько команд на устройство в одном сценарии, запускать их по таймеру, не требуя Node-RED.
 
Дополнительным плюсом можно выполнять сложные команды. Примеры:
* Включи люстру '''и''' телевизор
* Выключи люстру '''и''' включи телевизор
* Включи аквариум '''и''' телевизор '''и''' выключи люстру
 
 
Нам понадобятся:
* Сервер/хостинг с поддержкой [https://nodejs.org/ NodeJS], и
* Этот [https://github.com/subnetsRU/alice-command-skill/blob/master/index.js полезный скрипт].


Можно получить возможность выполнить несколько сценариев за одну команду, а так же выполнять сценарии по таймеру, но при этом [https://flows.nodered.org/node/node-red-contrib-yandex-alice-command node-red] уже не нужен.


Пример команд, которые можно будет выполнять благодаря навыку и [https://yandex.ru/alice Алисе]:
Наши действия:
* включи люстру и телевизор
* Создаём обычный приватный диалог;
* выключи люстру и включи телевизор
* Устанавливаем и запускаем код навыка на сервере/хостинге;
* включи аквариум и телевизор и выключи люстру
* Создаём нужные сценарии умного дома в приложении Яндекс;
* Наслаждаемся.


Для реализации этого вам понадобятся сервер/хостинг с поддержкой [https://nodejs.org/ NodeJS] и этот [https://github.com/subnetsRU/alice-command-skill/blob/master/index.js скрипт].


Схема работы:
'''Таймеров на данный момент нет, они будут добавлены позднее. Работа над навыком не закончена. Следите за обновлениями на github.'''
* создаем обычный приватный диалог на [https://dialogs.yandex.ru/developer dialogs.yandex.ru] ([https://yandex.ru/dev/dialogs/alice/doc/protocol-docpage/ документация по работе навыков])
 
* устанавливаем и запускаем [https://github.com/subnetsRU/alice-command-skill/blob/master/index.js код навыка] на сервере/хостинге
 
* создаем нужные сценарии для умного дома в [[yandex.ru/quasar|квазаре]] и командуем
== Установка сценария ==


'''Таймеров на данный момент нет и они будут добавлены позднее. Работа над навыком не закончена. Следите за обновлениями на github.'''


== Установка ==
<pre>
<pre>
# git clone https://github.com/subnetsRU/alice-command-skill.git
# git clone https://github.com/subnetsRU/alice-command-skill.git
Строка 27: Строка 41:
# npm install
# npm install
</pre>
</pre>


== Настройка ==
== Настройка ==
  Создаём свой навык в [https://dialogs.yandex.ru/developer dialogs.yandex.ru]
 
 
  Если вы пользуетесь браузером Chrome, то для удобства чтения JSON на страницах можно использовать плагин
[https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa/related?hl=ru JSON Formatter]
 
Создаём свой навык в [https://dialogs.yandex.ru/developer dialogs.yandex.ru] ([https://yandex.ru/dev/dialogs/alice/doc/protocol-docpage/ документация]):
# Задаём имя навыка, то как мы будем к нему обращаться.
# Задаём имя навыка, то как мы будем к нему обращаться.
# в ''Webhook URL'' нужно задать имя домена или IP-адрес где расположен скрипт ''alice-command-skill'', а так же указать порт (указан в объект ''config'', по умолчанию это порт 8443)
# в ''Webhook URL'' нужно задать имя домена или IP-адрес где расположен скрипт ''alice-command-skill'', а так же указать порт (указан в объект ''config'', по умолчанию это порт 8443)
Строка 145: Строка 165:


И пользуйтесь.
И пользуйтесь.


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


[https://t.me/station_yandex/244612 Видео] демонстрация результатов работы навыка.


Если вы пользуетесь браузером Chrome, то для удобства чтения JSON на страницах можно использовать плагин: [https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa/related?hl=ru JSON Formatter]
Видеодемонстрация работы навыка:
[[Файл:Text_morecommand_tts_nodeJS.mp4]]
 
С автором статьи можно связаться в телеграм: [https://t.me/VirusNet @VirusNet].


Есть ещё способ выполнить несколько сценариев - читайте "[[Несколько команд в одном сценарии]]".


Автор статьи: [https://t.me/VirusNet @VirusNet]
[[Category:Умный дом]]

Версия от 11:35, 3 июля 2020

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

Постановка задачи

По мотивам статьи Алиса, таймеры, TTS и Node-RED, идея работы навыка взята здесь. По предлагаемой инструкции точно так же можно выполнять несколько команд на устройство в одном сценарии, запускать их по таймеру, не требуя Node-RED.

Дополнительным плюсом можно выполнять сложные команды. Примеры:

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


Нам понадобятся:


Наши действия:

  • Создаём обычный приватный диалог;
  • Устанавливаем и запускаем код навыка на сервере/хостинге;
  • Создаём нужные сценарии умного дома в приложении Яндекс;
  • Наслаждаемся.
Таймеров на данный момент нет, они будут добавлены позднее. Работа над навыком не закончена. Следите за обновлениями на github.

Установка сценария

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

Настройка

Если вы пользуетесь браузером Chrome, то для удобства чтения JSON на страницах можно использовать плагин
JSON Formatter

Создаём свой навык в dialogs.yandex.ru (документация):

  1. Задаём имя навыка, то как мы будем к нему обращаться.
  2. в Webhook URL нужно задать имя домена или IP-адрес где расположен скрипт alice-command-skill, а так же указать порт (указан в объект config, по умолчанию это порт 8443)
  3. указываем приватность навыка
  4. заполняем остальные обязательные поля
  5. после чего отправляем навык на модерацию и ждём размещения в каталоге (вам придёт письмо когда это произойдёт).
Отредактируйте config.js и добавьте необходимую информацию.

Указываем путь до 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;ну и так далее...',

Находим id устройства яндекс.станция, которая будет отвечать на команды. Этот ID можно увидеть на странице с устройствами.

ID яндекс.станции

Укажем id устройства яндекс.станция в config:

speaker: '2077cfa6-2365-4ed4-97d5-4b46895762af',

Далее зададим каким устройствам/пользователям разрешено использовать навык.

    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-интерфейсе квазара.

Покажу на одном примере. Создаем сценарий на включение люстры:

Сценарий включения люстры

По образу и подобию люстры создаём такой же сценарий, но для лампы.

Создаем сценарий для выполнения двух сценариев:

Результирующий сценарий, который выполнит два сценария

Открываем страницу с JSON по сценариям находим ID сценариев с включением лампы и люстры и вносим их в config. Где этот ID показано на скриншоте ниже:

Аналогично вы можете поступить и со сценариями для выключения.

    scenarios: {
        enable: {       //сценарии на включение
            'люстру': '49c84e35-d1f3-4f8b-bc26-fe1ddd383d3f',   //сценарий: включи люстру
            'лампу': '0f70f28e-6b09-4876-8846-d34449dddc9e',    //сценарий: включи лампу
        },
        disable:{       //сценарии на выключение
            'люстру': '1e3d27e6-1731-4461-bbe0-e3ed75e41ed5',   //сценарий: выключи люстру
            'лампу': '212bc2b7-57db-4f79-a896-aff933b0e433',    //сценарий: выключи лампу
        }
    },

Вы можете комбинировать, создав сценарии:

  1. Выключи люстру и включи лампу
  2. Включи люстру и выключи лампу

Теперь запустите навык:

# npm start

И пользуйтесь.

Послесловие

Видеодемонстрация работы навыка:

С автором статьи можно связаться в телеграм: @VirusNet.