Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
node-red-contrib-yandex-station-management
Advanced tools
Local management of YandexStation using API on websockets
С помощью модуля можно через локальное API управлять вопсроизведением на устройсвах Яндекса:
Работа возможна только с устройствами, которые одновременно:
Для работы требуется токен от Яндекс.Музыки. В модуле в экспериментальном режиме реализована возможность получения токена из логин-пароля(Спасибо слать сюда). Если получение токена не отрабатывает, то стоит попробовать включить и отключить двух-факторную аутентификацию в настройках Яндекса. Источник. Убедиться в безопасности использования учетных данных можно, посмотрев код
Второй из варинатов его получения описан в FAQ
Третий из вариантов получения токена описан тут
Возможна работа с несколькими устройствами(протестировано) и несколькими учетными записями(протестировано).
Состоит из 4 нод, позволяющих гибко настраивать автоматизации и использовать голосовые уведомления:
Установка проводится через раздел Manage Palette в Node-Red или при помощи npm.
в каталоге с Node-Red (обычно ~/.node-red
) выполнить команду:
npm i node-red-contrib-yandex-station-management
После установки для начала работы добавить любую ноду, ввести учетные данные(токен) в раздел Login, сохранить и нажать Deploy(обязательно!). Как получить токен - написано в FAQ.
После деплоя в настройках ноды в поле Station должны появиться станции доступные для управления.
Если станция не появилась в списке, то можно подождать пару минут или перезапустить Node-Red.
Дополнительные настройки для станции. Является опциональной, то есть все будет работать и без этой ноды, но с ней может быть интерсней. Нода ставится вне потока и не имеет входов и выходов.
Управление подключением к станции. Если по каким-то причинам надо, чтобы подключение не производилось - выставить в Disabled.
В состоянии Manual появляется возможность вручную указать адрес станции и порт для подключения. Рекомендуется, если используются docker-ы, HomeAssistant-ы, и прочие случаи, при которых не отрабатывает автоматические определение сетевых реквизитов для подключения.
Реализована возможность ограничения по времени для прослушивания песен, радио, сказок, чтобы маленькие любители ночных историй поскорее засыпали. Настраивается для каждого дня недели. Если не стоит галка Active, то для этого дня ограничения не работают. Phrase to say - фраза, которую скажет Алиса вместо музыки:) При этом работают навыки, будильники, погода, новости и так далее.
Ставится на старте flow и автоматически отправляет данные о текущем статусе колонки в "сыром" формате и Homekit.
Выдает данные без преобразования, то есть в том виде, в каком они получены от устройсва. Структура сообщения:
{"aliceState":"IDLE",
"canStop":false,
"hdmi":
{"capable":true,
"present":false},
"playerState":
{"duration":180.91,
"extra":
{"coverURI":"avatars.yandex.net/get-music-content/2383988/de45408f.a.9039208-1/%%",
"stateType":"music"},
"hasNext":true,
"hasPause":false,
"hasPlay":false,
"hasPrev":true,
"hasProgressBar":true,
"liveStreamText":"",
"progress":20,
"showPlayer":true,
"subtitle":"Крематорий",
"title":"Мусорный ветер"},
"playing":false,
"timeSinceLastVoiceActivity":30454,
"volume":0}
Сообщения от устройства могут приходить по несколько штук в секунду, поэтому стоит подумать о необходимости поставить штатную ноду RBE, чтобы фильтровать дубликаты по контенту(название трека(payload.playerState.title), имя исполнителя(payload.playerState.subtitle)).
Внутри выполняется преобразование выдаваемого формата под homekit и ноду можно стыковать прямо с homekit-нодой, в результате чего значиьельно упрощается flow. Юзкейсы можно найти в конце документации.
Для homekit formatted выдачи имеются опции:
Структура сообщения Homekit formatted - Smart Speaker:
{"CurrentMediaState":0,"ConfiguredName":"International String Trio - Tarantella"}
Структура сообщения Homekit formatted - Television:
{"Active":1}
При использовании устройства Television появляется возможность использования "пульта" на iOS.
Ставится в середине flow и при любом входящем сообщении отправляет на выход в payload последний статус устройства. Структура выдачи аналогична Full status Message ноды IN.
Ставится в конце flow и используется для отправки сообщений на устройства. Допускается использование нескольких нод OUT для одного и того же устройства, при этом данные будут от них передаваться через одно соединение с устройством.
Управление воспроизведением колонки. Нода ждет, что в payload строкой придет одна из следующих команд: play, stop, next, prev, forward(вперед на 10 секунд), backward(назад на 10 секунд), volumeup, volumedown
Отправка команды, вместо того, чтобы говорить ее колонке голосом: "Включи свет", "Включи музыку", "Включи мой плейлист", "Отключись через 15 минут" и так далее.
Воспроизведение голосом отправленных фраз - Text to Speech. Не имеет ограничения по символам. Параметры для TTS могут задаваться как в настройках, так и некоторые из них могут быть переопределены входящим сообщением.
Есть ряд опций:
При необходимости ударные гласные в словах следует отмечать знаком «+», например:
остр+ота
м+ука
Длинные слова можно разбить на слова покороче и проставить ударения для каждого из этих коротких слов, например:
мн+ого пр+офильный с+еми пал+атинск
Некоторые слова можно попробовать писать так, как они слышатся:
«ненастный» — нен+асный
«пожалуйста» — пож+алуста
Чтобы задать паузу между словами, используйте синтаксис sil <[ количество_миллисекунд ]>. Например:
смелость sil <[500]> город+а берёт
Каждый отделенный пробелами пунктуационный знак обозначается паузой в 50-100 мс.
<speaker audio=\"alice-sounds-game-win-1.opus\"> У вас получилось!
Ловит вывод от Homekit от устройств SmartSpeaker(вкл/выкл) и Television(вкл/выкл + пульт) модуля NRCHB. Встроена функция проверки hap.context,предотвращающая зацикливание. Стыкуется напрямую с Homekit нодой. Опция "Default command" указывает, какую голосовую команду запустить, если нет текущего трека для старта воспроизведения, а играть что-то надо. Например, "Включи мою музыку" или "Включи детские песни".
Получает сообщение в формате JSON внутри payload и передает его колонке без обработки. Возможна отправка нескольких сообщений в одном сообщении payload в виде массива. Известные команды:
{
"command": "rewind",
"position" : 120
}
{
"command": "play"
}
{
"command": "stop"
}
{
"command": "prev"
}
{
"command": "next"
}
{
"command": "playMusic",
"id": "2",
"type":"artist"
}
{
"command": "playMusic",
"id": "44731403",
"type": "track"
}
{
"command": "playMusic",
"id": "44731403:1234556",
"type": "playlist"
}
{
"command" : "setVolume",
"volume" : 0.2
}
{
"command": "playRadio",
"id": "detskoe"
}
{
"command": "repeat",
"mode": "One"
}
{
"command": "shuffle",
"enable": true
}
{
"command": "showAliceVisualState",
"aliceStateName": "LISTENING",
"recognizedPhrase": ""
}
{
"command" : "sendText",
"text" : "Повторяй за мной 'Текст'"
}
{
"command" : "sendText",
"text" : "Включи музыку"
}
{
"command": "serverAction",
"serverActionEventPayload": {
"type": "server_action",
"name": "on_suggest"
}
}
{
"command": "serverAction",
"serverActionEventPayload": {
"type": "server_action",
"name": "update_form",
"payload": {
"form_update": {
"name": "personal_assistant.scenarios.repeat_after_me",
"slots": [
{
"type": "string",
"name": "request",
"value": "<speaker effect='megaphone'>Ехал Грека через реку <speaker effect='-'>видит Грека в реке рак"
}
]
},
"resubmit": true
}
}
}
"value": "<speaker voice='kostya'>смелость sil <[500]> город+а берёт"
Поддерживаемые голоса: jane, oksana, omazh, zahar, ermil, levitan, ermilov, silaerkan, kolya, kostya, nastya, sasha, nick, erkanyavas, zhenya, tanya, anton_samokhvalov, tatyana_abramova, voicesearch, ermil_with_tuning, robot, dude, zombie, smoky, alyss, nick. (Список взят тут)
"value": "смелость sil <[500]> город+а берёт"
"value": "<speaker effect='megaphone'>Ехал Грека через реку <speaker effect='-'>видит Грека в реке рак"
"value": "<speaker audio='alice-sounds-game-win-1.opus'>У вас получилось!"
"value": "<speaker is_whisper="true"'>Я говорю тихо-тихо!"
"value": "<speaker voice='kostya' audio='alice-sounds-game-win-1.opus' effect='megaphone'>добро пожаловать"
{
"command": "serverAction",
"serverActionEventPayload": {
"type": "server_action",
"name": "update_form",
"payload": {
"form_update": {
"name": "personal_assistant.automotive.greeting"
},
"resubmit": true
}
}
}
{
"command": "serverAction",
"serverActionEventPayload": {
"type": "server_action",
"name": "update_form",
"payload": {
"form_update": {
"name": "personal_assistant.scenarios.bluetooth_on"
},
"resubmit": true
}
}
}
{
"command": "serverAction",
"serverActionEventPayload": {
"type": "server_action",
"name": "update_form",
"payload": {
"form_update": {
"name": "personal_assistant.scenarios.bluetooth_off"
},
"resubmit": true
}
}
}
Принудительное прерывания "слушания" Алисы при любом входящем в ноду сообщении. Аналогично 12 команде предыдущего раздела
Остановить проигрывание музыки и сказать текст громкостью 0.8
[
{"command":"stop"},
{
"command": "serverAction",
"serverActionEventPayload": {
"type": "server_action",
"name": "on_suggest"
}
},
{"command":"setVolume","volume":0.8},
{
"command": "serverAction",
"serverActionEventPayload": {
"type": "server_action",
"name": "update_form",
"payload": {
"form_update": {
"name": "personal_assistant.scenarios.repeat_after_me",
"slots": [
{
"type": "string",
"name": "request",
"value": "<speaker effect='megaphone'>Ехал Грека через реку <speaker effect='-'>видит Грека в реке рак"
}
]
},
"resubmit": true
}
}
}
]
Есть ряд способов управлением воспроизведения музыки на колонках.
Есть еще один вариант от @twocolors, в примерах.
Добавляется простым flow и выглядит отлично)
В списке устройств NRCHB есть Smart Speaker. Из коробки с помощью простого flow можно управлять состоянием вкл-выкл воспроизведения и видеть название трека. Работает только на iOS 14 или macOS Big Sur. Элементы управления внутри Homekit не работают, их еще не завезли Homekit-ноду.
Если требуется работать на старых версиях iOS/macOS или надо управлять воспроизведением со штатного инструмента Пульт из панели управления, то можно собрать flow на базе homekit-нод TV, ноды IN в соотвествующем формате и OUT. При этом OUT-нода в Homekit-формате умеет "понимать" вход от SmartSpeaker, Television и обоих вместе. Проверка сообщений на зацикливание встроена в ноду OUT.
Q:Как получить oAuth-токен?
A:Как один из вариантов - https://music-yandex-bot.ru
Q:Как получить обложку трека?
A: Ссылку на обложку Яндекс Музыки можно взять из статусного сообщения: payload.playerState.extra.coverURI
В начало добавить https:// а в конце вместо %% размер обложки, например 600x600. https://avatars.yandex.net/get-music-content/2383988/de45408f.a.9039208-1/600x600
Q:Как узнать ИД станции? Это может понадобиться,чтобы отличать станции, если их не одна.
A:Приложение Яндекс на телефоне - Устройства - Управление устройствами - Выбрать станцию - Дополнительная информация
Q:Почему название трека в Homekit меняется не сразу после переключения?
A: Это нормально, так как для отображния используется имя устройства, а изменения имен в Homekit отражаются, так как имеют наименьший приоритете перед статусами и состояниями.
Q: Элементы управления внутри Homekit "засерены" и не работают
A: Если используется тип устройства Smart Speaker, то да, там они не работают и я не нашел как сделать их активными. Если у кого-то получится их сделать активными, то создание issue поможет остальным. Сейчас альтернатива - это устройство ТВ и привязка к нему пульта. Получаетя как AppleTV. Пример есть внутри NRCHB
Q: После запуска Node-Red не видны устройство/устройства.
A: Такое случается, если устройсвта не найдены в сети. Стоит понимать, что протокол zeroconf, который используется для поиска выдает не стабильный результат. Один поиск из 5 заканчивается отсуствием найденных устройств. Как решение - просто подождать пару минут и повторный поиск найдет всех пропавших с радаров
Q: Как добавить пример из ноды?
A: В меню Node-Red есть пункт Import, а в нем раздел Examples. Внутри папки с названием плагина найдутся все примеры.
Команды для управления станции взяты тут. Спасибо автору.
- Yandex Station(tested)
- Yandex Mini(tested)
- Yandex Station Max(tested)
- Yandex Module(not tested)
- JBL Link Music(not tested)
- JBL Link Portable(tested)
Run the following command in your Node-RED user directory - typically `~/.node-red`
npm i node-red-contrib-yandex-station-management
You need Yandex music token to work propertly.
FAQs
Local management of YandexStation using API on websockets
The npm package node-red-contrib-yandex-station-management receives a total of 23 weekly downloads. As such, node-red-contrib-yandex-station-management popularity was classified as not popular.
We found that node-red-contrib-yandex-station-management demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.