diff --git a/homeassistant/components/homekit_controller/config_flow.py b/homeassistant/components/homekit_controller/config_flow.py index 26055b964f8..18f19265f59 100644 --- a/homeassistant/components/homekit_controller/config_flow.py +++ b/homeassistant/components/homekit_controller/config_flow.py @@ -4,6 +4,7 @@ import re import aiohomekit from aiohomekit.exceptions import AuthenticationError +from aiohomekit.model import Accessories, CharacteristicsTypes, ServicesTypes import voluptuous as vol from homeassistant import config_entries @@ -15,7 +16,6 @@ from homeassistant.helpers.device_registry import ( async_get_registry as async_get_device_registry, ) -from .connection import get_accessory_name, get_bridge_information from .const import DOMAIN, KNOWN_DEVICES HOMEKIT_DIR = ".homekit" @@ -489,8 +489,11 @@ class HomekitControllerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): if not (accessories := pairing_data.pop("accessories", None)): accessories = await pairing.list_accessories_and_characteristics() - bridge_info = get_bridge_information(accessories) - name = get_accessory_name(bridge_info) + parsed = Accessories.from_list(accessories) + accessory_info = parsed.aid(1).services.first( + service_type=ServicesTypes.ACCESSORY_INFORMATION + ) + name = accessory_info.value(CharacteristicsTypes.NAME, "") return self.async_create_entry(title=name, data=pairing_data) diff --git a/homeassistant/components/homekit_controller/connection.py b/homeassistant/components/homekit_controller/connection.py index 1e011eaf15d..88706e6fbd0 100644 --- a/homeassistant/components/homekit_controller/connection.py +++ b/homeassistant/components/homekit_controller/connection.py @@ -48,36 +48,6 @@ def valid_serial_number(serial): return True -def get_accessory_information(accessory): - """Obtain the accessory information service of a HomeKit device.""" - result = {} - for service in accessory["services"]: - stype = service["type"].upper() - if ServicesTypes.get_short(stype) != "accessory-information": - continue - for characteristic in service["characteristics"]: - ctype = CharacteristicsTypes.get_short(characteristic["type"]) - if "value" in characteristic: - result[ctype] = characteristic["value"] - return result - - -def get_bridge_information(accessories): - """Return the accessory info for the bridge.""" - for accessory in accessories: - if accessory["aid"] == 1: - return get_accessory_information(accessory) - return get_accessory_information(accessories[0]) - - -def get_accessory_name(accessory_info): - """Return the name field of an accessory.""" - for field in ("name", "model", "manufacturer"): - if field in accessory_info: - return accessory_info[field] - return None - - class HKDevice: """HomeKit device.""" @@ -642,13 +612,3 @@ class HKDevice: This id is random and will change if a device undergoes a hard reset. """ return self.pairing_data["AccessoryPairingID"] - - @property - def connection_info(self): - """Return accessory information for the main accessory.""" - return get_bridge_information(self.accessories) - - @property - def name(self): - """Name of the bridge accessory.""" - return get_accessory_name(self.connection_info) or self.unique_id diff --git a/tests/components/homekit_controller/test_config_flow.py b/tests/components/homekit_controller/test_config_flow.py index 33b5b15698d..c9354297a43 100644 --- a/tests/components/homekit_controller/test_config_flow.py +++ b/tests/components/homekit_controller/test_config_flow.py @@ -180,6 +180,7 @@ def setup_mock_accessory(controller): serial_number="12345", firmware_revision="1.1", ) + accessory.aid = 1 service = accessory.add_service(ServicesTypes.LIGHTBULB) on_char = service.add_char(CharacteristicsTypes.ON)