Skip to content

WiiM provider#2947

Draft
davidanthoff wants to merge 26 commits intomusic-assistant:devfrom
davidanthoff:da/wiim
Draft

WiiM provider#2947
davidanthoff wants to merge 26 commits intomusic-assistant:devfrom
davidanthoff:da/wiim

Conversation

@davidanthoff
Copy link

@davidanthoff davidanthoff commented Jan 6, 2026

This is a very WIP attempt to use the official WiiM Python package (https://github.com/Linkplay2020/wiim) to implement a player provider.

Some things work, but the underlying wiim package seems buggy and not in great shape at the moment. I opened a few PRs against the package that fixes a few things, but there is probably a fair bit more... This PR only works with all my PRs over at the wiim package merged. At the same time, there is apparently a plan to use that package for the core HA integration (home-assistant/core#148948), so fingers crossed the quality of the package will improve.

I originally attempted to use the pywiim package (https://github.com/mjcumming/pywiim) for this, and I'm still wondering whether that might actually be a better route, as that package seems to get a lot of attention and might be better maintained. But of course, it isn't the "official" package...

It's been years that I programmed anything in Python, and certainly my first MA code, so bear with me :)

@Hedda
Copy link

Hedda commented Jan 19, 2026

Should this really be named "WiiM Player Provider" and not "Linkplay Player Provider"?

Is or will this provider be hardcoded to only be specifically just for WiiM branded products or will it technically be a generic Linkplay implementation?

Might we also need a seperate "Linkplay Player Provider" as well is this is added as-is?

The main difference is that WiiM is only a brand while Linkplay is a (propriatory) protocol that other manufacturers can also license to use? If I understand correctly, Linkplay Technology has at least in the past licensed its Linkplay technology to others, even if it is today more focused on WiiM which is Linkplay Technology etelectronics brand (though initially it sounds like it was more meant as a reference design that others could copy to make their own Linkplay-based products).

So if this provider is not WiiM-specific but instead a general Linkplay provider implementation that coould technically also be used by other manufacturers that support the Linkplay protocol then suggest name it "Linkplay Player Provider" in Music Assistant .
For reference ,this is is by the way why integration for Home Assistant is today called "Linkplay integration" and not "WiiM integration":

However I see that you have also an open PR for a pure WiiM media player integration which is very relevant to this as well:

PS: Public info on how Linkplay technology is used in other brands and others manufacturer's products is not perfectly clear:

Quotes from https://www.linkplay.com/

"We provide a turnkey solution that includes software, Voice, Wi-Fi, Bluetooth Modules, and global streaming content integrated into one central mobile app for smart, voice-enabled, and IoT products. "

"Our smart solution currently powers over hundreds of brands and smart products in multiple regions around the world, in the United States, Europe, Asia, and South America."

"Brands We’ve Worked With"

image

Ping @Linkplay2020 / @WiimHome

@davidanthoff
Copy link
Author

@Hedda I'm using the wiim package that is apparently developed by the LinkPlay/Wiim company (https://github.com/Linkplay2020/wiim). Whatever that package supports is also supported here. The folks in charge in the MA Discord were clear that they wanted any integration to be based on that package.

At the moment that package does not support arbitrary LinkPlay players. I'm trying to get at least the Audio Pro stuff added (e.g. Linkplay2020/wiim#7), but we'll see how that goes.

I'm indifferent about naming.

Maybe we could move strategy discussions like that into a separate issue and keep the discussion on this PR focused on getting the technical issues sorted out?

@MarvinSchenkel
Copy link
Contributor

@Hedda LinkPlay is just an OEM that provides chips for other brands (such as WiiM) to use in their audio equipment. Many of those brands have different features enabled and/or built different features on top of this.

It will be close to impossible to build a LinkPlay provider that will work with all features of all brands. Ultimately, the best we can do is provide a 'generic LinkPlay provider' with just basic functionality, but that will then live next to the WiiM provider for example.

@OzGav
Copy link
Contributor

OzGav commented Jan 20, 2026

If you can add a proper icon that would be great. This one would do you just have to trim the corners and turn it into a SVG. https://share.google/K8fboJeSoe1vwfpq2

async def play(self) -> None:
"""Play command."""
logger = self.provider.logger.getChild(self.player_id)
logger.info("Received PLAY command on player %s", self.display_name)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume these are all here just during development?

@Hedda
Copy link

Hedda commented Jan 20, 2026

LinkPlay is just an OEM that provides chips for other brands (such as WiiM) to use in their audio equipment. Many of those brands have different features enabled and/or built different features on top of this. It will be close to impossible to build a LinkPlay provider that will work with all features of all brands. Ultimately, the best we can do is provide a 'generic LinkPlay provider' with just basic functionality, but that will then live next to the WiiM provider for example.

@MarvinSchenkel I don't think that is quite correct as Linkplay Technology is actually also the company who own the WiiM brand.

WiiM is just a consumer brand of the Linkplay Technology, but yes they also license their "Linkplay" tech to other companies too.

If look at the wiimhome.com website you will see that it is says © 2025 Linkplay Technology Inc.

And if look at the "About us" company page on the linkplay.com website it mentions that WiiM is their own brand of electronics.

Linkplay Technology Inc. has full owership + control of both of Linkplay as a protocol as well as WiiM as a brand and their code.

As such there is nothing preventing that company from making a single integration compatible with Linkplay and WiiM.

You can kind of see WiiM as a hardware reference platform which show off what the Linkplay ecosystem can do.

That is, WiiM products might have more features but the integration can techically be made cross-compatible with both.

I understand it is a confusing since "Linkplay Technology" is both name of the company and their technology is named "Linkplay".

Ping @Linkplay2020 and @WiimHome for further clearification.

Update: Forn reference, here are few blog posts that put better words on the connection between Linkplay and its WiiM brand:

"The WiiM trademark belongs to Linkplay Technology, founded in 2014. It included experienced engineers and programmers from the world’s leading companies Google, Broadcom, Harman and InterVideo, who hardly need a separate introduction. Since its inception, Linkplay has specialized in the development and improvement of voice interactive control systems, home automation and IT technologies. Her clients included Yamaha, Marshall, Edifier, Audio Pro and other well-known companies. And then LinkPlay decided to produce “smart” electronics under its own brand."

"‘WiiM’ is the rather awkward brand name adopted by Linkplay for a (quickly expanding) range of home audio streaming products."

"WiiM is part of LinkPlay Technology Inc., a collaborative team from the likes of Google and Harmon, developing bespoke audio streaming software and hardware for OEM partners, with bases in the US, China and South Korea."

"Linkplay Technology has launched an upgraded version of its affordable audiophile music streaming box called the WiiM Pro Plus"

{
"type": "player",
"domain": "wiim",
"name": "WiiM",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"name": "WiiM",
"name": "WiiM",
”stage”: “beta”,


await self.try_add_player(player_id, stripped_ip_address, "Unknown", upnp_device)

async def unload(self, is_removed: bool = False) -> None:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the ClientSession created in handle_async_ini be closed here?

break

if not upnp_device:
return
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just confirm you want to break out of the loop here?

elif group_info and group_info.get("role") == "follower":
pass

self._is_group_leader = is_current_device_leader
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn’t initialised in init?

if self.device.name != self._attr_name:
self._attr_name = self.device.name

self._attr_device_info = DeviceInfo(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don’t think this is initialised before?

@davidanthoff
Copy link
Author

Just an update for anyone watching this PR: I am currently thinking that the attempt in #3067 is more promising, so the work over there is probably more relevant to try and review.

@OzGav I tried to address the comments you left here over in the other PR, so hopefully you don't have to leave those again :)

@OzGav
Copy link
Contributor

OzGav commented Feb 18, 2026

@davidanthoff There are some mypy errors. Make sure you run pre-commit before pushing. Also add a comment and resolve each of the conversations above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants