From 3ad4c26f982deb7d4fe7bf1855bcc7e2defc546b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 10 Mar 2021 10:21:51 -0800 Subject: [PATCH] Allow SSDP discovery modern Hue hubs (#47725) --- homeassistant/components/hue/config_flow.py | 7 +++++-- tests/components/hue/test_config_flow.py | 17 +++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/hue/config_flow.py b/homeassistant/components/hue/config_flow.py index 580b69251c2..2c3a90318b7 100644 --- a/homeassistant/components/hue/config_flow.py +++ b/homeassistant/components/hue/config_flow.py @@ -25,7 +25,7 @@ from .const import ( # pylint: disable=unused-import ) from .errors import AuthenticationRequired, CannotConnect -HUE_MANUFACTURERURL = "http://www.philips.com" +HUE_MANUFACTURERURL = ("http://www.philips.com", "http://www.philips-hue.com") HUE_IGNORED_BRIDGE_NAMES = ["Home Assistant Bridge", "Espalexa"] HUE_MANUAL_BRIDGE_ID = "manual" @@ -179,7 +179,10 @@ class HueFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): host is already configured and delegate to the import step if not. """ # Filter out non-Hue bridges #1 - if discovery_info.get(ssdp.ATTR_UPNP_MANUFACTURER_URL) != HUE_MANUFACTURERURL: + if ( + discovery_info.get(ssdp.ATTR_UPNP_MANUFACTURER_URL) + not in HUE_MANUFACTURERURL + ): return self.async_abort(reason="not_hue_bridge") # Filter out non-Hue bridges #2 diff --git a/tests/components/hue/test_config_flow.py b/tests/components/hue/test_config_flow.py index 57f4bd7fbca..9ba34f23bf4 100644 --- a/tests/components/hue/test_config_flow.py +++ b/tests/components/hue/test_config_flow.py @@ -375,14 +375,15 @@ async def test_flow_link_unknown_host(hass): assert result["reason"] == "cannot_connect" -async def test_bridge_ssdp(hass): +@pytest.mark.parametrize("mf_url", config_flow.HUE_MANUFACTURERURL) +async def test_bridge_ssdp(hass, mf_url): """Test a bridge being discovered.""" result = await hass.config_entries.flow.async_init( const.DOMAIN, context={"source": "ssdp"}, data={ ssdp.ATTR_SSDP_LOCATION: "http://0.0.0.0/", - ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL, + ssdp.ATTR_UPNP_MANUFACTURER_URL: mf_url, ssdp.ATTR_UPNP_SERIAL: "1234", }, ) @@ -411,7 +412,7 @@ async def test_bridge_ssdp_emulated_hue(hass): data={ ssdp.ATTR_SSDP_LOCATION: "http://0.0.0.0/", ssdp.ATTR_UPNP_FRIENDLY_NAME: "Home Assistant Bridge", - ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL, + ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL[0], ssdp.ATTR_UPNP_SERIAL: "1234", }, ) @@ -426,7 +427,7 @@ async def test_bridge_ssdp_missing_location(hass): const.DOMAIN, context={"source": "ssdp"}, data={ - ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL, + ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL[0], ssdp.ATTR_UPNP_SERIAL: "1234", }, ) @@ -442,7 +443,7 @@ async def test_bridge_ssdp_missing_serial(hass): context={"source": "ssdp"}, data={ ssdp.ATTR_SSDP_LOCATION: "http://0.0.0.0/", - ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL, + ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL[0], }, ) @@ -458,7 +459,7 @@ async def test_bridge_ssdp_espalexa(hass): data={ ssdp.ATTR_SSDP_LOCATION: "http://0.0.0.0/", ssdp.ATTR_UPNP_FRIENDLY_NAME: "Espalexa (0.0.0.0)", - ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL, + ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL[0], ssdp.ATTR_UPNP_SERIAL: "1234", }, ) @@ -478,7 +479,7 @@ async def test_bridge_ssdp_already_configured(hass): context={"source": "ssdp"}, data={ ssdp.ATTR_SSDP_LOCATION: "http://0.0.0.0/", - ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL, + ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL[0], ssdp.ATTR_UPNP_SERIAL: "1234", }, ) @@ -617,7 +618,7 @@ async def test_ssdp_discovery_update_configuration(hass): context={"source": "ssdp"}, data={ ssdp.ATTR_SSDP_LOCATION: "http://1.1.1.1/", - ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL, + ssdp.ATTR_UPNP_MANUFACTURER_URL: config_flow.HUE_MANUFACTURERURL[0], ssdp.ATTR_UPNP_SERIAL: "aabbccddeeff", }, )