Таймеры, несколько команд устройству, TTS (Node-RED)

Материал из База знаний
Перейти к навигации Перейти к поиску



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


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

Часто в нашем тг-чате задаются вопросы вида "Как посылать любые текстовые сообщения или команды на колонку?"

Задача:

Мне хочется, чтобы колонки (Ирбис и Мини) автоматически на ночь стихали, а утром возвращались на дневную громкость.
Встроенные скрипты Яндекса пока не умеют в таймеры, а говорить каждый вечер "Алиса, тихо" - не круто.

Решение:

  • В 21:59 на обе колонки отправляется текстовое оповещение: "Через минуту я убавлю громкость на 2";
  • В 22:00 - сами команды на убавление громкости.
  • В 8:59 - команды установки громкости на 6.
  • В 9:00 - текстовое оповещение "Настало 9 утра, я установила громкость на 6".


Теперь о том, как это всё реализовать.

Нам понадобится Node-RED и немного терпения (за основу взята статья с homever.ru).


Установка Node-RED

Возможны 2 варианта установки:

  • У вас уже есть свой локальный сервер УД, то ставить прям рядом с ним (например, на Raspberry Pi).
  • У вас нет сервера. Тогда необходимо развернуть виртуальную машину и установить в ней node-red.
Что это за зверь, и как его устанавливать, описано здесь.

Вторым действием устанавливаем в наш Node-RED ноду, которая умеет взаимодействовать с колонкой:

npm install node-red-contrib-yandex-alice-command

Страница автора ноды здесь (не забудьте закинуть "на пивко" автору ;)
  • Перезапускаем node-RED (в зависимости от варианта установки - командой перезапуска "node-red-stop/start" или перезагрузкой всей виртуалки).
  • Открываем веб-интерфейс и находим ноду "Speaker", в которой будет единственная нода: "alice send".
  • Кидаем ноду на форму, двойным кликом по ноде "alice send" открываем её свойства, видим 3 пункта:
    • Name - для удобства задается имя, которое будет отображено на форме;
    • Yandex login - аккаунт (начальная часть до значка "@") в Яндексе, к которому привязан ваш УД;
    • Command type - 2 варианта: "text to speach" и "voice command". Первый - произнести текст, второй - выполнить команду.
Автор рекомендует указать cookies и scenarios, чтобы уменьшить задержки выполнения команд. Для их получения, нужно кинуть "inject" на форму, внутри выбрать тип "string" и указать произвольное значение (можно просто "get"), соединить с нодой "alice send", добавить common-ноду "debug" и соединить "alice send" и "debug". Затем открыть окно дебага в ноде, выполнить inject и получить эти значения. Затем, занести их в настройки аккаунта. 
 Если кто-то боится указывать свой аккаунт - читайте документацию и исходный код, или просто не используйте этот метод.

На этом настройка ноды закончена. Дальше включаем фантазию и предлагаем свои идеи для использования этой фичи.


Отправка текста на колонку

форма
inject с командой
inject с текстом
  1. Кидаем на форму common-ноду "inject";
  2. Внутри находим "payload", выбираем тип "string" и пишем текст для проверки (привет, мир!);
  3. В ноде "alice send" выбираем тип "command type": "text to speach";
  4. Соединяем "inject" с нодой "alice send";
  5. В верхнем правом углу ОБЯЗАТЕЛЬНО нажимаем кнопку "Deploy";
  6. Нажимаем у "inject" слева кнопку запуска/посыла текста, и через пару секунд колонка должна произнести указанный текст.


Отправка команды

Всё точно так же, кроме:

  • в "command type" укажем тип "voice command".
  • в "payload" - нашу команду ("громкость 2", итд).

Например, если в "payload" прописать "Включи мою музыку" - заиграет плейлист "Мне нравится".


"inject" может выполнять команды вручную и по таймеру. 
Если открыть двойным кликом его свойства - увидим поле "repeat", в котором можно указать время выполнения.
Как это можно применить - решать только вам и вашей фантазии)


Пример включения/отключения громкости на колонках

Тут всё просто, на основе информации выше, кидаем на форму 4 "inject", 2 "алисы".

  • 2 "inject" содержат текстовую озвучку, 2 - команду на убавление/прибавление громкости.
  • Первая "алиса" посылает команду на убавление громкости, вторая - на добавление.
  • В первой "алисе", в поле "command type" укажем "text to speech", у второй - "voice command".
  • Соединяем "inject" с каждой "алисой" и тестируем руками.
  • Когда отладили, внутри "inject" в поле "repeat" задаём время выполнения команд.


Готово!


Для особо ленивых

Выкладываю свой flow пример. В последнем блоке написал, какие моменты нужно исправить на свои (логин/пароль)

На панеле node-red в верхнем правом углу жмем "меню", выбираем "import" и вставляем код, предварительно исправив поля, про которые сказал выше.

Источник — https://wiki.yaboard.com/index.php?title=Таймеры,_несколько_команд_устройству,_TTS_(Node-RED)&oldid=4042 // MOD ext links // End MOD