Таймеры, несколько команд устройству, TTS (Node-RED)
Вступление
тут надо сделать вставку про прямые руки
Инструкция о том, как посылать любые текстовые сообщения или команды на колонку. За основу взята статья https://homever.ru/?p=1178 и разжована.
Чего можно добиться:
Личный пример. У меня 2 колонки: ирбис и мини. Мне хотелось, чтобы на ночь колонки умолкали, а утром громкость возвращалась. И, главное условие, - полная автоматизация. Пока что, встроенные скрипты Яндекса не умеют в таймеры, а говорить каждый вечер "алиса, тихо" не круто. И вот как я решил эту проблему. В 21:59 на обе колонки летит сообщение, которое она озвучивает: "через минуту, я убавлю громкость на 2", а утром, в 9:00 наоборот "время 9 утра, я установила громкость на 6". Соответственно, в 22:00/8:59 посылаются команды на убавление/прибавление громкости. Теперь о том, как это всё реализовать.
Платформа
Чтобы это реализовать, нам как минимум нужна такая штука, как node-red.
Есть 2 варианта установки:
- у Вас есть свой локальный сервер УД, то ставить прям рядом с ним. Быстрее всего это будет какая-то малинка.
- развернуть виртуальную машину и поставить там node-red.
О том, что это за зверь и как его устанавливать, описано здесь: https://sprut-ai.turbopages.org/s/sprut.ai/client/article/1820
Затем устанавливаем ноду которая будет взаимодействовать с колонкой:
npm install node-red-contrib-yandex-alice-command
Страница автора этой ноды: https://flows.nodered.org/node/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. Первый вариант, когда нужно произнести текст, второй - для выполнения команды.
Автор рекомендует так же указать token, cookies, чтобы уменьшить задержки выполнения команд. Как их получить описано на странице проекта.
На этом, настройка ноды закончена. Дальше включаем фантазию и предлагаем свои идеи для использования этой фичи.
Отправка текста/команды на колонку.
Отправка текста.
- Из ноды "common" нам понадобится "inject", кидаем её на форму. Внутри находим "payload", выбираем там тип "string" и пишем какой-то текст для проверки. (привет, мир!)
- В ноде "alice send", которую мы настроили выше, нужно "command type" указать "text to speach"
- Соединяем "инжект" с нодой "alice send" и в верхнем правом углу ОБЯЗАТЕЛЬНО нажимаем кнопку "deploy"
- После этого, нажимаем у "инжекта" слева кнопку как бы запуска/посыла текста и через пару сек колонка должна произнести указанный текст
Отправка команды.
Всё тоже самое, только в ноде "алиса" нужно указать "voice command" и если в "инжект" прописать "включи мою музыку" - выполнится команда включения музыки.
Для справки: "инжект" выполняет команду или при ручном выполнении, или по таймеру. Если открыть дабл кликом его свойства, то можно увидеть свойство "repeat" - в котором можно указать время выполнения. Что с этим делать решать только Вам.
Пример включения/отключения громкости на колонках
Тут всё просто, на основе информации выше, кидаем на форму 4 инжекта, 2 алисы.
- два инжекта содержат текстовую озвучку, другие два - команду на убавление/прибавление громкости.
- первая алиса посылает команду на убавление громкости, вторая - на добавление.
- в первой алисе, в поле "command type" укажем "text to speach", у второй - "voice command".
- соединяем инжекты с каждой алисой и тестируем руками.
- если руками всё ок, внутри инжекта в поле "repeat" задаем время выполнения команд.