mirror of
https://github.com/home-assistant/core.git
synced 2025-04-24 09:17:53 +00:00
Move homekit accessory creation to async (#45788)
This commit is contained in:
parent
73d7d80731
commit
385b7e17ef
@ -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(
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user