Handle routers that convert hostnames to lowercase in dhcp (#48429)

Some routers will lowercase all the hostnames. Since we
already lowercase hostnames for matching purposes, we now
pass the lowercased hostname to the integration.

Currently only roomba cared about this, and has been adjusted.
This commit is contained in:
J. Nick Koston 2021-03-27 23:23:06 -10:00 committed by GitHub
parent ce3e00d018
commit 958c4764f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 13 deletions

View file

@ -126,7 +126,11 @@ class WatcherBase:
self.hass.config_entries.flow.async_init(
entry["domain"],
context={"source": DOMAIN},
data={IP_ADDRESS: ip_address, **data},
data={
IP_ADDRESS: ip_address,
HOSTNAME: lowercase_hostname,
MAC_ADDRESS: data[MAC_ADDRESS],
},
)
)

View file

@ -80,7 +80,7 @@ class RoombaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
if self._async_host_already_configured(dhcp_discovery[IP_ADDRESS]):
return self.async_abort(reason="already_configured")
if not dhcp_discovery[HOSTNAME].startswith(("iRobot-", "Roomba-")):
if not dhcp_discovery[HOSTNAME].startswith(("irobot-", "roomba-")):
return self.async_abort(reason="not_irobot_device")
blid = _async_blid_from_hostname(dhcp_discovery[HOSTNAME])

View file

@ -376,7 +376,7 @@ async def test_device_tracker_hostname_and_macaddress_exists_before_start(hass):
"device_tracker.august_connect",
STATE_HOME,
{
ATTR_HOST_NAME: "connect",
ATTR_HOST_NAME: "Connect",
ATTR_IP: "192.168.210.56",
ATTR_SOURCE_TYPE: SOURCE_TYPE_ROUTER,
ATTR_MAC: "B8:B7:F1:6D:B5:33",
@ -423,7 +423,7 @@ async def test_device_tracker_hostname_and_macaddress_after_start(hass):
"device_tracker.august_connect",
STATE_HOME,
{
ATTR_HOST_NAME: "connect",
ATTR_HOST_NAME: "Connect",
ATTR_IP: "192.168.210.56",
ATTR_SOURCE_TYPE: SOURCE_TYPE_ROUTER,
ATTR_MAC: "B8:B7:F1:6D:B5:33",

View file

@ -19,12 +19,12 @@ DHCP_DISCOVERY_DEVICES = [
{
IP_ADDRESS: MOCK_IP,
MAC_ADDRESS: "50:14:79:DD:EE:FF",
HOSTNAME: "iRobot-blid",
HOSTNAME: "irobot-blid",
},
{
IP_ADDRESS: MOCK_IP,
MAC_ADDRESS: "80:A5:89:DD:EE:FF",
HOSTNAME: "Roomba-blid",
HOSTNAME: "roomba-blid",
},
]
@ -33,12 +33,12 @@ DHCP_DISCOVERY_DEVICES_WITHOUT_MATCHING_IP = [
{
IP_ADDRESS: "1.1.1.1",
MAC_ADDRESS: "50:14:79:DD:EE:FF",
HOSTNAME: "iRobot-blid",
HOSTNAME: "irobot-blid",
},
{
IP_ADDRESS: "1.1.1.1",
MAC_ADDRESS: "80:A5:89:DD:EE:FF",
HOSTNAME: "Roomba-blid",
HOSTNAME: "roomba-blid",
},
]
@ -58,7 +58,7 @@ def _mocked_discovery(*_):
roomba_discovery = MagicMock()
roomba = RoombaInfo(
hostname="iRobot-blid",
hostname="irobot-blid",
robot_name="robot_name",
ip=MOCK_IP,
mac="mac",
@ -751,7 +751,7 @@ async def test_dhcp_discovery_with_ignored(hass):
data={
IP_ADDRESS: "1.1.1.1",
MAC_ADDRESS: "AA:BB:CC:DD:EE:FF",
HOSTNAME: "iRobot-blid",
HOSTNAME: "irobot-blid",
},
)
await hass.async_block_till_done()
@ -775,7 +775,7 @@ async def test_dhcp_discovery_already_configured_host(hass):
data={
IP_ADDRESS: "1.1.1.1",
MAC_ADDRESS: "AA:BB:CC:DD:EE:FF",
HOSTNAME: "iRobot-blid",
HOSTNAME: "irobot-blid",
},
)
await hass.async_block_till_done()
@ -802,7 +802,7 @@ async def test_dhcp_discovery_already_configured_blid(hass):
data={
IP_ADDRESS: "1.1.1.1",
MAC_ADDRESS: "AA:BB:CC:DD:EE:FF",
HOSTNAME: "iRobot-blid",
HOSTNAME: "irobot-blid",
},
)
await hass.async_block_till_done()
@ -829,7 +829,7 @@ async def test_dhcp_discovery_not_irobot(hass):
data={
IP_ADDRESS: "1.1.1.1",
MAC_ADDRESS: "AA:BB:CC:DD:EE:FF",
HOSTNAME: "NotiRobot-blid",
HOSTNAME: "Notirobot-blid",
},
)
await hass.async_block_till_done()