I’ve been searching for a few weeks on how to fully intregrate LMS and my squeezeboxs in HA. I"ve had the squeezebox intregration setup and working, playing my alarm siren if my alarm was triggered, but what i really wanted was “Spotty” (spotify in LMS) access to play certain playlists, songs, albums with automations.
Searching the web and this site, i didn’t really find much. Until i found a Github that was sourced from the slimdevices fourm for the LMS server. In it it gave all the CLI commands that can be pushed to the server to get songs, sync players and do whatever else you need.
I’m a long time lurker, first time poster and figured i would share my Node-Red flow with all the basic controls for both my players in the house.
i’ve spent about a week getting it all working and figured out, with minor issues, this is just about everything i would want to do.
Local play is done directly through the material skin in LMS as a iframe card, which is the best, so i was mainly concerned on how to make songs play though automations, and this is what i came up with…
Start of Node Red Flow…
[{“id”:“0e7b7842e4b1827a”,“type”:“tab”,“label”:“LMS Controls”,“disabled”:false,“info”:"",“env”:[]},{“id”:“b953f846207bf3ff”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Playlist “Afternoon” on Andrew’s Room”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.andrews_room”,“data”:"{\t “command”:“playlist”,\t “parameters”:[\t “play”,\t “Spotify”\t ]\t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:620,“y”:260,“wires”:[[]]},{“id”:“a1d12490b8077d6f”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Play Playlist”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:310,“y”:260,“wires”:[[“b953f846207bf3ff”]]},{“id”:“62541b1f58773f69”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Vol up +10”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:300,“y”:560,“wires”:[[“9226ba3f84aa2726”]]},{“id”:“9296bb0073e0292b”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Vol Down -10”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:310,“y”:620,“wires”:[[“25894137513aca94”]]},{“id”:“25894137513aca94”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Volume Down 10”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.andrews_room”,“data”:"{\t “command”:“mixer”,\t “parameters”:[\t “volume”,\t “-10”\t ]\t}\t\t",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:550,“y”:620,“wires”:[[]]},{“id”:“9226ba3f84aa2726”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Volume up 10”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.andrews_room”,“data”:"{\t “command”:“mixer”,\t “parameters”:[\t “volume”,\t “+10”\t ]\t}\t\t",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:540,“y”:560,“wires”:[[]]},{“id”:“ac238279ecd1c6c1”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Pause Current”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.andrews_room”,“data”:"{\t “command”:“pause”\t \t \t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:540,“y”:380,“wires”:[[]]},{“id”:“529c96e522b89e6c”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Pause”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:290,“y”:380,“wires”:[[“ac238279ecd1c6c1”]]},{“id”:“9bb0b6b58f2d9eb4”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Pause Current”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.andrews_room”,“data”:"{\t “command”:“play”\t \t \t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:540,“y”:320,“wires”:[[]]},{“id”:“de75a310dbaca1b4”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Play”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:290,“y”:320,“wires”:[[“9bb0b6b58f2d9eb4”]]},{“id”:“5a9a8617b922e3c2”,“type”:“comment”,“z”:“0e7b7842e4b1827a”,“name”:“LMS in Andrew’s room”,“info”:"",“x”:190,“y”:180,“wires”:[]},{“id”:“81ae92fb7e82fc29”,“type”:“comment”,“z”:“0e7b7842e4b1827a”,“name”:“LMS in Living room”,“info”:"",“x”:190,“y”:700,“wires”:[]},{“id”:“70e0da1726cf3022”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Playlist “Morning” in LIving Room”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.living_room”,“data”:"{\t “command”:“playlist”,\t “parameters”:[\t “play”,\t “Spotify”\t ]\t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:600,“y”:780,“wires”:[[]]},{“id”:“ad62115f8ce0011b”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Play Playlist”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:310,“y”:780,“wires”:[[“70e0da1726cf3022”]]},{“id”:“3db656ce5de91699”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Pause Current”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.living_room”,“data”:"{\t “command”:“pause”\t \t \t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:540,“y”:900,“wires”:[[]]},{“id”:“d6b8b801026eded1”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Pause”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:290,“y”:900,“wires”:[[“3db656ce5de91699”]]},{“id”:“cb8521aec598fbfc”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Pause Current”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.living_room”,“data”:"{\t “command”:“play”\t \t \t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:540,“y”:840,“wires”:[[]]},{“id”:“55635bf8df2beafd”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Play”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:290,“y”:840,“wires”:[[“cb8521aec598fbfc”]]},{“id”:“436049cd94e17f34”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Skip Forward +1”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.andrews_room”,“data”:"{\t “command”:“playlist”,\t “parameters”:[\t “index”,\t “+1”\t ]\t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:540,“y”:440,“wires”:[[]]},{“id”:“0be75ef39c5079ea”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Skip Forward +1”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:320,“y”:440,“wires”:[[“436049cd94e17f34”]]},{“id”:“e87dd9a7dc0510dd”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Skip Back -1”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.andrews_room”,“data”:"{\t “command”:“playlist”,\t “parameters”:[\t “index”,\t “-1”\t ]\t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:530,“y”:500,“wires”:[[]]},{“id”:“1532a348b9d114eb”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Skip Back -1”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:310,“y”:500,“wires”:[[“e87dd9a7dc0510dd”]]},{“id”:“ea04b4eb55f0dc15”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Vol up +10”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:300,“y”:1080,“wires”:[[“7c2d16f1db1579e2”]]},{“id”:“ae20baf0fb0a88bf”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Vol Down -10”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:310,“y”:1140,“wires”:[[“10c78cdbfc81c4fe”]]},{“id”:“10c78cdbfc81c4fe”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Volume Down 10”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.living_room”,“data”:"{\t “command”:“mixer”,\t “parameters”:[\t “volume”,\t “-10”\t ]\t}\t\t",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:550,“y”:1140,“wires”:[[]]},{“id”:“7c2d16f1db1579e2”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Volume up 10”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.living_room”,“data”:"{\t “command”:“mixer”,\t “parameters”:[\t “volume”,\t “+10”\t ]\t}\t\t",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:540,“y”:1080,“wires”:[[]]},{“id”:“2f02b1995c064a70”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Skip Forward +1”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.living_room”,“data”:"{\t “command”:“playlist”,\t “parameters”:[\t “index”,\t “+1”\t ]\t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:540,“y”:960,“wires”:[[]]},{“id”:“7b41cb49a220fbd3”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Skip Forward +1”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:320,“y”:960,“wires”:[[“2f02b1995c064a70”]]},{“id”:“fb7a58ff0448ead5”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Skip Back -1”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“call_method”,“entityId”:“media_player.living_room”,“data”:"{\t “command”:“playlist”,\t “parameters”:[\t “index”,\t “-1”\t ]\t}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:530,“y”:1020,“wires”:[[]]},{“id”:“95391faaec04b495”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Skip Back -1”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:310,“y”:1020,“wires”:[[“fb7a58ff0448ead5”]]},{“id”:“6224041aa8e9a89e”,“type”:“comment”,“z”:“0e7b7842e4b1827a”,“name”:“Sync Players”,“info”:"",“x”:170,“y”:1240,“wires”:[]},{“id”:“4cd37497555f3f8c”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Sync to Andrew”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:320,“y”:1320,“wires”:[[“ce90811304a21b2a”]]},{“id”:“ce90811304a21b2a”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Sync LV to Andrew”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“sync”,“entityId”:“media_player.living_room”,“data”:"{“other_player”:“media_player.andrews_room”}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:550,“y”:1320,“wires”:[[]]},{“id”:“dc1ccbed2f285e55”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Sync to LV”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:300,“y”:1380,“wires”:[[“dd33d22ea421937e”]]},{“id”:“dd33d22ea421937e”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Sync Andrew to LV”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“sync”,“entityId”:“media_player.andrews_room”,“data”:"{“other_player”:“media_player.living_room”}",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:550,“y”:1380,“wires”:[[]]},{“id”:“98ffca565577c9cb”,“type”:“inject”,“z”:“0e7b7842e4b1827a”,“name”:“Unsync All”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:300,“y”:1440,“wires”:[[“3decbd0bca9f7579”]]},{“id”:“3decbd0bca9f7579”,“type”:“api-call-service”,“z”:“0e7b7842e4b1827a”,“name”:“Sync Andrew to LV”,“server”:“634d39a.94f0cc8”,“version”:3,“debugenabled”:false,“service_domain”:“squeezebox”,“service”:“unsync”,“entityId”:“media_player.andrews_room”,“data”:"",“dataType”:“jsonata”,“mergecontext”:"",“mustacheAltTags”:false,“outputProperties”:[],“queue”:“none”,“x”:550,“y”:1440,“wires”:[[]]},{“id”:“8b4019b39fcaca0f”,“type”:“comment”,“z”:“0e7b7842e4b1827a”,“name”:“List of LMS commands found here (see descripton)”,“info”:“Github where everything is to the point…\nhttps://gist.github.com/samtherussell/335bf9ba75363bd167d2470b8689d9f2\n\n\n\n\nOff the LMS server for complete commands\nhttp://192.168.2.11:9000/html/docs/cli-api.html?player=#mixer%20volume\n\n\n\n\n\n\n\n\n\nBelow is Directly off the Github…\n…Didn’t want to loose access\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSqueezebox API\n--------------\nThis document outlines the JSON RPC interface with a squeezeserver to control and obtain information about squeezeboxes.\n\nJSON : JavaScript Object Notation\nRPC : Remote Procedure Call\n\nUses POST requests sent to:\nhttp://<squeezeserver_address>:9000/jsonrpc.js\n\nWith Content-Type header set to\napplication/json\n\nAnd a JSON object in the body.\n{‘method’: ‘slim.request’, ‘params’: [<player_mac_address>, ]}\n\nwhere <player_mac_address> is the squeezebox’s MAC address that you are controlling (or “-” to get server info).\nand is the command you want to send.\n\n# Simple commands:\n\n - PLAY: [“play”]\n - PAUSE: [“pause”],\n - POWER ON: [“power”, “1”],\n - POWER OFF: [“power”, “0”],\n - VOLUME UP: [“mixer”,“volume”,”+"], # is a base 10 number. (volume goes from 0-100)\n - VOLUME DOWN: [“mixer”,“volume”,"-"],\n - SET VOLUME: [“mixer”,“volume”,""],\n - SLEEP IN SECONDS: [“sleep”,“300”],\n - SLEEP END OF SONG: [“jiveendoftracksleep”],\n - SKIP: [“playlist”,“index”,"+1"],\n - PREVIOUS: [“playlist”,“index”,"-1"],\n - UNSYNC FROM ALL PLAYERS: [“sync”,"-"]\n\nSo to pause the squeezebox with mac address FF:FF:FF:FF you would send the JSON object:\n{‘method’: ‘slim.request’, ‘params’: [“FF:FF:FF:FF”, [“play”]]}\n\n\nTo get a player’s status use the command:\nSTATUS: [“status”,"-"]\n\nTo SYNCHRONISE two players together:\n’params’: [, [“sync”,]]\nwhere and are the player MAC address strings.\nThe slave player will follow the master player.\n\nTo SWITCH PLAYER from one squeezebox to another.\n’params’: [[“switchplayer”,“from:” +
End of Node Red Flow