mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 20:27:08 +00:00
Use zeroconf attributes in esphome (#58963)
Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
3c42ea1a26
commit
4f7e405a2c
@ -142,14 +142,14 @@ class EsphomeFlowHandler(ConfigFlow, domain=DOMAIN):
|
|||||||
) -> FlowResult:
|
) -> FlowResult:
|
||||||
"""Handle zeroconf discovery."""
|
"""Handle zeroconf discovery."""
|
||||||
# Hostname is format: livingroom.local.
|
# 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")]
|
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
|
# Check if already configured
|
||||||
await self.async_set_unique_id(node_name)
|
await self.async_set_unique_id(node_name)
|
||||||
self._abort_if_unique_id_configured(
|
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():
|
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 (
|
if CONF_HOST in entry.data and entry.data[CONF_HOST] in (
|
||||||
address,
|
address,
|
||||||
discovery_info[CONF_HOST],
|
discovery_info[zeroconf.ATTR_HOST],
|
||||||
):
|
):
|
||||||
# Is this address or IP address already configured?
|
# Is this address or IP address already configured?
|
||||||
already_configured = True
|
already_configured = True
|
||||||
@ -174,14 +174,17 @@ class EsphomeFlowHandler(ConfigFlow, domain=DOMAIN):
|
|||||||
if not entry.unique_id:
|
if not entry.unique_id:
|
||||||
self.hass.config_entries.async_update_entry(
|
self.hass.config_entries.async_update_entry(
|
||||||
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,
|
unique_id=node_name,
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.async_abort(reason="already_configured")
|
return self.async_abort(reason="already_configured")
|
||||||
|
|
||||||
self._host = discovery_info[CONF_HOST]
|
self._host = discovery_info[zeroconf.ATTR_HOST]
|
||||||
self._port = discovery_info[CONF_PORT]
|
self._port = discovery_info[zeroconf.ATTR_PORT]
|
||||||
self._name = node_name
|
self._name = node_name
|
||||||
|
|
||||||
return await self.async_step_discovery_confirm()
|
return await self.async_step_discovery_confirm()
|
||||||
|
@ -12,6 +12,7 @@ from aioesphomeapi import (
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
|
from homeassistant.components import zeroconf
|
||||||
from homeassistant.components.esphome import CONF_NOISE_PSK, DOMAIN, DomainData
|
from homeassistant.components.esphome import CONF_NOISE_PSK, DOMAIN, DomainData
|
||||||
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT
|
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT
|
||||||
from homeassistant.data_entry_flow import (
|
from homeassistant.data_entry_flow import (
|
||||||
@ -215,12 +216,12 @@ async def test_discovery_initiation(hass, mock_client, mock_zeroconf):
|
|||||||
"""Test discovery importing works."""
|
"""Test discovery importing works."""
|
||||||
mock_client.device_info = AsyncMock(return_value=MockDeviceInfo(False, "test8266"))
|
mock_client.device_info = AsyncMock(return_value=MockDeviceInfo(False, "test8266"))
|
||||||
|
|
||||||
service_info = {
|
service_info = zeroconf.ZeroconfServiceInfo(
|
||||||
"host": "192.168.43.183",
|
host="192.168.43.183",
|
||||||
"port": 6053,
|
port=6053,
|
||||||
"hostname": "test8266.local.",
|
hostname="test8266.local.",
|
||||||
"properties": {},
|
properties={},
|
||||||
}
|
)
|
||||||
flow = await hass.config_entries.flow.async_init(
|
flow = await hass.config_entries.flow.async_init(
|
||||||
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
|
"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)
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
service_info = {
|
service_info = zeroconf.ZeroconfServiceInfo(
|
||||||
"host": "192.168.43.183",
|
host="192.168.43.183",
|
||||||
"port": 6053,
|
port=6053,
|
||||||
"hostname": "test8266.local.",
|
hostname="test8266.local.",
|
||||||
"properties": {},
|
properties={},
|
||||||
}
|
)
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
|
"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)
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
service_info = {
|
service_info = zeroconf.ZeroconfServiceInfo(
|
||||||
"host": "192.168.43.183",
|
host="192.168.43.183",
|
||||||
"port": 6053,
|
port=6053,
|
||||||
"hostname": "test8266.local.",
|
hostname="test8266.local.",
|
||||||
"properties": {"address": "192.168.43.183"},
|
properties={"address": "192.168.43.183"},
|
||||||
}
|
)
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
|
"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 = DomainData.get(hass)
|
||||||
domain_data.set_entry_data(entry, mock_entry_data)
|
domain_data.set_entry_data(entry, mock_entry_data)
|
||||||
|
|
||||||
service_info = {
|
service_info = zeroconf.ZeroconfServiceInfo(
|
||||||
"host": "192.168.43.184",
|
host="192.168.43.184",
|
||||||
"port": 6053,
|
port=6053,
|
||||||
"hostname": "test8266.local.",
|
hostname="test8266.local.",
|
||||||
"properties": {"address": "test8266.local"},
|
properties={"address": "test8266.local"},
|
||||||
}
|
)
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
|
"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):
|
async def test_discovery_duplicate_data(hass, mock_client):
|
||||||
"""Test discovery aborts if same mDNS packet arrives."""
|
"""Test discovery aborts if same mDNS packet arrives."""
|
||||||
service_info = {
|
service_info = zeroconf.ZeroconfServiceInfo(
|
||||||
"host": "192.168.43.183",
|
host="192.168.43.183",
|
||||||
"port": 6053,
|
port=6053,
|
||||||
"hostname": "test8266.local.",
|
hostname="test8266.local.",
|
||||||
"properties": {"address": "test8266.local"},
|
properties={"address": "test8266.local"},
|
||||||
}
|
)
|
||||||
|
|
||||||
mock_client.device_info = AsyncMock(return_value=MockDeviceInfo(False, "test8266"))
|
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)
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
service_info = {
|
service_info = zeroconf.ZeroconfServiceInfo(
|
||||||
"host": "192.168.43.183",
|
host="192.168.43.183",
|
||||||
"port": 6053,
|
port=6053,
|
||||||
"hostname": "test8266.local.",
|
hostname="test8266.local.",
|
||||||
"properties": {"address": "test8266.local"},
|
properties={"address": "test8266.local"},
|
||||||
}
|
)
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
|
"esphome", context={"source": config_entries.SOURCE_ZEROCONF}, data=service_info
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user