Avoid homekit random id generation for existing entries (#114144)

This commit is contained in:
J. Nick Koston 2024-03-25 00:28:26 -10:00 committed by GitHub
parent 188dbfbd2a
commit ada781025b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 12 additions and 2 deletions

View file

@ -12,6 +12,7 @@ import socket
from typing import Any, cast
from aiohttp import web
from pyhap import util as pyhap_util
from pyhap.characteristic import Characteristic
from pyhap.const import STANDALONE_AID
from pyhap.loader import get_loader
@ -580,6 +581,8 @@ class HomeKit:
self.driver.load()
return True
# If there is no persist file, we need to generate a mac
self.driver.state.mac = pyhap_util.generate_mac()
return False
async def async_reset_accessories(self, entity_ids: Iterable[str]) -> None:

View file

@ -72,6 +72,7 @@ from .const import (
CONF_LINKED_BATTERY_SENSOR,
CONF_LOW_BATTERY_THRESHOLD,
DEFAULT_LOW_BATTERY_THRESHOLD,
EMPTY_MAC,
EVENT_HOMEKIT_CHANGED,
HK_CHARGING,
HK_NOT_CHARGABLE,
@ -683,7 +684,9 @@ class HomeDriver(AccessoryDriver): # type: ignore[misc]
**kwargs: Any,
) -> None:
"""Initialize a AccessoryDriver object."""
super().__init__(**kwargs)
# Always set an empty mac of pyhap will incur
# the cost of generating a new one for every driver
super().__init__(**kwargs, mac=EMPTY_MAC)
self.hass = hass
self.entry_id = entry_id
self._bridge_name = bridge_name

View file

@ -10,6 +10,7 @@ PERSIST_LOCK_DATA = f"{DOMAIN}_persist_lock"
HOMEKIT_FILE = ".homekit.state"
SHUTDOWN_TIMEOUT = 30
CONF_ENTRY_INDEX = "index"
EMPTY_MAC = "00:00:00:00:00:00"
# ### Codecs ####
VIDEO_CODEC_COPY = "copy"

View file

@ -28,6 +28,7 @@ from homeassistant.components.homekit.const import (
CONF_LINKED_BATTERY_CHARGING_SENSOR,
CONF_LINKED_BATTERY_SENSOR,
CONF_LOW_BATTERY_THRESHOLD,
EMPTY_MAC,
MANUFACTURER,
SERV_ACCESSORY_INFO,
)
@ -747,7 +748,9 @@ def test_home_driver(iid_storage) -> None:
persist_file=path,
)
mock_driver.assert_called_with(address=ip_address, port=port, persist_file=path)
mock_driver.assert_called_with(
address=ip_address, port=port, persist_file=path, mac=EMPTY_MAC
)
driver.state = Mock(pincode=pin, paired=False)
xhm_uri_mock = Mock(return_value="X-HM://0")
driver.accessory = Mock(display_name="any", xhm_uri=xhm_uri_mock)