Бюджетный мультирум, и его интеграция в Home-assistant

29 декабря 2018, 17:37

Писатель из меня конечно так себе, да и в тематике я разбираюсь довольно поверхностно, но острое желание получить желаемое - заставилось много экспериментировать. И собственно, этими экскрементами (шутка) я сейчас с вами поделюсь. 

Сначала давайте определимся что такое мультирум. Это, образно говоря, музыка проигрываемая с одного источника, на нескольких колонках, причем не соединенных между собой проводами, и синхронизированная между ними по звуку. То есть - во всех комнатах "бесшовно" играет одно и тоже, без каких либо задержек. Звук вокруг в общем. 

Наиболее ярким представителем таких устройств является компания sonos. 

Кейсы применения каждый придумает для себя сам, но я выделю 1 важный момент: Голосовые уведомления (TTS) могут звучать на минимальной громкости, и из любой части квартиры их будет хорошо слышно. В конце концов, с 1 источником звука, добиться того же эффекта - это в том числе и уведомлять соседей, что в спальне упала влажность, или до работы ехать на 20 минут дольше. 


И так, нам понадобится:

  • Серверное устройство, Raspberry pi (orange и другие виды фруктов, имеющие аудиовыход) 
  • Любое устройство с Андройдом на борту. У меня в этой роли выступает планшет с дашбордом висящий на стене. 
  • Ну и конечно doсker и docker-compose. Отдельное спасибо tweaker3 за то что приобщил к прекрасному:)

Далее, нам понадобиться 3 компонента: Mopidy, snapserver, snapclient

Mopidy - выступает в роли простого проигрывателя (но он ох как не прост:)), но вещает не на колонки а в snapserver, который в свою очередь передает звук в snapclient, синхронизируя звук между всеми подключенными клиентами. 

Как установить докер было тут

В папку в которой находиться docker-compose.yml добавляем файл с настройками гугл музыки и спотифай.

Вниманиепуть в команде ниже, у вас может быть другой.


nano /home/pi/smarthome/logins.env
# Uncomment and fill in the login details below for your chosen services

# Google Play Music
#GMUSIC_USERNAME=
#GMUSIC_PASSWORD=

# Spotify
#SPOTIFY_USERNAME=
#SPOTIFY_PASSWORD=

Собственно, я пока не использую ни GMUSIC ни SPOTIFY, строчки закоментированы, и не активны. Это на будущее. 

Добавляем в docker-compose.yml следующие строчки 

  mopidy:
    container_name: mopidy
    env_file: logins.env
    image: "ivdata/mopidy"
    expose:
      - 6600
      - 6680        
    ports:
        - "6680:6680"
        - "6600:6600"        
    volumes:
        - ./fifo:/tmp/
        - ./music:/media
    network_mode: "host"        

  snapserver:
    container_name: snapserver
    image: "ivdata/snapserver"
    ports:
        - "1704:1704"
        - "1705:1705"
    volumes:
        - ./fifo:/tmp/
    environment:
        - stream_name=Mopidy

  snapclient:
    container_name: snapclient  
    image: nolte/rpi-snapcast-client:development
    volumes:
      - ./alsa_sound-config/asound-hifibarry.conf:/etc/asound.conf
    links:
     - snapserver:snapserverhost
    depends_on:
      - snapserver
    devices:
     - "/dev/snd/:/dev/snd/"
    command: "-h snapserverhost"

Переходим в папку, и запускаем процесс установки. На малине сервер с клиентом настроются сами.

cd /home/pi/smarthome/ 
docker-compose up -d

После этого нам останется установить только клиенты на другие устройства. В нашем случае - берем в руки телефоны и планшеты на андройде, и ставим SnapCast из Google play

У меня акустика с блютусом, по этому планшет остается на своем месте, а ваше очко уходит в зрительный зал колонка уходит на кухню.

К настройкам:

Заходи в настройки, и вводим адрес малины

Вы восхитительны.

Заходим на http://АдресМалины:6680/ включаем музыку (там уже стоит плагин Tuneln - через который крайне удобно слушать радио) включаем наслаждаемся. Но если у вас более одного устройства - вполне вероятно, что радость будет не долгой, и вы заметите рассинхронизацию, между колонками. Устранить ее проще всего через все тот же самый клиент для андройда. 







Жмем три точки и начинаем мучить свой музыкальный слух и крутить Latency в обе стороны. 

Это кстати самый сложный момент во всей статье) 


А теперь вишенка на торте, пробрасываем все это в Home-assistant

В configuration.yaml вставляем это: 

media_player:
  - platform: snapcast
    host: 127.0.0.1
  - platform: mpd
    host: 127.0.0.1
    location: Multi-Room Controller
#    password:
    name:  Mopidy

Я использую lovelace ui - с кастом компонентом mini-media-player

resources:
  - type: module
    url: /local/custom_ui/mini-media-player.js?v=0.8.7
views:    
  - cards:
      - cards:
          - entities: 
          - entities:
              - artwork: cover
                entity: media_player.mpd
                group: true
                type: 'custom:mini-media-player'
              - entity: media_player.snapcast_client_1
                group: true
                hide_power: true
                hide_controls: true
                name: Гостиная
                type: 'custom:mini-media-player'
              - entity: media_player.snapcast_client_2
                group: true
                hide_controls: true
                hide_power: true
                name: Коридор
                type: 'custom:mini-media-player'
              - entity: media_player.snapcast_client_3
                group: true
                hide_controls: true
                hide_power: true
                name: Спальня
                type: 'custom:mini-media-player'
              - entity: media_player.snapcast_client_4
                group: true
                hide_controls: true
                hide_power: true
                name: Кухня
                type: 'custom:mini-media-player'

И того получаем следующую ситуацию

Вы великолепны! :)


* Почему я говорю про raspberry, ведь сути запустить это можно на любой железке с докером? Например snapclient точно имеет архитектуру arm - что подразумевает платы фруктового семейства. Если Вы хотите использовать на системах x86\64 то скорее всего стоит просто найти контейнер данного компонента под Вашу архитектуру, при этом оставив настройки как есть.

А теперь вопрос знатокам - есть такая вещь как shairport sync - она позволяет транслировать музыку через AirPlay, что было бы удобно, если проигрывать музыку из любимого (не всеми!) apple music не дожидаясь пока появиться airplay 2 у которого заявлена поддержка сразу нескольких устройств. Но увы, мне пока не удалось подружить shairport sync и snapcast server через докер. Готовы к экспериментам?


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Олег Челбаев (sprut)
    Олег Челбаев (sprut) отредактировано 7 месяцев назад

    Поздравляю с дебютом, спасибо за классную статью)))

  2. Андрей Попов (andreypopov)
    Андрей Попов (andreypopov) 7 месяцев назад

    Хотелось бы больше узнать о железной части

    1) какие колонки

    2) как и где они установлены

    3) какая проводка все это соединяет

    • Белояр Иван (Ivan711)
      Белояр Иван (Ivan711) 7 месяцев назад

      Да по сути нет проводки. Есть orange pi - к которому по проводу подключена обычная китайская колонка под потолком. Есть андройд планшет - к нему тоже что-то китайское по блютусу. Ну и в гостиной пару киловатт по джеку 3.5 к андройд тв.

      Дело в том что можно подключить абсолютно что угодно (что есть в наличии), в любой последовательности. Snapclient есть и под линукс и под андройд, и под остальный платформы, предполагаю тоже, разве что кроме ios. 

  3. Сергей Цыганов (Tsvdonsk)
    Сергей Цыганов (Tsvdonsk) отредактировано 7 месяцев назад

    Статья огонь!

  4. Виталий Никольский (bigmanekb)
    Виталий Никольский (bigmanekb) отредактировано 7 месяцев назад

    круто ! Но у меня вопрос, а чем Volumio не угодил ?

    • Белояр Иван (Ivan711)
      Белояр Иван (Ivan711) 7 месяцев назад

      Вопрос в стиле "Зачем вы едите собак?" ) Да ничем, я описываю свой опыт, а опыта с Volumio у меня не было. 

      Но сейчас почитал и посмотрел: 

      Volumio - просто плеер, мультирум все так же делаетьтся через snapcast server и client. Собственно можно использовать любой плеер, при условии если с него получиться выводить звук на snapcast server а не на колонки. 

  5. Sergei Botvina (Tabasalu)
    Sergei Botvina (Tabasalu) 7 месяцев назад

    молодец, интересная статья!!!

  6. Григорий Абрамов (grishmanCH)
    Григорий Абрамов (grishmanCH) 7 месяцев назад

    Спасибо, отличная счтатья. Есть упоминание компонентов Spotify и Google Music, а что насчет Яндекс.Музыки? Есть ли решение для ее каста?

  7. (meta11ist87)
    (meta11ist87) 7 месяцев назад

    Тоже интересует Ямузыка, можно ли ее прикрутить сюда?

  8. (mrScylla)
    (mrScylla) 7 месяцев назад

    Вопрос 1: А в мультируме (ключевое из одного источника) можно будет сделать возможным: - "Сири включи Сплина на кухне и Киш в коридоре!?"

    Вопрос 2: Бывает ли мультирум микрофоны, чтобы находясь на кухне сказать: "Сири, включи Сплина в этой комнате!"

    • Белояр Иван (Ivan711)
      Белояр Иван (Ivan711) 7 месяцев назад

      Мультирум подразумевает играть из 1 источника (то есть одно и тоже) на разных колонках. Но по факту, если клиентом будет являться устройство на линуксе или андроиде, то в дополнение к снап клиенту можно поставить mpd на каждое устройство и играть что захочешь на каждом отдельно. Но это уже не будет мультирум. Второе, голосовое управление в данном решении слишком сложно реализовать. Точнее не то что бы сложно, но именно с выбором артиста или песни - проблема. 

      Но есть решение и по первому и по второму вопросу одновременно - HomePod в каждую комнату )

  9. (testattackforexam)
    (testattackforexam) 7 месяцев назад

    Про поддержку AirPlay на гитхабе проекта написано https://github.com/badaix/snap...

  10. (Alvian)
    (Alvian) отредактировано 3 месяца назад

    Попробуйте  Logitech Squeezebox - это реальный мультирум без танцев с бубенцами. Home Assistant сам находит эту систему и её компоненты. Есть режим синхронизации клиентов (на всех играет одно и тоже без задержек). Может использовать устройства Google Home со встроенными  chromecast плеерами в качестве своих клиентов через плагин -  Chromecast to LMS bridge (https://github.com/philippe44/LMS-to-Cast) 

    Управляется через web интерфейс, мобильных клиентов или сервер автоматизации например Home Assistant.

    Интегрируется в KODI. Играет как из Internet та и и из локальных источников.

    То, что можно cлушать на просторах СНГ.

    2000x2000x_image.jpg?1548014589

    Плюс любые плейлисты. Для аудиокниг удобен плагин Bookmarks.

    https://www.mysqueezebox.com - Основной сайт

    https://www.picoreplayer.org/ одна из отлично работающих стабильных конфигураций (сервер + клиент)

    https://www.max2play.com/en/ - ещё одна конфигурация всё из одной коробки на основе  Logitech Squeezebox  (сервер + клиент)

    https://ua3nbw.ru/tags/logitec... - Logitech Media Server (LMS) на OrangePI

    https://forums.slimdevices.com... - форум

    https://www.dastereo.ru/t/plee... - ветка форума на dastereo.ru про PiCorePlayer

    https://www.dastereo.ru/t/byud... - Бюджетный стример/плеер на основе мини-платы ARM Raspberry Pi (собираем сами!)

    https://www.dastereo.ru/t/volu... - Плееры и софт для RaspberryPi

    http://wiki.slimdevices.com/in... -  Squeezebox Wiki

    http://wiki.slimdevices.com/in... - Audio plugins

    Через плагины работает с youtube,  AirPlay, chromecast, dlna,...... Список длинный

    http://wiki.slimdevices.com/in... - репозитории с плагинами

    http://wiki.slimdevices.com/in... - Community Projects

    http://lists.slimdevices.com/ - public mailing lists on lists.slimdevices.com

    https://soundcheck-audio.blogs... - soundcheck's - audio@vise (блог с советами по настройке LMS и PiCorePlayer)

    https://mysku.ru/blog/jd/38982... - Очень детально расписана настройка

    https://www.ab-log.ru/forum/viewtopic.php?t=885&start=20 - Проектирование мультирума

    https://www.gearbest.com/netwo... + самая дешевая USB звуковая карта (https://ru.aliexpress.com/item...) + акустика - самый дешевый апаратный клиент (встраивал это в корпус компьютерных колонок, отлично работает)

    Для любителей HiFi есть множество решений - https://www.hifiberry.com/https://hifiduino.blogspot.com... , ...

    Для тех кто хочет использовать в качестве локального хранилища HDD подойдет CubieTrack и CubieBoad 2 с полноценным SATA. В чип А20 SATA встроен.

    https://www.maison-et-domotiqu... - решение для тех кто хочет встроить акустику и тянуть провода

    http://4pda.ru/forum/index.php... - Android пульт управления для SqueezeBox

    https://4pda.ru/forum/index.php?showtopic=321735  - Logitech Squeezebox™ Controller (ещё один Android пульт управления)

    https://sourceforge.net/projec... - LMS клиенты для разных платформ

    Любимые интернет-радиостанции

    • Белояр Иван (Ivan711)
      Белояр Иван (Ivan711) 6 месяцев назад

      Спасибо за информацию, как будет время заценю что это такое, и там уже отпишусь

      • (Alvian)
        (Alvian) отредактировано 6 месяцев назад

        Для тех кто хочет попробовать:

        - Качаем и ставим LMS сервер на ПК под Windows или Linux (есть под все распространённые платформы);

        - Качаем и ставим клиент (плеер) на этот же или другой/другие ПК;

        - Настраиваем;

        - Управляем из WEB интрфейса, Android, iOS

        - Пробуем;

        Для тех кто хочет использовать:

        - Определяемся с серверной платформой (NAS, одноплатный компьютер);

        - LMS сервер для NAS качаем здесь, для OrangePi, для RPi  piCorePlayer или Max2Play он же есть и под ODROID и ставим сервер;

        - Клиенты (плееры) делаем на piCorePlayer или Max2PlayOpenWrt, ставим на Windows Linux ПК, на Android, собираем из исходников, здесь, здесь;

        - Настраиваем;

        - Управляем из WEB интрфейса, Android, iOS

        - Используем.

        Огромное спасибо уважаемому Александру за вдохновенный обзор приведший к меня к LMS.

    • Белояр Иван (Ivan711)
      Белояр Иван (Ivan711) отредактировано 6 месяцев назад

      И так. Подвожу итоги. Решения типа picoreplayer и max2play, ставим под большой вопрос, под докер их нету, а разворачивать образ на карточку - дурной тон. 

      Плюсы: Да, удобно, хороший интерфейс, возможно через 1 сервер включать разные потоки на разные устройства.

      Минусы: Под андройд нет бесплатного приложения, плагин airplay не нашел. 

      Но как ты и сказал, идеальный решений не существует, и оно по LMS по сути не сильно далеко ушел от snapcast. Но до фабричных решений, оно все равно не дотягивает (либо надо использовать железки от логитеч)

      *UPD до правды докапался, настройку задержки звука нашел. Соглашусь - это решение превосходит предложенный мной вариант. Не без нюансов, но это уже второй вопрос. 

      Спасибо что такой большой объем информации собранный в одном месте. 

      • (Alvian)
        (Alvian) отредактировано 6 месяцев назад

        Logitech Media Server это отдельная система и ставить её нужно на отдельную железку. Это даже плюс, так как повышается надежность домашней автоматизации. Дурного тона здесь не вижу. Да система старенькая, Logitech снял свои устройства с производства, но откатанная и имеющая большое комьюнити. Имеет интеграцию практически во все системы домашней автоматизации.

        Эта же железка будет одновременно и сервером и плеером №1. Любители "качественного звука" не рекомендуют ставить на одну плату и сервер и плеер.

        Последующие клиенты (плееры №2, 3, 4, ...) могут быть попроще и дешевле, их можно либо изготовить либо поставить на ПК, под Android клиент (плеер) платный но цена не космическая https://play.google.com/store/... порядка 5$. 

        Так как эта железка  (Logitech Media Server) будет не ниже RPi 2, то на неё желательно поставить хороший ЦАП (https://ru.aliexpress.com/item... - у меня стоит такой) это китайский клон HiFiBerry DAC+. Так её принимает piCorePlayer. Верхнего предела для ЦАП практически нет. Но там уже желателен и БП хороший (https://www.ebay.com/itm/HiFi-...). Т.е. оптимальный путь это использовать эту железку как источник аудио звука при подключении к домашнему кинотеатру (через ресивер к качественным АС). Т.е. "убиваем 2-х зайцев" поэтому и не зазорно образ на карточку записать.

      • (Alvian)
        (Alvian) отредактировано 6 месяцев назад

        AirPlay Bridge

        https://github.com/philippe44/... -  AirPlay

        UPnPBridge

        https://github.com/philippe44/... -  UPnP

        CastBridge

        https://github.com/philippe44/... -  Chromecast

        Плагины подключаются через WEB интерфейс на вкладке "Подключаемые модули". Внизу страницы в поля  "Дополнительные репозитории" вставляются ссылки на них.

        2000x2000x_image.jpg?1548015633
        • Белояр Иван (Ivan711)
          Белояр Иван (Ivan711) 6 месяцев назад

          Уже несколько дней кручу airplay, но так и не заводиться. 

          Настройки стоят такие 

          2000x2000x_image.png?1548434894

          Но все мимо. Ты настраивал AirPlay? 

          • (Alvian)
            (Alvian) отредактировано 6 месяцев назад

            У меня стоит и работает другой плагин - ShairTunes2github

            2000x2000x_image.jpg?1548508612

            Проверил, у меня тоже не работают AirPlay Bridge и  UPnPBridge

            Тут автор пишет о возможных проблемах и решениях. Я тоже пытаюсь запустить подержку AirPlay, даже переставил все наново. Но на старой конфигурации все работало, а щас нет...

            Из тех, что я вверху указал, я пользуюсь только  CastBridge и он работает отлично.

            • Белояр Иван (Ivan711)
              Белояр Иван (Ivan711) 12 дней назад

              apt-get upgrade libcrypt-openssl-rsa-per 

              Решает проблему с Аирплеем) 

              В общем, я уже потихоньку начал переезд.

      • (Alvian)
        (Alvian) отредактировано 6 месяцев назад

        Docker Container for Logitech Media Server

        picoreplayer и max2play это кастомные сборки (server + player) имеющие свой интерфейс со множеством настроек, подключенных модулей, поддержкой ЦАПов и прочим. Для сервера LMS контейнеры есть 123, .... . Для плеера они не нужны, но они тоже есть.

        [HOW TO] install LMS 7.9 in a Docker container on a QNAP NAS

         

  11. (Alvian)
    (Alvian) отредактировано 7 месяцев назад

    Volumio - по моему не является мультирум системой, единичный плеер.

  12. (Alvian)
    (Alvian) отредактировано 6 месяцев назад

    Отличный вариант на сегодняшний день это Google Home Mini. До нового года его можно было купить за 40 euro. За эти деньги вы получаете готовое законченное устройство в отличном исполнении. Самый дешевый самодельный Squeezebox плеер обойдется примерно в 16$ + активные колонки в корпус которых он будет встроен.

    Звучит эта маленькая коробочка очень даже хорошо (аудиофилам не комментировать), намного лучше чем её коллега Amazon Echo Dot 3rd generation. У Alexa в силу конструктивных особенностей звук распространяется не вверх а в стороны (вверху расположена кнопочная панель управления, прямо над диффузором динамика). Единственный плюс Alexa это наличие AUX, но в Google Home Mini его можно добавить при желании - https://hackaday.com/2017/12/1... 

    Если средства не проблема, то можно использовать и более мощные в звуковом плане устройства из линейки Google Home.

    Я использую его в связке с Logitech Media Server. Он сам по себе играет аудио, управляется голосом, интегрируется в НА и плюс параллельно выступает Squeezebox плеером через CastBridge . При этом расширяется количество доступных стриминговых сервисов. Можно приобрести подписку на Google Play Music или Spotify.

    Получаем доступ к Pandora, HBO Now, Spotify, Amazon Video и Netflix за пределами США без использования vpn

    Плюс, не нужно тянуть провода, все работает в локальной сети и через Google Home  можно голосом управлять устройствами УД. Самый простой вариант попробовать - https://github.com/kakopappa/s...   https://sinric.com/  эмуляция Belkin Wemos. Или любую другую прошивку на ESP8266 + HAS.

    Идеальных решений не существует, но на сегодняшний день я бы выбрал это.


  13. (Alvian)
    (Alvian) отредактировано месяц назад


    Синхронизация плееров в  Logitech Media Server:

    Я использую LMS встроенный в piСorePlayer (pCP4.1.0 Standard Version). В его настройках на вкладке "Интерфейс" можно выбрать "Material Skin".

    Мне проверить не на чем, возможно эта тема оформления есть и в других версиях LMS.

    2000x2000x_image.jpg?1548863501

    Выглядит он так

    2000x2000x_image.jpg?1548863729

    В левом верхнем углу имеется пункт "Manadge Players".

    2000x2000x_image.jpg?1548864101

    В нем можно задать любые комбинации имеющихся плееров.

    При переключениями между группами или одиночными плеерами переключаются также и плейлисты.

    Громкость можно регулировать как для отдельных плееров так и для всей группы.

    Это очень удобный способ переключаться между плеерами и их комбинациями.

    P.S. Оказалось всё это можно сделать с помощью плагина - Group Players

К списку статей

Похожие статьи

15 ноября 2018, 09:42
Способы автоматизации механических ворот
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
04 апреля 2019, 17:48
Расскажу о том за ~1 час перевезти УД с 2мя USB стиками с Raspberry PI на Synology NAS.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
25 ноября 2018, 18:23
Умное зеркало добавляем модули Airplay и Google Calendar
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
24 августа 2018, 10:15
Краткий экскурс в настройку Home Assistant