From c1cf3679aa6ad1e205d0d61d27e3326a811037a8 Mon Sep 17 00:00:00 2001 From: Fredrik Erlandsson Date: Fri, 12 Jun 2020 17:25:18 +0200 Subject: [PATCH] Fix Daikin discovery (#36704) --- homeassistant/components/daikin/__init__.py | 2 ++ .../components/daikin/config_flow.py | 6 ++++-- homeassistant/components/daikin/const.py | 1 - homeassistant/components/daikin/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/daikin/test_config_flow.py | 19 +++++++++++++++---- 7 files changed, 24 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/daikin/__init__.py b/homeassistant/components/daikin/__init__.py index 35ea9ff6f35a..49a939b8c72f 100644 --- a/homeassistant/components/daikin/__init__.py +++ b/homeassistant/components/daikin/__init__.py @@ -72,6 +72,8 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry): # For backwards compat, set unique ID if entry.unique_id is None: hass.config_entries.async_update_entry(entry, unique_id=conf[KEY_MAC]) + elif ".local" in entry.unique_id: + hass.config_entries.async_update_entry(entry, unique_id=conf[KEY_MAC]) daikin_api = await daikin_api_setup( hass, conf[CONF_HOST], diff --git a/homeassistant/components/daikin/config_flow.py b/homeassistant/components/daikin/config_flow.py index 9d236610361d..67411bfdff00 100644 --- a/homeassistant/components/daikin/config_flow.py +++ b/homeassistant/components/daikin/config_flow.py @@ -6,12 +6,13 @@ from uuid import uuid4 from aiohttp import ClientError, web_exceptions from async_timeout import timeout from pydaikin.daikin_base import Appliance +from pydaikin.discovery import Discovery import voluptuous as vol from homeassistant import config_entries from homeassistant.const import CONF_HOST, CONF_PASSWORD -from .const import CONF_KEY, CONF_UUID, KEY_HOSTNAME, KEY_IP, KEY_MAC, TIMEOUT +from .const import CONF_KEY, CONF_UUID, KEY_IP, KEY_MAC, TIMEOUT _LOGGER = logging.getLogger(__name__) @@ -128,7 +129,8 @@ class FlowHandler(config_entries.ConfigFlow): 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[KEY_HOSTNAME]) + devices = Discovery.poll(discovery_info[CONF_HOST]) + await self.async_set_unique_id(next(iter(devices.values()))[KEY_MAC]) self._abort_if_unique_id_configured() self.host = discovery_info[CONF_HOST] return await self.async_step_user() diff --git a/homeassistant/components/daikin/const.py b/homeassistant/components/daikin/const.py index 3e24325e5b1e..30d34b898d37 100644 --- a/homeassistant/components/daikin/const.py +++ b/homeassistant/components/daikin/const.py @@ -64,6 +64,5 @@ CONF_UUID = "uuid" KEY_MAC = "mac" KEY_IP = "ip" -KEY_HOSTNAME = "hostname" TIMEOUT = 60 diff --git a/homeassistant/components/daikin/manifest.json b/homeassistant/components/daikin/manifest.json index f555174494b3..1a180aa5ab60 100644 --- a/homeassistant/components/daikin/manifest.json +++ b/homeassistant/components/daikin/manifest.json @@ -3,7 +3,7 @@ "name": "Daikin AC", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/daikin", - "requirements": ["pydaikin==2.1.1"], + "requirements": ["pydaikin==2.1.2"], "codeowners": ["@fredrike"], "zeroconf": ["_dkapi._tcp.local."], "quality_scale": "platinum" diff --git a/requirements_all.txt b/requirements_all.txt index 57ac50fa0e51..b92941877be6 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1269,7 +1269,7 @@ pycsspeechtts==1.0.3 # pycups==1.9.73 # homeassistant.components.daikin -pydaikin==2.1.1 +pydaikin==2.1.2 # homeassistant.components.danfoss_air pydanfossair==0.1.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 4950e9b2af16..2f494c40c768 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -551,7 +551,7 @@ pycoolmasternet==0.0.4 pycountry==19.8.18 # homeassistant.components.daikin -pydaikin==2.1.1 +pydaikin==2.1.2 # homeassistant.components.deconz pydeconz==71 diff --git a/tests/components/daikin/test_config_flow.py b/tests/components/daikin/test_config_flow.py index 8d7c99b795e5..9702e5ad2c7c 100644 --- a/tests/components/daikin/test_config_flow.py +++ b/tests/components/daikin/test_config_flow.py @@ -6,7 +6,7 @@ from aiohttp import ClientError from aiohttp.web_exceptions import HTTPForbidden import pytest -from homeassistant.components.daikin.const import KEY_HOSTNAME, KEY_IP, KEY_MAC +from homeassistant.components.daikin.const import KEY_IP, KEY_MAC from homeassistant.config_entries import ( SOURCE_DISCOVERY, SOURCE_IMPORT, @@ -25,7 +25,6 @@ from tests.common import MockConfigEntry MAC = "AABBCCDDEEFF" HOST = "127.0.0.1" -HOSTNAME = "DaikinUNIQUE.local" @pytest.fixture @@ -42,6 +41,16 @@ def mock_daikin(): yield Appliance +@pytest.fixture +def mock_daikin_discovery(): + """Mock pydaikin Discovery.""" + with patch("homeassistant.components.daikin.config_flow.Discovery") as Discovery: + Discovery.poll = PropertyMock( + return_value={"127.0.01": {"mac": "AABBCCDDEEFF", "id": "test"}} + ) + yield Discovery + + async def test_user(hass, mock_daikin): """Test user config.""" result = await hass.config_entries.flow.async_init( @@ -113,10 +122,12 @@ async def test_device_abort(hass, mock_daikin, s_effect, reason): "source, data, unique_id", [ (SOURCE_DISCOVERY, {KEY_IP: HOST, KEY_MAC: MAC}, MAC), - (SOURCE_ZEROCONF, {CONF_HOST: HOST, KEY_HOSTNAME: HOSTNAME}, HOSTNAME), + (SOURCE_ZEROCONF, {CONF_HOST: HOST}, MAC), ], ) -async def test_discovery_zeroconf(hass, mock_daikin, source, data, unique_id): +async def test_discovery_zeroconf( + hass, mock_daikin, mock_daikin_discovery, source, data, unique_id +): """Test discovery/zeroconf step.""" result = await hass.config_entries.flow.async_init( "daikin", context={"source": source}, data=data,