|
[{"id":"27e94ab1.a717e6","type":"subflow","name":"1 s clear","info":"","category":"","in":[{"x":40,"y":40,"wires":[{"id":"1e9d1b9d.e58424"}]}],"out":[{"x":520,"y":40,"wires":[{"id":"27e94ab1.a717e6","port":0},{"id":"d2bd78d3.41f238","port":0}]}],"env":[],"icon":"node-red/timer.png"},{"id":"1e9d1b9d.e58424","type":"delay","z":"27e94ab1.a717e6","name":"1 s","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":190,"y":100,"wires":[["d2bd78d3.41f238"]]},{"id":"d2bd78d3.41f238","type":"change","z":"27e94ab1.a717e6","name":"clear notification","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":100,"wires":[[]]},{"id":"f44878c2.dd3d58","type":"tab","label":"Bose","disabled":false,"info":""},{"id":"b4767609b96a905e","type":"group","z":"f44878c2.dd3d58","name":"bose function testing","style":{"label":true,"color":"#000000"},"nodes":["a0a940a5a94b9c4e","c29cf03493172c2d","e71dfc897210fe02","1f65e20a30aec847"],"x":554,"y":199,"w":412,"h":182},{"id":"56c98625e234e365","type":"group","z":"f44878c2.dd3d58","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["b106241c.6e7a38","fc3c9f5c.4b2c3","96a878d8.a150e8","b62cfae4.5cad08"],"x":1214,"y":199,"w":592,"h":122},{"id":"2a1dafbe9dea4b80","type":"group","z":"f44878c2.dd3d58","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["d2321928.deca88","53f40f34.de23c","b3371866.2f65f8"],"x":1214,"y":359,"w":392,"h":122},{"id":"8c8158e594713f2f","type":"group","z":"f44878c2.dd3d58","name":"Initial setup","style":{"label":true,"color":"#000000"},"nodes":["e9914c4c.a1385","d35fb5a5.8ba5e8","f6248d89.c7021","f6f0c1a7.20e55","ded3c586.eaa9c8","5db53d79.91e9d4","31836eb7.dc7d42","ef19b3cb.67262"],"x":554,"y":39,"w":1132,"h":122},{"id":"b52116081f361796","type":"group","z":"f44878c2.dd3d58","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["8716e7ff.0ad008","1bdf7932.57a157","cdb6865b.1e0bf8","cf878d62.3cd0c","50e78dca.715894"],"x":594,"y":419,"w":592,"h":182},{"id":"1d6937a3.74fc58","type":"function","z":"f44878c2.dd3d58","name":"format","func":"var i, miscSettigns, artUrl;\nvar zoneMembers = '';\nvar groupMembers = '';\nvar bose = flow.get('bose_soundtouch_systems', 'memory');\n\nfunction getBoseName(ipaddress) {\n var j, name;\n for (j in bose.systems) {\n if (ipaddress == bose.systems[j].ipAddress) {\n name = bose.systems[j].name;\n break;\n }\n }\n return name;\n}\n\n// Misc settings\ntry {\n miscSettings = msg.payload[0].nowPlaying.shuffleSetting[0] + '<br>' +\n msg.payload[0].nowPlaying.repeatSetting[0] + '<br>';\n}\ncatch(err) {\n miscSettings = '';\n}\n\n// Zone members\ntry {\n for (i in msg.payload[1].zone.member) {\n zoneMembers = zoneMembers + ' ' +\n getBoseName(msg.payload[1].zone.member[i].$.ipaddress) + '<br>';\n }\n if (zoneMembers !== '') {\n groupMembers = 'Group members:<br>' + zoneMembers; \n } \n}\ncatch(err) { }\n\ntry {\n artUrl = '<img src=\"' + msg.payload[0].nowPlaying.art[0]._ + '\" width=\"160\" height=\"160\" alt=\"' + msg.payload[0].nowPlaying.album[0] + '\">';\n}\ncatch(err) {\n artUrl = 'N/A';\n}\n\ntry {\n message = 'Title: \"' + msg.payload[0].nowPlaying.track[0] + '\"<br>' +\n 'Artist: ' + msg.payload[0].nowPlaying.artist[0] + '<br>' +\n 'Album: ' + msg.payload[0].nowPlaying.album[0] + '<br>' +\n artUrl + '<br>' +\n 'Playlist: ' + msg.payload[0].nowPlaying.ContentItem[0].itemName[0] + '<br>' +\n String(msg.payload[0].nowPlaying.$.source).replace(/_/g, ' ') + '<br>' +\n miscSettings.replace(/_/g, ' ') +\n String(msg.payload[0].nowPlaying.playStatus[0]).replace(/_/g, ' ') + '<br>' +\n groupMembers;\n node.status({fill: 'blue', shape: 'dot', text: String(msg.payload[0].nowPlaying.playStatus[0]).replace(/_/g, ' ')});\n}\ncatch(err) {\n message = 'Not active...';\n node.status({fill: 'blue', shape: 'dot', text: message});\n}\nmsg.payload = message;\ndelete msg.topic;\nreturn msg;\n","outputs":1,"noerr":0,"x":2510,"y":620,"wires":[["7251bb1b.a56054"]]},{"id":"e9914c4c.a1385","type":"function","z":"f44878c2.dd3d58","g":"8c8158e594713f2f","name":"set \"bose_name\"","func":"flow.set('bose_name', msg.payload);\nnode.status({fill: 'blue', shape: 'dot', text: '\"bose_name\" = ' + msg.payload});\n\nmsg.payload = [\n {\n \"name\": \"select\",\n \"method\": \"GET\",\n \"function\": \"volume\",\n \"volumeNotification\": \"true\",\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Shuffle\",\n \"Bose_Soundtouch_Repeat\",\n \"Bose_Soundtouch_Volume_presets\",\n \"Bose_Soundtouch_Group\"\n ]\n }\n }\n];\nreturn msg;","outputs":1,"noerr":0,"x":1410,"y":120,"wires":[["5db53d79.91e9d4"]]},{"id":"e7bd5426.a2edb8","type":"comment","z":"f44878c2.dd3d58","name":"buttons","info":"","x":150,"y":160,"wires":[]},{"id":"fdfc15e7.a21928","type":"function","z":"f44878c2.dd3d58","name":"setup http post request","func":"var volume = 0;\n\n// Setup http request parameters\nswitch (msg.bose.function) {\n case 'key':\n msg.payload = '<key state=' + msg.bose.keyState + ' sender=Gabbo>' + msg.bose.key + '</key>';\n node.status({fill: 'blue', shape: 'dot', text: msg.bose.system.name + ' - Function: ' +\n msg.bose.function + ', Key State: ' + msg.bose.keyState + ', Key: ' + msg.bose.key});\n break;\n case 'setZone':\n msg.payload = msg.bose.option;\n break;\n case 'volume':\n switch(msg.bose.volume) {\n case 'low':\n msg.bose.volume = msg.bose.system.lowVolume;\n break;\n case 'medium':\n msg.bose.volume = msg.bose.system.mediumVolume;\n break;\n case 'high':\n msg.bose.volume = msg.bose.system.highVolume;\n }\n switch(msg.bose.option) {\n case 'set':\n volume = msg.bose.volume;\n break;\n case 'offset':\n volume = flow.get('bose_volume', 'memory') + msg.bose.volume;\n }\n if (volume > msg.bose.system.maxVolume) {\n volume = msg.bose.system.maxVolume;\n } else if (volume < 0) {\n volume = 0;\n }\n msg.payload = '<volume>' + volume + '</volume>';\n node.status({fill: 'blue', shape: 'dot', text: msg.bose.system.name + ' - Function.option: ' +\n msg.bose.function + '.' + msg.bose.option + ', volume: ' + volume});\n}\nmsg.method = msg.bose.method;\nreturn msg;\n","outputs":1,"noerr":0,"x":1720,"y":720,"wires":[["63310c8e.0d1a24","636326f2.e17128"]]},{"id":"636326f2.e17128","type":"http request","z":"f44878c2.dd3d58","name":"post request","method":"use","ret":"txt","url":"","tls":"","x":1950,"y":720,"wires":[["dbbf1b81.fb1a78","392e367d.7d5a8a"]]},{"id":"c7c4e8b2.ef64f8","type":"switch","z":"f44878c2.dd3d58","name":"method","property":"bose.method","propertyType":"msg","rules":[{"t":"eq","v":"GET","vt":"str"},{"t":"eq","v":"POST","vt":"str"},{"t":"eq","v":"GROUP","vt":"str"},{"t":"eq","v":"VOLUME","vt":"str"}],"checkall":"false","repair":false,"outputs":4,"x":1460,"y":840,"wires":[["72baba9.c9a9e44"],["fdfc15e7.a21928"],["5f7e2a2a.eecd74"],["9c538a2.33b4e78"]],"outputLabels":["GET","POST","GROUP","VOLUME"]},{"id":"931775c.24a5788","type":"function","z":"f44878c2.dd3d58","name":"setup bose","func":"if (typeof msg.payload.method === 'string') {\n var name = msg.payload.name;\n \n msg.bose = {\n \"method\": msg.payload.method,\n \"function\": msg.payload.function,\n \"option\": msg.payload.option,\n \"key\": msg.payload.key,\n \"keyState\": msg.payload.keyState,\n \"volume\": msg.payload.volume,\n \"delay\": msg.payload.delay,\n \"notification\": msg.payload.notification,\n \"volumeNotification\": msg.payload.volumeNotification,\n \"system\": {}\n }\n \n if (name == 'select') {\n name = flow.get('bose_name')\n }\n \n msg.bose.system = flow.get(name.replace(/ /g, '_'));\n \n // Setup node status\n switch (msg.bose.method) {\n case 'GET':\n node.status({fill: 'blue', shape: 'dot', text: name + ' - Function: ' +\n msg.bose.function});\n break;\n case 'POST':\n if (msg.bose.function == 'volume') {\n node.status({fill: 'blue', shape: 'dot', text: name + ' - Function.option: ' +\n msg.bose.function + '.' + msg.bose.option + ', volume: ' + msg.bose.volume});\n } else {\n node.status({fill: 'blue', shape: 'dot', text: name + ' - Function: ' +\n msg.bose.function + ', Key: ' + msg.bose.key});\n }\n }\n \n // Setup optional delay\n if (typeof msg.payload.delay !== 'undefined') {\n msg.delay = msg.payload.delay;\n } else {\n msg.delay = 0;\n }\n \n // Set url\n msg.url = 'http://' + msg.bose.system.ipAddress + ':8090/' + msg.bose.function;\n return msg;\n}","outputs":1,"noerr":0,"x":1090,"y":840,"wires":[["a9e5eb40.e11d48","4f79144b.a1c27c"]]},{"id":"12650dba.0f8542","type":"comment","z":"f44878c2.dd3d58","name":"post request","info":"","x":1690,"y":680,"wires":[]},{"id":"dbbf1b81.fb1a78","type":"function","z":"f44878c2.dd3d58","name":"optional get volume","func":"if (msg.bose.volumeNotification == 'true') {\n msg.payload = [\n {\n \"name\": \"select\",\n \"method\": \"GET\",\n \"function\": \"volume\",\n \"delay\": \"300\",\n \"volumeNotification\": \"true\"\n }\n ];\n return msg;\n}","outputs":1,"noerr":0,"x":2170,"y":720,"wires":[["52be23f7.b7367c"]]},{"id":"63310c8e.0d1a24","type":"debug","z":"f44878c2.dd3d58","name":"http request","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1970,"y":640,"wires":[]},{"id":"66b04d57.7c15b4","type":"split","z":"f44878c2.dd3d58","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":690,"y":840,"wires":[["4c510c94.544e14","c6574cf3.2ef54"]]},{"id":"4c510c94.544e14","type":"function","z":"f44878c2.dd3d58","name":"seasonal preset","func":"if (msg.payload.key == 'PRESET') {\n if (global.get('christmas_season') === true) {\n msg.payload.key = 'PRESET_2';\n } else {\n msg.payload.key = 'PRESET_1';\n }\n}\nreturn msg;","outputs":1,"noerr":0,"x":880,"y":840,"wires":[["931775c.24a5788","8063967b.b67508"]]},{"id":"2650b01a.3d78c","type":"comment","z":"f44878c2.dd3d58","name":"optional input from other flows","info":"","x":140,"y":100,"wires":[]},{"id":"4f79144b.a1c27c","type":"delay","z":"f44878c2.dd3d58","name":"optional delay","pauseType":"delayv","timeout":"0","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":1300,"y":840,"wires":[["c7c4e8b2.ef64f8"]]},{"id":"6c21fe0a.a4bbb","type":"http request","z":"f44878c2.dd3d58","name":"get request","method":"use","ret":"txt","url":"","tls":"","x":1950,"y":560,"wires":[["4144cac4.f71d94"]]},{"id":"4144cac4.f71d94","type":"xml","z":"f44878c2.dd3d58","name":"xml","property":"payload","attr":"","chr":"","x":2090,"y":560,"wires":[["f3cb49e2.2b5db8"]]},{"id":"dcd9bfe3.9c615","type":"function","z":"f44878c2.dd3d58","name":"format","func":"var i;\nvar presetNames = [];\n\n// Presets\ntry {\n var presets = msg.payload.presets.preset;\n for (i in presets) {\n var tooltipObj = {preset: 'x', tooltip: 'x'};\n tooltipObj.preset = i;\n tooltipObj.tooltip = presets[i].ContentItem[0].itemName[0];\n presetNames.push(tooltipObj);\n }\n}\ncatch(err) {}\n//node.warn(presetNames);\nmsg.payload = presetNames;\nreturn msg;\n","outputs":1,"noerr":0,"x":2390,"y":500,"wires":[["69e90e2a.08629"]]},{"id":"f9a1724.febfd9","type":"comment","z":"f44878c2.dd3d58","name":"get request","info":"","x":1680,"y":520,"wires":[]},{"id":"72baba9.c9a9e44","type":"function","z":"f44878c2.dd3d58","name":"setup http get request","func":"msg.method = msg.bose.method;\nnode.status({fill: 'blue', shape: 'dot', text: msg.bose.system.name + ' - Method: ' + msg.method + ', url: ' + msg.url});\nreturn msg;\n","outputs":1,"noerr":0,"x":1720,"y":560,"wires":[["6c21fe0a.a4bbb","63310c8e.0d1a24"]]},{"id":"7a7bbee6.1990a","type":"switch","z":"f44878c2.dd3d58","name":"tooltips","property":"payload.preset","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"},{"t":"eq","v":"3","vt":"str"},{"t":"eq","v":"4","vt":"str"},{"t":"eq","v":"5","vt":"str"}],"checkall":"false","repair":false,"outputs":6,"x":140,"y":260,"wires":[["b742e044.2d918"],["65235505.a7738c"],["fe2f0c58.9f715"],["d4e172d.76b979"],["e29f4224.19a28"],[]]},{"id":"69e90e2a.08629","type":"split","z":"f44878c2.dd3d58","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":2510,"y":500,"wires":[["7540a0d6.e6799"]]},{"id":"77847cc8.b60724","type":"link in","z":"f44878c2.dd3d58","name":"bose link 1","links":["7540a0d6.e6799"],"x":35,"y":260,"wires":[["7a7bbee6.1990a"]]},{"id":"7540a0d6.e6799","type":"link out","z":"f44878c2.dd3d58","name":"bose link 1","links":["77847cc8.b60724"],"x":2650,"y":500,"wires":[],"l":true},{"id":"f3cb49e2.2b5db8","type":"switch","z":"f44878c2.dd3d58","name":"function","property":"bose.function","propertyType":"msg","rules":[{"t":"eq","v":"presets","vt":"str"},{"t":"eq","v":"volume","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":3,"x":2220,"y":560,"wires":[["dcd9bfe3.9c615"],["5df119b7.9776d8"],["ef88bcb6.4ca6a"]],"outputLabels":["presets","volume","notification"]},{"id":"5df119b7.9776d8","type":"function","z":"f44878c2.dd3d58","name":"format","func":"var message = 'Update pending...';\ntry {\n var mute = msg.payload.volume.muteenabled[0];\n switch (mute) {\n case 'true':\n mute = 'On';\n break;\n default:\n mute = 'Off';\n }\n message = 'Volume: ' + msg.payload.volume.actualvolume[0] + '%';\n flow.set('bose_volume', Number(msg.payload.volume.actualvolume[0]), 'memory');\n}\ncatch(err) {}\nnode.status({fill: 'blue', shape: 'dot', text: message});\nmsg.payload = message;\ndelete msg.topic;\nreturn msg;","outputs":1,"noerr":0,"x":2390,"y":560,"wires":[["e628d280.d445"]]},{"id":"f4cb94b5.ee5c38","type":"link in","z":"f44878c2.dd3d58","name":"bose function","links":["6650fcc8.47cb04","5db53d79.91e9d4","f83dbef6.5d5d3","52be23f7.b7367c","c8b51082.012ab","d4ac1154.4e2c9","cdb6865b.1e0bf8","96a878d8.a150e8","3edd2e652dd1fc06","c29cf03493172c2d"],"x":350,"y":100,"wires":[["66b04d57.7c15b4"]],"l":true},{"id":"52be23f7.b7367c","type":"link out","z":"f44878c2.dd3d58","name":"bose function","links":["f4cb94b5.ee5c38"],"x":2350,"y":720,"wires":[],"l":true},{"id":"e628d280.d445","type":"switch","z":"f44878c2.dd3d58","name":"notification?","property":"bose.volumeNotification","propertyType":"msg","rules":[{"t":"eq","v":"true","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":2530,"y":560,"wires":[["caea0239.8f429"]],"outputLabels":["yes"]},{"id":"ef88bcb6.4ca6a","type":"join","z":"f44878c2.dd3d58","name":"","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":"false","timeout":"","count":"","reduceRight":false,"x":2390,"y":620,"wires":[["1d6937a3.74fc58"]]},{"id":"a9e5eb40.e11d48","type":"debug","z":"f44878c2.dd3d58","name":"post setup","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1290,"y":780,"wires":[]},{"id":"de9ea532.090508","type":"function","z":"f44878c2.dd3d58","name":"setup dropdown","func":"var bose = flow.get('bose_soundtouch_systems', 'memory');\nvar name = flow.get('bose_name');\nvar nameArray = ['All'];\n\n// Setup names for dropdown list\nfor (var i in bose.systems) { \n if (name != bose.systems[i].name) {\n nameArray.push(bose.systems[i].name);\n }\n}\n\nflow.set('bose_group_members', [], 'memory');\nflow.set('bose_group_name', '', 'memory');\n\nmsg.options = nameArray;\nmsg.payload = '';\nreturn msg;","outputs":1,"noerr":0,"x":1900,"y":880,"wires":[["88d5c3b1.13d51","32a613e3.04d12c","e1a5b234.697c5"]]},{"id":"94c78fc7.e52ce","type":"comment","z":"f44878c2.dd3d58","name":"group request","info":"","x":1690,"y":900,"wires":[]},{"id":"5f7e2a2a.eecd74","type":"switch","z":"f44878c2.dd3d58","name":"function","property":"bose.function","propertyType":"msg","rules":[{"t":"eq","v":"setup","vt":"str"},{"t":"eq","v":"add","vt":"str"},{"t":"eq","v":"remove","vt":"str"},{"t":"eq","v":"save","vt":"str"}],"checkall":"false","repair":false,"outputs":4,"x":1680,"y":960,"wires":[["de9ea532.090508"],["4faad308.d67b7c"],["c6d2280c.ac4ea8"],["45c51a19.667684"]],"outputLabels":["setup","add","remove","save"]},{"id":"4faad308.d67b7c","type":"function","z":"f44878c2.dd3d58","name":"add member","func":"var i;\nvar bose = flow.get('bose_soundtouch_systems', 'memory');\nvar name = flow.get('bose_name');\nvar addName = flow.get('bose_group_name', 'memory');\nvar groupMembers = flow.get('bose_group_members', 'memory');\n\nif (addName == 'All') {\n groupMembers = [];\n for (i in bose.systems) { \n if (name != bose.systems[i].name) {\n groupMembers.push(bose.systems[i].name);\n }\n }\n} else if (groupMembers.indexOf(addName) < 0) {\n groupMembers.push(addName);\n}\n\nflow.set('bose_group_members', groupMembers, 'memory');\n\nmsg.payload = '';\nfor (i in groupMembers) {\n msg.payload = msg.payload + groupMembers[i] + '<br>';\n}\nreturn msg;","outputs":1,"noerr":0,"x":1890,"y":940,"wires":[["32a613e3.04d12c"]]},{"id":"8f410b3f.9cb3b8","type":"function","z":"f44878c2.dd3d58","name":"set \"bose_group_name\"","func":"if (msg.payload !== '') {\n flow.set('bose_group_name', msg.payload, 'memory');\n}\nnode.status({fill: 'blue', shape: 'dot', text: '\"bose_group_name\" = ' + msg.payload});\nmsg.payload = false;\nreturn msg;","outputs":1,"noerr":0,"x":2370,"y":860,"wires":[["e0558585.7c9e08"]]},{"id":"c6d2280c.ac4ea8","type":"function","z":"f44878c2.dd3d58","name":"remove member","func":"var i;\nvar removeName = flow.get('bose_group_name', 'memory');\nvar groupMembers = flow.get('bose_group_members', 'memory');\n\nif (removeName == 'All') {\n groupMembers = [];\n} else if (groupMembers.indexOf(removeName) >= 0) {\n groupMembers.splice(groupMembers.indexOf(removeName), 1);\n}\n\nflow.set('bose_group_members', groupMembers, 'memory');\n\nmsg.payload = '';\nfor (i in groupMembers) {\n msg.payload = msg.payload + groupMembers[i] + '<br>';\n}\nreturn msg;\n","outputs":1,"noerr":0,"x":1900,"y":1000,"wires":[["32a613e3.04d12c"]]},{"id":"45c51a19.667684","type":"function","z":"f44878c2.dd3d58","name":"save","func":"var i, j;\nvar bose = flow.get('bose_soundtouch_systems', 'memory');\nvar name = flow.get('bose_name');\nvar groupMembers = flow.get('bose_group_members', 'memory');\n\nmsg.payload = [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"setZone\",\n \"option\": \"\",\n \"notification\": \"Group saved\"\n }\n];\n\nfor (var j in bose.systems) { \n if (name == bose.systems[j].name) {\n msg.payload[0].option = '<zone master=\"' + bose.systems[j].deviceID + '\">\\n';\n break;\n }\n}\n\nfor (var i in groupMembers) { \n for (var j in bose.systems) { \n if (groupMembers[i] == bose.systems[j].name) {\n msg.payload[0].option = msg.payload[0].option +\n ' <member ipaddress=\"' + bose.systems[j].ipAddress + '\">' + bose.systems[j].deviceID + '</member>\\n';\n break;\n }\n }\n}\nmsg.payload[0].option = msg.payload[0].option + '</zone>';\n\nreturn msg;","outputs":1,"noerr":0,"x":1870,"y":1060,"wires":[["f83dbef6.5d5d3"]]},{"id":"f83dbef6.5d5d3","type":"link out","z":"f44878c2.dd3d58","name":"bose function","links":["f4cb94b5.ee5c38"],"x":2010,"y":1060,"wires":[],"l":true},{"id":"8063967b.b67508","type":"debug","z":"f44878c2.dd3d58","name":"pre setup","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1080,"y":780,"wires":[]},{"id":"8716e7ff.0ad008","type":"function","z":"f44878c2.dd3d58","g":"b52116081f361796","name":"connect/lost/change","func":"switch (msg.payload) {\n case 'connect':\n case 'lost':\n break;\n case 'change':\n if (msg.name == 'Bose Soundtouch') {\n msg.payload = [\n {\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Shuffle\",\n \"Bose_Soundtouch_Repeat\",\n \"Bose_Soundtouch_Volume_presets\",\n \"Bose_Soundtouch_Group\"\n ]\n }\n },\n {\n \"name\": \"select\",\n \"method\": \"GET\",\n \"function\": \"presets\"\n }\n ]\n }\n}\n\nreturn msg;\n","outputs":1,"noerr":0,"x":900,"y":500,"wires":[["cdb6865b.1e0bf8"]]},{"id":"392e367d.7d5a8a","type":"function","z":"f44878c2.dd3d58","name":"optional notification","func":"if (typeof msg.bose.notification !== 'undefined') {\n msg.payload = msg.bose.notification;\n delete msg.topic;\n return msg;\n}","outputs":1,"noerr":0,"x":2170,"y":780,"wires":[["5a135e9.64844a"]]},{"id":"1bd5db4c.bed5d5","type":"link in","z":"f44878c2.dd3d58","name":"bose link 3","links":["e0558585.7c9e08"],"x":180,"y":1380,"wires":[["90588a9d.4dcbe8","f9e8cb2.0104c38"]],"l":true},{"id":"e0558585.7c9e08","type":"link out","z":"f44878c2.dd3d58","name":"bose link 3","links":["1bd5db4c.bed5d5"],"x":2630,"y":940,"wires":[],"l":true},{"id":"e1a5b234.697c5","type":"function","z":"f44878c2.dd3d58","name":"disable add/remove","func":"msg.payload = true;\nreturn msg;","outputs":1,"noerr":0,"x":2150,"y":940,"wires":[["e0558585.7c9e08"]]},{"id":"d35fb5a5.8ba5e8","type":"inject","z":"f44878c2.dd3d58","g":"8c8158e594713f2f","name":"100 ms","repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":660,"y":120,"wires":[["f6248d89.c7021"]]},{"id":"f6248d89.c7021","type":"function","z":"f44878c2.dd3d58","g":"8c8158e594713f2f","name":"initialize","func":"flow.set('bose_soundtouch_systems', {\"systems\": []}, 'memory');\nmsg.payload = [\n {\n \"name\": \"Bedroom\", \n \"ipAddress\": \"192.168.0.131\",\n \"macAddress\": \"EC24B883580B\"\n },\n {\n \"name\": \"Living room\", \n \"ipAddress\": \"192.168.0.146\",\n \"macAddress\": \"08DF1F1055DD\"\n }\n];\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":120,"wires":[["31836eb7.dc7d42"]]},{"id":"f6f0c1a7.20e55","type":"comment","z":"f44878c2.dd3d58","g":"8c8158e594713f2f","name":"initial setup","info":"","x":640,"y":80,"wires":[]},{"id":"2d6ef25c.480d4e","type":"function","z":"f44878c2.dd3d58","name":"save","func":"var name = flow.get('bose_name');\nvar tempSystem = flow.get('temp_system', 'memory');\nvar system = Object.assign({}, tempSystem);\nflow.set(name.replace(/ /g, '_'), system);\nmsg.payload = 'Volume presets saved';\nmsg.bose.notification = 'true';\nreturn msg;","outputs":1,"noerr":0,"x":1870,"y":1220,"wires":[["3b7e5dd1.6e0a92"]]},{"id":"74355b5f.e1d564","type":"comment","z":"f44878c2.dd3d58","name":"volume request","info":"","x":1700,"y":1140,"wires":[]},{"id":"9c538a2.33b4e78","type":"switch","z":"f44878c2.dd3d58","name":"function","property":"bose.function","propertyType":"msg","rules":[{"t":"eq","v":"setup","vt":"str"},{"t":"eq","v":"save","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":1680,"y":1180,"wires":[["ca26836f.e3965"],["2d6ef25c.480d4e"]],"outputLabels":["setup","save"]},{"id":"ca26836f.e3965","type":"function","z":"f44878c2.dd3d58","name":"setup values","func":"var name = flow.get('bose_name');\nvar system = flow.get(name.replace(/ /g, '_'));\nvar tempSystem = Object.assign({}, system);\nflow.set('temp_system', tempSystem, 'memory');\n\nmsg.payload = [\n {\n value: system.lowVolume,\n \"topic\": \"lowVolume\"\n },\n {\n value: system.mediumVolume,\n \"topic\": \"mediumVolume\"\n },\n {\n value: system.highVolume,\n \"topic\": \"highVolume\"\n },\n {\n value: system.maxVolume,\n \"topic\": \"maxVolume\"\n }\n]\nreturn msg;","outputs":1,"noerr":0,"x":1890,"y":1160,"wires":[["cd1c37eb.166998"]]},{"id":"f24b6a63.5f1568","type":"switch","z":"f44878c2.dd3d58","name":"topic","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"lowVolume","vt":"str"},{"t":"eq","v":"mediumVolume","vt":"str"},{"t":"eq","v":"highVolume","vt":"str"},{"t":"eq","v":"maxVolume","vt":"str"}],"checkall":"false","repair":false,"outputs":4,"x":2290,"y":1160,"wires":[["3bdfdeb8.eb5a22"],["41f797e6.b9af28"],["2b669ea3.726f52"],["e8db5704.abfaa8"]],"outputLabels":["low","medium","high","max"]},{"id":"cd1c37eb.166998","type":"split","z":"f44878c2.dd3d58","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":2030,"y":1160,"wires":[["22a6323c.c03a1e"]]},{"id":"22a6323c.c03a1e","type":"function","z":"f44878c2.dd3d58","name":"set topic","func":"msg.topic = msg.payload.topic;\nmsg.payload = msg.payload.value;\nreturn msg;","outputs":1,"noerr":0,"x":2160,"y":1160,"wires":[["f24b6a63.5f1568"]]},{"id":"3f1147a2.1759f8","type":"function","z":"f44878c2.dd3d58","name":"set context","func":"var tempSystem = flow.get('temp_system', 'memory');\ntempSystem[msg.topic] = msg.payload;\nflow.set('temp_system', tempSystem, 'memory');\nreturn msg;","outputs":1,"noerr":0,"x":2710,"y":1160,"wires":[[]]},{"id":"ded3c586.eaa9c8","type":"function","z":"f44878c2.dd3d58","g":"8c8158e594713f2f","name":"bose add systems","func":"// Uncomment line below to initialize context for named system\n//flow.set(msg.payload.name.replace(/ /g, '_'));\nvar bose = flow.get('bose_soundtouch_systems', 'memory');\nvar system = flow.get(msg.payload.name.replace(/ /g, '_'));\nvar name = flow.get('bose_name');\nvar nameArray = [];\nvar i;\n\nvar newSystem = {\n \"name\": msg.payload.name,\n \"ipAddress\": msg.payload.ipAddress,\n \"deviceID\": msg.payload.macAddress\n};\nif (typeof system === 'undefined') {\n system = newSystem;\n system.lowVolume = 5;\n system.mediumVolume = 10;\n system.highVolume = 15;\n system.maxVolume = 50;\n} else {\n system.ipAddress = newSystem.ipAddress;\n system.deviceID = newSystem.deviceID;\n}\n\nflow.set(system.name.replace(/ /g, '_'), system);\nbose.systems.push(newSystem);\nflow.set('bose_soundtouch_systems', bose, 'memory');\n\nif ((typeof name !== 'string') || (name.length === 0)) {\n name = bose.systems[0].name;\n flow.set('bose_name', name);\n node.warn('bose_name set to: ' + name);\n}\n\n// Setup names for dropdown list\nfor (i in bose.systems) { \n nameArray.push(bose.systems[i].name);\n}\n\nmsg.options = nameArray.sort();\nmsg.payload = name;\nnode.status({fill: 'blue', shape: 'dot', text: bose.systems.length + ' systems added'});\nreturn msg;\n","outputs":1,"noerr":0,"x":1030,"y":120,"wires":[["ef19b3cb.67262"]]},{"id":"5db53d79.91e9d4","type":"link out","z":"f44878c2.dd3d58","g":"8c8158e594713f2f","name":"bose function","links":["f4cb94b5.ee5c38"],"x":1590,"y":120,"wires":[],"l":true},{"id":"1bdf7932.57a157","type":"comment","z":"f44878c2.dd3d58","g":"b52116081f361796","name":"ui refresh","info":"","x":680,"y":460,"wires":[]},{"id":"d2321928.deca88","type":"function","z":"f44878c2.dd3d58","g":"2a1dafbe9dea4b80","name":"clear flow context","func":"flow.set('bose_name');\nflow.set('bose_volume', null, 'memory');\nflow.set('bose_group_name', null, 'memory');\nflow.set('bose_group_members', null, 'memory');\nflow.set('bose_soundtouch_systems', null, 'memory');\nflow.set('temp_system', null, 'memory');\n","outputs":1,"noerr":0,"x":1490,"y":440,"wires":[[]]},{"id":"53f40f34.de23c","type":"inject","z":"f44878c2.dd3d58","g":"2a1dafbe9dea4b80","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1320,"y":440,"wires":[["d2321928.deca88"]]},{"id":"b3371866.2f65f8","type":"comment","z":"f44878c2.dd3d58","g":"2a1dafbe9dea4b80","name":"manually clear flow context","info":"","x":1350,"y":400,"wires":[]},{"id":"cdb6865b.1e0bf8","type":"link out","z":"f44878c2.dd3d58","g":"b52116081f361796","name":"bose function","links":["f4cb94b5.ee5c38"],"x":1090,"y":500,"wires":[],"l":true},{"id":"cf878d62.3cd0c","type":"debug","z":"f44878c2.dd3d58","g":"b52116081f361796","name":"bose ui refresh","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":880,"y":560,"wires":[]},{"id":"19c0f238.ca2f4e","type":"link in","z":"f44878c2.dd3d58","name":"bose function post split","links":["a782d7d9.24b048"],"x":740,"y":900,"wires":[["4c510c94.544e14"]],"l":true},{"id":"caea0239.8f429","type":"subflow:27e94ab1.a717e6","z":"f44878c2.dd3d58","name":"","x":2680,"y":560,"wires":[["cd7c0e2e.34d3e"]]},{"id":"3b7e5dd1.6e0a92","type":"subflow:27e94ab1.a717e6","z":"f44878c2.dd3d58","name":"","x":2000,"y":1220,"wires":[["e4cd5f2a.42268"]]},{"id":"5a135e9.64844a","type":"subflow:27e94ab1.a717e6","z":"f44878c2.dd3d58","name":"","x":2340,"y":780,"wires":[["a305dec2.8c528"]]},{"id":"570152d4.6549ac","type":"catch","z":"f44878c2.dd3d58","name":"","scope":null,"uncaught":true,"x":100,"y":40,"wires":[["26df4ce9.d725d4"]]},{"id":"26df4ce9.d725d4","type":"debug","z":"f44878c2.dd3d58","name":"bose exceptions","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":280,"y":40,"wires":[]},{"id":"e4cd5f2a.42268","type":"link out","z":"f44878c2.dd3d58","name":"bose link 2","links":["c901851d.c94ce8"],"x":2150,"y":1220,"wires":[],"l":true},{"id":"c901851d.c94ce8","type":"link in","z":"f44878c2.dd3d58","name":"bose link 2","links":["e4cd5f2a.42268","a305dec2.8c528"],"x":2680,"y":680,"wires":[["cd7c0e2e.34d3e"]],"l":true},{"id":"31836eb7.dc7d42","type":"split","z":"f44878c2.dd3d58","g":"8c8158e594713f2f","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":895,"y":120,"wires":[["ded3c586.eaa9c8"]],"l":false},{"id":"ef19b3cb.67262","type":"ui_dropdown","z":"f44878c2.dd3d58","g":"8c8158e594713f2f","name":"bose systems","label":"","tooltip":"","place":"Select system to control","group":"68d1b9a.924e348","order":1,"width":0,"height":0,"passthru":false,"options":[{"label":"","value":"","type":"str"}],"payload":"","topic":"","x":1220,"y":120,"wires":[["e9914c4c.a1385"]]},{"id":"88d5c3b1.13d51","type":"ui_dropdown","z":"f44878c2.dd3d58","name":"group members","label":"","tooltip":"","place":"Select system to add or remove","group":"b6492d1d.e439","order":1,"width":"0","height":"0","passthru":false,"options":[{"label":"","value":"","type":"str"}],"payload":"","topic":"","x":2140,"y":880,"wires":[["8f410b3f.9cb3b8"]]},{"id":"3bdfdeb8.eb5a22","type":"ui_numeric","z":"f44878c2.dd3d58","name":"low volume","label":"Low","tooltip":"","group":"29d31533.0524da","order":1,"width":"3","height":"1","passthru":false,"topic":"lowVolume","format":"{{value}}","min":0,"max":"100","step":1,"x":2490,"y":1080,"wires":[["3f1147a2.1759f8"]]},{"id":"41f797e6.b9af28","type":"ui_numeric","z":"f44878c2.dd3d58","name":"medium volume","label":"Med","tooltip":"","group":"29d31533.0524da","order":3,"width":"3","height":"1","passthru":false,"topic":"mediumVolume","format":"{{value}}","min":0,"max":"100","step":1,"x":2500,"y":1140,"wires":[["3f1147a2.1759f8"]]},{"id":"2b669ea3.726f52","type":"ui_numeric","z":"f44878c2.dd3d58","name":"high volume","label":"High","tooltip":"","group":"29d31533.0524da","order":2,"width":"3","height":"1","passthru":false,"topic":"highVolume","format":"{{value}}","min":0,"max":"100","step":1,"x":2490,"y":1200,"wires":[["3f1147a2.1759f8"]]},{"id":"e8db5704.abfaa8","type":"ui_numeric","z":"f44878c2.dd3d58","name":"max volume","label":"Max","tooltip":"","group":"29d31533.0524da","order":4,"width":"3","height":"1","passthru":false,"topic":"maxVolume","format":"{{value}}","min":0,"max":"100","step":1,"x":2490,"y":1260,"wires":[["3f1147a2.1759f8"]]},{"id":"32a613e3.04d12c","type":"ui_text","z":"f44878c2.dd3d58","group":"b6492d1d.e439","order":3,"width":"6","height":"3","name":"","label":"","format":"{{msg.payload}}","layout":"row-left","x":2075,"y":1000,"wires":[],"l":false},{"id":"cd7c0e2e.34d3e","type":"ui_text","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","order":27,"width":"5","height":"1","name":"","label":"","format":"{{msg.payload}}","layout":"row-left","x":2845,"y":560,"wires":[],"l":false},{"id":"7251bb1b.a56054","type":"ui_toast","z":"f44878c2.dd3d58","position":"dialog","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"","raw":true,"className":"","topic":"","name":"ok notification","x":2660,"y":620,"wires":[[]]},{"id":"c6574cf3.2ef54","type":"ui_ui_control","z":"f44878c2.dd3d58","name":"","x":860,"y":780,"wires":[[]]},{"id":"50e78dca.715894","type":"ui_ui_control","z":"f44878c2.dd3d58","g":"b52116081f361796","name":"","x":680,"y":500,"wires":[["8716e7ff.0ad008","cf878d62.3cd0c"]]},{"id":"b742e044.2d918","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"preset 1","order":2,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"release\",\n \"key\": \"PRESET_1\",\n \"volumeNotification\": \"true\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PLAY\"\n }\n]\n})'><md-tooltip md-direction=\"top\">{{msg.payload.tooltip}}</md-tooltip>1</md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":160,"wires":[["66b04d57.7c15b4"]]},{"id":"65235505.a7738c","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"preset 2","order":3,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"release\",\n \"key\": \"PRESET_2\",\n \"volumeNotification\": \"true\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PLAY\"\n }\n]\n})'><md-tooltip md-direction=\"top\">{{msg.payload.tooltip}}</md-tooltip>2</md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":200,"wires":[["66b04d57.7c15b4"]]},{"id":"fe2f0c58.9f715","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"preset 3","order":4,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"release\",\n \"key\": \"PRESET_3\",\n \"volumeNotification\": \"true\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PLAY\"\n }\n]\n})'><md-tooltip md-direction=\"top\">{{msg.payload.tooltip}}</md-tooltip>3</md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":240,"wires":[["66b04d57.7c15b4"]]},{"id":"d4e172d.76b979","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"preset 4","order":5,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"release\",\n \"key\": \"PRESET_4\",\n \"volumeNotification\": \"true\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PLAY\"\n }\n]\n})'><md-tooltip md-direction=\"top\">{{msg.payload.tooltip}}</md-tooltip>4</md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":280,"wires":[["66b04d57.7c15b4"]]},{"id":"e29f4224.19a28","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"preset 5","order":6,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"release\",\n \"key\": \"PRESET_5\",\n \"volumeNotification\": \"true\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PLAY\"\n }\n]\n})'><md-tooltip md-direction=\"top\">{{msg.payload.tooltip}}</md-tooltip>5</md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":320,"wires":[["66b04d57.7c15b4"]]},{"id":"dddf5e64.3f1a1","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"volume low","order":10,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"volume\",\n \"option\": \"set\",\n \"volume\": \"low\",\n \"volumeNotification\": \"true\"\n }\n]\n})'>L</md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":720,"wires":[["66b04d57.7c15b4"]]},{"id":"c30c067.d5569f8","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"volume medium","order":11,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"volume\",\n \"option\": \"set\",\n \"volume\": \"medium\",\n \"volumeNotification\": \"true\"\n }\n]\n})'>M</md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":360,"y":760,"wires":[["66b04d57.7c15b4"]]},{"id":"eb50ec75.92e41","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"volume high","order":12,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"volume\",\n \"option\": \"set\",\n \"volume\": \"high\",\n \"volumeNotification\": \"true\"\n }\n]\n})'>H</md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":800,"wires":[["66b04d57.7c15b4"]]},{"id":"5a8cbd7c.7f3904","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"pause","order":15,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-pause\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PAUSE\",\n \"notification\": \"Paused\"\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":330,"y":480,"wires":[["66b04d57.7c15b4"]]},{"id":"6d81dbb9.4e22b4","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"previous","order":14,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-step-backward\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PREV_TRACK\",\n \"notification\": \"Previous track\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PLAY\"\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":520,"wires":[["66b04d57.7c15b4"]]},{"id":"a24ca12a.e16c4","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"next","order":17,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-step-forward\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"NEXT_TRACK\",\n \"notification\": \"Next track\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PLAY\"\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":330,"y":560,"wires":[["66b04d57.7c15b4"]]},{"id":"ea86d04a.ad135","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"volume down","order":9,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-volume-down\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"GET\",\n \"function\": \"volume\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"volume\",\n \"option\": \"offset\",\n \"volume\": -1,\n \"delay\": \"300\",\n \"volumeNotification\": \"true\"\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":600,"wires":[["66b04d57.7c15b4"]]},{"id":"910b11b3.f17e","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"volume up","order":13,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-volume-up\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"GET\",\n \"function\": \"volume\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"volume\",\n \"option\": \"offset\",\n \"volume\": 1,\n \"delay\": \"300\",\n \"volumeNotification\": \"true\"\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":640,"wires":[["66b04d57.7c15b4"]]},{"id":"d50d915d.2bccf","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"now playing","order":20,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-info-circle\" aria-label=\"Settings\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"GET\",\n \"function\": \"now_playing\"\n },\n {\n \"name\": \"select\",\n \"method\": \"GET\",\n \"function\": \"getZone\"\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":840,"wires":[["66b04d57.7c15b4"]]},{"id":"cacf8f1d.c78bf","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"play","order":16,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-play\" ng-click='send({\npayload : [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"PLAY\",\n \"volumeNotification\": \"true\"\n }\n]\n})'></md-button> ","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":330,"y":400,"wires":[["66b04d57.7c15b4"]]},{"id":"36f043a.56bc4bc","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"shuffle control","order":22,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-random\" ng-click='send({\npayload: [\n {\n \"group\": {\n \"show\": [\n \"Bose_Soundtouch_Shuffle\"\n ],\n \"focus\": \"true\"\n }\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":360,"y":880,"wires":[["66b04d57.7c15b4"]]},{"id":"cb36ca05.611518","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"repeat control","order":23,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-repeat\" ng-click='send({\npayload: [\n {\n \"group\": {\n \"show\": [\n \"Bose_Soundtouch_Repeat\"\n ],\n \"focus\": \"true\"\n }\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":360,"y":1040,"wires":[["66b04d57.7c15b4"]]},{"id":"19798ba3.26c974","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"button css","order":26,"width":0,"height":0,"format":"<style>\n\n .md-button.black-text {\n color: black;\n }\n\n /* Metal ------------------------- */\n \n .metal {\n position: relative;\n margin: auto;\n \n text-align: center;\n color: hsla(0,0%,20%,1);\n text-shadow:\n hsla(0,0%,40%,.5) 0 -1px 0,\n hsla(0,0%,100%,.6) 0 2px 1px;\n \n background-color: hsl(0,0%,90%);\n box-shadow:\n inset hsla(0,0%,15%, 1) 0 0px 0px 2px, /* border */\n inset hsla(0,0%,15%, .8) 0 -1px 3px 2px, /* soft SD */\n inset hsla(0,0%,0%, .25) 0 -1px 0px 3px, /* bottom SD */\n inset hsla(0,0%,100%,.7) 0 2px 1px 3px, /* top HL */\n \n hsla(0,0%, 0%,.15) 0 -2px 3px 2px, /* outer SD */\n hsla(0,0%,100%,.5) 0 2px 3px 2px; /* outer HL */ \n\n transition: color .2s;\n }\n \n /* Linear ------------------------- */\n\n .metal.linear {\n width: 40px;\n height: 40px;\n font-size: 1.2em;\n border-radius: .5em;\n background-image:\n -webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 6%, hsla(0,0%,100%, .1) 7.5%),\n -webkit-repeating-linear-gradient(left, hsla(0,0%, 0%,0) 0%, hsla(0,0%, 0%,0) 4%, hsla(0,0%, 0%,.03) 4.5%),\n -webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1.2%, hsla(0,0%,100%,.15) 2.2%),\n \n linear-gradient(180deg,\n hsl(0,0%,78%) 0%, \n hsl(0,0%,90%) 47%, \n hsl(0,0%,78%) 53%,\n hsl(0,0%,70%)100%);\n }\n \n /* Wide ------------------------- */\n\n .metal.wide {\n width: 90px;\n height: 40px;\n }\n\n /* active ------------------------- */\n\n .metal:active {\n color: hsl(210, 100%, 40%);\n text-shadow:\n hsla(210,100%,20%,.3) 0 -1px 0,\n hsl(210,100%,85%) 0 2px 1px,\n hsla(200,100%,80%,1) 0 0 5px,\n hsla(210,100%,50%,.6) 0 0 20px;\n box-shadow: \n inset hsla(210,100%,30%, 1) 0 0px 0px 2px, /* border */\n inset hsla(210,100%,15%, .4) 0 -1px 3px 2px, /* soft SD */\n inset hsla(210,100%,20%,.25) 0 -1px 0px 3px, /* bottom SD */\n inset hsla(210,100%,100%,.7) 0 2px 1px 3px, /* top HL */\n \n hsla(210,100%,75%, .8) 0 0px 3px 2px, /* outer SD */\n hsla(210,50%,40%, .25) 0 -2px 3px 2px, /* outer SD */\n hsla(210,80%,95%, 1) 0 2px 3px 2px; /* outer HL */\n } \n\n</style>\n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":130,"y":380,"wires":[[]]},{"id":"c74e7c2a.3b5ad","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"group control","order":25,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-rss\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"GROUP\",\n \"function\": \"setup\",\n \"group\": {\n \"show\": [\n \"Bose_Soundtouch_Group\"\n ],\n \"focus\": \"true\"\n }\n }\n]\n})'></md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":1240,"wires":[["66b04d57.7c15b4"]]},{"id":"90588a9d.4dcbe8","type":"ui_template","z":"f44878c2.dd3d58","group":"b6492d1d.e439","name":"+ group","order":2,"width":"1","height":"1","format":"<md-button ng-disabled=\"msg.payload\" class=\"metal linear black-text fa fa-plus\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"GROUP\",\n \"function\": \"add\",\n }\n]\n})'></md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":1360,"wires":[["66b04d57.7c15b4"]]},{"id":"f9e8cb2.0104c38","type":"ui_template","z":"f44878c2.dd3d58","group":"b6492d1d.e439","name":"- group","order":3,"width":"1","height":"1","format":"<md-button ng-disabled=\"msg.payload\" class=\"metal linear black-text fa fa-minus\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"GROUP\",\n \"function\": \"remove\"\n }\n]\n})'></md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":1400,"wires":[["66b04d57.7c15b4"]]},{"id":"d8f2288e.8fd058","type":"ui_template","z":"f44878c2.dd3d58","group":"b6492d1d.e439","name":"cancel group","order":4,"width":"2","height":"1","format":"<md-button class=\"metal linear wide black-text\" ng-click='send({\npayload: [\n {\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Group\"\n ]\n }\n }\n]\n})'>Cancel</md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":1280,"wires":[["66b04d57.7c15b4"]]},{"id":"1195958e.e11eca","type":"ui_template","z":"f44878c2.dd3d58","group":"5609d593.d13b1c","name":"shuffle on","order":1,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-toggle-on\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"SHUFFLE_ON\",\n \"notification\": \"Shuffle on\",\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Shuffle\"\n ]\n }\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":920,"wires":[["66b04d57.7c15b4"]]},{"id":"71127d71.7a3704","type":"ui_template","z":"f44878c2.dd3d58","group":"5609d593.d13b1c","name":"shuffle off","order":2,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-toggle-off\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"SHUFFLE_OFF\",\n \"notification\": \"Shuffle off\",\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Shuffle\"\n ]\n }\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":960,"wires":[["66b04d57.7c15b4"]]},{"id":"cbe30156.fdd0e","type":"ui_template","z":"f44878c2.dd3d58","group":"75b50a15.6a3584","name":"repeat one","order":1,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text \" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"REPEAT_ONE\",\n \"notification\": \"Repeat one\",\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Repeat\"\n ]\n }\n }\n]\n})'>1</md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":1080,"wires":[["66b04d57.7c15b4"]]},{"id":"8a96765.a7e2a88","type":"ui_template","z":"f44878c2.dd3d58","group":"75b50a15.6a3584","name":"repeat all","order":2,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-toggle-on\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"REPEAT_ALL\",\n \"notification\": \"Repeat all\",\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Repeat\"\n ]\n }\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":1120,"wires":[["66b04d57.7c15b4"]]},{"id":"2bfd91d2.432eee","type":"ui_template","z":"f44878c2.dd3d58","group":"75b50a15.6a3584","name":"repeat off","order":3,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-toggle-off\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"REPEAT_OFF\",\n \"notification\": \"Repeat off\",\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Repeat\"\n ]\n }\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":340,"y":1160,"wires":[["66b04d57.7c15b4"]]},{"id":"38e08038.2fedc","type":"ui_template","z":"f44878c2.dd3d58","group":"5609d593.d13b1c","name":"cancel shuffle","order":3,"width":"2","height":"1","format":"<md-button class=\"metal linear wide black-text\" ng-click='send({\npayload: [\n {\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Shuffle\"\n ]\n }\n }\n]\n})'>Cancel</md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":360,"y":1000,"wires":[["66b04d57.7c15b4"]]},{"id":"464e60ab.60a33","type":"ui_template","z":"f44878c2.dd3d58","group":"75b50a15.6a3584","name":"cancel repeat","order":4,"width":"2","height":"1","format":"<md-button class=\"metal linear wide black-text\" ng-click='send({\npayload: [\n {\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Repeat\"\n ]\n }\n }\n]\n})'>Cancel</md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":360,"y":1200,"wires":[["66b04d57.7c15b4"]]},{"id":"8c3baed.d206a5","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"power","order":19,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-power-off\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"press\",\n \"key\": \"POWER\"\n },\n {\n \"name\": \"select\",\n \"method\": \"POST\",\n \"function\": \"key\",\n \"keyState\": \"release\",\n \"key\": \"POWER\",\n \"notification\": \"Power off\"\n }\n]\n})'></md-button> \n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":330,"y":440,"wires":[["66b04d57.7c15b4"]]},{"id":"caad1708.7726f8","type":"ui_template","z":"f44878c2.dd3d58","group":"b6492d1d.e439","name":"save group","order":5,"width":"2","height":"1","format":"<md-button class=\"metal linear wide black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"GROUP\",\n \"function\": \"save\",\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Group\"\n ]\n }\n }\n]\n})'>Save</md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":1320,"wires":[["66b04d57.7c15b4"]]},{"id":"76091969.59a1f8","type":"ui_template","z":"f44878c2.dd3d58","group":"68d1b9a.924e348","name":"volume presets","order":24,"width":"1","height":"1","format":"<md-button class=\"metal linear black-text fa fa-sliders\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"VOLUME\",\n \"function\": \"setup\",\n \"group\": {\n \"show\": [\n \"Bose_Soundtouch_Volume_presets\"\n ],\n \"focus\": \"true\"\n }\n }\n]\n})'></md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":360,"y":1440,"wires":[["66b04d57.7c15b4"]]},{"id":"188a4749.43a479","type":"ui_template","z":"f44878c2.dd3d58","group":"29d31533.0524da","name":"cancel volume","order":6,"width":"2","height":"1","format":"<md-button class=\"metal linear wide black-text\" ng-click='send({\npayload: [\n {\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Volume_presets\"\n ]\n }\n }\n]\n})'>Cancel</md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":360,"y":1480,"wires":[["66b04d57.7c15b4"]]},{"id":"3e407aa2.47e706","type":"ui_template","z":"f44878c2.dd3d58","group":"29d31533.0524da","name":"save volume","order":7,"width":"2","height":"1","format":"<md-button class=\"metal linear wide black-text\" ng-click='send({\npayload: [\n {\n \"name\": \"select\",\n \"method\": \"VOLUME\",\n \"function\": \"save\",\n \"group\": {\n \"hide\": [\n \"Bose_Soundtouch_Volume_presets\"\n ]\n }\n }\n]\n})'>Save</md-button>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":350,"y":1520,"wires":[["66b04d57.7c15b4"]]},{"id":"b106241c.6e7a38","type":"http in","z":"f44878c2.dd3d58","g":"56c98625e234e365","name":"","url":"/now_playing","method":"get","upload":false,"swaggerDoc":"","x":1330,"y":280,"wires":[["fc3c9f5c.4b2c3"]]},{"id":"fc3c9f5c.4b2c3","type":"function","z":"f44878c2.dd3d58","g":"56c98625e234e365","name":"now playing","func":"msg.payload =\n[\n {\n \"name\": \"select\",\n \"method\": \"GET\",\n \"function\": \"now_playing\"\n }\n];\n\nreturn msg;","outputs":1,"noerr":0,"x":1530,"y":280,"wires":[["96a878d8.a150e8"]]},{"id":"96a878d8.a150e8","type":"link out","z":"f44878c2.dd3d58","g":"56c98625e234e365","name":"bose function","links":["f4cb94b5.ee5c38"],"x":1710,"y":280,"wires":[],"l":true},{"id":"b62cfae4.5cad08","type":"comment","z":"f44878c2.dd3d58","g":"56c98625e234e365","name":"now_playing request","info":"","x":1330,"y":240,"wires":[]},{"id":"a305dec2.8c528","type":"link out","z":"f44878c2.dd3d58","name":"bose link 2","links":["c901851d.c94ce8"],"x":2490,"y":780,"wires":[],"l":true},{"id":"a0a940a5a94b9c4e","type":"inject","z":"f44878c2.dd3d58","g":"b4767609b96a905e","name":"play preset 1 in living room","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"name\":\"Living room\",\"method\":\"POST\",\"function\":\"volume\",\"option\":\"set\",\"volume\":\"5\"},{\"name\":\"Living room\",\"method\":\"POST\",\"function\":\"key\",\"keyState\":\"release\",\"key\":\"PRESET_1\"},{\"name\":\"Living room\",\"method\":\"POST\",\"function\":\"key\",\"keyState\":\"press\",\"key\":\"PLAY\"},{\"name\":\"Living room\",\"method\":\"POST\",\"function\":\"key\",\"key\":\"SHUFFLE_ON\",\"keyState\":\"press\",\"delay\":\"15000\"}]","payloadType":"json","x":710,"y":280,"wires":[["c29cf03493172c2d"]]},{"id":"c29cf03493172c2d","type":"link out","z":"f44878c2.dd3d58","g":"b4767609b96a905e","name":"","mode":"link","links":["f4cb94b5.ee5c38"],"x":925,"y":300,"wires":[]},{"id":"e71dfc897210fe02","type":"comment","z":"f44878c2.dd3d58","g":"b4767609b96a905e","name":"bose function inject nodes","info":"","x":690,"y":240,"wires":[]},{"id":"1f65e20a30aec847","type":"inject","z":"f44878c2.dd3d58","g":"b4767609b96a905e","name":"power off living room","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"name\":\"Living room\",\"method\":\"POST\",\"function\":\"key\",\"keyState\":\"press\",\"key\":\"POWER\"},{\"name\":\"Living room\",\"method\":\"POST\",\"function\":\"key\",\"keyState\":\"release\",\"key\":\"POWER\",\"notification\":\"Power off\"}]","payloadType":"json","x":690,"y":340,"wires":[["c29cf03493172c2d"]]},{"id":"68d1b9a.924e348","type":"ui_group","name":"Soundtouch","tab":"a5aa690c.87a428","order":1,"disp":true,"width":"5","collapse":false},{"id":"b6492d1d.e439","type":"ui_group","name":"Group","tab":"a5aa690c.87a428","order":2,"disp":true,"width":"6","collapse":false},{"id":"29d31533.0524da","type":"ui_group","name":"Volume presets","tab":"a5aa690c.87a428","order":3,"disp":true,"width":"6","collapse":false},{"id":"5609d593.d13b1c","type":"ui_group","name":"Shuffle","tab":"a5aa690c.87a428","order":4,"disp":true,"width":"6","collapse":false},{"id":"75b50a15.6a3584","type":"ui_group","name":"Repeat","tab":"a5aa690c.87a428","order":5,"disp":true,"width":"6","collapse":false},{"id":"a5aa690c.87a428","type":"ui_tab","name":"Bose Soundtouch","icon":"fa-music","disabled":false,"hidden":false}] |
Thank you so much for all the work and sharing! After manual installing some missing nodes, the imported flow works like a charm! The UI is very handy too