Таймеры, несколько команд устройству, TTS (Node-RED)
Требуются прямые руки И вдумчивое отношение к инструкции
Мы не несём никакой ответственности за правильное или неправильное применение, или неприменение, и/или неспособность применить данное руководство.
Телефон вызова экстренных служб - 112.
Телефон вызова экстренных служб - 112.
Постановка задачи
Часто в нашем тг-чате задаются вопросы вида "Как посылать любые текстовые сообщения или команды на колонку?"
Задача:
Мне хочется, чтобы колонки (Ирбис и Мини) автоматически на ночь стихали, а утром возвращались на дневную громкость. Встроенные скрипты Яндекса пока не умеют в таймеры, а говорить каждый вечер "Алиса, тихо" - не круто.
Решение:
- В 21:59 на обе колонки отправляется текстовое оповещение: "Через минуту я убавлю громкость на 2";
- В 22:00 - сами команды на убавление громкости.
- В 8:59 - команды установки громкости на 6.
- В 9:00 - текстовое оповещение "Настало 9 утра, я установила громкость на 6".
Теперь о том, как это всё реализовать.
Нам понадобится Node-RED и немного терпения (за основу взята статья с homever.ru).
Установка Node-RED
Возможны 2 варианта установки:
- У вас уже есть свой локальный сервер УД, то ставить прям рядом с ним (скорее всего, это будет какая-то малинка).
- У вас нет сервера. Тогда необходимо развернуть виртуальную машину и установить в ней 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". Затем открыть окно дебага в ноде, выполнить инжект и получить эти значения. Затем, занести их в настройки аккаунта.
На этом настройка ноды закончена. Дальше включаем фантазию и предлагаем свои идеи для использования этой фичи.
Отправка текста на колонку



- Кидаем на форму common-ноду "inject";
- Внутри находим "payload", выбираем тип "string" и пишем текст для проверки (привет, мир!);
- В ноде "alice send" выбираем тип "command type": "text to speach";
- Соединяем "инжект" с нодой "alice send";
- В верхнем правом углу ОБЯЗАТЕЛЬНО нажимаем кнопку "Deploy";
- Нажимаем у "инжекта" слева кнопку запуска/посыла текста, и через пару секунд колонка должна произнести указанный текст.
Отправка команды
Всё точно так же, кроме:
- в "command type" укажем тип "voice command".
- в "payload" - нашу команду ("громкость 2", итд).
Например, если в "payload" прописать "Включи мою музыку" - заиграет плейлист "Мне нравится".
"Инжект" может выполнять команды вручную и по таймеру. Если открыть двойным кликом его свойства - увидим поле "repeat", в котором можно указать время выполнения. Как это можно применить - решать только вам и вашей фантазии)
Пример включения/отключения громкости на колонках
Тут всё просто, на основе информации выше, кидаем на форму 4 "инжекта", 2 "алисы".
- 2 "инжекта" содержат текстовую озвучку, 2 - команду на убавление/прибавление громкости.
- Первая "алиса" посылает команду на убавление громкости, вторая - на добавление.
- В первой "алисе", в поле "command type" укажем "text to speech", у второй - "voice command".
- Соединяем "инжекты" с каждой "алисой" и тестируем руками.
- Когда отладили, внутри "инжекта" в поле "repeat" задаём время выполнения команд.
Готово!