diff --git a/homeassistant/components/homekit/__init__.py b/homeassistant/components/homekit/__init__.py index 5cbc9bb6f18..e92c35ffac8 100644 --- a/homeassistant/components/homekit/__init__.py +++ b/homeassistant/components/homekit/__init__.py @@ -42,7 +42,21 @@ from homeassistant.helpers.reload import async_integration_yaml_config from homeassistant.loader import IntegrationNotFound, async_get_integration from homeassistant.util import get_local_ip -from .accessories import get_accessory +# pylint: disable=unused-import +from . import ( # noqa: F401 + type_cameras, + type_covers, + type_fans, + type_humidifiers, + type_lights, + type_locks, + type_media_players, + type_security_systems, + type_sensors, + type_switches, + type_thermostats, +) +from .accessories import HomeBridge, HomeDriver, get_accessory from .aidmanager import AccessoryAidStorage from .const import ( AID_STORAGE, @@ -441,9 +455,6 @@ class HomeKit: def setup(self, zeroconf_instance): """Set up bridge and accessory driver.""" - # pylint: disable=import-outside-toplevel - from .accessories import HomeDriver - self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self.async_stop) ip_addr = self._ip_address or get_local_ip() persist_file = get_persist_fullpath_for_entry_id(self.hass, self._entry_id) @@ -590,7 +601,7 @@ class HomeKit: bridged_states.append(state) self._async_register_bridge(dev_reg) - await self.hass.async_add_executor_job(self._start, bridged_states) + await self._async_start(bridged_states) _LOGGER.debug("Driver start for %s", self._name) self.hass.add_job(self.driver.start_service) self.status = STATUS_RUNNING @@ -639,34 +650,20 @@ class HomeKit: for device_id in devices_to_purge: dev_reg.async_remove_device(device_id) - def _start(self, bridged_states): - # pylint: disable=unused-import, import-outside-toplevel - from . import ( # noqa: F401 - type_cameras, - type_covers, - type_fans, - type_humidifiers, - type_lights, - type_locks, - type_media_players, - type_security_systems, - type_sensors, - type_switches, - type_thermostats, - ) - + async def _async_start(self, entity_states): + """Start the accessory.""" if self._homekit_mode == HOMEKIT_MODE_ACCESSORY: - state = bridged_states[0] + state = entity_states[0] conf = self._config.pop(state.entity_id, {}) acc = get_accessory(self.hass, self.driver, state, STANDALONE_AID, conf) self.driver.add_accessory(acc) else: - from .accessories import HomeBridge - self.bridge = HomeBridge(self.hass, self.driver, self._name) - for state in bridged_states: + for state in entity_states: self.add_bridge_accessory(state) - self.driver.add_accessory(self.bridge) + acc = self.bridge + + await self.hass.async_add_executor_job(self.driver.add_accessory, acc) if not self.driver.state.paired: show_setup_message( diff --git a/tests/components/homekit/test_homekit.py b/tests/components/homekit/test_homekit.py index 7b5153b825d..a8c3c81595e 100644 --- a/tests/components/homekit/test_homekit.py +++ b/tests/components/homekit/test_homekit.py @@ -201,7 +201,7 @@ async def test_homekit_setup(hass, hk_driver, mock_zeroconf): hass.states.async_set("light.demo2", "on") zeroconf_mock = MagicMock() with patch( - f"{PATH_HOMEKIT}.accessories.HomeDriver", return_value=hk_driver + f"{PATH_HOMEKIT}.HomeDriver", return_value=hk_driver ) as mock_driver, patch("homeassistant.util.get_local_ip") as mock_ip: mock_ip.return_value = IP_ADDRESS await hass.async_add_executor_job(homekit.setup, zeroconf_mock) @@ -245,9 +245,7 @@ async def test_homekit_setup_ip_address(hass, hk_driver, mock_zeroconf): mock_zeroconf = MagicMock() path = get_persist_fullpath_for_entry_id(hass, entry.entry_id) - with patch( - f"{PATH_HOMEKIT}.accessories.HomeDriver", return_value=hk_driver - ) as mock_driver: + with patch(f"{PATH_HOMEKIT}.HomeDriver", return_value=hk_driver) as mock_driver: await hass.async_add_executor_job(homekit.setup, mock_zeroconf) mock_driver.assert_called_with( hass, @@ -283,9 +281,7 @@ async def test_homekit_setup_advertise_ip(hass, hk_driver, mock_zeroconf): zeroconf_instance = MagicMock() path = get_persist_fullpath_for_entry_id(hass, entry.entry_id) - with patch( - f"{PATH_HOMEKIT}.accessories.HomeDriver", return_value=hk_driver - ) as mock_driver: + with patch(f"{PATH_HOMEKIT}.HomeDriver", return_value=hk_driver) as mock_driver: await hass.async_add_executor_job(homekit.setup, zeroconf_instance) mock_driver.assert_called_with( hass, @@ -735,7 +731,7 @@ async def test_homekit_too_many_accessories(hass, hk_driver, caplog, mock_zeroco with patch("pyhap.accessory_driver.AccessoryDriver.start_service"), patch( "pyhap.accessory_driver.AccessoryDriver.add_accessory" ), patch(f"{PATH_HOMEKIT}.show_setup_message"), patch( - f"{PATH_HOMEKIT}.accessories.HomeBridge", _mock_bridge + f"{PATH_HOMEKIT}.HomeBridge", _mock_bridge ): await homekit.async_start() await hass.async_block_till_done()