{"id":28336305,"url":"https://github.com/mjcumming/wiim","last_synced_at":"2026-04-01T19:07:50.234Z","repository":{"id":296299405,"uuid":"989080760","full_name":"mjcumming/wiim","owner":"mjcumming","description":"WiiM (LinkPlay) Audio Integration for Home Assistant with multiroom support","archived":false,"fork":false,"pushed_at":"2026-02-11T19:43:05.000Z","size":3550,"stargazers_count":75,"open_issues_count":9,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-02-12T03:53:55.306Z","etag":null,"topics":["hacs-integration","home-assistant","linkplay","mediaplayer","multiroom","wiim"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mjcumming.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-23T14:22:45.000Z","updated_at":"2026-02-12T01:50:33.000Z","dependencies_parsed_at":"2025-06-13T13:36:31.273Z","dependency_job_id":"d50e3481-60ef-4883-be12-034411a0debc","html_url":"https://github.com/mjcumming/wiim","commit_stats":null,"previous_names":["mjcumming/wiim"],"tags_count":184,"template":false,"template_full_name":null,"purl":"pkg:github/mjcumming/wiim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjcumming%2Fwiim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjcumming%2Fwiim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjcumming%2Fwiim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjcumming%2Fwiim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mjcumming","download_url":"https://codeload.github.com/mjcumming/wiim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjcumming%2Fwiim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29739021,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T04:51:08.365Z","status":"ssl_error","status_checked_at":"2026-02-23T04:49:15.865Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacs-integration","home-assistant","linkplay","mediaplayer","multiroom","wiim"],"created_at":"2025-05-26T22:44:38.275Z","updated_at":"2026-04-01T19:07:50.215Z","avatar_url":"https://github.com/mjcumming.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WiiM Audio Integration for Home Assistant\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/logo.png\" alt=\"WiiM Integration Logo\" width=\"200\"/\u003e\n\u003c/p\u003e\n\n[![hacs_badge](https://img.shields.io/badge/HACS-Default-41BDF5.svg)](https://github.com/hacs/integration)\n[![Installations](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fanalytics.home-assistant.io%2Fcustom_integrations.json\u0026query=%24.wiim.total\u0026label=installs\u0026color=41BDF5\u0026logo=home-assistant\u0026cacheSeconds=3600)](https://analytics.home-assistant.io/custom_integrations.json)\n[![GitHub Release](https://img.shields.io/github/release/mjcumming/wiim.svg)](https://github.com/mjcumming/wiim/releases)\n[![License](https://img.shields.io/github/license/mjcumming/wiim.svg)](https://github.com/mjcumming/wiim/blob/main/LICENSE)\n[![Home Assistant](https://img.shields.io/badge/home%20assistant-2024.12.0+-blue.svg)](https://www.home-assistant.io/)\n[![Maintenance](https://img.shields.io/maintenance/yes/2026.svg)](https://github.com/mjcumming/wiim)\n[![Quality Scale](https://img.shields.io/badge/quality%20scale-gold-brightgreen.svg)](https://www.home-assistant.io/docs/quality_scale/)\n[![Project Status](https://img.shields.io/badge/project%20status-active-success.svg)](https://github.com/mjcumming/wiim)\n[![CI](https://img.shields.io/github/actions/workflow/status/mjcumming/wiim/tests.yaml?branch=main\u0026label=CI)](https://github.com/mjcumming/wiim/actions/workflows/tests.yaml)\n[![codecov](https://codecov.io/gh/mjcumming/wiim/branch/main/graph/badge.svg)](https://codecov.io/gh/mjcumming/wiim)\n[![GitHub Issues](https://img.shields.io/github/issues/mjcumming/wiim.svg)](https://github.com/mjcumming/wiim/issues)\n[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/mjcumming/wiim.svg)](https://github.com/mjcumming/wiim/pulls)\n\n\u003e ⭐ **Love this integration?** Please star us on GitHub if you use this integration! It helps others discover the project and shows your support for the development effort.\n\nTransform your WiiM and LinkPlay speakers into powerful Home Assistant media players with full multiroom support. Built on the brand new, fully async [`pywiim`](https://github.com/mjcumming/pywiim) library we wrote for reliable, high-performance device communication.\n\n## Why Choose This Integration?\n\n- **🎵 Complete Media Control** - Full transport controls, volume, sources, presets, TTS, and media browsing\n- **🔗 True Multiroom** - Uses Home Assistant's native grouping for reliable synchronized playback\n- **⚡ Powered by pywiim** - Built on the brand new, fully async [`pywiim`](https://github.com/mjcumming/pywiim) library we wrote for robust, high-performance device communication\n- **🚀 Auto-Discovery** - Finds speakers automatically via UPnP/SSDP/Zeroconf\n- **📱 Universal Compatibility** - Works with all Home Assistant dashboards, voice assistants, and media sources\n- **⚡ Hybrid State Updates** - UPnP events for real-time updates + HTTP polling for reliability\n- **🎛️ Advanced Audio** - 10-band EQ, subwoofer control, audio quality sensors, output mode control, and format support\n- **⏰ Timer \u0026 Alarms** - Sleep timer and alarm management for WiiM devices\n- **📊 Rich Diagnostics** - Comprehensive statistics, health monitoring, and troubleshooting tools\n- **🔄 Scene Support** - Full scene restoration including EQ presets and playback state\n- **🎯 Smart Features** - Optimistic UI updates, adaptive polling, and intelligent source detection\n\n## Supported Devices\n\n- **WiiM**: Mini, Pro, Pro Plus, Amp, Ultra\n- **LinkPlay Compatible**: Arylic, Audio Pro (including Gen1: A26, C10, C5a and MkII models), Dayton Audio, DOSS, and many more\n- **Enhanced Compatibility**: Automatic protocol fallback for devices with non-standard configurations\n- **Requirements**: Home Assistant 2024.12.0+ on same network as speakers\n\n## Quick Start\n\n### 1. Install via HACS (Recommended)\n\n1. **Find in HACS**: HACS → Integrations → Search \"WiiM Audio\"\n2. **Install**: Download → Restart Home Assistant\n3. **Configure**: Settings → Devices \u0026 Services → Add Integration → \"WiiM Audio\"\n\n### 2. Manual Installation\n\n1. Download [latest release](https://github.com/mjcumming/wiim/releases)\n2. Extract to `/config/custom_components/wiim/`\n3. Restart Home Assistant and add integration\n\n## Key Features\n\n### 🎵 Media Playback \u0026 Control\n\n| Feature              | Description                                                                       |\n| -------------------- | --------------------------------------------------------------------------------- |\n| **Media Control**    | Play, pause, stop, turn off, next/previous, seek with resume support              |\n| **Volume Control**   | Individual and synchronized group volume with debouncing                          |\n| **Smart Sources**    | Detects streaming services (Spotify, Amazon Music, Apple Music, etc.)             |\n| **Media Browser**    | Browse Home Assistant media sources, DLNA servers, and custom radio stations      |\n| **TTS Support**      | Full Text-to-Speech integration for all TTS engines (Google, Amazon, Azure, etc.) |\n| **Shuffle \u0026 Repeat** | Toggle shuffle and repeat modes for playlists                                     |\n| **Presets**          | Hardware preset buttons (device dependent, up to 20)                              |\n| **URL Playback**     | Play audio from any URL (radio streams, files, playlists)                         |\n\n### 🎛️ Audio Enhancement\n\n| Feature            | Description                                                                        |\n| ------------------ | ---------------------------------------------------------------------------------- |\n| **EQ Control**     | 10-band equalizer with 24 presets (Flat, Rock, Jazz, Classical, Pop, etc.)         |\n| **Custom EQ**      | Fine-tune each of 10 frequency bands (-12dB to +12dB)                              |\n| **Subwoofer**      | Enable/disable and adjust level (-15 to +15 dB) for connected subwoofers           |\n| **Audio Output**   | Control hardware output modes (Line Out, Optical, Coax, Bluetooth, Headphone, USB) |\n| **Audio Quality**  | Real-time sensors for sample rate, bit depth, and bit rate                         |\n| **Format Support** | Lossless (FLAC, WAV, ALAC up to 24-bit/192kHz) and compressed formats              |\n\n### 🏠 Multiroom \u0026 Grouping\n\n| Feature                | Description                                                     |\n| ---------------------- | --------------------------------------------------------------- |\n| **Multiroom Groups**   | Synchronized playback across speaker groups with perfect timing |\n| **Group Coordinators** | Virtual entities for unified group control                      |\n| **Role Detection**     | Automatic master/slave/solo role detection with sensors         |\n| **Group Volume**       | Synchronized volume control across all group members            |\n| **Smart Grouping**     | Uses Home Assistant's native grouping for reliable sync         |\n\n### ⏰ Timer \u0026 Alarm Features (WiiM Devices)\n\n| Feature              | Description                                                       |\n| -------------------- | ----------------------------------------------------------------- |\n| **Sleep Timer**      | Set sleep timer (0-7200 seconds) to automatically turn off device |\n| **Alarm Management** | Create and manage up to 3 alarms with daily/weekly schedules      |\n| **Alarm Control**    | Full alarm creation, update, and deletion via services            |\n\n### 📊 Sensors \u0026 Diagnostics\n\n| Feature               | Description                                      |\n| --------------------- | ------------------------------------------------ |\n| **Role Sensor**       | Shows current multiroom role (Master/Slave/Solo) |\n| **Input Sensor**      | Current audio input source                       |\n| **Audio Quality**     | Sample rate, bit depth, and bit rate sensors     |\n| **Diagnostic Sensor** | Comprehensive device health and statistics       |\n| **Firmware Sensor**   | Device firmware version tracking                 |\n| **Bluetooth Status**  | Bluetooth output and connected device status     |\n\n### 🔧 Advanced Features\n\n| Feature                  | Description                                                                   |\n| ------------------------ | ----------------------------------------------------------------------------- |\n| **Auto-Discovery**       | Finds speakers automatically via UPnP/SSDP/Zeroconf                           |\n| **Real-Time Updates**    | UPnP event subscriptions for instant state changes with HTTP polling fallback |\n| **Scene Support**        | Full scene restoration including EQ presets and playback state                |\n| **Optimistic Updates**   | Immediate UI feedback for all controls                                        |\n| **Enhanced Diagnostics** | Comprehensive device diagnostics with statistics and health monitoring        |\n| **Protocol Fallback**    | Automatic HTTP/HTTPS protocol detection with multi-port fallback              |\n| **Audio Pro Support**    | Full support for Audio Pro MkII with mTLS client certificate authentication   |\n\n## How It Works\n\nThe integration uses a **hybrid approach** combining UPnP event subscriptions and HTTP polling for optimal reliability and responsiveness:\n\n- **UPnP Events (Primary)**: Real-time state updates via DLNA DMR event subscriptions\n  - Instant updates when device state changes (play/pause/volume/mute)\n  - Reduces network traffic and improves responsiveness\n  - Automatically falls back to polling if UPnP becomes unavailable\n\n- **HTTP Polling (Fallback)**: Adaptive polling strategy ensures reliability\n  - 1-second polling during active playback for position updates\n  - 5-second polling when idle for resource efficiency\n  - Always available as fallback if UPnP subscriptions fail\n  - Gracefully handles network issues and device restarts\n\nThis dual approach ensures you get the best of both worlds: real-time responsiveness when UPnP is working, and reliable operation even when it's not.\n\n## Usage Examples\n\n### Multiroom Audio\n\n```yaml\n# Create speaker group\nservice: media_player.join\ntarget:\n  entity_id: media_player.living_room\ndata:\n  group_members:\n    - media_player.kitchen\n    - media_player.bedroom\n\n# Remove from group\nservice: media_player.unjoin\ntarget:\n  entity_id: media_player.living_room\n```\n\n### Custom Radio Stations\n\nCreate `wiim_stations.yaml` in your config folder:\n\n```yaml\n- name: BBC Radio 2\n  url: http://stream.live.vc.bbcmedia.co.uk/bbc_radio_two\n- name: Groove Salad (SomaFM)\n  url: http://ice2.somafm.com/groovesalad-128-mp3\n```\n\nAccess via **Browse Media → Quick Stations** on any WiiM device.\n\n### Audio Output Control\n\n```yaml\n# Switch to Bluetooth output\n- service: select.select_option\n  target: select.living_room_audio_output_mode\n  data:\n    option: \"Bluetooth Out\"\n\n# Switch to Line Out\n- service: select.select_option\n  target: select.living_room_audio_output_mode\n  data:\n    option: \"Line Out\"\n\n# Switch to USB DAC (WiiM Ultra)\n- service: select.select_option\n  target: select.living_room_audio_output_mode\n  data:\n    option: \"USB Out\"\n```\n\n### Subwoofer Control (WiiM Ultra)\n\n```yaml\n# Enable subwoofer\n- service: switch.turn_on\n  target:\n    entity_id: switch.living_room_subwoofer\n\n# Set subwoofer level\n- service: number.set_value\n  target:\n    entity_id: number.living_room_subwoofer_level\n  data:\n    value: 3\n```\n\n### Automation Examples\n\n```yaml\n# Morning radio with TTS announcement\n- alias: \"Morning Routine\"\n  trigger:\n    platform: time\n    at: \"07:00:00\"\n  action:\n    - service: tts.google_translate_say\n      target:\n        entity_id: media_player.kitchen\n      data:\n        message: \"Good morning! Starting your favorite radio station.\"\n    - service: media_player.play_media\n      target:\n        entity_id: media_player.kitchen\n      data:\n        media_content_type: url\n        media_content_id: \"http://stream.live.vc.bbcmedia.co.uk/bbc_radio_two\"\n\n# Play preset button\n- service: wiim.play_preset\n  target:\n    entity_id: media_player.living_room\n  data:\n    preset: 1\n\n# Set sleep timer before bed\n- alias: \"Bedtime Sleep Timer\"\n  trigger:\n    platform: time\n    at: \"22:30:00\"\n  action:\n    - service: wiim.set_sleep_timer\n      target:\n        entity_id: media_player.bedroom\n      data:\n        sleep_time: 3600 # 1 hour\n\n# Create morning alarm\n- service: wiim.update_alarm\n  target:\n    entity_id: media_player.bedroom\n  data:\n    alarm_id: 0\n    time: \"07:00:00\" # UTC time\n    trigger: \"daily\"\n    operation: \"playback\"\n\n# Set EQ for different music types\n- alias: \"Rock Music EQ\"\n  trigger:\n    platform: state\n    entity_id: media_player.living_room\n    attribute: source\n    to: \"Spotify\"\n  action:\n    - service: wiim.set_eq\n      target:\n        entity_id: media_player.living_room\n      data:\n        preset: \"rock\"\n```\n\n## Actions (Services)\n\n\u003e **Note**: Home Assistant now calls \"services\" as \"actions\" in the UI. Both terms refer to the same functionality.\n\n### Media Playback Actions\n\n| Action                   | Description                                       |\n| ------------------------ | ------------------------------------------------- |\n| `wiim.play_preset`       | Play hardware preset (device dependent, up to 20) |\n| `wiim.play_url`          | Play audio from URL (radio streams, files)        |\n| `wiim.play_playlist`     | Play M3U playlist from URL                        |\n| `wiim.play_notification` | Play notification sound with auto volume restore  |\n\n### Queue Management Actions\n\n\u003e **⚠️ Limited Device Support**: Queue browsing (`get_queue`) only works on **WiiM Amp and Ultra with USB drive connected**. Other devices (Mini, Pro, Pro Plus) do not support ContentDirectory service. Queue position/count is available on all devices. See [pywiim documentation](https://github.com/mjcumming/pywiim/tree/main/docs) for details.\n\n| Action                   | Description                                                      |\n| ------------------------ | ---------------------------------------------------------------- |\n| `wiim.play_queue`        | Play from queue at specific position (requires UPnP AVTransport) |\n| `wiim.remove_from_queue` | Remove item from queue at position (requires UPnP AVTransport)   |\n| `wiim.get_queue`         | Get queue contents with metadata (Amp/Ultra + USB only)          |\n\n### Audio \u0026 EQ Actions\n\n| Action        | Description                                    |\n| ------------- | ---------------------------------------------- |\n| `wiim.set_eq` | Set equalizer presets or custom 10-band values |\n\n### Timer \u0026 Alarm Actions (WiiM Devices Only)\n\n| Action                   | Description                             |\n| ------------------------ | --------------------------------------- |\n| `wiim.set_sleep_timer`   | Set sleep timer (0-7200 seconds)        |\n| `wiim.clear_sleep_timer` | Clear active sleep timer                |\n| `wiim.update_alarm`      | Create/update alarm (3 slots, UTC time) |\n\n### Device Management Actions\n\n| Action               | Description                                 |\n| -------------------- | ------------------------------------------- |\n| `wiim.reboot_device` | Reboot device (temporarily unavailable)     |\n| `wiim.sync_time`     | Synchronize device time with Home Assistant |\n\n### Unofficial API Actions\n\n⚠️ **Advanced users only** - These actions use reverse-engineered API endpoints that may not work on all firmware versions:\n\n| Action                     | Description                       |\n| -------------------------- | --------------------------------- |\n| `wiim.scan_bluetooth`      | Scan for nearby Bluetooth devices |\n| `wiim.set_channel_balance` | Adjust left/right channel balance |\n\nSee the [User Guide](docs/user-guide.md) for complete action documentation with examples.\n\n## Source Customization\n\n### Why Source Renaming Isn't Supported\n\nThe WiiM integration doesn't support custom source names for several reasons:\n\n- **Device Limitation**: Source names come directly from the device's firmware and API\n- **Consistency**: Other major integrations (Sonos, Denon, Yamaha) also don't support source renaming\n- **API Compatibility**: The device expects specific source names for proper functionality\n- **Automation Reliability**: Custom names could break existing automations and scripts\n\n### How to Work Around This\n\nInstead of renaming sources, you can customize the display in several ways:\n\n#### 1. Rename the Media Player Entity\n\n```yaml\n# In customize.yaml\nmedia_player.living_room_speaker:\n  friendly_name: \"Living Room TV Audio\"\n```\n\n#### 2. Use Templates in Automations\n\n```yaml\n# In automations.yaml\n- alias: \"When HDMI is selected\"\n  trigger:\n    platform: state\n    entity_id: media_player.living_room_speaker\n    attribute: source\n    to: \"HDMI\"\n  action:\n    - service: notify.persistent_notification\n      data:\n        message: \"TV audio is now active\"\n```\n\n#### 3. Create Custom Dashboard Cards\n\n```yaml\n# In Lovelace dashboard\ntype: entities\nentities:\n  - entity: media_player.living_room_speaker\n    name: \"TV Audio\"\n    secondary_info: \"{{ states('media_player.living_room_speaker').attributes.source }}\"\n```\n\n## Platforms \u0026 Entities\n\nThe integration creates multiple entity types for comprehensive control:\n\n### Media Player\n\n- Main media player entity with full transport controls\n- Group coordinator entities for multiroom groups\n- Browse media support for all Home Assistant media sources\n\n### Sensors\n\n- **Multiroom Role** - Current role (Master/Slave/Solo)\n- **Input Source** - Current audio input\n- **Audio Quality** - Sample rate, bit depth, bit rate (when available)\n- **Firmware Version** - Device firmware tracking\n- **Bluetooth Status** - Bluetooth output and connected device\n- **Diagnostic** - Comprehensive device health and statistics\n\n### Select Entities\n\n- **Audio Output Mode** - Line Out, Optical, Coax, Bluetooth, Headphone (device dependent)\n- **EQ Preset** - 24 equalizer presets\n- **Sound Mode** - Audio processing modes\n\n### Buttons\n\n- **Sync Time** - Synchronize device clock\n- **Reboot Device** - Restart device\n- **Clear Sleep Timer** - Clear active sleep timer\n\n### Switches\n\n- **Mute** - Toggle mute state\n- **Shuffle** - Toggle shuffle mode\n- **Repeat** - Toggle repeat mode\n- **Subwoofer** - Enable/disable subwoofer output (WiiM Ultra with firmware 5.2+)\n\n### Number Entities\n\n- **Subwoofer Level** - Adjust subwoofer level (-15 to +15 dB, WiiM Ultra with firmware 5.2+)\n\n### Lights (Device Dependent)\n\n- **LED** - Front panel status LED (on/off only)\n- **Display** - WiiM Ultra LCD screen (on/off and brightness; Ultra only)\n\n## Diagnostics \u0026 Troubleshooting\n\nWhen experiencing issues, you can download comprehensive diagnostic information to help with troubleshooting:\n\n1. **Device Diagnostics**: Go to Settings → Devices \u0026 Services → WiiM Audio → (Select device) → Download Diagnostics\n2. **Integration Diagnostics**: Go to Settings → Devices \u0026 Services → WiiM Audio → (⋮ Menu) → Download Diagnostics\n\nThe diagnostics include:\n\n- Device information (model, firmware, network status)\n- Multiroom group configuration and roles\n- Media playback state and current sources\n- **HTTP polling statistics** (total polls, success rate, response times)\n- **Command statistics** (total commands, success rate, failure tracking)\n- UPnP subscription status and health\n- EQ settings and sound modes\n- Audio output configuration\n\n**All sensitive data (IP addresses, MAC addresses, network names) is automatically redacted.**\n\n### Real-time Device Monitoring\n\nFor real-time device monitoring and debugging, use the `monitor_cli` tool from the `pywiim` library:\n\n```bash\n# Install pywiim\npip3 install pywiim\n\n# Monitor a device (replace with your device IP)\npython3 -m pywiim.cli.monitor_cli YOUR_DEVICE_IP\n```\n\nThis shows real-time device state including audio output mode, playback state, and multiroom status. Use `--verbose` for detailed logging or `--no-tui` for scrolling log output. Press `Ctrl+C` to stop.\n\n## Documentation\n\n- **[📚 Quick Start Guide](docs/README.md)** - Installation and basic setup\n- **[🎛️ User Guide](docs/user-guide.md)** - Complete features and configuration\n- **[🤖 Automation Cookbook](docs/automation-cookbook.md)** - Ready-to-use automation patterns\n- **[❓ FAQ \u0026 Troubleshooting](docs/faq-and-troubleshooting.md)** - Quick answers to common questions and solutions to common problems\n\n## Support \u0026 Community\n\n- **🐛 Issues**: [GitHub Issues](https://github.com/mjcumming/wiim/issues)\n- **💬 Discussions**: [GitHub Discussions](https://github.com/mjcumming/wiim/discussions)\n- **🏠 Community**: [Home Assistant Community](https://community.home-assistant.io/)\n\n## Contributing\n\nWe welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines:\n\n- Code improvements and bug fixes\n- Documentation updates\n- Testing on different speaker models\n- Example automations and scripts\n\n## Acknowledgments\n\nThis integration builds upon excellent work from:\n\n- **[pywiim](https://github.com/mjcumming/pywiim)** - The brand new, fully async Python library we wrote that powers this integration's device communication\n- [python-linkplay](https://github.com/Velleman/python-linkplay) - Comprehensive LinkPlay library (inspiration for pywiim)\n- [LinkPlay HA Integration](https://github.com/nagyrobi/home-assistant-custom-components-linkplay) - Original LinkPlay integration\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n---\n\n_This integration is not affiliated with WiiM or LinkPlay. All trademarks belong to their respective owners._\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmjcumming%2Fwiim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmjcumming%2Fwiim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmjcumming%2Fwiim/lists"}