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

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

Built distribution (wheel)

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

Total release size: 81.9 kB

Release files / wiim-0.3.0.tar.gz

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

Download URL wiim-0.3.0-py3-none-any.whl
Size 42.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bbd2efd66791f7a3367dcd32854715bd9577f596fc79f0e29cc11c58828b753f
BLAKE2b-256 checksum
How to use checksums
45959eced1d29cc34b2f563cc968dd077f5f8e8d10e0d8b5b775b57a2a27eca1
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