I have been working on creating a device handler (well, actually adding to the existing ST one) and smart app that groups all selected Sonos’ and play’s TTS (once it works again). I have the grouping and resume working fine (except for the annoying significant delay by ST.
However, I’m having a problem with playlists. I have the handler parser grabbing the current play list titles; and uri and sending an event . I can read the event in my smartapp, but the format is no longer in map format.
the debug shows for the handler shows:
7c17cce0-fdef-499d-bde2-bb05e88628ef 5:46:05 PM: debug PlayList: [[title:[A7X, All music, Good Songs, Sonos Playlist 1], res:[file:///jffs/settings/savedqueues.rsq#3, file:///jffs/settings/savedqueues.rsq#0, file:///jffs/settings/savedqueues.rsq#1, file:///jffs/settings/savedqueues.rsq#2]]]
7c17cce0-fdef-499d-bde2-bb05e88628ef 5:46:05 PM: debug res: [file:///jffs/settings/savedqueues.rsq#3, file:///jffs/settings/savedqueues.rsq#0, file:///jffs/settings/savedqueues.rsq#1, file:///jffs/settings/savedqueues.rsq#2]
7c17cce0-fdef-499d-bde2-bb05e88628ef 5:46:05 PM: debug title: [A7X, All music, Good Songs, Sonos Playlist 1]
7c17cce0-fdef-499d-bde2-bb05e88628ef 5:46:05 PM: trace Parsed PlayList xml: A7Xfile:///jffs/settings/savedqueues.rsq#3object.container.playlistContainerAll musicfile:///jffs/settings/savedqueues.rsq#0object.container.playlistContainerGood Songsfile:///jffs/settings/savedqueues.rsq#1object.container.playlistContainerSonos Playlist 1file:///jffs/settings/savedqueues.rsq#2object.container.playlistContainer
the smartapp shows (notice the equal rather than colon:
[{title=[A7X, All music, Good Songs, Sonos Playlist 1], res=[file:///jffs/settings/savedqueues.rsq#3, file:///jffs/settings/savedqueues.rsq#0, file:///jffs/settings/savedqueues.rsq#1, file:///jffs/settings/savedqueues.rsq#2]}]
device handler parser:
//PlayList update
node = msg.xml.Body.BrowseResponse
if (node.size()) {
log.trace "Extracting PlayList"
def xml1 = parseXml(node.Result.text())
log.trace "Parsed PlayList xml: $xml1"
state.title = []
state.res = []
def playListValue = []
xml1.children().each {
state.title << it.title
state.res << it.res
}
playListValue << [
title: state.title,
res: state.res,
]
results << sendEvent(name: "playListData",
value: playListValue,
descriptionText: playListValue,
displayed: false,
isStateChange: isDataStateChange
)
}
SmartApp code:
def loadPlayList() {
state.playList = []
settings.sonos.each() {
it.getPlayList()
state.playList = it.currentState("playListData")
log.debug "playList: $state.playList" //returns physicalgraph.device.cassandra.DeviceStateCache error
log.debug "${it.value}" // returns the example above, but not in map format
}