Таймеры, несколько команд устройству, 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 и получить эти значения. Затем, занести их в настройки аккаунта.
Если кто-то боится указывать свой аккаунт - читайте документацию и исходный код, или просто не используйте этот метод.
На этом настройка ноды закончена. Дальше включаем фантазию и предлагаем свои идеи для использования этой фичи.
Отправка текста на колонку
- Кидаем на форму common-ноду "inject";
- Внутри находим "payload", выбираем тип "string" и пишем текст для проверки (привет, мир!);
- В ноде "alice send" выбираем тип "command type": "text to speach";
- Соединяем "inject" с нодой "alice send";
- В верхнем правом углу ОБЯЗАТЕЛЬНО нажимаем кнопку "Deploy";
- Нажимаем у "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" и вставляем код, предварительно исправив поля, про которые сказал выше.