From e1fd14e00ac3355cc7f829278f82fb5f8324f9bd Mon Sep 17 00:00:00 2001 From: Fredrik Erlandsson Date: Fri, 29 May 2020 01:30:01 +0200 Subject: [PATCH] Add support for zeroconf for Daikin (#35769) --- homeassistant/components/daikin/config_flow.py | 8 ++++++++ homeassistant/components/daikin/manifest.json | 1 + homeassistant/generated/zeroconf.py | 3 +++ tests/components/daikin/test_config_flow.py | 15 ++++++++++++--- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/daikin/config_flow.py b/homeassistant/components/daikin/config_flow.py index cd5be5cef29..f999a5376b1 100644 --- a/homeassistant/components/daikin/config_flow.py +++ b/homeassistant/components/daikin/config_flow.py @@ -124,3 +124,11 @@ class FlowHandler(config_entries.ConfigFlow): self._abort_if_unique_id_configured() self.host = discovery_info[KEY_IP] return await self.async_step_user() + + async def async_step_zeroconf(self, discovery_info): + """Prepare configuration for a discovered Daikin device.""" + _LOGGER.debug("Zeroconf discovery_info: %s", discovery_info) + await self.async_set_unique_id(discovery_info.get(CONF_HOST)) + self._abort_if_unique_id_configured() + self.host = discovery_info.get(CONF_HOST) + return await self.async_step_user() diff --git a/homeassistant/components/daikin/manifest.json b/homeassistant/components/daikin/manifest.json index 2dbfa289808..d642b2dc820 100644 --- a/homeassistant/components/daikin/manifest.json +++ b/homeassistant/components/daikin/manifest.json @@ -5,5 +5,6 @@ "documentation": "https://www.home-assistant.io/integrations/daikin", "requirements": ["pydaikin==2.1.0"], "codeowners": ["@fredrike"], + "zeroconf": ["_dkapi._tcp.local."], "quality_scale": "platinum" } diff --git a/homeassistant/generated/zeroconf.py b/homeassistant/generated/zeroconf.py index 5982c23b3bd..ead2c0fa42d 100644 --- a/homeassistant/generated/zeroconf.py +++ b/homeassistant/generated/zeroconf.py @@ -16,6 +16,9 @@ ZEROCONF = { "_daap._tcp.local.": [ "forked_daapd" ], + "_dkapi._tcp.local.": [ + "daikin" + ], "_elg._tcp.local.": [ "elgato" ], diff --git a/tests/components/daikin/test_config_flow.py b/tests/components/daikin/test_config_flow.py index 25fc8ba26f2..989064afe6c 100644 --- a/tests/components/daikin/test_config_flow.py +++ b/tests/components/daikin/test_config_flow.py @@ -7,7 +7,12 @@ from aiohttp.web_exceptions import HTTPForbidden import pytest from homeassistant.components.daikin.const import KEY_IP, KEY_MAC -from homeassistant.config_entries import SOURCE_DISCOVERY, SOURCE_IMPORT, SOURCE_USER +from homeassistant.config_entries import ( + SOURCE_DISCOVERY, + SOURCE_IMPORT, + SOURCE_USER, + SOURCE_ZEROCONF, +) from homeassistant.const import CONF_HOST from homeassistant.data_entry_flow import ( RESULT_TYPE_ABORT, @@ -104,9 +109,13 @@ async def test_device_abort(hass, mock_daikin, s_effect, reason): @pytest.mark.parametrize( - "source, data, unique_id", [(SOURCE_DISCOVERY, {KEY_IP: HOST, KEY_MAC: MAC}, MAC)], + "source, data, unique_id", + [ + (SOURCE_DISCOVERY, {KEY_IP: HOST, KEY_MAC: MAC}, MAC), + (SOURCE_ZEROCONF, {CONF_HOST: HOST}, HOST), + ], ) -async def test_discovery(hass, mock_daikin, source, data, unique_id): +async def test_discovery_zeroconf(hass, mock_daikin, source, data, unique_id): """Test discovery/zeroconf step.""" result = await hass.config_entries.flow.async_init( "daikin", context={"source": source}, data=data,