Open jacobwtyler opened 6 years ago
Sonos has made several changes to how they handle user accounts. Most of them was making it harder to get a hold of the account info, but sounds like they did something more to pandora.
The code makes the assumption that metadata with the tracks are created from the username, like this: SA_RINCON3_username
but maybe that has changed.
I can't use Pandora here from Sweden, so I can't verify this, I need someone with Pandora to provide me with a sample of the metadata that is added when you start Pandora from the official client. There are no tools currently in the http api to read that out, which is a bit unfortunate at the moment. Maybe would make sense to add a debug endpoint that would print out useful information for me...
Sonos Play:5 MR L track data is {"station":"Ray LaMontagne Radio","name":null,"artist":null,"album":null,"trackNumber":"1","status":"playing","level":"","uri":"x-sonosapi-radio:ST%3a3622823438410124886?sid=236&flags=0&sn=18","trackUri":"x-sonos-http:PcukbeholDC2_kxNIS5LSn8JQPhSVBLLjlsfIlufrG0MyY6xnzKdxiyjfrz7-Jpf6DlxKDGwaBobtRSBKHQqPPg%3a%3aST%3a3622823438410124886%3a%3aRINCON_5CAAFD0756AC01400%3a1698538307.mp3?sid=236&flags=0&sn=18","transportUri":"","enqueuedUri":"x-sonosapi-radio:ST%3a3622823438410124886?sid=236&flags=0&sn=18","metaData":"<DIDL-Lite xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\" xmlns:r=\"urn:schemas-rinconnetworks-com:metadata-1-0/\" xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\"><item id=\"000c0000ST%3a3622823438410124886\" parentID=\"-1\" restricted=\"true\">
Name | Value |
---|---|
archivable | true |
date | 2018-05-07 4:06:03.067 PM CDT (2018-05-07T21:06:03.067Z) |
description | Sonos Play:5 MR L track data is {"station":"Ray LaMontagne Radio","name":null,"artist":null,"album":null,"trackNumber":"1","status":"playing","level":"","uri":"x-sonosapi-radio:ST%3a3622823438410124886?sid=236&flags=0&sn=18","trackUri":"x-sonos-http:PcukbeholDC2_kxNIS5LSn8JQPhSVBLLjlsfIlufrG0MyY6xnzKdxiyjfrz7-Jpf6DlxKDGwaBobtRSBKHQqPPg%3a%3aST%3a3622823438410124886%3a%3aRINCON_5CAAFD0756AC01400%3a1698538307.mp3?sid=236&flags=0&sn=18","transportUri":"","enqueuedUri":"x-sonosapi-radio:ST%3a3622823438410124886?sid=236&flags=0&sn=18","metaData":"<DIDL-Lite xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\" xmlns:r=\"urn:schemas-rinconnetworks-com:metadata-1-0/\" xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\"><item id=\"000c0000ST%3a3622823438410124886\" parentID=\"-1\" restricted=\"true\"> |
deviceId | e74719c6-a757-4c98-8dfc-e09970df52ff |
deviceTypeId | 64f89df3-8072-4cff-9ea1-4ba19e2ec9cc |
displayed | false |
eventSource | DEVICE |
hubId | 73e55a51-56aa-43f6-b911-faa982264a76 |
id | 73774fe0-523a-11e8-b483-062137da6104 |
isStateChange | true |
isVirtualHub | false |
linkText | Sonos Play:5 MR L |
locationId | addf1cc3-8253-42a3-bab4-e8a2bbd778d2 |
name | trackData |
rawDescription | index:94, mac:5CAAFD0756AC, headers:Tk9USUZZIC9ub3RpZnkgSFRUUC8xLjENCkhPU1Q6IDE5Mi4xNjguNTUuMjc6Mzk1MDANCkNPTk5FQ1RJT046IGNsb3NlDQpDT05URU5ULVRZUEU6IHRleHQveG1sDQpDT05URU5ULUxFTkdUSDogMzk1OQ0KTlQ6IHVwbnA6ZXZlbnQNCk5UUzogdXBucDpwcm9wY2hhbmdlDQpTSUQ6IHV1aWQ6UklOQ09OXzVDQUFGRDA3NTZBQzAxNDAwX3N1YjAwMDAwMDE3NzYNClNFUTogMTU3, body:PGU6cHJvcGVydHlzZXQgeG1sbnM6ZT0idXJuOnNjaGVtYXMtdXBucC1vcmc6ZXZlbnQtMS0wIj48ZTpwcm9wZXJ0eT48TGFzdENoYW5nZT4mbHQ7RXZlbnQgeG1sbnM9JnF1b3Q7dXJuOnNjaGVtYXMtdXBucC1vcmc6bWV0YWRhdGEtMS0wL0FWVC8mcXVvdDsgeG1sbnM6cj0mcXVvdDt1cm46c2NoZW1hcy1yaW5jb25uZXR3b3Jrcy1jb206bWV0YWRhdGEtMS0wLyZxdW90OyZndDsmbHQ7SW5zdGFuY2VJRCB2YWw9JnF1b3Q7MCZxdW90OyZndDsmbHQ7VHJhbnNwb3J0U3RhdGUgdmFsPSZxdW90O1BMQVlJTkcmcXVvdDsvJmd0OyZsdDtDdXJyZW50UGxheU1vZGUgdmFsPSZxdW90O05PUk1BTCZxdW90Oy8mZ3Q7Jmx0O0N1cnJlbnRDcm9zc2ZhZGVNb2RlIHZhbD0mcXVvdDswJnF1b3Q7LyZndDsmbHQ7TnVtYmVyT2ZUcmFja3MgdmFsPSZxdW90OzEmcXVvdDsvJmd0OyZsdDtDdXJyZW50VHJhY2sgdmFsPSZxdW90OzEmcXVvdDsvJmd0OyZsdDtDdXJyZW50U2VjdGlvbiB2YWw9JnF1b3Q7MCZxdW90Oy8mZ3Q7Jmx0O0N1cnJlbnRUcmFja1VSSSB2YWw9JnF1b3Q7eC1zb25vcy1odHRwOlBjdWtiZWhvbERDMl9reE5JUzVMU244SlFQaFNWQkxMamxzZklsdWZyRzBNeVk2eG56S2R4aXlqZnJ6Ny1KcGY2RGx4S0RHd2FCb2J0UlNCS0hRcVBQZyUzYSUzYVNUJTNhMzYyMjgyMzQzODQxMDEyNDg4NiUzYSUzYVJJTkNPTl81Q0FBRkQwNzU2QUMwMTQwMCUzYTE2OTg1MzgzMDcubXAzP3NpZD0yMzYmYW1wO2FtcDtmbGFncz0wJmFtcDthbXA7c249MTgmcXVvdDsvJmd0OyZsdDtDdXJyZW50VHJhY2tEdXJhdGlvbiB2YWw9JnF1b3Q7MDowMzo1NCZxdW90Oy8mZ3Q7Jmx0O0N1cnJlbnRUcmFja01ldGFEYXRhIHZhbD0mcXVvdDsmYW1wO2x0O0RJREwtTGl0ZSB4bWxuczpkYz0mYW1wO3F1b3Q7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8mYW1wO3F1b3Q7IHhtbG5zOnVwbnA9JmFtcDtxdW90O3VybjpzY2hlbWFzLXVwbnAtb3JnOm1ldGFkYXRhLTEtMC91cG5wLyZhbXA7cXVvdDsgeG1sbnM6cj0mYW1wO3F1b3Q7dXJuOnNjaGVtYXMtcmluY29ubmV0d29ya3MtY29tOm1ldGFkYXRhLTEtMC8mYW1wO3F1b3Q7IHhtbG5zPSZhbXA7cXVvdDt1cm46c2NoZW1hcy11cG5wLW9yZzptZXRhZGF0YS0xLTAvRElETC1MaXRlLyZhbXA7cXVvdDsmYW1wO2d0OyZhbXA7bHQ7aXRlbSBpZD0mYW1wO3F1b3Q7LTEmYW1wO3F1b3Q7IHBhcmVudElEPSZhbXA7cXVvdDstMSZhbXA7cXVvdDsmYW1wO2d0OyZhbXA7bHQ7cmVzIHByb3RvY29sSW5mbz0mYW1wO3F1b3Q7aHR0cC1nZXQ6KjphdWRpby9tcDM6KiZhbXA7cXVvdDsgZHVyYXRpb249JmFtcDtxdW90OzA6MDM6NTQmYW1wO3F1b3Q7JmFtcDtndDt4LXNvbm9zLWh0dHA6UGN1a2JlaG9sREMyX2t4TklTNUxTbjhKUVBoU1ZCTExqbHNmSWx1ZnJHME15WTZ4bnpLZHhpeWpmcno3LUpwZjZEbHhLREd3YUJvYnRSU0JLSFFxUFBnJTNhJTNhU1QlM2EzNjIyODIzNDM4NDEwMTI0ODg2JTNhJTNhUklOQ09OXzVDQUFGRDA3NTZBQzAxNDAwJTNhMTY5ODUzODMwNy5tcDM/c2lkPTIzNiZhbXA7YW1wO2FtcDtmbGFncz0wJmFtcDthbXA7YW1wO3NuPTE4JmFtcDtsdDsvcmVzJmFtcDtndDsmYW1wO2x0O3VwbnA6YWxidW1BcnRVUkkmYW1wO2d0O2h0dHBzOi8vbWVkaWFzZXJ2ZXItY29udC1jaDEtMS12NHY2LnBhbmRvcmEuY29tL2ltYWdlcy9wdWJsaWMvaW50LzgvMi8wLzcvODg2OTczMjY3MDI4XzUwMFdfNTAwSC5qcGcmYW1wO2x0Oy91cG5wOmFsYnVtQXJ0VVJJJmFtcDtndDsmYW1wO2x0O3VwbnA6Y2xhc3MmYW1wO2d0O29iamVjdC5pdGVtLmF1ZGlvSXRlbS5tdXNpY1RyYWNrJmFtcDtsdDsvdXBucDpjbGFzcyZhbXA7Z3Q7JmFtcDtsdDtkYzp0aXRsZSZhbXA7Z3Q7WW91IEFyZSBUaGUgQmVzdCBUaGluZyZhbXA7bHQ7L2RjOnRpdGxlJmFtcDtndDsmYW1wO2x0O2RjOmNyZWF0b3ImYW1wO2d0O1JheSBMYU1vbnRhZ25lJmFtcDtsdDsvZGM6Y3JlYXRvciZhbXA7Z3Q7JmFtcDtsdDtyOmFsYnVtQXJ0aXN0JmFtcDtndDtSYXkgTGFNb250YWduZSZhbXA7bHQ7L3I6YWxidW1BcnRpc3QmYW1wO2d0OyZhbXA7bHQ7dXBucDphbGJ1bSZhbXA7Z3Q7R29zc2lwIEluIFRoZSBHcmFpbiZhbXA7bHQ7L3VwbnA6YWxidW0mYW1wO2d0OyZhbXA7bHQ7cjp0cmFja0dhaW4mYW1wO2d0Oy02LjQ1MDAwMCZhbXA7bHQ7L3I6dHJhY2tHYWluJmFtcDtndDsmYW1wO2x0O3I6dGlpZCZhbXA7Z3Q7UGN1a2JlaG9sREMyX2t4TklTNUxTbjhKUVBoU1ZCTExqbHNmSWx1ZnJHME15WTZ4bnpLZHhpeWpmcno3LUpwZjZEbHhLREd3YUJvYnRSU0JLSFFxUFBnJmFtcDtsdDsvcjp0aWlkJmFtcDtndDsmYW1wO2x0O3I6cmF0aW5nJmFtcDtndDsmYW1wO2x0O3I6dHlwZSZhbXA7Z3Q7Tk9ORSZhbXA7bHQ7L3I6dHlwZSZhbXA7Z3Q7JmFtcDtsdDtyOmNvbm5vdGF0aW9uJmFtcDtndDtORVVUUkFMJmFtcDtsdDsvcjpjb25ub3RhdGlvbiZhbXA7Z3Q7JmFtcDtsdDsvcjpyYXRpbmcmYW1wO2d0OyZhbXA7bHQ7cjpwb2xpY2llcyBtYXNrPSZhbXA7cXVvdDsweDgwMDIwMDA4JmFtcDtxdW90OyBmbGFncz0mYW1wO3F1b3Q7MHg4MDAyMDAwOCZhbXA7cXVvdDsvJmFtcDtndDsmYW1wO2x0Oy9pdGVtJmFtcDtndDsmYW1wO2x0Oy9ESURMLUxpdGUmYW1wO2d0OyZxdW90Oy8mZ3Q7Jmx0O3I6TmV4dFRyYWNrVVJJIHZhbD0mcXVvdDsmcXVvdDsvJmd0OyZsdDtyOk5leHRUcmFja01ldGFEYXRhIHZhbD0mcXVvdDsmcXVvdDsvJmd0OyZsdDtyOkVucXVldWVkVHJhbnNwb3J0VVJJIHZhbD0mcXVvdDt4LXNvbm9zYXBpLXJhZGlvOlNUJTNhMzYyMjgyMzQzODQxMDEyNDg4Nj9zaWQ9MjM2JmFtcDthbXA7ZmxhZ3M9MCZhbXA7YW1wO3NuPTE4JnF1b3Q7LyZndDsmbHQ7cjpFbnF1ZXVlZFRyYW5zcG9ydFVSSU1ldGFEYXRhIHZhbD0mcXVvdDsmYW1wO2x0O0RJREwtTGl0ZSB4bWxuczpkYz0mYW1wO3F1b3Q7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8mYW1wO3F1b3Q7IHhtbG5zOnVwbnA9JmFtcDtxdW90O3VybjpzY2hlbWFzLXVwbnAtb3JnOm1ldGFkYXRhLTEtMC91cG5wLyZhbXA7cXVvdDsgeG1sbnM6cj0mYW1wO3F1b3Q7dXJuOnNjaGVtYXMtcmluY29ubmV0d29ya3MtY29tOm1ldGFkYXRhLTEtMC8mYW1wO3F1b3Q7IHhtbG5zPSZhbXA7cXVvdDt1cm46c2NoZW1hcy11cG5wLW9yZzptZXRhZGF0YS0xLTAvRElETC1MaXRlLyZhbXA7cXVvdDsmYW1wO2d0OyZhbXA7bHQ7aXRlbSBpZD0mYW1wO3F1b3Q7MDAwYzAwMDBTVCUzYTM2MjI4MjM0Mzg0MTAxMjQ4ODYmYW1wO3F1b3Q7IHBhcmVudElEPSZhbXA7cXVvdDstMSZhbXA7cXVvdDsgcmVzdHJpY3RlZD0mYW1wO3F1b3Q7dHJ1ZSZhbXA7cXVvdDsmYW1wO2d0OyZhbXA7bHQ7ZGM6dGl0bGUmYW1wO2d0O1JheSBMYU1vbnRhZ25lIFJhZGlvJmFtcDtsdDsvZGM6dGl0bGUmYW1wO2d0OyZhbXA7bHQ7dXBucDpjbGFzcyZhbXA7Z3Q7b2JqZWN0Lml0ZW0uYXVkaW9JdGVtLmF1ZGlvQnJvYWRjYXN0JmFtcDtsdDsvdXBucDpjbGFzcyZhbXA7Z3Q7JmFtcDtsdDtkZXNjIGlkPSZhbXA7cXVvdDtjZHVkbiZhbXA7cXVvdDsgbmFtZVNwYWNlPSZhbXA7cXVvdDt1cm46c2NoZW1hcy1yaW5jb25uZXR3b3Jrcy1jb206bWV0YWRhdGEtMS0wLyZhbXA7cXVvdDsmYW1wO2d0O1NBX1JJTkNPTjYwNDIzX1hfI1N2YzYwNDIzLTAtVG9rZW4mYW1wO2x0Oy9kZXNjJmFtcDtndDsmYW1wO2x0O3VwbnA6YWxidW1BcnRVUkkmYW1wO2d0O2h0dHBzOi8vY29udC0yLnAtY2RuLnVzL2ltYWdlcy9wdWJsaWMvaW50LzQvMS83LzQvODg2NDQ3MDE0NzE0XzEwODBXXzEwODBILmpwZyZhbXA7bHQ7L3VwbnA6YWxidW1BcnRVUkkmYW1wO2d0OyZhbXA7bHQ7L2l0ZW0mYW1wO2d0OyZhbXA7bHQ7L0RJREwtTGl0ZSZhbXA7Z3Q7JnF1b3Q7LyZndDsmbHQ7L0luc3RhbmNlSUQmZ3Q7Jmx0Oy9FdmVudCZndDs8L0xhc3RDaGFuZ2U+PC9lOnByb3BlcnR5PjwvZTpwcm9wZXJ0eXNldD4= |
translatable | false |
unixTime | 1525727163067 |
value | {"station":"Ray LaMontagne Radio","name":null,"artist":null,"album":null,"trackNumber":"1","status":"playing","level":"","uri":"x-sonosapi-radio:ST%3a3622823438410124886?sid=236&flags=0&sn=18","trackUri":"x-sonos-http:PcukbeholDC2_kxNIS5LSn8JQPhSVBLLjlsfIlufrG0MyY6xnzKdxiyjfrz7-Jpf6DlxKDGwaBobtRSBKHQqPPg%3a%3aST%3a3622823438410124886%3a%3aRINCON_5CAAFD0756AC01400%3a1698538307.mp3?sid=236&flags=0&sn=18","transportUri":"","enqueuedUri":"x-sonosapi-radio:ST%3a3622823438410124886?sid=236&flags=0&sn=18","metaData":"<DIDL-Lite xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\" xmlns:r=\"urn:schemas-rinconnetworks-com:metadata-1-0/\" xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\"><item id=\"000c0000ST%3a3622823438410124886\" parentID=\"-1\" restricted=\"true\"> |
viewed | false |
@jishi That's an event log with a bunch of metadata that was sent to my SmartThings IDE device log when I started a radio station. Anything in there of value?
{
"station": "Ray LaMontagne Radio",
"name": null,
"artist": null,
"album": null,
"trackNumber": "1",
"status": "playing",
"level": "",
"uri": "x-sonosapi-radio:ST%3a3622823438410124886?sid=236&flags=0&sn=18",
"trackUri": "x-sonos-http:P7i9YD-NnevC_kxNIS5LSn6fwB8boasYqkct437Y-CxSZlzJyLxOKIj8O_lgSDsetxU5C4XnZmIZoZ62FVjRUrQ%3a%3aST%3a3622823438410124886%3a%3aRINCON_5CAAFD0756AC01400%3a1698538307.mp3?sid=236&flags=0&sn=18",
"transportUri": "",
"enqueuedUri": "x-sonosapi-radio:ST%3a3622823438410124886?sid=236&flags=0&sn=18",
"metaData": "<DIDL-Lite xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\" xmlns:r=\"urn:schemas-rinconnetworks-com:metadata-1-0/\" xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\"><item id=\"000c0000ST%3a3622823438410124886\" parentID=\"-1\" restricted=\"true\">
Sorry for all the info if that's not what you were looking for but here's a picture of where each of those two posts are coming from:
Like I say, this is just device info from my SmartThings hub. Their Sonos API is outdated and broken for the most part (especially when it comes to Spotify) but their Pandora implementation actually works fine. Thought this might help. Let me know how else I could obtain that info and I'll work on it.
Was this when playing a Pandora station? It looks vastly different, a completely different service ID which would explain a lot.
On Mon, May 7, 2018, 23:25 jacobwtyler notifications@github.com wrote:
Sorry for all the info if that's not what you were looking for but here's a picture of where each of those two posts are coming from:
[image: image] https://user-images.githubusercontent.com/18349823/39725854-bec27a06-5212-11e8-8fcd-95dbc1507bc1.png
[image: image] https://user-images.githubusercontent.com/18349823/39725788-91c5b126-5212-11e8-8aaf-dbcc047cf970.png
Like I say, this is just device info from my SmartThings hub. Their Sonos API is outdated and broken for the most part (especially when it comes to Spotify) but their Pandora implementation actually works fine. Thought this might help. Let me know how else I could obtain that info and I'll work on it.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/jishi/node-sonos-http-api/issues/614#issuecomment-387211490, or mute the thread https://github.com/notifications/unsubscribe-auth/ADBNI9L4bM7YnkL677jwIxaWsdjFUSxwks5twLu0gaJpZM4T1lfX .
@jishi yes I was playing a Pandora station named Ray Lamontagne Radio
@jishi Any progress on this issue? What's another way to metadata from Sonos when I start a Pandora station? I'd like to confirm that SmartThings IDE isn't seeing some encrypted form of metadata. I have a feeling it might be.
@jacobwtyler I don't think SmartThings IDE is wrong, the metadata looks normal but seems like the Pandora integration on Sonos has changed, meaning that if you remove and re-add Pandora you get a different type of metadata nowadays. I'll see if I can get some time and provide you with a test-version to evaluate if it fixes your issue. Problem will be that it will break all others Pandora-integration if they haven re-added their Pandora account, which is a bit unfortunate.
@jishi thank you so much. Really look forward to it.
I'm getting an error when trying to invoke a station on Pandora. My credentials are entered correctly both on the server side in the settings.json file and in the Pandora Service Settings in the Sonos app so that shouldn't be the problem but when I try to invoke a Pandora station with the command:
http://localhost:5005/RoomName/pandora/play/{station name}
I get:{"status":"error","error":"Got status 500 when invoking /MediaRenderer/AVTransport/Control","stack":"Error: Got status 500 when invoking /MediaRenderer/AVTransport/Control\n at Object.invoke (/sonos/node-sonos-http-api/node_modules/sonos-discovery/lib/helpers/soap.js:99:10)\n at Player.play (/sonos/node-sonos-http-api/node_modules/sonos-discovery/lib/models/Player.js:443:15)\n at pandoraAPI.then.then.then.then (/sonos/node-sonos-http-api/lib/actions/pandora.js:105:42)\n at <anonymous>\n at process._tickCallback (internal/process/next_tick.js:182:7)"}
and I get a popup message on all of my Sonos controller interfaces which I've included a screenshot of here:
And on the log output for the node server, I get:
May 01 11:57:05 jacobwtyler node[572]: Error: Got status 500 when invoking /MediaRenderer/AVTransport/Control May 01 11:57:05 jacobwtyler node[572]: at Object.invoke (/sonos/node-sonos-http-api/node_modules/sonos-discovery/lib/helpers/soap.js:99:10) May 01 11:57:05 jacobwtyler node[572]: at Player.play (/sonos/node-sonos-http-api/node_modules/sonos-discovery/lib/models/Player.js:443:15) May 01 11:57:05 jacobwtyler node[572]: at pandoraAPI.then.then.then.then (/sonos/node-sonos-http-api/lib/actions/pandora.js:105:42) May 01 11:57:05 jacobwtyler node[572]: at <anonymous> May 01 11:57:05 jacobwtyler node[572]: at process._tickCallback (internal/process/next_tick.js:182:7) �
Any help would be greatly appreciated. The Spotify credentials in my settings.json file must be working because I can invoke all Spotify playlists/songs/albums and every other command has worked flawlessly so I think my setup is good. I can call up a Pandora station by using the:
http://localhost:5005/RoomName/favorite/{favorite name}
but that feels a bit hacky. One possible issue is that I changed my email address that was associated with Pandora recently and my Sonos was still logged in with the old email address where the settings.json had my new email address and password. I removed my Sonos login and reauthenticated but I wonder if something got out of sync there. Today, I tried changing my Pandora password and then updating credentials on Sonos and Node side but got the same error. Sonos is clearly receiving the command but it doesn't seem to think my credentials are matching up. Btw, Pandora stations do play just fine in the Sonos Controller apps both before and after updating the credentials if I just use the stock search and click on a station method.Update: I'm starting to think it might be the Sonos side of the equation because I sent a command to invoke a station that I hadn't listened to in a long time (so it was toward the bottom of my stations in the list in Pandora app) and it gave me the error message again but it moved the station to the top of my list so this plugin must've been logged in and called the station up. Still haven't solved it though.
Update to the update: I'm not seeing this effect anymore when picking old stations that I haven't listened to in a long time so maybe I just imagined this. Sorry for the confusion.
Anyone have any ideas on what might be going on here? I've tried absolutely everything I can think of. Luckily, WebCoRE (SmartThings Rules Engine that I use for automation) can play Pandora stations through SmartThings' (mostly broken) implementation of the Sonos' API so I have a workaround but at this point I'm just frustrated with myself that I can't implement this one element of @jishi Sonos HTTP API.