I’m not sure if this is the best place to ask, but I’d like to know if anyone else is experiencing this issue.
Whenever I try to start a Spotify playlist on one of my Sonos speakers via Home Assistant (version 2024.11.3) (via the Spotify and Sonos Integrations), I get this error:
Failed to perform the action media_player/play_media. Error calling SonosMediaPlayerEntity._play_media on media_player.kantoor: UPnP Error 800 received: from 192.168.100.21
I’m not sure how long this has been happening, since I normally don’t start playback through Home Assistant. However, since yesterday (after an update), I’ve also been unable to add Spotify songs to my queue or play them using the Sonos app on my MacBook.
At first, I didn’t think much of it—especially since I can still play Spotify on my Sonos speakers using the Spotify app. But I noticed that my fireworks automation (used for training the dog) also stopped working yesterday. It uses the “node-red-contrib-sonos-plus” in Node-RED and now shows this error:
[error] [sonos-universal:Set Playlist] group.queue.urispotify:Sonos error on AddURIToQueue UPnPError 800 (Command not supported or not a coordinator) :: Details: {"stack":"SonosError: Sonos error on AddURIToQueue UPnPError 800 (Command not supported or not a coordinator) at AVTransportService.handleErrorResponse (/usr/src/node-red/node_modules/@svrooij/sonos/lib/services/base-service.js:227:23) at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async AVTransportService.handleRequestAndParseResponse (/usr/src/node-red/node_modules/@svrooij/sonos/lib/services/base-service.js:199:15) at async SonosDevice.AddUriToQueue (/usr/src/node-red/node_modules/@svrooij/sonos/lib/sonos-device.js:95:16) at async Object.groupQueueUriFromSpotify [as group.queue.urispotify] (/usr/src/node-red/node_modules/node-red-contrib-sonos-plus/src/sonos-universal.js:1854:20)","message":"Sonos error on AddURIToQueue UPnPError 800 (Command not supported or not a coordinator)","Action":"AddURIToQueue","FaultCode":"s:Client","Fault":"UPnPError","UpnpErrorCode":800,"UpnpErrorDescription":"Command not supported or not a coordinator","name":"SonosError"}
This automation had been working since November 1st, so I suspect something changed with the latest Sonos firmware update. I’ve tested it on different Sonos devices (Beam, One SL, SYMFONISK) and nothing seems to work anymore.
Here’s the Node-RED flow for reference:
[
{
"id": "81f11246ff9059e3",
"type": "group",
"z": "8530f6c17dac3cfc",
"style": {
"stroke": "#999999",
"stroke-opacity": "1",
"fill": "none",
"fill-opacity": "1",
"label": true,
"label-position": "nw",
"color": "#a4a4a4"
},
"nodes": [
"594a50e3deba3604",
"0e1121bc96c3c7cc",
"c04bafefbe86afcf",
"76a3e3c223b4da62",
"e00354c9057fef1e",
"02e40c20a1fc471c",
"325b3e0c576f34bf",
"e84a51ea47410cf2",
"c14172eca8e5272c",
"ec5dec25ad72a2ed",
"6d88b0728701cdc7",
"f60e64767173b8be",
"5a7aa06fe04cb180",
"d2ef06a1012c2ed4",
"e644a38e50c0fa6a",
"6a48e6dc2a91d105",
"09e4c5aff5f24615",
"3b9caccdced98b92",
"7d88ea548862785e",
"f422be3a09843ebf",
"7ec2a9796a068e80"
],
"x": 134,
"y": 2039,
"w": 852,
"h": 582
},
{
"id": "594a50e3deba3604",
"type": "inject",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Start",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 230,
"y": 2120,
"wires": [
[
"0e1121bc96c3c7cc"
]
]
},
{
"id": "0e1121bc96c3c7cc",
"type": "function",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Get day's volume",
"func": "flow.set(\"playing\", true);\n\nlet now = new Date();\n\nlet month = now.getMonth();\nlet day = now.getDate();\nlet hour = now.getHours();\n\nif (month !== 10 && month !== 11) {\n node.warn(\"This function only runs in November or December.\");\n return null;\n}\n\nlet dayInRange;\nif (month === 10) {\n dayInRange = day;\n} else if (month === 11) {\n dayInRange = 30 + day;\n}\n\nlet minVolume = 20;\nlet maxVolume = 50;\nlet growthFactor = 2;\n\nlet volume = minVolume + (maxVolume - minVolume) * Math.pow(dayInRange / 61, growthFactor);\n\nif (hour >= 20 || hour < 8) {\n volume = volume / 4;\n}\n\nvolume = Math.round(volume);\n\nmsg.data = {\n day: day,\n month: month === 10 ? \"November\" : \"December\",\n daysTillNewYear: 61 - dayInRange,\n volume: Math.round(volume)\n};\n\nmsg.playerName = \"Eetkamer\"\nmsg.volume = Math.round(volume)\nmsg.sameVolume = true\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 430,
"y": 2140,
"wires": [
[
"76a3e3c223b4da62"
]
]
},
{
"id": "c04bafefbe86afcf",
"type": "chronos-scheduler",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "",
"config": "84c9c58e01fdd414",
"schedule": [
{
"trigger": {
"type": "sun",
"value": "solarNoon",
"offset": -15,
"random": false
},
"output": {
"type": "msg",
"property": {
"name": "payload",
"type": "str",
"value": ""
}
}
}
],
"disabled": false,
"multiPort": false,
"nextEventPort": false,
"delayOnStart": true,
"onStartDelay": 0.1,
"outputs": 1,
"x": 220,
"y": 2160,
"wires": [
[
"0e1121bc96c3c7cc"
]
]
},
{
"id": "76a3e3c223b4da62",
"type": "sonos-universal",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"confignode": "23f1eb745ba43647",
"command": "player.become.standalone",
"state": "",
"stateType": "str",
"avoidCheckPlayerAvailability": false,
"name": "Leave group",
"x": 650,
"y": 2140,
"wires": [
[
"e00354c9057fef1e"
]
]
},
{
"id": "e00354c9057fef1e",
"type": "switch",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Day's till New Year",
"property": "data.daysTillNewYear",
"propertyType": "msg",
"rules": [
{
"t": "lte",
"v": "7",
"vt": "num"
},
{
"t": "lte",
"v": "15",
"vt": "num"
},
{
"t": "else"
}
],
"checkall": "false",
"repair": false,
"outputs": 3,
"x": 270,
"y": 2280,
"wires": [
[
"7d88ea548862785e"
],
[
"02e40c20a1fc471c"
],
[
"325b3e0c576f34bf"
]
]
},
{
"id": "02e40c20a1fc471c",
"type": "function",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Let Draagbaar join Eetkamer",
"func": "msg.payload = \"Draagbaar\"\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 560,
"y": 2320,
"wires": [
[
"e84a51ea47410cf2"
]
]
},
{
"id": "325b3e0c576f34bf",
"type": "sonos-universal",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"confignode": "23f1eb745ba43647",
"command": "group.clear.queue",
"state": "",
"stateType": "str",
"avoidCheckPlayerAvailability": false,
"name": "Clear queue",
"x": 250,
"y": 2400,
"wires": [
[
"c14172eca8e5272c"
]
]
},
{
"id": "e84a51ea47410cf2",
"type": "sonos-universal",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"confignode": "23f1eb745ba43647",
"command": "player.join.group",
"state": "",
"stateType": "str",
"avoidCheckPlayerAvailability": false,
"name": "Join speaker",
"x": 810,
"y": 2320,
"wires": [
[
"325b3e0c576f34bf"
]
]
},
{
"id": "c14172eca8e5272c",
"type": "sonos-universal",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"confignode": "23f1eb745ba43647",
"command": "group.queue.urispotify",
"state": "spotify:playlist:57Eqjb6w4BrYBu1QChuMAT",
"stateType": "str",
"avoidCheckPlayerAvailability": false,
"name": "Set Playlist",
"x": 450,
"y": 2400,
"wires": [
[
"ec5dec25ad72a2ed",
"7ec2a9796a068e80"
]
]
},
{
"id": "ec5dec25ad72a2ed",
"type": "sonos-universal",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"confignode": "23f1eb745ba43647",
"command": "group.set.queuemode",
"state": "SHUFFLE_NOREPEAT",
"stateType": "str",
"avoidCheckPlayerAvailability": false,
"name": "Set queue mode",
"x": 670,
"y": 2400,
"wires": [
[
"6d88b0728701cdc7"
]
]
},
{
"id": "6d88b0728701cdc7",
"type": "sonos-universal",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"confignode": "23f1eb745ba43647",
"command": "group.play.queue",
"state": "",
"stateType": "str",
"avoidCheckPlayerAvailability": false,
"name": "Play queue",
"x": 890,
"y": 2400,
"wires": [
[
"f60e64767173b8be",
"5a7aa06fe04cb180"
]
]
},
{
"id": "f60e64767173b8be",
"type": "delay",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Wait ~10 minutes",
"pauseType": "random",
"timeout": "10",
"timeoutUnits": "minutes",
"rate": "1",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "7",
"randomLast": "13",
"randomUnits": "minutes",
"drop": false,
"allowrate": false,
"outputs": 1,
"x": 310,
"y": 2500,
"wires": [
[
"d2ef06a1012c2ed4"
]
]
},
{
"id": "5a7aa06fe04cb180",
"type": "sonos-universal",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"confignode": "23f1eb745ba43647",
"command": "group.get.members",
"state": "",
"stateType": "str",
"avoidCheckPlayerAvailability": false,
"name": "Get speakers",
"x": 570,
"y": 2500,
"wires": [
[
"e644a38e50c0fa6a"
]
]
},
{
"id": "d2ef06a1012c2ed4",
"type": "function",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Remove playing context",
"func": "if (!flow.get('playing')) {\n node.warn(\"Playback already stopped. Ignoring stop command.\");\n return null;\n}\n\nflow.set('playing', false);\n\nnode.warn(\"Stopping playing\");\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 310,
"y": 2580,
"wires": [
[
"6a48e6dc2a91d105"
]
]
},
{
"id": "e644a38e50c0fa6a",
"type": "function",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Get player names",
"func": "let payload = msg.payload;\n\nlet playerNames = payload.map(item => item.playerName).join('/');\n\nmsg.payload = playerNames;\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 790,
"y": 2500,
"wires": [
[
"09e4c5aff5f24615"
]
]
},
{
"id": "6a48e6dc2a91d105",
"type": "sonos-universal",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"confignode": "23f1eb745ba43647",
"command": "group.pause",
"state": "",
"stateType": "str",
"avoidCheckPlayerAvailability": false,
"name": "Stop playing queue",
"x": 570,
"y": 2580,
"wires": [
[]
]
},
{
"id": "09e4c5aff5f24615",
"type": "api-call-service",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Notify fireworks",
"server": "fb1efe7bdab8eadc",
"version": 7,
"debugenabled": false,
"action": "notify.notify",
"floorId": [],
"areaId": [],
"deviceId": [],
"entityId": [],
"labelId": [],
"data": "{\t \"title\": \"Vuurwerk\",\t \"message\": \"Vuurwerk training gestart op volume \" & msg.volume & \" via de speaker(s) \" & msg.payload\t}",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"blockInputOverrides": false,
"domain": "notify",
"service": "notify",
"x": 800,
"y": 2580,
"wires": [
[]
]
},
{
"id": "3b9caccdced98b92",
"type": "comment",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Play fireworks in November and December",
"info": "",
"x": 320,
"y": 2080,
"wires": []
},
{
"id": "7d88ea548862785e",
"type": "function",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "Let Hobby join Eetkamer",
"func": "msg.payload = \"Hobby\"\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 550,
"y": 2240,
"wires": [
[
"f422be3a09843ebf"
]
]
},
{
"id": "f422be3a09843ebf",
"type": "sonos-universal",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"confignode": "23f1eb745ba43647",
"command": "player.join.group",
"state": "",
"stateType": "str",
"avoidCheckPlayerAvailability": false,
"name": "Join speaker",
"x": 810,
"y": 2240,
"wires": [
[
"02e40c20a1fc471c"
]
]
},
{
"id": "7ec2a9796a068e80",
"type": "debug",
"z": "8530f6c17dac3cfc",
"g": "81f11246ff9059e3",
"name": "debug 10",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 640,
"y": 2440,
"wires": []
},
{
"id": "84c9c58e01fdd414",
"type": "chronos-config",
"name": "Chronos Config",
"latitudeType": "num",
"longitudeType": "num",
"timezone": "",
"sunPositions": []
},
{
"id": "23f1eb745ba43647",
"type": "sonos-config",
"name": "Eetkamer",
"serialnum": "",
"ipaddress": "192.168.100.31"
},
{
"id": "fb1efe7bdab8eadc",
"type": "server",
"name": "Home Assistant",
"version": 5,
"addon": false,
"rejectUnauthorizedCerts": true,
"ha_boolean": "y|yes|true|on|home|open",
"connectionDelay": true,
"cacheJson": true,
"heartbeat": false,
"heartbeatInterval": "30",
"areaSelector": "friendlyName",
"deviceSelector": "friendlyName",
"entitySelector": "friendlyName",
"statusSeparator": ": ",
"statusYear": "hidden",
"statusMonth": "short",
"statusDay": "numeric",
"statusHourCycle": "default",
"statusTimeFormat": "h:m",
"enableGlobalContextStore": false
}
]