diff --git a/homeassistant/components/sonos/__init__.py b/homeassistant/components/sonos/__init__.py index 8320d7f681a..32ae234434e 100644 --- a/homeassistant/components/sonos/__init__.py +++ b/homeassistant/components/sonos/__init__.py @@ -266,19 +266,27 @@ class SonosDiscoveryManager: self.hass, f"{SONOS_SPEAKER_ACTIVITY}-{uid}", "discovery" ) - async def _async_ssdp_discovered_player(self, info, change): + async def _async_ssdp_discovered_player( + self, info: ssdp.SsdpServiceInfo, change: ssdp.SsdpChange + ) -> None: if change == ssdp.SsdpChange.BYEBYE: return - uid = info.get(ssdp.ATTR_UPNP_UDN) + uid = info.upnp[ssdp.ATTR_UPNP_UDN] if not uid.startswith("uuid:RINCON_"): return uid = uid[5:] - discovered_ip = urlparse(info[ssdp.ATTR_SSDP_LOCATION]).hostname - boot_seqnum = info.get("X-RINCON-BOOTSEQ") + discovered_ip = urlparse(info.ssdp_location).hostname + boot_seqnum = info.ssdp_headers.get("X-RINCON-BOOTSEQ") self.async_discovered_player( - "SSDP", info, discovered_ip, uid, boot_seqnum, info.get("modelName"), None + "SSDP", + info, + discovered_ip, + uid, + boot_seqnum, + info.upnp.get(ssdp.ATTR_UPNP_MODEL_NAME), + None, ) @callback diff --git a/tests/components/sonos/conftest.py b/tests/components/sonos/conftest.py index cb31604081f..8a55d285a41 100644 --- a/tests/components/sonos/conftest.py +++ b/tests/components/sonos/conftest.py @@ -94,10 +94,14 @@ def discover_fixture(soco): async def do_callback(hass, callback, *args, **kwargs): await callback( - { - ssdp.ATTR_UPNP_UDN: f"uuid:{soco.uid}", - ssdp.ATTR_SSDP_LOCATION: f"http://{soco.ip_address}/", - }, + ssdp.SsdpServiceInfo( + ssdp_location=f"http://{soco.ip_address}/", + ssdp_st="urn:schemas-upnp-org:device:ZonePlayer:1", + ssdp_usn=f"uuid:{soco.uid}_MR::urn:schemas-upnp-org:service:GroupRenderingControl:1", + upnp={ + ssdp.ATTR_UPNP_UDN: f"uuid:{soco.uid}", + }, + ), ssdp.SsdpChange.ALIVE, ) return MagicMock()