Skip to main content

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.1

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.1
File Size Uploaded
wiim-0.3.1.tar.gz 39.9 kB Details

Built distribution (wheel)

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

Total release size: 81.9 kB

Release files / wiim-0.3.1.tar.gz

Download URL wiim-0.3.1.tar.gz
Size 39.9 kB
Tags Source
SHA-256 checksum
How to use checksums
09c73cf282b46e48bf348c194d404f896ebe59d7a5e0b601858217ff762549f6
BLAKE2b-256 checksum
How to use checksums
f742c083263f1e93ad150d1fd0b19d73bdd0cc1906821fa7a645192cf51b05db
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.1-py3-none-any.whl

Download URL wiim-0.3.1-py3-none-any.whl
Size 42.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
313170fb6e9bd477ea44ca0378f243a18aa5620972a0e1d3164c8e65f205a4bd
BLAKE2b-256 checksum
How to use checksums
adfbb275fa162d5e3338aea7b4965e7631f08aa97fe70410a37fdeeb85c1df5a
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