mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Defer zha auto configure probe until after clicking configure (#55239)
This commit is contained in:
parent
a89057ece5
commit
d4fa625a7f
@ -36,7 +36,6 @@ class ZhaFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
"""Initialize flow instance."""
|
||||
self._device_path = None
|
||||
self._radio_type = None
|
||||
self._auto_detected_data = None
|
||||
self._title = None
|
||||
|
||||
async def async_step_user(self, user_input=None):
|
||||
@ -124,15 +123,6 @@ class ZhaFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
if flow["handler"] == "deconz":
|
||||
return self.async_abort(reason="not_zha_device")
|
||||
|
||||
# The Nortek sticks are a special case since they
|
||||
# have a Z-Wave and a Zigbee radio. We need to reject
|
||||
# the Z-Wave radio.
|
||||
if vid == "10C4" and pid == "8A2A" and "ZigBee" not in description:
|
||||
return self.async_abort(reason="not_zha_device")
|
||||
|
||||
self._auto_detected_data = await detect_radios(dev_path)
|
||||
if self._auto_detected_data is None:
|
||||
return self.async_abort(reason="not_zha_device")
|
||||
self._device_path = dev_path
|
||||
self._title = usb.human_readable_device_name(
|
||||
dev_path,
|
||||
@ -149,9 +139,15 @@ class ZhaFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
async def async_step_confirm(self, user_input=None):
|
||||
"""Confirm a discovery."""
|
||||
if user_input is not None:
|
||||
auto_detected_data = await detect_radios(self._device_path)
|
||||
if auto_detected_data is None:
|
||||
# This probably will not happen how they have
|
||||
# have very specific usb matching, but there could
|
||||
# be a problem with the device
|
||||
return self.async_abort(reason="usb_probe_failed")
|
||||
return self.async_create_entry(
|
||||
title=self._title,
|
||||
data=self._auto_detected_data,
|
||||
data=auto_detected_data,
|
||||
)
|
||||
|
||||
return self.async_show_form(
|
||||
|
@ -30,7 +30,8 @@
|
||||
},
|
||||
"abort": {
|
||||
"single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]",
|
||||
"not_zha_device": "This device is not a zha device"
|
||||
"not_zha_device": "This device is not a zha device",
|
||||
"usb_probe_failed": "Failed to probe the usb device"
|
||||
}
|
||||
},
|
||||
"config_panel": {
|
||||
|
@ -164,27 +164,17 @@ async def test_discovery_via_usb_no_radio(detect_mock, hass):
|
||||
"zha", context={"source": SOURCE_USB}, data=discovery_info
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert result["type"] == RESULT_TYPE_ABORT
|
||||
assert result["reason"] == "not_zha_device"
|
||||
assert result["type"] == RESULT_TYPE_FORM
|
||||
assert result["step_id"] == "confirm"
|
||||
|
||||
with patch("homeassistant.components.zha.async_setup_entry"):
|
||||
result2 = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"], user_input={}
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
@patch("zigpy_znp.zigbee.application.ControllerApplication.probe", return_value=True)
|
||||
async def test_discovery_via_usb_rejects_nortek_zwave(detect_mock, hass):
|
||||
"""Test usb flow -- reject the nortek zwave radio."""
|
||||
discovery_info = {
|
||||
"device": "/dev/null",
|
||||
"vid": "10C4",
|
||||
"pid": "8A2A",
|
||||
"serial_number": "612020FD",
|
||||
"description": "HubZ Smart Home Controller - HubZ Z-Wave Com Port",
|
||||
"manufacturer": "Silicon Labs",
|
||||
}
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
"zha", context={"source": SOURCE_USB}, data=discovery_info
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert result["type"] == RESULT_TYPE_ABORT
|
||||
assert result["reason"] == "not_zha_device"
|
||||
assert result2["type"] == RESULT_TYPE_ABORT
|
||||
assert result2["reason"] == "usb_probe_failed"
|
||||
|
||||
|
||||
@patch("zigpy_znp.zigbee.application.ControllerApplication.probe", return_value=True)
|
||||
|
Loading…
x
Reference in New Issue
Block a user