Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

PyPI version CI Python 3.13 License PyPI downloads

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:

  • WiimRequestException reports HTTP and network request failures.
  • WiimDeviceException reports device and UPnP action failures.
  • WiimInvalidDataException reports 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.3.0a1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wiim 0.3.0a1
File Size Uploaded
wiim-0.3.0a1.tar.gz 39.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wiim 0.3.0a1
File Interpreter ABI Platform
wiim-0.3.0a1-py3-none-any.whl Python 3 none any Details

Total release size: 81.9 kB

Release files / wiim-0.3.0a1.tar.gz

Download URL wiim-0.3.0a1.tar.gz
Size 39.9 kB
Tags Source
SHA-256 checksum
How to use checksums
bcc116ab3870f17bc7ac3e8f35236dbd1b3176b0ddcce61155e88f5ab17d9bd4
BLAKE2b-256 checksum
How to use checksums
df7c8a3fa23d1325148daf7e3340214747b0919c611fe18b1eb56bac0ab00e1d
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.3.0a1-py3-none-any.whl

Download URL wiim-0.3.0a1-py3-none-any.whl
Size 42.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b52eee7dd5f5a3782614796f554fa637302d3b073c0f55779d34b7215701f1cd
BLAKE2b-256 checksum
How to use checksums
defc7ab43d879142f8514765f08d3a919260a28f4c80b92d0171767efc1d9e53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page