У нас было всё, всё, шо нажито непосильным трудом! Три магнитофона, три хомпода заграничных, три алисы отечественных, куртка замшевая… и целое множество стримингов всех сортов и расцветок, сдшки, а также переходники, ноут, ящик мануалов, пинта чистого лавандового рафа и 2 дюжины гигабайтов flac. Не то чтобы это был необходимый запас для разработки, но если начал собирать мультирум, становится трудно остановиться. Единственное, что вызывало у меня опасение — это винил. Ничто в мире не бывает более беспомощным, безответственным и порочным, чем виниловые зомби. Я знал, что рано или поздно мы перейдем и на эту дрянь.
Что бы не заморачиваться сейчас проще купить Яндекс Станцию / Apple HomePod.
подключить подписку Яндекс музыка / Apple Music.
сказать Алиса / Siri включи какуюто музыку.
слушать какуюто музыку...
всё. дальше можно не читать.
Начальные требования:
0. быстрый запуск избранного в ЛМС.
1. при включении музыки не обделаться от внезапно орущей громкости, при включении музыки громкость должна зависить от времени.
2. упростить работу с группами колонок, до простой комманды.
3. с одного пульта иметь возможность управлять твбоксом и музыкой (пауза, громкость, избранное).
4. возникла побочная фича, управление с виджетов в телефоне.
Three Weeks Later...
5. управление колонкой в душе с кнопок прямо в душе (bt пульт).
6. еще один bt пульт для колонки на веранде (пауза, громкость, избранное).
One Eternity Later...
7. управлять голосом через Алису (пауза, громкость, избранное).
8. голосовой поиск через Алису в Spotify.
А что из коробки?
https://www.spicefly.com/article.php?page=Logitech-Media-Server-Legacy-Plugins
есть некоторые плагины LMS, типа блокировки громкости, но они или решают задачу не полностью или неудобно.
управление с компа через веб интерфейс, даже учитывая material skin, лично для меня сразу идет лесом, этож надо комп включить, открыть браузер… серьезно???
Приложение очень хорошее для android SqueezeCtrl (а есть еще оч стремное (имхо) iPeng для ios что показывает как поразному можно реализовать одну задачу)
самое главное неудобство любых приложений - телефон “под рукой”, включить экран, найти приложение, запустить приложение, сделать необходимые действия в приложениии.
Приложение конечно же решает такие задачи как вцелом навигация в ЛМС и формирование того самого избранного которое так хочется иметь в максимально быстром и простом доступе в итоге. (кстати, набудущее, сделать команду Алиса добавь в избранное)
Пульт тоже имеет такое неприятное свойство необходимость быть “под рукой”, но далее действие происходит в одно нажатие кнопки (можно даже с закрытыми глазами), ну и пультов можно сделать много и везде.
Голосовой асистент - решает такую проблему как “под рукой” но запускает другие проблемы, тут надо напрячься мозгом, вспомнить какие команды он понимает, подумать что ты хочешь, сформулировать это в комманду, сказать, это большая задержка на стороне пользователя. далее асистент тоже отработает не так быстро как просто кнопка. Ну и еще не всегда хочеться, или даж не всегда возможно говорить, хотя Алиса и научилась понимать шепот, но иногда тупит.
И так, есть три стула.. возможности: приложение, пульт, голос - все они имеют как недостатки так и преимущества, поэтому ни один не исключает другие. все зависит от ситуации что ближе и проще в данный момент.
Внезапно, но решения от производителей не идельны, обычно нет пульта (да кому он вообще нужен!?)
Эпле хомпод: приложение да, пульт нет, голос да.
Яндекс Станция/лайт: приложение да, пульт не все колонки имеют, голос да.
Гугле: приложение да, пульт невидел, голос да.
А еще производители имеют ограничения по возможностям подключения (Chromecast, Airplay, DLNA, и т.д.) и по поддерживаемым сервисам (Apple Music, Google Music, Yandex Music, Spotify, Tidal, Deezeer, Quobuz и т.п.)
Итого из коробки:
1) нет пульта. голосовое управление оно же главная фича, оно же и недостаток, иногда хочеться просто взять пульт и нажать по человечески кнопки. это быстро. просто. удобно. единственный минус пульт не всегда рядом, ну тогда уже звать Алису.
2) асистент не всегда понимает что ты хочешь. чтоб непытаться сто раз объяснять (иногда воообще никогда), на пульт можно назначить 9 избранных плейлистов или радио станций.
3) а если купить wifi колонку другого производителя? без Алисы/Сири - это кирпичь(шар). или подключить старые но крутые не wifi колонки?
к LMS можно подключить плееры и колонки поддерживающие Chromecast, Airplay, DLNA, например JBL Playlist или плеер MiBox, Wiim Pro + любые колонки.
4) Сервисы, слушать только Эплемузик/Ямузыку? я например очень давно подсел на Spotify, радио Di.fm, Jazzradio.com, SomaFM, + любое радио имееющее ссылку на поток.
всё это просто работает в LMS с красивыми картинками в приложении, или хоткеями на пульте. нет голосового управления? об этом позже...
5) цена/возможности. HomePod mini 100$, JBL Playlist 100$. LMS начальный вход -orangepizero 15$ + любые колонки, далее апгрейд улетает в бесконечный космос денег и хайэнда. А как вы проапгрейдите Станцию или Хомпод?
Это наверное самые очевидные 5 причин почему я неюзаю ЯСтанцию (Ямузыку) или Хомпод (эплемюзик).
внезапно, но Ямузыку и Эмузыку невозможно слушать в LMS, зато LMS поддерживает кучу других более популярных сервисов!!!
а вот HomePod подключить к LMS по AirPlay можно!!!
в то время как маркеттинг двигает готовые решения и стриминги от известных брендов, гдето существует маргинальное меньшинство https://forums.slimdevices.com которое ставит богом забытый и брошеный логитеком сервер, на какието малины и апельсины, бананы!?)
Внезапно, но из достойных альтернатив этому колхозингу есть наверное пожалуй только Roon для уважаемых господ… сказать я про него ничего немогу т.к. я не настолько уважаемый да и не господин.
Мультирум. Сервисы. Файлы.
нужен ли вам мультирум решать вам, но ЛМС очень хорошее решение, даже если увас одни колонки, в одной комнате, без интернета, без сети (ну бывают любители головных уборов из фольги), но вам нужен удобный каталог для музыки на диске. без использования сети (без приложения в телефоне) можно использовать ик/бт пульт и не страдать.
Я даж немогу придумать/найти более простого или удобного решения, делать на твбоксе - нужен телек... на пк - нужен пк, моник, клава... Если занете другое решение звоните.
можно сделать, свои плейлисты, из своих файлов, добавить их в избранное, или добавить в избранное закладки из сервисов доступных в ЛМС, и потом просто сказать “Алиса, включи музыку”
Реализация начальных требований:
1. пред установку громкости, решить это на стороне LMS и плагинов, скорее всего невозможно, когда в лмс нажимается кнопка плэй, поток идет на колонку, а колонка в это время может спать, в этом состоянии она не воспринимет изменение громкости от лмс, хотя сам лмс отправив команду считает что громкость изменена и на ваш api запрос будет вам выдавать это значение громкости и состояние колонки play, хотя сама колонка еще токо выходит из сна ( JBL Playlist) и проснувшись колонка получает поток звука и начинает его воспроизводить на той громкости которая в ней сохранилась (ну тут уж как повёзет).
Решение, сначала надо разбудить колонку послав на нее поток с тишиной, колонка проснется, дождавшись загрузки колонки, отправляем ей желаемую в данное время громкость, и только после этого отправляем поток с музыкой. Время ожидания пробуждения колонки у всех производителей разное (это быстрее чем холодный старт) из тех что у меня есть хомпод быстрее чем жбл, а жбл около 10сек. отловить это время через ЛМС невозможно по тойже причине как и установить в это время громкость.
2. группы, синхронизация
как работает из коробки, про через веб и даже матириал веб нестоит говорить, через SqueezeCtrl задачка тож нелегкая, кудато зайти, выбрать что с чем подключить..
**Как должно быть:
1) включи колонку (колонка не играет, возможно в группе) -
а) если нигде ничего не играло, отключить колонку от группы, разбудить, установить громкость, включить последнее игравшее на колонке, если пусто, то первое в избранном.
б) если другая колонка уже играет, отключить колонку от группы, разбудить, установить громкость, подключить в группу к уже играющей.
2) выключи колонку (колонка играет, возможно в группе) -
отключить от группы, остановить.
3) для включения закладки избранного сценарий аналогично включению колонки.
Три команды, решают все взаимодействие одновременно как с группами, так и включение/выключение музыки на колонке.
Подходят как для назначение на кнопки пульта так и для голосовых комманд или виджетов в телефоне.
Реализация первая. Tasker и пульт твбокса.
исходные данные:
1. я узнал что у LMS есть какойто API, и я буду его использовать.
2. минимальные знания про http запросы и json.
3. я узнал что Tasker может отправлять http запросы и разбирать json.
Берем пульт твбокса, назначаем на свободные кнопки действия Таскера с http запросами к ЛМС:
play/pause {"id": 1, "method": "slim.request", "params":["HomePod", ["pause"]]}
volume -/+ {"id": 1, "method": "slim.request", "params":["HomePod", ["mixer", "volume", "_"]]}
favorites 1-9 {"id": 1, "method": "slim.request", "params":["HomePod", ["favorites", "playlist", "play", "item_id:_"]]}
Задача управления реализована! простой пульт из трех методов!
Но нереализовано пробуждение колонки с требуемой громкостью и работа с группами...
Вместо прямых команд pause/play, favorite реализуем в Таскере логику сценариев ** тут придеться запрашивать у ЛМС состояния всех колонок и групп, а для этого надо узнать у ЛМС сколько вообще колонок, както хранить эти состояния, делать UI для изменения настроек.
Возникла побочная фича, сначала показавшаяся киллерфичей, но нет.
при реализации логики ** сценариев через таскер для пульта, появилась возможность запускать эти команды на телефоне через виджеты, и даже визуализировать виджетами состояния колонок и прочую информацию на текстовом виджете Minimalistic Text. шоткаты избранного, быстрый плейлист, да все что угодно
красиво, наглядно, удобно.
но в реале получилось что пульт закрыл все потребности, ну а виджеты просто фича.
Реализация вторая Алиса и Кузя
Потом случился Умный дом с Алисой. все освещение стало умным.
И я задумался, если Tasker может оправлять http запросы, а что может Алиса? был найден навык Кузя!
он может отправлять вебхук на какойто урл в интернете… а у меня сценарии управления ЛМС работают в Таскере на твбоксе… как это соединить? найден Tasker AutoRemote! он создет урл для Таскера в интернете! вот туда и будем отправлять вебхуки от Кузи!
разбираемся с Кузей, создаем виртуальные колонки в Умном доме Алисы.
и вот теперь голосовые команды к устройству Колонка пробрасываются до сценариев в Таскере на тв боксе! С этим можно жить!
HomeAssistant
Да есть еще такой вариант, можно туда-сюда прокинуть команды Алисы, подключить всякие колонки хромкаст и эирплэй. Но это такое...
Реализация третья свой навык Умного дома
Но с кузей было както не уютно, не науровне конечного пользователя, а на уровне настройки и отображения в Умном доме,
для каждого действия, для каждой колонки надо прописвать правило, и если менялся адрес сервера все правила надо править, была даж идея написать через селениум заменитель урла, но прост чтоб нетратить на это время, силы были направлены на создание своего навыка с бэкэндом на Java.
- бэкэнд сценариев будет работать не в Tasker, а на Java, на OrangePi там же где работает LMS.
- в навыке Алисы Endpoint URL бекэнда задается в одном месте (а не как у кузи на каждую комманду сто раз)
- адрес бэкенда пробрасывается в навык через тоннель LocalTunnel (Ngrok, Serveo)
- рефакторинг на ява намного легче чем в таскер
- скорость работы сценариев лучше
для добавления колонки LMS в Умный дом с Алисой, надо указать название колонки в LMS и название комнаты в Умном доме.
Все колонки в умном доме имеют имя подефолту "музыка" - чтобы работало обращение:
Алиса, включи "музыку"
Алиса, выключи "музыку" в спальне
также работает обращение
Алиса, включи канал "три"
Алиса, включи переключи канал
Для устранение задержки на пробуждение колонки каждый раз, добавлена логика, если было обращение к колонке в последние 10 минут и она играла, то не запускать пробуждение а сразу играть музыку.
Голосовой поиск в Spotify
Сделал навык Алисы с наименее сложным для вызова названием "раз два"
Алиса скажи раз два, включи депеш мод
навык осуществляет поиск в Spotify по словам после "включи"
находит все плейлисты содержащие Depeche mode, из них выбирает плейлист содержащий "This Is" и Owner = Spotify.
отправляет этот плейлист в LMS.
для использование api Спотифая надо предоставить credentials для этого сделана небольшая форма логина
Реализовать далее
websoket вместо тоннеля
публичный навык
п.с. про bluetooth колонки
это вообще считаю устройства не предназначеные для использования дома
дома есть розетка - зачем использовать устройство которое надо заряжать?
дома есть wifi - так почему бы его не использовать?
блютузу необходим постоянный источник - телефон
музыка обрывается звонками
блютуз не умеет в мультирум и в управление с нескольких устройств
Устнановка
зписать на SD для Orange Pi zero Armbian_22.11.1_Orangepizero_bullseye_current_5.15.80.img.xz
-- для подключения по ssh сброс старого ключа
ssh-keygen -f "/home/konstantin/.ssh/known_hosts" -R "192.168.1.52"
ssh root@192.168.1.52 подключиться к Orange Pi pswd 1234
-- обновить
sudo apt-get update
sudo apt upgrade
-- установки зависимости для LMS
sudo apt-get install libio-socket-ssl-perl
sudo apt-get install libcrypt-openssl-rsa-perl
wget https://downloads.slimdevices.com/LogitechMediaServer_v8.3.0/logitechmediaserver_8.3.0_all.deb
dpkg -i logitechmediaserver_8.3.0_all.deb
-- если были ошибки
sudo apt --fix-broken install
-- настройка wi-fi
sudo nmtui-connect
-- скопировать избранное на Orange Pi
sshpass -p "12345" scp /home/konstantin/favorites.opml root@192.168.1.52:/var/lib/squeezeboxserver/prefs/favorites.opml
-- скопировать избранное с Orange Pi
sshpass -p "12345" scp root@192.168.1.52:/var/lib/squeezeboxserver/prefs/favorites.opml /home/konstantin/orange/
-- установить JAVA на Orange Pi
https://sciencesappliquees.com/noncato/350-orange-pi-install-java-jdk-8
sudo apt-get install default-jre
-- установить PYTHON & BLUETOOTH
sudo apt-get install bluetooth
sudo apt install tlp
sudo apt install input-utils
sudo apt-get install python3
sudo apt install python3-pip
sudo apt install python3-dev
sudo pip3 install evdev
sudo pip3 install requests
sh install.sh
lsinput
bluetoothctl
-- установить NGROK
https://dashboard.ngrok.com/get-started/setup
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list && sudo apt update && sudo apt install ngrok
ngrok config add-authtoken TOKEN
ngrok http --domain=unicorn-neutral-badly.ngrok-free.app 8010
Настройка навыка
https://dialogs.yandex.ru/developer/skills/
Связка аккаунтов
чуть чуть интересных ссылок
Darko LMS
https://youtu.be/g4-W7Zp4WnM?si=kiwBm8pUagnIS9P2
Darko mibox
https://youtu.be/NvF1lTsgv6o?si=den2UYFL9rykm9VS
Darko Wiim pro
https://youtu.be/V2mV155qGIM?si=dnFaj6tF28vPg8YU
Darko pi-squeeze
https://youtu.be/V3RlYLYegoA?si=213kDsHQX3D3P3OZ
управление кнопки с энкодером
https://forums.slimdevices.com/forum/user-forums/3rd-party-hardware/1648689-cheap-hardware-control-buttons-for-touch-pcp
ик пульт
https://forums.slimdevices.com/forum/user-forums/3rd-party-hardware/101688-lirc-rpi-gpio-ir-support-for-picoreplayer
wiim mini
https://forums.slimdevices.com/forum/user-forums/3rd-party-hardware/1638739-dop-via-wiim-mini-using-dlna
hiend streamer dac
https://forums.slimdevices.com/forum/user-forums/audiophiles/1628752-lms-with-hi-end-streamer-dac
squeeze amp
https://forums.slimdevices.com/forum/user-forums/3rd-party-hardware/107608-pre-announce-squeezeamp-and-squeezeliteesp32?110926-pre-ANNOUNCE-SqueezeAMP-and-SqueezeliteESP32=&viewfull=1#post1389941
картинки