Use ZeroconfServiceInfo in xiaomi_aqara (#60131)

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

View File

@ -6,8 +6,10 @@ import voluptuous as vol
from xiaomi_gateway import MULTICAST_PORT, XiaomiGateway, XiaomiGatewayDiscovery
from homeassistant import config_entries
from homeassistant.components import zeroconf
from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME, CONF_PORT, CONF_PROTOCOL
from homeassistant.core import callback
from homeassistant.data_entry_flow import FlowResult
from homeassistant.helpers.device_registry import format_mac
from .const import (
@ -144,11 +146,13 @@ class XiaomiAqaraFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
step_id="select", data_schema=select_schema, errors=errors
)
async def async_step_zeroconf(self, discovery_info):
async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo
) -> FlowResult:
"""Handle zeroconf discovery."""
name = discovery_info.get("name")
self.host = discovery_info.get("host")
mac_address = discovery_info.get("properties", {}).get("mac")
name = discovery_info[zeroconf.ATTR_NAME]
self.host = discovery_info[zeroconf.ATTR_HOST]
mac_address = discovery_info[zeroconf.ATTR_PROPERTIES].get("mac")
if not name or not self.host or not mac_address:
return self.async_abort(reason="not_xiaomi_aqara")

View File

@ -5,6 +5,7 @@ from unittest.mock import Mock, patch
import pytest
from homeassistant import config_entries
from homeassistant.components import zeroconf
from homeassistant.components.xiaomi_aqara import config_flow, const
from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME, CONF_PORT, CONF_PROTOCOL
@ -400,11 +401,11 @@ async def test_zeroconf_success(hass):
result = await hass.config_entries.flow.async_init(
const.DOMAIN,
context={"source": config_entries.SOURCE_ZEROCONF},
data={
CONF_HOST: TEST_HOST,
ZEROCONF_NAME: TEST_ZEROCONF_NAME,
ZEROCONF_PROP: {ZEROCONF_MAC: TEST_MAC},
},
data=zeroconf.ZeroconfServiceInfo(
host=TEST_HOST,
name=TEST_ZEROCONF_NAME,
properties={ZEROCONF_MAC: TEST_MAC},
),
)
assert result["type"] == "form"
@ -443,7 +444,9 @@ async def test_zeroconf_missing_data(hass):
result = await hass.config_entries.flow.async_init(
const.DOMAIN,
context={"source": config_entries.SOURCE_ZEROCONF},
data={CONF_HOST: TEST_HOST, ZEROCONF_NAME: TEST_ZEROCONF_NAME},
data=zeroconf.ZeroconfServiceInfo(
host=TEST_HOST, name=TEST_ZEROCONF_NAME, properties={}
),
)
assert result["type"] == "abort"
@ -455,11 +458,11 @@ async def test_zeroconf_unknown_device(hass):
result = await hass.config_entries.flow.async_init(
const.DOMAIN,
context={"source": config_entries.SOURCE_ZEROCONF},
data={
CONF_HOST: TEST_HOST,
ZEROCONF_NAME: "not-a-xiaomi-aqara-gateway",
ZEROCONF_PROP: {ZEROCONF_MAC: TEST_MAC},
},
data=zeroconf.ZeroconfServiceInfo(
host=TEST_HOST,
name="not-a-xiaomi-aqara-gateway",
properties={ZEROCONF_MAC: TEST_MAC},
),
)
assert result["type"] == "abort"