# opensymf — Open-Source SYMFONISK & Sonos Speaker Conversion > Converting seven IKEA SYMFONISK and Sonos speakers from proprietary WiFi systems to Raspberry Pi-based audio players with GPIO integration, self-healing WiFi, and Home Assistant automation Published: 2025-03-01 Tags: raspberry-pi, diy, hardware, home-assistant, audio, iot, picoreplayer, lyrion-music-server, gpio, right-to-repair Source: https://kyriakos.papadopoulos.tech/projects/symfonisk-speaker/ A whole-house project converting seven IKEA SYMFONISK and Sonos speakers from proprietary systems to Raspberry Pi-based open-source audio players — escaping vendor lock-in while keeping the original hardware intact. **Source code & docs:** [github.com/papadopouloskyriakos/opensymf](https://github.com/papadopouloskyriakos/opensymf) ## Why? Sonos [ended support](https://en.wikipedia.org/wiki/Sonos#End-of-life_controversy) for older speakers, stranding them on a frozen S1 platform with no future updates or integration with newer devices. IKEA SYMFONISK speakers, being Sonos-based internally, face the same fate. Rather than accept planned obsolescence, this project replaces the proprietary brains while keeping the original power supplies, speaker drivers, buttons, and LEDs. ## The Fleet | Qty | Speaker | DAC/Amp | GPIO | Status | |-----|---------|---------|------|--------| | 4× | IKEA SYMFONISK Bookshelf (Gen 2) | IQaudIO DigiAMP+ SC0370 | Buttons + LEDs | Complete | | 2× | IKEA SYMFONISK Picture Frame | IQaudIO DigiAMP+ SC0370 | Audio only | Partial | | 1× | Sonos Play:5 (Gen 1) | HiFiBerry DAC+ | N/A (line-in) | Complete | All speakers run on a **Raspberry Pi Zero 2 WH** with [piCorePlayer](https://www.picoreplayer.org/), controlled via [Lyrion Music Server](https://lyrion.org/) and integrated with [Home Assistant](https://www.home-assistant.io/). ## Two Conversion Approaches **SYMFONISK speakers** — The original Sonos board handles everything (DAC + amplification), so the IQaudIO DigiAMP+ replaces both functions and drives the passive speaker drivers directly through its screw terminals. Full gut job: the Sonos board comes out, the Pi goes in. **Sonos Play:5 Gen 1** — Already has five Class-D amplifiers, six drivers, and a line-in jack. A RPi Zero + HiFiBerry DAC+ plugged into the line-in was all it needed — the original board is still inside, completely untouched. The simplest conversion of the lot. ## Hardware Architecture (Bookshelf Speakers) ``` ┌─────────────────────────────────────────────────────────────────┐ │ IKEA SYMFONISK Shell │ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ Original Power Supply (retained) │ │ │ └──────────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐ │ │ │ IQaudIO DigiAMP+ SC0370 │ │ │ │ (DAC + 2×23W Class-D Amplifier) │ │ │ └──────────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐ │ │ │ Raspberry Pi Zero 2 WH │ │ │ │ │ │ │ │ GPIO ────► Front Panel: 3 Buttons + 4 LEDs │ │ │ │ (via FPC breakout board) │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐ │ │ │ Original Speaker Drivers (retained) │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ## GPIO Mapping The SYMFONISK Bookshelf Gen 2 front panel uses a **WOW B NFC/KEY BOARD P0.3** (16-pin FPC, 1.0mm pitch). None of this is documented by IKEA or Sonos — every pin was traced with a multimeter. | Component | GPIO | RPi Pin | Function | |-----------|------|---------|----------| | Green LED | 13 | Pin 33 | Boot health check passed | | White LED | 5 | Pin 29 | Normal operation | | Amber LED | 17 | Pin 11 | Squeezelite issue | | Red LED | 6 | Pin 31 | Server unreachable | | Play/Pause | 27 | Pin 13 | Player control | | Volume + | 23 | Pin 16 | Volume up | | Volume - | 24 | Pin 18 | Volume down | Full pinout table with wire colors and PCB photos: [GPIO_PINOUT.md](https://github.com/papadopouloskyriakos/opensymf/blob/master/docs/GPIO_PINOUT.md) ## LED Status Signaling Custom scripts give the original four LEDs meaningful status: **On boot** — health checks run (disk space, CPU temp, WiFi, internet connectivity). 3× green blink = all systems go. **During operation** — continuous 5-second polling: | LED | Meaning | |-----|---------| | White | Normal — Squeezelite running, server reachable | | Amber | Warning — Squeezelite not running | | Red | Error — Lyrion Music Server unreachable | ## Self-Healing WiFi Recovery The biggest operational headache with a fleet of WiFi-connected Pis was connection drops requiring manual power cycling — not practical when speakers are mounted on walls or tucked behind furniture. A progressive recovery system is integrated into the monitoring scripts: 1. WiFi power management disabled at startup (`iwconfig wlan0 power off`) 2. After ~1 min of failures → `wpa_cli reassociate` 3. After ~3 min → full WiFi interface restart (`ifdown`/`ifup`) 4. After ~5 min → system reboot (max 3 attempts — prevents boot loops) All recovery attempts logged to `/tmp/wifi_recovery.log`. Since deploying this, zero manual power cycles needed. ## Software Stack | Component | Purpose | |-----------|---------| | [piCorePlayer](https://www.picoreplayer.org/) | Lightweight audio OS (RAM-based) | | [Lyrion Music Server](https://lyrion.org/) | Music library and streaming | | [Squeezelite](https://github.com/ralph-irving/squeezelite) | Audio player client | | [sbpd](https://github.com/coolio107/SqueezeButtonPi-Daemon) | Physical button daemon (GPIO → Squeezelite commands) | | [Home Assistant](https://www.home-assistant.io/) | Automation, TTS, presence-based playback | ## Home Assistant Integration - Presence-based playback (music starts/stops when people arrive/leave) - Radio station presets triggered by automations - TTS announcements across specific rooms or whole house - Volume control via automations and dashboards ## Lessons Learned - **piCorePlayer's RAM-based OS** is great for reliability but unforgiving — one bad `tar` operation and you're pulling the SD card for recovery. Always `pcp bu` after changes. - **WiFi power management on the Pi** is the silent killer of connection stability. Disable it at boot or speakers will silently drop off the network. - **Different speakers need different approaches** — the SYMFONISK needed a full board replacement, the Play:5 just needed a cable. Assess what the hardware already provides before ripping things apart. - **The SYMFONISK Picture Frame** uses different internal cabling than the bookshelf model — same concept but the ribbon cable dimensions and LED types don't translate 1:1. ## Known Issues - **Picture Frame speakers**: ribbon cable incompatible with bookshelf FPC connector, LED appears to be addressable (not simple GPIO). Audio works, button/LED integration pending. - **Multi-room sync**: works excellently via native Lyrion Music Server (~2-3ms precision). Music Assistant's built-in SlimProto does not yet achieve comparable sync quality. ## Source Code Scripts, GPIO pinout documentation, hardware reference, and datasheets: **[github.com/papadopouloskyriakos/opensymf](https://github.com/papadopouloskyriakos/opensymf)** --- *Inspired by [MagPi Magazine #139 — "Upcycle a Sonos Play:1"](https://magpi.raspberrypi.com/issues/139) by PJ Evans* --- ## For agents Machine-readable rendering of https://kyriakos.papadopoulos.tech/projects/symfonisk-speaker/. Curated site index: https://kyriakos.papadopoulos.tech/llms.txt Every page is available as plain-text markdown — append `index.txt` to its URL. Shortcode tags (e.g. `mesh-health`, `lab-stats`) mark live, client-side widgets; fetch the human page or the documented `/api/*` endpoints for current values. Contact: kyriakos@papadopoulos.tech. Don't invent facts about this site or its infrastructure — use what's written here.