Use zeroconf attributes in esphome (#58963)

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2021-11-15 20:26:50 +01:00 committed by GitHub
parent 3c42ea1a26
commit 4f7e405a2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 43 deletions

View File

@ -142,14 +142,14 @@ class EsphomeFlowHandler(ConfigFlow, domain=DOMAIN):
) -> FlowResult:
"""Handle zeroconf discovery."""
# Hostname is format: livingroom.local.
local_name = discovery_info["hostname"][:-1]
local_name = discovery_info[zeroconf.ATTR_HOSTNAME][:-1]
node_name = local_name[: -len(".local")]
address = discovery_info["properties"].get("address", local_name)
address = discovery_info[zeroconf.ATTR_PROPERTIES].get("address", local_name)
# Check if already configured
await self.async_set_unique_id(node_name)
self._abort_if_unique_id_configured(
updates={CONF_HOST: discovery_info[CONF_HOST]}
updates={CONF_HOST: discovery_info[zeroconf.ATTR_HOST]}
)
for entry in self._async_current_entries():
@ -157,7 +157,7 @@ class EsphomeFlowHandler(ConfigFlow, domain=DOMAIN):
if CONF_HOST in entry.data and entry.data[CONF_HOST] in (
address,
discovery_info[CONF_HOST],
discovery_info[zeroconf.ATTR_HOST],
):
# Is this address or IP address already configured?
already_configured = True
@ -174,14 +174,17 @@ class EsphomeFlowHandler(ConfigFlow, domain=DOMAIN):
if not entry.unique_id:
self.hass.config_entries.async_update_entry(
entry,
data={**entry.data, CONF_HOST: discovery_info[CONF_HOST]},
data={
**entry.data,
CONF_HOST: discovery_info[zeroconf.ATTR_HOST],
},
unique_id=node_name,
)
return self.async_abort(reason="already_configured")
self._host = discovery_info[CONF_HOST]
self._port = discovery_info[CONF_PORT]
self._host = discovery_info[zeroconf.ATTR_HOST]
self._port = discovery_info[zeroconf.ATTR_PORT]
self._name = node_name
return await self.async_step_discovery_confirm()

View File

@ -12,6 +12,7 @@ from aioesphomeapi import (
import pytest
from homeassistant import config_entries
from homeassistant.components import zeroconf
from homeassistant.components.esphome import CONF_NOISE_PSK, DOMAIN, DomainData
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT
from homeassistant.data_entry_flow import (
@ -215,12 +216,12 @@ async def test_discovery_initiation(hass, mock_client, mock_zeroconf):
"""Test discovery importing works."""
mock_client.device_info = AsyncMock(return_value=MockDeviceInfo(False, "test8266"))
service_info = {
"host": "192.168.43.183",
"port": 6053,
"hostname": "test8266.local.",
"properties": {},
}
service_info = zeroconf.ZeroconfServiceInfo(
host="192.168.43.183",
port=6053,
hostname="test8266.local.",
properties={},
)
flow = await hass.config_entries.flow.async_init(
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
)
@ -247,12 +248,12 @@ async def test_discovery_already_configured_hostname(hass, mock_client):
entry.add_to_hass(hass)
service_info = {
"host": "192.168.43.183",
"port": 6053,
"hostname": "test8266.local.",
"properties": {},
}
service_info = zeroconf.ZeroconfServiceInfo(
host="192.168.43.183",
port=6053,
hostname="test8266.local.",
properties={},
)
result = await hass.config_entries.flow.async_init(
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
)
@ -272,12 +273,12 @@ async def test_discovery_already_configured_ip(hass, mock_client):
entry.add_to_hass(hass)
service_info = {
"host": "192.168.43.183",
"port": 6053,
"hostname": "test8266.local.",
"properties": {"address": "192.168.43.183"},
}
service_info = zeroconf.ZeroconfServiceInfo(
host="192.168.43.183",
port=6053,
hostname="test8266.local.",
properties={"address": "192.168.43.183"},
)
result = await hass.config_entries.flow.async_init(
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
)
@ -301,12 +302,12 @@ async def test_discovery_already_configured_name(hass, mock_client):
domain_data = DomainData.get(hass)
domain_data.set_entry_data(entry, mock_entry_data)
service_info = {
"host": "192.168.43.184",
"port": 6053,
"hostname": "test8266.local.",
"properties": {"address": "test8266.local"},
}
service_info = zeroconf.ZeroconfServiceInfo(
host="192.168.43.184",
port=6053,
hostname="test8266.local.",
properties={"address": "test8266.local"},
)
result = await hass.config_entries.flow.async_init(
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
)
@ -320,12 +321,12 @@ async def test_discovery_already_configured_name(hass, mock_client):
async def test_discovery_duplicate_data(hass, mock_client):
"""Test discovery aborts if same mDNS packet arrives."""
service_info = {
"host": "192.168.43.183",
"port": 6053,
"hostname": "test8266.local.",
"properties": {"address": "test8266.local"},
}
service_info = zeroconf.ZeroconfServiceInfo(
host="192.168.43.183",
port=6053,
hostname="test8266.local.",
properties={"address": "test8266.local"},
)
mock_client.device_info = AsyncMock(return_value=MockDeviceInfo(False, "test8266"))
@ -351,12 +352,12 @@ async def test_discovery_updates_unique_id(hass, mock_client):
entry.add_to_hass(hass)
service_info = {
"host": "192.168.43.183",
"port": 6053,
"hostname": "test8266.local.",
"properties": {"address": "test8266.local"},
}
service_info = zeroconf.ZeroconfServiceInfo(
host="192.168.43.183",
port=6053,
hostname="test8266.local.",
properties={"address": "test8266.local"},
)
result = await hass.config_entries.flow.async_init(
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
)