Use the main event loop for homekit (#37441)
* use hass.loop for homekit * update calls for upstream pr * Bump HAP-python to 2.9.2
This commit is contained in:
parent
6ca476fe21
commit
debb928b30
5 changed files with 25 additions and 27 deletions
|
@ -389,6 +389,7 @@ class HomeKit:
|
||||||
self.hass,
|
self.hass,
|
||||||
self._entry_id,
|
self._entry_id,
|
||||||
self._name,
|
self._name,
|
||||||
|
loop=self.hass.loop,
|
||||||
address=ip_addr,
|
address=ip_addr,
|
||||||
port=self._port,
|
port=self._port,
|
||||||
persist_file=persist_file,
|
persist_file=persist_file,
|
||||||
|
@ -498,6 +499,9 @@ class HomeKit:
|
||||||
|
|
||||||
self._async_register_bridge(dev_reg)
|
self._async_register_bridge(dev_reg)
|
||||||
await self.hass.async_add_executor_job(self._start, bridged_states)
|
await self.hass.async_add_executor_job(self._start, bridged_states)
|
||||||
|
_LOGGER.debug("Driver start for %s", self._name)
|
||||||
|
self.hass.add_job(self.driver.start_service)
|
||||||
|
self.status = STATUS_RUNNING
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _async_register_bridge(self, dev_reg):
|
def _async_register_bridge(self, dev_reg):
|
||||||
|
@ -570,17 +574,13 @@ class HomeKit:
|
||||||
self.bridge.xhm_uri(),
|
self.bridge.xhm_uri(),
|
||||||
)
|
)
|
||||||
|
|
||||||
_LOGGER.debug("Driver start for %s", self._name)
|
|
||||||
self.hass.add_job(self.driver.start)
|
|
||||||
self.status = STATUS_RUNNING
|
|
||||||
|
|
||||||
async def async_stop(self, *args):
|
async def async_stop(self, *args):
|
||||||
"""Stop the accessory driver."""
|
"""Stop the accessory driver."""
|
||||||
if self.status != STATUS_RUNNING:
|
if self.status != STATUS_RUNNING:
|
||||||
return
|
return
|
||||||
self.status = STATUS_STOPPED
|
self.status = STATUS_STOPPED
|
||||||
_LOGGER.debug("Driver stop for %s", self._name)
|
_LOGGER.debug("Driver stop for %s", self._name)
|
||||||
self.hass.add_job(self.driver.stop)
|
await self.driver.async_stop()
|
||||||
for acc in self.bridge.accessories.values():
|
for acc in self.bridge.accessories.values():
|
||||||
acc.async_stop()
|
acc.async_stop()
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"name": "HomeKit",
|
"name": "HomeKit",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/homekit",
|
"documentation": "https://www.home-assistant.io/integrations/homekit",
|
||||||
"requirements": [
|
"requirements": [
|
||||||
"HAP-python==2.9.1",
|
"HAP-python==2.9.2",
|
||||||
"fnvhash==0.1.0",
|
"fnvhash==0.1.0",
|
||||||
"PyQRCode==1.2.1",
|
"PyQRCode==1.2.1",
|
||||||
"base36==0.1.1",
|
"base36==0.1.1",
|
||||||
|
|
|
@ -36,7 +36,7 @@ Adafruit-SHT31==1.0.2
|
||||||
# Adafruit_BBIO==1.1.1
|
# Adafruit_BBIO==1.1.1
|
||||||
|
|
||||||
# homeassistant.components.homekit
|
# homeassistant.components.homekit
|
||||||
HAP-python==2.9.1
|
HAP-python==2.9.2
|
||||||
|
|
||||||
# homeassistant.components.mastodon
|
# homeassistant.components.mastodon
|
||||||
Mastodon.py==1.5.1
|
Mastodon.py==1.5.1
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
-r requirements_test.txt
|
-r requirements_test.txt
|
||||||
|
|
||||||
# homeassistant.components.homekit
|
# homeassistant.components.homekit
|
||||||
HAP-python==2.9.1
|
HAP-python==2.9.2
|
||||||
|
|
||||||
# homeassistant.components.plugwise
|
# homeassistant.components.plugwise
|
||||||
Plugwise_Smile==1.1.0
|
Plugwise_Smile==1.1.0
|
||||||
|
|
|
@ -210,6 +210,7 @@ async def test_homekit_setup(hass, hk_driver):
|
||||||
hass,
|
hass,
|
||||||
entry.entry_id,
|
entry.entry_id,
|
||||||
BRIDGE_NAME,
|
BRIDGE_NAME,
|
||||||
|
loop=hass.loop,
|
||||||
address=IP_ADDRESS,
|
address=IP_ADDRESS,
|
||||||
port=DEFAULT_PORT,
|
port=DEFAULT_PORT,
|
||||||
persist_file=path,
|
persist_file=path,
|
||||||
|
@ -251,6 +252,7 @@ async def test_homekit_setup_ip_address(hass, hk_driver):
|
||||||
hass,
|
hass,
|
||||||
entry.entry_id,
|
entry.entry_id,
|
||||||
BRIDGE_NAME,
|
BRIDGE_NAME,
|
||||||
|
loop=hass.loop,
|
||||||
address="172.0.0.0",
|
address="172.0.0.0",
|
||||||
port=DEFAULT_PORT,
|
port=DEFAULT_PORT,
|
||||||
persist_file=path,
|
persist_file=path,
|
||||||
|
@ -288,6 +290,7 @@ async def test_homekit_setup_advertise_ip(hass, hk_driver):
|
||||||
hass,
|
hass,
|
||||||
entry.entry_id,
|
entry.entry_id,
|
||||||
BRIDGE_NAME,
|
BRIDGE_NAME,
|
||||||
|
loop=hass.loop,
|
||||||
address="0.0.0.0",
|
address="0.0.0.0",
|
||||||
port=DEFAULT_PORT,
|
port=DEFAULT_PORT,
|
||||||
persist_file=path,
|
persist_file=path,
|
||||||
|
@ -494,7 +497,7 @@ async def test_homekit_start(hass, hk_driver, device_reg, debounce_patcher):
|
||||||
) as mock_setup_msg, patch(
|
) as mock_setup_msg, patch(
|
||||||
"pyhap.accessory_driver.AccessoryDriver.add_accessory"
|
"pyhap.accessory_driver.AccessoryDriver.add_accessory"
|
||||||
) as hk_driver_add_acc, patch(
|
) as hk_driver_add_acc, patch(
|
||||||
"pyhap.accessory_driver.AccessoryDriver.start"
|
"pyhap.accessory_driver.AccessoryDriver.start_service"
|
||||||
) as hk_driver_start:
|
) as hk_driver_start:
|
||||||
await homekit.async_start()
|
await homekit.async_start()
|
||||||
|
|
||||||
|
@ -527,7 +530,7 @@ async def test_homekit_start(hass, hk_driver, device_reg, debounce_patcher):
|
||||||
) as mock_setup_msg, patch(
|
) as mock_setup_msg, patch(
|
||||||
"pyhap.accessory_driver.AccessoryDriver.add_accessory"
|
"pyhap.accessory_driver.AccessoryDriver.add_accessory"
|
||||||
) as hk_driver_add_acc, patch(
|
) as hk_driver_add_acc, patch(
|
||||||
"pyhap.accessory_driver.AccessoryDriver.start"
|
"pyhap.accessory_driver.AccessoryDriver.start_service"
|
||||||
) as hk_driver_start:
|
) as hk_driver_start:
|
||||||
await homekit.async_start()
|
await homekit.async_start()
|
||||||
|
|
||||||
|
@ -574,7 +577,7 @@ async def test_homekit_start_with_a_broken_accessory(hass, hk_driver, debounce_p
|
||||||
) as mock_setup_msg, patch(
|
) as mock_setup_msg, patch(
|
||||||
"pyhap.accessory_driver.AccessoryDriver.add_accessory",
|
"pyhap.accessory_driver.AccessoryDriver.add_accessory",
|
||||||
) as hk_driver_add_acc, patch(
|
) as hk_driver_add_acc, patch(
|
||||||
"pyhap.accessory_driver.AccessoryDriver.start"
|
"pyhap.accessory_driver.AccessoryDriver.start_service"
|
||||||
) as hk_driver_start:
|
) as hk_driver_start:
|
||||||
await homekit.async_start()
|
await homekit.async_start()
|
||||||
|
|
||||||
|
@ -607,11 +610,10 @@ async def test_homekit_stop(hass):
|
||||||
entry_id=entry.entry_id,
|
entry_id=entry.entry_id,
|
||||||
)
|
)
|
||||||
homekit.driver = Mock()
|
homekit.driver = Mock()
|
||||||
|
homekit.driver.async_stop = AsyncMock()
|
||||||
homekit.bridge = Mock()
|
homekit.bridge = Mock()
|
||||||
homekit.bridge.accessories = {}
|
homekit.bridge.accessories = {}
|
||||||
|
|
||||||
await async_init_integration(hass)
|
|
||||||
|
|
||||||
assert homekit.status == STATUS_READY
|
assert homekit.status == STATUS_READY
|
||||||
await homekit.async_stop()
|
await homekit.async_stop()
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -621,13 +623,13 @@ async def test_homekit_stop(hass):
|
||||||
homekit.status = STATUS_STOPPED
|
homekit.status = STATUS_STOPPED
|
||||||
await homekit.async_stop()
|
await homekit.async_stop()
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert homekit.driver.stop.called is False
|
assert homekit.driver.async_stop.called is False
|
||||||
|
|
||||||
# Test if driver is started
|
# Test if driver is started
|
||||||
homekit.status = STATUS_RUNNING
|
homekit.status = STATUS_RUNNING
|
||||||
await homekit.async_stop()
|
await homekit.async_stop()
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert homekit.driver.stop.called is True
|
assert homekit.driver.async_stop.called is True
|
||||||
|
|
||||||
|
|
||||||
async def test_homekit_reset_accessories(hass):
|
async def test_homekit_reset_accessories(hass):
|
||||||
|
@ -655,7 +657,7 @@ async def test_homekit_reset_accessories(hass):
|
||||||
), patch("pyhap.accessory.Bridge.add_accessory") as mock_add_accessory, patch(
|
), patch("pyhap.accessory.Bridge.add_accessory") as mock_add_accessory, patch(
|
||||||
"pyhap.accessory_driver.AccessoryDriver.config_changed"
|
"pyhap.accessory_driver.AccessoryDriver.config_changed"
|
||||||
) as hk_driver_config_changed, patch(
|
) as hk_driver_config_changed, patch(
|
||||||
"pyhap.accessory_driver.AccessoryDriver.start"
|
"pyhap.accessory_driver.AccessoryDriver.start_service"
|
||||||
):
|
):
|
||||||
await async_init_entry(hass, entry)
|
await async_init_entry(hass, entry)
|
||||||
|
|
||||||
|
@ -702,7 +704,7 @@ async def test_homekit_too_many_accessories(hass, hk_driver):
|
||||||
|
|
||||||
hass.states.async_set("light.demo", "on")
|
hass.states.async_set("light.demo", "on")
|
||||||
|
|
||||||
with patch("pyhap.accessory_driver.AccessoryDriver.start"), patch(
|
with patch("pyhap.accessory_driver.AccessoryDriver.start_service"), patch(
|
||||||
"pyhap.accessory_driver.AccessoryDriver.add_accessory"
|
"pyhap.accessory_driver.AccessoryDriver.add_accessory"
|
||||||
), patch("homeassistant.components.homekit._LOGGER.warning") as mock_warn, patch(
|
), patch("homeassistant.components.homekit._LOGGER.warning") as mock_warn, patch(
|
||||||
f"{PATH_HOMEKIT}.show_setup_message"
|
f"{PATH_HOMEKIT}.show_setup_message"
|
||||||
|
@ -916,7 +918,7 @@ async def test_raise_config_entry_not_ready(hass):
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
|
||||||
async def test_homekit_uses_system_zeroconf(hass, mock_zeroconf):
|
async def test_homekit_uses_system_zeroconf(hass, hk_driver, mock_zeroconf):
|
||||||
"""Test HomeKit uses system zeroconf."""
|
"""Test HomeKit uses system zeroconf."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
|
@ -925,15 +927,11 @@ async def test_homekit_uses_system_zeroconf(hass, mock_zeroconf):
|
||||||
)
|
)
|
||||||
system_zc = await zeroconf.async_get_instance(hass)
|
system_zc = await zeroconf.async_get_instance(hass)
|
||||||
|
|
||||||
with patch(f"{PATH_HOMEKIT}.HomeKit.add_bridge_accessory"), patch(
|
entry.add_to_hass(hass)
|
||||||
f"{PATH_HOMEKIT}.show_setup_message"
|
assert await hass.config_entries.async_setup(entry.entry_id)
|
||||||
), patch("pyhap.accessory_driver.AccessoryDriver.add_accessory"), patch(
|
await hass.async_block_till_done()
|
||||||
"pyhap.accessory_driver.AccessoryDriver.start"
|
assert hass.data[DOMAIN][entry.entry_id][HOMEKIT].driver.advertiser == system_zc
|
||||||
):
|
await hass.async_block_till_done()
|
||||||
entry.add_to_hass(hass)
|
|
||||||
assert await hass.config_entries.async_setup(entry.entry_id)
|
|
||||||
await hass.async_block_till_done()
|
|
||||||
assert hass.data[DOMAIN][entry.entry_id][HOMEKIT].driver.advertiser == system_zc
|
|
||||||
|
|
||||||
|
|
||||||
def _write_data(path: str, data: Dict) -> None:
|
def _write_data(path: str, data: Dict) -> None:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue