Lyrion Music Server Integration

Hello Everyone, i am releasing my latest integration for Lyrion Music Server.
This integration is ideal for those with multiple Music Players such as Logitech Squeezebox, WiiM Players, DLNA and much more.
If you are unfamiliar with LMS:
Lyrion Music Server (formerly Logitech Media Server) is open-source server software which controls a wide range of Squeezebox audio players. Lyrion can stream your local music collection, internet radio stations, and content from many streaming services (with and without subscriptions).

This integration will automatically detect all players on your network and automatically create 1 Media Player and 1 Remote per player.
Integration will also allow you to group and ungroup players, show currently playing media and provide you with proper controls.

This is initial release and LMS is extremely robust with many custom add-ons, this integration does it best to provide wide support however please note due to the complexity of LMS some features might be missing.

This was tested with 4 Players successfully.
Note that with LMS, before adding this integration complete all configuration on the LMS server itself, add the add-ons, create the favorites and all other configuration you think you want. Only then run this integration and add your players.

Hope you enjoy this integration, thank you.

1 Like

Thank you for the nice integration, works perfectly.

1 Like

Awesome, thank you. Glad it works.

1 Like

Nice! I think Lyrion itself is pretty unpolished, but after initial setup I finally have a way to listen to radio streams!

1 Like

That’s great!

Hi!

I am facing an issue with this longtime waited integration:-)

The integration does list my Lyrion players on the setup page after entering the IP/port. But the next setup page remains empty (I suppose I should see the list of entities to be created there).

And I get errors ‘There was a timeout’ and/or ‘JSon deserialize error: expected value at line 1 column 2’ then the setup process completes without creating any entity.

I tried selecting one single player with no success. My LMS webUI is working perfectly on all devices (Web PC, Android app, IoT…) I share the LMS API calls logs. Tell me how I can provide more info (logs from the integration for example) to help troubleshooting this.

[26-04-04 12:47:26.3442] Slim::Web::JSONRPC::handleURI (77) handleURI(Slim::Web::HTTP::ClientConn=GLOB(0x55a170bbff58))
[26-04-04 12:47:26.3444] Slim::Web::JSONRPC::handleURI (149) POST data: [{"id":217,"method":"slim.request","params":["",["players",0,100]]}]
[26-04-04 12:47:26.3448] Slim::Web::JSONRPC::handleURI (167) JSON parsed procedure: {
  id => 217,
  method => "slim.request",
  params => ["", ["players", 0, 100]],
}
[26-04-04 12:47:26.3451] Slim::Web::JSONRPC::requestMethod (407) requestMethod(["", ["players", 0, 100]])
[26-04-04 12:47:26.3454] Slim::Web::JSONRPC::requestMethod (482) Dispatching...
[26-04-04 12:47:26.3461] Slim::Web::JSONRPC::requestWrite (534) requestWrite()
[26-04-04 12:47:26.3462] Slim::Web::JSONRPC::generateJSONResponse (377) generateJSONResponse()
[26-04-04 12:47:26.3475] Slim::Web::JSONRPC::writeResponse (308) JSON response: {
  id => 217,
  method => "slim.request",
  params => ["", ["players", 0, 100]],
  result => {
    # tied Tie::IxHash
    count => 2,
    players_loop => [
      {
        # tied Tie::IxHash
        canpoweroff => 1,
        connected => 1,
        displaytype => "none",
        firmware => 0,
        ip => "192.168.0.8:45972",
        isplayer => 1,
        isplaying => 0,
        model => "squeezelite",
        modelname => "UPnPBridge",
        name => "Kodi Salon",
        playerid => "bb:bb:94:e6:64:30",
        playerindex => 0,
        power => 1,
        seq_no => 0,
        uuid => undef,
      },
      {
        # tied Tie::IxHash
        canpoweroff => 1,
        connected => 1,
        displaytype => "none",
        firmware => "v1.9.9-1449",
        ip => "192.168.0.2:47444",
        isplayer => 1,
        isplaying => 0,
        model => "squeezelite",
        modelname => "Denon/Marantz AVR",
        name => "Hifi Salon",
        playerid => "68:1d:ef:43:e3:95",
        playerindex => 1,
        power => 0,
        seq_no => 0,
        uuid => undef,
      },
    ],
  },
}
[26-04-04 12:47:26.3478] Slim::Web::JSONRPC::writeResponse (323) JSON raw response: [{"id":"217","method":"slim.request","result":{"count":2,"players_loop":[{"playerindex":"0","playerid":"bb:bb:94:e6:64:30","uuid":null,"ip":"192.168.0.8:45972","name":"Kodi Salon","seq_no":0,"model":"squeezelite","modelname":"UPnPBridge","power":1,"isplaying":0,"displaytype":"none","isplayer":1,"canpoweroff":1,"connected":1,"firmware":0},{"playerindex":1,"playerid":"68:1d:ef:43:e3:95","uuid":null,"ip":"192.168.0.2:47444","name":"Hifi Salon","seq_no":0,"model":"squeezelite","modelname":"Denon/Marantz AVR","power":0,"isplaying":0,"displaytype":"none","isplayer":1,"canpoweroff":1,"connected":1,"firmware":"v1.9.9-1449"}]},"params":["",["players","0","100"]]}]
[26-04-04 12:47:26.3480] Slim::Web::JSONRPC::writeResponse (360) Response headers: [
HTTP/1.1 200 OK
Content-Length: 661
Content-Type: application/json

]
[26-04-04 12:47:26.3543] Slim::Web::JSONRPC::handleURI (77) handleURI(Slim::Web::HTTP::ClientConn=GLOB(0x55a170bbff58))
[26-04-04 12:47:26.3545] Slim::Web::JSONRPC::handleURI (149) POST data: [{"id":217,"method":"slim.request","params":["bb:bb:94:e6:64:30",["status","-",1,"tags:aAdltKc"]]}]
[26-04-04 12:47:26.3549] Slim::Web::JSONRPC::handleURI (167) JSON parsed procedure: {
  id => 217,
  method => "slim.request",
  params => ["bb:bb:94:e6:64:30", ["status", "-", 1, "tags:aAdltKc"]],
}
[26-04-04 12:47:26.3553] Slim::Web::JSONRPC::requestMethod (407) requestMethod(["bb:bb:94:e6:64:30", ["status", "-", 1, "tags:aAdltKc"]])
[26-04-04 12:47:26.3554] Slim::Web::JSONRPC::requestMethod (433) Parsing command: Found client [bb:bb:94:e6:64:30]
[26-04-04 12:47:26.3557] Slim::Web::JSONRPC::requestMethod (482) Dispatching...
[26-04-04 12:47:26.3565] Slim::Web::JSONRPC::requestWrite (534) requestWrite()
[26-04-04 12:47:26.3567] Slim::Web::JSONRPC::generateJSONResponse (377) generateJSONResponse()
[26-04-04 12:47:26.3574] Slim::Web::JSONRPC::writeResponse (308) JSON response: {
  id => 217,
  method => "slim.request",
  params => ["bb:bb:94:e6:64:30", ["status", "-", 1, "tags:aAdltKc"]],
  result => {
    # tied Tie::IxHash
    "digital_volume_control" => 1,
    "mixer volume"           => 100,
    "mode"                   => "stop",
    "player_connected"       => 1,
    "player_ip"              => "192.168.0.8:45972",
    "player_name"            => "Kodi Salon",
    "playlist mode"          => "off",
    "playlist repeat"        => 0,
    "playlist shuffle"       => 0,
    "playlist_tracks"        => 0,
    "power"                  => 1,
    "randomplay"             => 0,
    "seq_no"                 => 0,
    "signalstrength"         => 0,
    "use_volume_control"     => 1,
  },
}
[26-04-04 12:47:26.3577] Slim::Web::JSONRPC::writeResponse (323) JSON raw response: [{"id":"217","method":"slim.request","result":{"player_name":"Kodi Salon","player_connected":1,"player_ip":"192.168.0.8:45972","power":1,"signalstrength":0,"mode":"stop","mixer volume":100,"playlist repeat":0,"playlist shuffle":0,"playlist mode":"off","seq_no":0,"playlist_tracks":0,"randomplay":0,"digital_volume_control":1,"use_volume_control":1},"params":["bb:bb:94:e6:64:30",["status","-","1","tags:aAdltKc"]]}]
[26-04-04 12:47:26.3579] Slim::Web::JSONRPC::writeResponse (360) Response headers: [
HTTP/1.1 200 OK
Content-Length: 413
Content-Type: application/json

]
[26-04-04 12:47:26.3645] Slim::Web::JSONRPC::handleURI (77) handleURI(Slim::Web::HTTP::ClientConn=GLOB(0x55a170bbff58))
[26-04-04 12:47:26.3647] Slim::Web::JSONRPC::handleURI (149) POST data: [{"id":217,"method":"slim.request","params":["68:1d:ef:43:e3:95",["status","-",1,"tags:aAdltKc"]]}]
[26-04-04 12:47:26.3652] Slim::Web::JSONRPC::handleURI (167) JSON parsed procedure: {
  id => 217,
  method => "slim.request",
  params => ["68:1d:ef:43:e3:95", ["status", "-", 1, "tags:aAdltKc"]],
}
[26-04-04 12:47:26.3655] Slim::Web::JSONRPC::requestMethod (407) requestMethod(["68:1d:ef:43:e3:95", ["status", "-", 1, "tags:aAdltKc"]])
[26-04-04 12:47:26.3656] Slim::Web::JSONRPC::requestMethod (433) Parsing command: Found client [68:1d:ef:43:e3:95]
[26-04-04 12:47:26.3659] Slim::Web::JSONRPC::requestMethod (482) Dispatching...
[26-04-04 12:47:26.3666] Slim::Web::JSONRPC::requestWrite (534) requestWrite()
[26-04-04 12:47:26.3668] Slim::Web::JSONRPC::generateJSONResponse (377) generateJSONResponse()
[26-04-04 12:47:26.3676] Slim::Web::JSONRPC::writeResponse (308) JSON response: {
  id => 217,
  method => "slim.request",
  params => ["68:1d:ef:43:e3:95", ["status", "-", 1, "tags:aAdltKc"]],
  result => {
    # tied Tie::IxHash
    "digital_volume_control" => 0,
    "mixer volume"           => 31,
    "mode"                   => "stop",
    "player_connected"       => 1,
    "player_ip"              => "192.168.0.2:47444",
    "player_name"            => "Hifi Salon",
    "playlist mode"          => "off",
    "playlist repeat"        => 0,
    "playlist shuffle"       => 0,
    "playlist_tracks"        => 0,
    "power"                  => 0,
    "randomplay"             => 0,
    "seq_no"                 => 0,
    "signalstrength"         => 0,
    "use_volume_control"     => 1,
  },
}
[26-04-04 12:47:26.3678] Slim::Web::JSONRPC::writeResponse (323) JSON raw response: [{"method":"slim.request","id":"217","params":["68:1d:ef:43:e3:95",["status","-","1","tags:aAdltKc"]],"result":{"player_name":"Hifi Salon","player_connected":1,"player_ip":"192.168.0.2:47444","power":0,"signalstrength":0,"mode":"stop","mixer volume":31,"playlist repeat":0,"playlist shuffle":0,"playlist mode":"off","seq_no":0,"playlist_tracks":0,"randomplay":0,"digital_volume_control":0,"use_volume_control":1}}]
[26-04-04 12:47:26.3680] Slim::Web::JSONRPC::writeResponse (360) Response headers: [
HTTP/1.1 200 OK
Content-Length: 412
Content-Type: application/json

]

And I also tried through the Docker container. But the container does not even start :frowning:

File "/app/uc_intg_lmserver/driver.py", line 27, in <module>
Traceback (most recent call last):
ModuleNotFoundError: No module named 'uc_intg_lmserver'
from uc_intg_lmserver.config import LMSConfig
File "/app/uc_intg_lmserver/driver.py", line 27, in <module>
Traceback (most recent call last):
ModuleNotFoundError: No module named 'uc_intg_lmserver'
from uc_intg_lmserver.config import LMSConfig
File "/app/uc_intg_lmserver/driver.py", line 27, in <module>

Someone has decided I would not test LMS on my YIO today :slight_smile: :slight_smile:

the logs you shared sadly i cant do much with them, that being said - since you did remind me of this integration lol i went ahead and re wrote it from scratch and bumped it to 2.0.0 with all the latest and greatest including media browser support etc. i have not tested as i dont use lms but i’ve succesfully upgraded about 15 of my 45 integrations so should be ok. also, please join discord it is a lot more convinient for me i am more active there https://discord.gg/

remove completely the current lms integration and install this , come to discord and continue talking there: Release v2.0.0 · mase1981/uc-intg-lmserver · GitHub