WiiM Python SDK
wiim is an asynchronous Python SDK for discovering, monitoring, and
controlling WiiM audio devices on a local network.
The SDK communicates directly with devices using UPnP eventing and the LinkPlay HTTP API. It is intended for Home Assistant integrations, automation platforms, and other asyncio-based applications.
Features
- Validate and create WiiM devices from UPnP description URLs
- Discover local devices with the included Zeroconf CLI
- Control playback, volume, mute, seeking, repeat, and shuffle
- Select supported audio inputs and outputs
- Read normalized media metadata, playback state, and device information
- Subscribe to real-time UPnP state changes with HTTP polling as a fallback
- Inspect presets, the current queue, and transport capabilities
- Create, update, and disband multiroom groups
- Support IPv4 and IPv6 event listeners
- Expose typed models and exceptions for application integrations
Available features can vary by device model, active input source, and firmware version.
Installation
Install the latest release from PyPI:
python -m pip install wiim
The project is currently tested with Python 3.13.
Quick Start
Create a device from its UPnP description URL and send playback commands:
import asyncio
from aiohttp import ClientSession
from wiim import async_create_wiim_device
async def main() -> None:
async with ClientSession() as session:
device = await async_create_wiim_device(
"http://192.168.1.100:49152/description.xml",
session,
host="192.168.1.100",
)
try:
await device.async_set_volume(30)
await device.async_play()
print(f"Device: {device.name}")
print(f"State: {device.playing_status}")
print(f"Media: {device.current_media}")
finally:
await device.disconnect()
asyncio.run(main())
Replace the example address with the UPnP description URL and IP address of your device.
Device Discovery
Run the included CLI to discover WiiM devices advertised through Zeroconf and print their current state:
python -m wiim
Applications that already receive discovery information can use
async_create_wiim_device() with the discovered UPnP location. This avoids
running a second discovery implementation and lets the application manage the
device lifecycle explicitly.
Error Handling
All SDK-specific exceptions derive from WiimException:
WiimRequestExceptionreports HTTP and network request failures.WiimDeviceExceptionreports device and UPnP action failures.WiimInvalidDataExceptionreports invalid device responses.
Catch a more specific exception when the application needs different recovery behavior for transport failures and invalid data.
from wiim import WiimException
try:
...
except WiimException as err:
print(f"WiiM request failed: {err}")
Development
Clone the repository and install tox:
python -m pip install tox
Run the test suite in the isolated Python 3.13 environment:
python -m tox -e py313
Run all configured test and static-check environments:
python -m tox
License
This project is available under the MIT License.
Support
Report bugs and request features through
GitHub Issues. For product
support, contact support@wiimhome.com.
Metadata
Release files for wiim 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| wiim-0.2.1.tar.gz | 38.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| wiim-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.4 kB
Release files / wiim-0.2.1.tar.gz
| Download URL | wiim-0.2.1.tar.gz |
|---|---|
| Size | 38.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a1c7e43424c7097c016723e281a99ec7e2650d1fc93317e9239089615936144a
|
|
BLAKE2b-256 checksum How to use checksums |
d81076cf365a73c0aa63ccc8658dd4805d36e1434dffdc8f1e54342425ea2b06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / wiim-0.2.1-py3-none-any.whl
| Download URL | wiim-0.2.1-py3-none-any.whl |
|---|---|
| Size | 40.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6c9f5f0896ef63f94713d252759570f8834a09b2f3872fc038c94a1efbad3b22
|
|
BLAKE2b-256 checksum How to use checksums |
73e6d852a643bc1a30a421f7f79e069076a0aba72cea65a3d5adeadb66708200
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|