Music Assistant 2.0: Your Music, Your Players

Are you using multicast forwarding or have any other unusual network setup? That is, do you have a single subnet flat network?

The menu bar on the left could be up there after ā€œmusic assistantā€ would give more room for covers and the lower bar with controlsā€¦ Iā€™m aware that there is a horizontal option as well but that takes even more away from the window with coversā€¦

Nothing unusual with my network. It consists of 2 Ubiquiti APs and everything is on the same 192.168.1.x subnet.

Try adjusting the multicast options and IGMP snooping

Thanks. Iā€™ll take a look at those settings.
What I find odd is that only the Google Home Speaker Groups are impacted as the individual speakers all appear and work fine.

Yeah which is why I suspect something local as no one else is reporting this? I could be wrong though!

Not sure what is happening but I am finding I am getting errors when trying run MU to apple homepod speakers via a service call. Seems I am able to run from the MU GUI though. Finding it all quite inconsistent, sometimes it works, sometimes it doesnā€™t.

alias: Play moveDaHouse on the home pods
service: mass.play_media
data:
  media_type: radio
  media_id: MoveDaHouse
  enqueue: play
target:
  entity_id: media_player.group_airplay

Not sure if this is related, but this is what I see in the logs:

Log entry one:

Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/mass/media_player.py:500
integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 10:27:12 (3 occurrences)
Last logged: 10:34:00

[140070905065200] Error handling message: Unknown error (unknown_error) Steve of Queanbeyan from 192.168.1.16 (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36)
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 27, in _handle_async_response
    await func(hass, connection, msg)
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 793, in handle_execute_script
    script_result = await script_obj.async_run(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1769, in async_run
    return await asyncio.shield(create_eager_task(run.async_run()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 464, in async_run
    await self._async_step(log_exceptions=False)
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 528, in _async_step
    self._handle_exception(
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 558, in _handle_exception
    raise exception
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 526, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 763, in _async_call_service_step
    response_data = await self._async_run_long_action(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 726, in _async_run_long_action
    return await long_task
           ^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2741, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2784, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 977, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 1049, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/mass/media_player.py", line 438, in _async_play_media_advanced
    if item := await self._get_item_by_name(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/mass/media_player.py", line 500, in _get_item_by_name
    result = await func(search=searchname)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/music_assistant/client/music.py", line 357, in get_library_radios
    return PagedItems.parse(
           ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/music_assistant/common/models/media_items.py", line 620, in parse
    items=[item_type.from_dict(x) for x in raw["items"]],
                                           ~~~^^^^^^^^^
TypeError: list indices must be integers or slices, not str

Log entry two:

Logger: homeassistant.helpers.script.websocket_api_script
Source: helpers/script.py:526
First occurred: 10:27:12 (3 occurrences)
Last logged: 10:34:00

websocket_api script: Error executing script. Unexpected error for call_service at pos 1: list indices must be integers or slices, not str
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 526, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 763, in _async_call_service_step
    response_data = await self._async_run_long_action(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 726, in _async_run_long_action
    return await long_task
           ^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2741, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2784, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 977, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 1049, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/mass/media_player.py", line 438, in _async_play_media_advanced
    if item := await self._get_item_by_name(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/mass/media_player.py", line 500, in _get_item_by_name
    result = await func(search=searchname)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/music_assistant/client/music.py", line 357, in get_library_radios
    return PagedItems.parse(
           ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/music_assistant/common/models/media_items.py", line 620, in parse
    items=[item_type.from_dict(x) for x in raw["items"]],
                                           ~~~^^^^^^^^^
TypeError: list indices must be integers or slices, not str
1 Like

I obtained the token for Apple Music. The documentation says, ā€œClick it and copy the cookie value and use this in Music Assistant as the 'Music user token.ā€ Where exactly does the token go?

For those errors update to the latest version of the integration.

1 Like

When you add the Apple Music provider there is a field in the config

Just noticed an update in HACS. Thanks. Updating from 2024.5.1 to 2024.6.1

Update applied and now working. Thanks again for the response.

I donā€™t see it in the dropdown. Not in the browser version either.

1 Like

You have an old version of the server then

Thanks for helping with trying to diagnose my issue with the Google Speaker groups. I think I have isolated the issue to be with the two Harmon Kardon Citation One speakers that I have, They are setup as a stereo pair in Google Home and then included in the Google Speaker group with two other speakers.
This has worked fine when playing music via Spotify to the Google Speaker group but for some reason it is causing Music Assistant to not load the speaker group. When I remove the HK Citation One speakers from the Google Speaker group, the group appears immediately in Music Assistant.

Update: It is not just the HK Citation One when in a stereo pair has issues. I created a stereo pair with two Google Home Miniā€™s and have the same issue. So it looks like the Google Speaker Groups donā€™t work well when it contains speakers in a stereo pair.

1 Like

and Apple Music is available in the 2.1 Beta version so thatā€™s why you canā€™t see it
Music Assistant 2.0: Your Music, Your Players - #385 by OzGav

Sounds like you should raise an issue on GutHub then so Marcel can try and replicate it

1 Like

My system has advised me of updates to both the addon and the integration. Two each over the last couple of days, so 4 in all.

1 Like

Has anyone considered looking into using NymphCast casting protocol to and/or from Music Assistant?

Player/Client can be used on example ESP32 or Raspberry Pi:

What is NymphCast?

NymphCast is a software solution which turns your choice of hardware into an audio and video source for a television or (powered) speakers. It enables the streaming of audio and video over the network from a client device or media server, as well as the streaming of internet media to a NymphCast server, controlled by a client device, or directly on the receiver.

In addition, the server supports NymphCast apps (currently in preview status) written in AngelScript to extend the overall NymphCast functionality with e.g. 3rd party audio / video streaming protocol support on the server side, and customisable UIs in the client application.

NymphCast requires the use of a client device in all but the GUI (ā€˜Smart TVā€™) mode. The server application (receiver) runs on a target device, while the client device functions as a remote control device:

Client-side core functionality is provided through the NymphCast library.

1 Like

I really donā€™t get how MU selects its speakers through service calls. I have three airplay speakers (a homepod and two homepod minis).

This morning, as part of an automation I ran these service callsā€¦

service: media_player.unjoin
metadata: {}
data: {}
target:
  entity_id: media_player.bed_room
service: mass.play_media
target:
  entity_id: media_player.bed_room
data:
  media_type: radio
  media_id: SBS Chill
  enqueue: play
alias: Play SBS Chill on Airplay Bedroom

Instead of playing to the bedroom speaker it played to the living room and kitchen speakers. I just donā€™t seem able to nut this out in a consistent, predictable manner. There seems no rhyme or reason to it all.

That and developer tools states is displaying the wrong information in the attributes. It is telling me that the news is playing in living room and kitchen speakers and music in the bedroom where I can hear the opposite. Music in the living room and kitchen and the news upstairs. I know I have named them properly as I can select the correct speaker with Home Assistant. Restarting the add-on seems to have fixed this.

Also those speakers (apart from the group speakers I have setup) are absent from the GUI, though they do appear under the group speakers. They come back in the GUI after I restart the add-on.

Can we have the service calls play to the speaker it is asked to pay to? Or is there some other trick to all of this that I am unaware of? ieā€¦ should I switch the other two off and then run mass.play_media or something similar?