Бюджетный мультирум, и его интеграция в 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 или Instagram
Остались вопросы? Мы в Telegram - @Soprut

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

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

  2. Андрей Попов (andreypopov)

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

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

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

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

    • Белояр Иван (Ivan711)

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

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

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

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

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

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

    • Белояр Иван (Ivan711)

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

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

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

  5. Sergei B. (Tabasalu)
    Sergei B. (Tabasalu) год назад

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

  6. Григорий Абрамов (grishmanCH)

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

  7. (meta11ist87)
    (meta11ist87) год назад

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

  8. (mrScylla)
    (mrScylla) год назад

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

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

    • Белояр Иван (Ivan711)

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

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

  9. (testattackforexam)
    (testattackforexam) год назад

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

  10. (Alvian)
    (Alvian) отредактировано год назад

    Попробуйте  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)

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

      • (Alvian)
        (Alvian) отредактировано год назад

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

        - Качаем и ставим 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) отредактировано год назад

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

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

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

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

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

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

      • (Alvian)
        (Alvian) отредактировано год назад

        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) отредактировано год назад

        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)

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

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

          2000x2000x_image.png?1548434894

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

          • (Alvian)
            (Alvian) отредактировано год назад

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

            2000x2000x_image.jpg?1548508612

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

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

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

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

              apt-get upgrade libcrypt-openssl-rsa-per 

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

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

      • (Alvian)
        (Alvian) отредактировано год назад

        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) отредактировано год назад

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

  12. (Alvian)
    (Alvian) отредактировано год назад

    Отличный вариант на сегодняшний день это 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) отредактировано 10 месяцев назад


    Синхронизация плееров в  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

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

Устройства в материале

Raspberry Pi 4

Производитель: Raspberry Pi

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

17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
15 ноября 2018, 09:42
Способы автоматизации механических ворот
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
29 октября 2019, 07:59
Умный домофон на базе nodeMCU с прошивкой ESPHome.
11 мая 2019, 19:57
Как активировать русский язык в Google Assistant для Google Home
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit