diff --git a/homeassistant/components/esphome/__init__.py b/homeassistant/components/esphome/__init__.py index 4248366ffad..f1b22c13bf1 100644 --- a/homeassistant/components/esphome/__init__.py +++ b/homeassistant/components/esphome/__init__.py @@ -17,6 +17,7 @@ from aioesphomeapi import ( import voluptuous as vol from homeassistant import const +from homeassistant.components import zeroconf from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( CONF_HOST, @@ -66,12 +67,15 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry) -> bool port = entry.data[CONF_PORT] password = entry.data[CONF_PASSWORD] + zeroconf_instance = await zeroconf.async_get_instance(hass) + cli = APIClient( hass.loop, host, port, password, client_info=f"Home Assistant {const.__version__}", + zeroconf_instance=zeroconf_instance, ) # Store client in per-config-entry hass.data diff --git a/homeassistant/components/esphome/config_flow.py b/homeassistant/components/esphome/config_flow.py index 5c35909088d..a22256bc69d 100644 --- a/homeassistant/components/esphome/config_flow.py +++ b/homeassistant/components/esphome/config_flow.py @@ -5,6 +5,7 @@ from typing import Optional from aioesphomeapi import APIClient, APIConnectionError import voluptuous as vol +from homeassistant.components import zeroconf from homeassistant.config_entries import CONN_CLASS_LOCAL_PUSH, ConfigFlow from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_PORT from homeassistant.core import callback @@ -165,7 +166,14 @@ class EsphomeFlowHandler(ConfigFlow, domain=DOMAIN): async def fetch_device_info(self): """Fetch device info from API and return any errors.""" - cli = APIClient(self.hass.loop, self._host, self._port, "") + zeroconf_instance = await zeroconf.async_get_instance(self.hass) + cli = APIClient( + self.hass.loop, + self._host, + self._port, + "", + zeroconf_instance=zeroconf_instance, + ) try: await cli.connect() @@ -181,7 +189,14 @@ class EsphomeFlowHandler(ConfigFlow, domain=DOMAIN): async def try_login(self): """Try logging in to device and return any errors.""" - cli = APIClient(self.hass.loop, self._host, self._port, self._password) + zeroconf_instance = await zeroconf.async_get_instance(self.hass) + cli = APIClient( + self.hass.loop, + self._host, + self._port, + self._password, + zeroconf_instance=zeroconf_instance, + ) try: await cli.connect(login=True) diff --git a/homeassistant/components/esphome/manifest.json b/homeassistant/components/esphome/manifest.json index 19d00fbbff9..c57ff4a5520 100644 --- a/homeassistant/components/esphome/manifest.json +++ b/homeassistant/components/esphome/manifest.json @@ -3,7 +3,10 @@ "name": "ESPHome", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/esphome", - "requirements": ["aioesphomeapi==2.6.1"], + "requirements": ["aioesphomeapi==2.6.3"], "zeroconf": ["_esphomelib._tcp.local."], - "codeowners": ["@OttoWinter"] + "codeowners": ["@OttoWinter"], + "after_dependencies": [ + "zeroconf" + ] } diff --git a/requirements_all.txt b/requirements_all.txt index 5d5a2ef7c67..9d64d6d952e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -160,7 +160,7 @@ aiodns==2.0.0 aioeafm==0.1.2 # homeassistant.components.esphome -aioesphomeapi==2.6.1 +aioesphomeapi==2.6.3 # homeassistant.components.flo aioflo==0.4.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 67251255c40..553e84662eb 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -88,7 +88,7 @@ aiodns==2.0.0 aioeafm==0.1.2 # homeassistant.components.esphome -aioesphomeapi==2.6.1 +aioesphomeapi==2.6.3 # homeassistant.components.flo aioflo==0.4.1 diff --git a/tests/components/esphome/test_config_flow.py b/tests/components/esphome/test_config_flow.py index 4c5cb15a261..164709e86a8 100644 --- a/tests/components/esphome/test_config_flow.py +++ b/tests/components/esphome/test_config_flow.py @@ -22,11 +22,12 @@ def mock_client(): """Mock APIClient.""" with patch("homeassistant.components.esphome.config_flow.APIClient") as mock_client: - def mock_constructor(loop, host, port, password): + def mock_constructor(loop, host, port, password, zeroconf_instance=None): """Fake the client constructor.""" mock_client.host = host mock_client.port = port mock_client.password = password + mock_client.zeroconf_instance = zeroconf_instance return mock_client mock_client.side_effect = mock_constructor