Lyrion Music Server (Squeezebox)
Control a Lyrion Music Server — the community-maintained successor to Logitech Media Server (LMS) / Squeezebox Server — and every player attached to it directly on the LAN. One GEM device represents the server (a controller); each player becomes a GEM zone you can power, transport, and set volume on.
This is the right driver for retrofits where a house already runs a Squeezebox / piCorePlayer / squeezelite ecosystem and the owner wants those rooms to appear in GEM alongside lighting, shades, and video. It talks the same JSON-RPC "CLI over HTTP" API that the Material skin, iPeng, and every community integration use, so it works against Logitech Media Server 7.x/8.x and modern Lyrion 8.x/9.x alike.
lyrion_music_server — set this as the device driver when adding the server
in Devices.
Prerequisites
- A running Lyrion Music Server (or legacy Logitech Media Server 7.9+) reachable
from the GEM host. Confirm the web UI opens at
http://<server-ip>:9000. - The server on a stable IP — add a DHCP reservation so the address the device row points at does not move.
- At least one player connected to the server. Players can be hardware (Squeezebox Touch/Radio/Boom, Transporter) or software (squeezelite, piCorePlayer, SqueezeLite-ESP32, Ropieee).
- If Password Protection is enabled under Settings → Advanced → Security, the web-UI username and password.
Setup steps
- Open
http://<server-ip>:9000from a browser on the same network to confirm the server is reachable and note its IP. - In GEM go to Devices → Add Device and choose the Lyrion Music Server (Squeezebox) driver.
- Enter the server IP Address. Leave Port at
9000unless you changed it. - If the server requires a login, fill in Username and Password. Leave both blank for the common open-LAN setup.
- Save. Within a few seconds the device should show connected.
- Run the get_players command (from the device command panel or a macro). The
result lists every player with its
playerid(MAC),name,model, andconnected/powerstate. - For each player you want to control, create a zone whose address is that player's MAC id.
Attribute reference
Device attributes
| Attribute | Required | Type | Purpose |
|---|---|---|---|
ip | yes | string | LAN IP / hostname of the Lyrion server. |
port | no | int | Web/CLI port. Default 9000. |
username | no | string | Only if Password Protection is enabled. |
password | no | string (secure) | Only if Password Protection is enabled. Stored encrypted. |
status_interval | no | int | Per-player poll interval in ms. Default 5000. |
volume_increment | no | int | Step for volume_up / volume_down. Default 5. |
request_timeout | no | int | HTTP request timeout in ms. Default 8000. |
Zone attributes (published by the poll loop)
| Attribute | Type | Meaning |
|---|---|---|
state | string | on when powered, off in standby. |
power_state | string | Same as state. |
play_state | string | Transport mode: play, pause, or stop. |
volume | int | Volume 0–100 (absolute value; see the mute quirk below). |
mute_state | string | mute_on / mute_off. |
track_title / track_artist / track_album | string | Now-playing metadata (read-only). |
Zone address format
zone.address is the player's MAC id as returned by get_players, e.g.
00:04:20:12:34:56. A player name (e.g. Kitchen) also works — the driver
resolves it to the MAC from the last discovery — but the MAC is the stable choice
because names can be reused when hardware is swapped.
Commands
| Command | Args | Notes |
|---|---|---|
on / off / power_toggle | address | Power / standby. |
play / pause / stop | address | Transport. |
next_track / previous_track | address | Playlist skip. |
volume | address, level | Absolute 0–100. |
volume_up / volume_down | address | Step by volume_increment. |
mute_on / mute_off / mute_toggle | address | Mute control. |
get_players / get_devices | — | Discovery: list players + MAC ids. |
get_status | address | Read one player and refresh its zone attributes. |
Under the hood every command is a JSON-RPC POST to /jsonrpc.js:
{"id":1,"method":"slim.request","params":["00:04:20:12:34:56",["mixer","volume",40]]}
Known limitations
- Server discovery is not automated. The server IP must be entered manually.
Player discovery within a known server is automatic via
get_players. - The muted-volume sign quirk. Lyrion reports a muted player's volume as a
negative number (
-35= "muted, would be 35"). The driver publishes the absolute value asvolumeand setsmute_statefrom the sign, so a muted player still shows its would-be level rather than0. - Asleep / disconnected players. A software player that has lost the server or
gone to sleep shows
connected:0inget_players; Lyrion silently drops commands to it. Wake the player at the hardware or restart the player process. - Favorites, library browse, and playlist loading are not exposed in this driver — it covers transport, volume, power, and now-playing read-back. Deep browse/queue control remains on the roadmap.
- Synced groups. Lyrion can sync players into a group; this driver controls each player independently. Commanding a synced follower may reflect the group leader's state. Group create/break is not surfaced yet.
Troubleshooting
| Symptom | Likely cause / fix |
|---|---|
| Device never connects | http://<ip>:9000 is unreachable from the GEM host — usually a VLAN/firewall boundary. Confirm the web UI opens from the GEM machine. |
| Every request returns HTTP 401 | Password Protection is on but the credentials are blank/wrong. Set username/password, or disable protection in Settings → Security. |
get_players is empty | No players attached, or all are asleep. Confirm at least one player is listed and connected in the web UI. |
| One zone won't respond | That player is offline/asleep (connected:0). Wake it or restart the player. |
volume shows a value while the player is silent | The player is muted — check mute_state. The volume shown is the level it will return to when unmuted. |
Protocol reference
The JSON-RPC endpoint is documented in the Lyrion / Logitech Media Server "CLI" help (the same command tokens the Telnet CLI on port 9090 accepts). See the in-server help at Settings → Information → Technical Information, or the Lyrion community documentation. The MQTT / broadcast discovery path on UDP 3483 is not used by this driver.