Improve stability of homekit accessory ids (#35691)
This commit is contained in:
parent
cfaa851b5b
commit
879e2d1afd
3 changed files with 442 additions and 460 deletions
|
@ -11,7 +11,6 @@ This module generates and stores them in a HA storage.
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
import random
|
import random
|
||||||
from zlib import adler32
|
|
||||||
|
|
||||||
from fnvhash import fnv1a_32
|
from fnvhash import fnv1a_32
|
||||||
|
|
||||||
|
@ -44,11 +43,6 @@ def get_system_unique_id(entity: RegistryEntry):
|
||||||
def _generate_aids(unique_id: str, entity_id: str) -> int:
|
def _generate_aids(unique_id: str, entity_id: str) -> int:
|
||||||
"""Generate accessory aid."""
|
"""Generate accessory aid."""
|
||||||
|
|
||||||
# Backward compatibility: Previously HA used to *only* do adler32 on the entity id.
|
|
||||||
# Not stable if entity ID changes
|
|
||||||
# Not robust against collisions
|
|
||||||
yield adler32(entity_id.encode("utf-8"))
|
|
||||||
|
|
||||||
if unique_id:
|
if unique_id:
|
||||||
# Use fnv1a_32 of the unique id as
|
# Use fnv1a_32 of the unique id as
|
||||||
# fnv1a_32 has less collisions than
|
# fnv1a_32 has less collisions than
|
||||||
|
@ -96,15 +90,7 @@ class AccessoryAidStorage:
|
||||||
# There is no data about aid allocations yet
|
# There is no data about aid allocations yet
|
||||||
return
|
return
|
||||||
|
|
||||||
# Remove the UNIQUE_IDS_KEY in 0.112 and later
|
self.allocations = raw_storage.get(ALLOCATIONS_KEY, {})
|
||||||
# The beta version used UNIQUE_IDS_KEY but
|
|
||||||
# since we now have entity ids in the dict
|
|
||||||
# we use ALLOCATIONS_KEY but check for
|
|
||||||
# UNIQUE_IDS_KEY in case the database has not
|
|
||||||
# been upgraded yet
|
|
||||||
self.allocations = raw_storage.get(
|
|
||||||
ALLOCATIONS_KEY, raw_storage.get(UNIQUE_IDS_KEY, {})
|
|
||||||
)
|
|
||||||
self.allocated_aids = set(self.allocations.values())
|
self.allocated_aids = set(self.allocations.values())
|
||||||
|
|
||||||
def get_or_allocate_aid_for_entity_id(self, entity_id: str):
|
def get_or_allocate_aid_for_entity_id(self, entity_id: str):
|
||||||
|
@ -118,17 +104,17 @@ class AccessoryAidStorage:
|
||||||
|
|
||||||
def _get_or_allocate_aid(self, unique_id: str, entity_id: str):
|
def _get_or_allocate_aid(self, unique_id: str, entity_id: str):
|
||||||
"""Allocate (and return) a new aid for an accessory."""
|
"""Allocate (and return) a new aid for an accessory."""
|
||||||
# Prefer the unique_id over the
|
if unique_id and unique_id in self.allocations:
|
||||||
# entitiy_id
|
return self.allocations[unique_id]
|
||||||
storage_key = unique_id or entity_id
|
if entity_id in self.allocations:
|
||||||
|
return self.allocations[entity_id]
|
||||||
if storage_key in self.allocations:
|
|
||||||
return self.allocations[storage_key]
|
|
||||||
|
|
||||||
for aid in _generate_aids(unique_id, entity_id):
|
for aid in _generate_aids(unique_id, entity_id):
|
||||||
if aid in INVALID_AIDS:
|
if aid in INVALID_AIDS:
|
||||||
continue
|
continue
|
||||||
if aid not in self.allocated_aids:
|
if aid not in self.allocated_aids:
|
||||||
|
# Prefer the unique_id over the entitiy_id
|
||||||
|
storage_key = unique_id or entity_id
|
||||||
self.allocations[storage_key] = aid
|
self.allocations[storage_key] = aid
|
||||||
self.allocated_aids.add(aid)
|
self.allocated_aids.add(aid)
|
||||||
self.async_schedule_save()
|
self.async_schedule_save()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"""Tests for the HomeKit AID manager."""
|
"""Tests for the HomeKit AID manager."""
|
||||||
import os
|
import os
|
||||||
from zlib import adler32
|
|
||||||
|
|
||||||
|
from fnvhash import fnv1a_32
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.homekit.aidmanager import (
|
from homeassistant.components.homekit.aidmanager import (
|
||||||
|
@ -59,19 +59,19 @@ async def test_aid_generation(hass, device_reg, entity_reg):
|
||||||
for _ in range(0, 2):
|
for _ in range(0, 2):
|
||||||
assert (
|
assert (
|
||||||
aid_storage.get_or_allocate_aid_for_entity_id(light_ent.entity_id)
|
aid_storage.get_or_allocate_aid_for_entity_id(light_ent.entity_id)
|
||||||
== 1692141785
|
== 1953095294
|
||||||
)
|
)
|
||||||
assert (
|
assert (
|
||||||
aid_storage.get_or_allocate_aid_for_entity_id(light_ent2.entity_id)
|
aid_storage.get_or_allocate_aid_for_entity_id(light_ent2.entity_id)
|
||||||
== 2732133210
|
== 1975378727
|
||||||
)
|
)
|
||||||
assert (
|
assert (
|
||||||
aid_storage.get_or_allocate_aid_for_entity_id(remote_ent.entity_id)
|
aid_storage.get_or_allocate_aid_for_entity_id(remote_ent.entity_id)
|
||||||
== 1867188557
|
== 3508011530
|
||||||
)
|
)
|
||||||
assert (
|
assert (
|
||||||
aid_storage.get_or_allocate_aid_for_entity_id("remote.has_no_unique_id")
|
aid_storage.get_or_allocate_aid_for_entity_id("remote.has_no_unique_id")
|
||||||
== 1872038229
|
== 1751603975
|
||||||
)
|
)
|
||||||
|
|
||||||
aid_storage.delete_aid(get_system_unique_id(light_ent))
|
aid_storage.delete_aid(get_system_unique_id(light_ent))
|
||||||
|
@ -82,23 +82,23 @@ async def test_aid_generation(hass, device_reg, entity_reg):
|
||||||
for _ in range(0, 2):
|
for _ in range(0, 2):
|
||||||
assert (
|
assert (
|
||||||
aid_storage.get_or_allocate_aid_for_entity_id(light_ent.entity_id)
|
aid_storage.get_or_allocate_aid_for_entity_id(light_ent.entity_id)
|
||||||
== 1692141785
|
== 1953095294
|
||||||
)
|
)
|
||||||
assert (
|
assert (
|
||||||
aid_storage.get_or_allocate_aid_for_entity_id(light_ent2.entity_id)
|
aid_storage.get_or_allocate_aid_for_entity_id(light_ent2.entity_id)
|
||||||
== 2732133210
|
== 1975378727
|
||||||
)
|
)
|
||||||
assert (
|
assert (
|
||||||
aid_storage.get_or_allocate_aid_for_entity_id(remote_ent.entity_id)
|
aid_storage.get_or_allocate_aid_for_entity_id(remote_ent.entity_id)
|
||||||
== 1867188557
|
== 3508011530
|
||||||
)
|
)
|
||||||
assert (
|
assert (
|
||||||
aid_storage.get_or_allocate_aid_for_entity_id("remote.has_no_unique_id")
|
aid_storage.get_or_allocate_aid_for_entity_id("remote.has_no_unique_id")
|
||||||
== 1872038229
|
== 1751603975
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_aid_adler32_collision(hass, device_reg, entity_reg):
|
async def test_no_aid_collision(hass, device_reg, entity_reg):
|
||||||
"""Test generating aids."""
|
"""Test generating aids."""
|
||||||
config_entry = MockConfigEntry(domain="test", data={})
|
config_entry = MockConfigEntry(domain="test", data={})
|
||||||
config_entry.add_to_hass(hass)
|
config_entry.add_to_hass(hass)
|
||||||
|
@ -130,16 +130,22 @@ async def test_aid_generation_no_unique_ids_handles_collision(
|
||||||
):
|
):
|
||||||
"""Test colliding aids is stable."""
|
"""Test colliding aids is stable."""
|
||||||
config_entry = MockConfigEntry(domain="test", data={})
|
config_entry = MockConfigEntry(domain="test", data={})
|
||||||
|
config_entry.add_to_hass(hass)
|
||||||
aid_storage = AccessoryAidStorage(hass, config_entry)
|
aid_storage = AccessoryAidStorage(hass, config_entry)
|
||||||
await aid_storage.async_initialize()
|
await aid_storage.async_initialize()
|
||||||
|
|
||||||
|
device_entry = device_reg.async_get_or_create(
|
||||||
|
config_entry_id=config_entry.entry_id,
|
||||||
|
connections={(device_registry.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")},
|
||||||
|
)
|
||||||
|
|
||||||
seen_aids = set()
|
seen_aids = set()
|
||||||
collisions = []
|
collisions = []
|
||||||
|
|
||||||
for light_id in range(0, 220):
|
for light_id in range(0, 220):
|
||||||
entity_id = f"light.light{light_id}"
|
entity_id = f"light.light{light_id}"
|
||||||
hass.states.async_set(entity_id, "on")
|
hass.states.async_set(entity_id, "on")
|
||||||
expected_aid = adler32(entity_id.encode("utf-8"))
|
expected_aid = fnv1a_32(entity_id.encode("utf-8"))
|
||||||
aid = aid_storage.get_or_allocate_aid_for_entity_id(entity_id)
|
aid = aid_storage.get_or_allocate_aid_for_entity_id(entity_id)
|
||||||
if aid != expected_aid:
|
if aid != expected_aid:
|
||||||
collisions.append(entity_id)
|
collisions.append(entity_id)
|
||||||
|
@ -147,143 +153,131 @@ async def test_aid_generation_no_unique_ids_handles_collision(
|
||||||
assert aid not in seen_aids
|
assert aid not in seen_aids
|
||||||
seen_aids.add(aid)
|
seen_aids.add(aid)
|
||||||
|
|
||||||
assert collisions == [
|
light_ent = entity_reg.async_get_or_create(
|
||||||
"light.light201",
|
"light", "device", "unique_id", device_id=device_entry.id
|
||||||
"light.light202",
|
)
|
||||||
"light.light203",
|
hass.states.async_set(light_ent.entity_id, "on")
|
||||||
"light.light204",
|
aid_storage.get_or_allocate_aid_for_entity_id(light_ent.entity_id)
|
||||||
"light.light205",
|
|
||||||
"light.light206",
|
assert not collisions
|
||||||
"light.light207",
|
|
||||||
"light.light208",
|
|
||||||
"light.light209",
|
|
||||||
"light.light211",
|
|
||||||
"light.light212",
|
|
||||||
"light.light213",
|
|
||||||
"light.light214",
|
|
||||||
"light.light215",
|
|
||||||
"light.light216",
|
|
||||||
"light.light217",
|
|
||||||
"light.light218",
|
|
||||||
"light.light219",
|
|
||||||
]
|
|
||||||
|
|
||||||
assert aid_storage.allocations == {
|
assert aid_storage.allocations == {
|
||||||
"light.light0": 514851983,
|
"device.light.unique_id": 1953095294,
|
||||||
"light.light1": 514917520,
|
"light.light0": 301577847,
|
||||||
"light.light10": 594609344,
|
"light.light1": 284800228,
|
||||||
"light.light100": 677446896,
|
"light.light10": 2367138236,
|
||||||
"light.light101": 677512433,
|
"light.light100": 2822760292,
|
||||||
"light.light102": 677577970,
|
"light.light101": 2839537911,
|
||||||
"light.light103": 677643507,
|
"light.light102": 2856315530,
|
||||||
"light.light104": 677709044,
|
"light.light103": 2873093149,
|
||||||
"light.light105": 677774581,
|
"light.light104": 2755649816,
|
||||||
"light.light106": 677840118,
|
"light.light105": 2772427435,
|
||||||
"light.light107": 677905655,
|
"light.light106": 2789205054,
|
||||||
"light.light108": 677971192,
|
"light.light107": 2805982673,
|
||||||
"light.light109": 678036729,
|
"light.light108": 2688539340,
|
||||||
"light.light11": 594674881,
|
"light.light109": 2705316959,
|
||||||
"light.light110": 677577969,
|
"light.light11": 2383915855,
|
||||||
"light.light111": 677643506,
|
"light.light110": 776141037,
|
||||||
"light.light112": 677709043,
|
"light.light111": 759363418,
|
||||||
"light.light113": 677774580,
|
"light.light112": 742585799,
|
||||||
"light.light114": 677840117,
|
"light.light113": 725808180,
|
||||||
"light.light115": 677905654,
|
"light.light114": 709030561,
|
||||||
"light.light116": 677971191,
|
"light.light115": 692252942,
|
||||||
"light.light117": 678036728,
|
"light.light116": 675475323,
|
||||||
"light.light118": 678102265,
|
"light.light117": 658697704,
|
||||||
"light.light119": 678167802,
|
"light.light118": 641920085,
|
||||||
"light.light12": 594740418,
|
"light.light119": 625142466,
|
||||||
"light.light120": 677709042,
|
"light.light12": 2400693474,
|
||||||
"light.light121": 677774579,
|
"light.light120": 340070038,
|
||||||
"light.light122": 677840116,
|
"light.light121": 356847657,
|
||||||
"light.light123": 677905653,
|
"light.light122": 306514800,
|
||||||
"light.light124": 677971190,
|
"light.light123": 323292419,
|
||||||
"light.light125": 678036727,
|
"light.light124": 407180514,
|
||||||
"light.light126": 678102264,
|
"light.light125": 423958133,
|
||||||
"light.light127": 678167801,
|
"light.light126": 373625276,
|
||||||
"light.light128": 678233338,
|
"light.light127": 390402895,
|
||||||
"light.light129": 678298875,
|
"light.light128": 474290990,
|
||||||
"light.light13": 594805955,
|
"light.light129": 491068609,
|
||||||
"light.light130": 677840115,
|
"light.light13": 2417471093,
|
||||||
"light.light131": 677905652,
|
"light.light130": 440882847,
|
||||||
"light.light132": 677971189,
|
"light.light131": 424105228,
|
||||||
"light.light133": 678036726,
|
"light.light132": 474438085,
|
||||||
"light.light134": 678102263,
|
"light.light133": 457660466,
|
||||||
"light.light135": 678167800,
|
"light.light134": 373772371,
|
||||||
"light.light136": 678233337,
|
"light.light135": 356994752,
|
||||||
"light.light137": 678298874,
|
"light.light136": 407327609,
|
||||||
"light.light138": 678364411,
|
"light.light137": 390549990,
|
||||||
"light.light139": 678429948,
|
"light.light138": 575103799,
|
||||||
"light.light14": 594871492,
|
"light.light139": 558326180,
|
||||||
"light.light140": 677971188,
|
"light.light14": 2300027760,
|
||||||
"light.light141": 678036725,
|
"light.light140": 271973824,
|
||||||
"light.light142": 678102262,
|
"light.light141": 288751443,
|
||||||
"light.light143": 678167799,
|
"light.light142": 305529062,
|
||||||
"light.light144": 678233336,
|
"light.light143": 322306681,
|
||||||
"light.light145": 678298873,
|
"light.light144": 339084300,
|
||||||
"light.light146": 678364410,
|
"light.light145": 355861919,
|
||||||
"light.light147": 678429947,
|
"light.light146": 372639538,
|
||||||
"light.light148": 678495484,
|
"light.light147": 389417157,
|
||||||
"light.light149": 678561021,
|
"light.light148": 406194776,
|
||||||
"light.light15": 594937029,
|
"light.light149": 422972395,
|
||||||
"light.light150": 678102261,
|
"light.light15": 2316805379,
|
||||||
"light.light151": 678167798,
|
"light.light150": 2520321865,
|
||||||
"light.light152": 678233335,
|
"light.light151": 2503544246,
|
||||||
"light.light153": 678298872,
|
"light.light152": 2486766627,
|
||||||
"light.light154": 678364409,
|
"light.light153": 2469989008,
|
||||||
"light.light155": 678429946,
|
"light.light154": 2587432341,
|
||||||
"light.light156": 678495483,
|
"light.light155": 2570654722,
|
||||||
"light.light157": 678561020,
|
"light.light156": 2553877103,
|
||||||
"light.light158": 678626557,
|
"light.light157": 2537099484,
|
||||||
"light.light159": 678692094,
|
"light.light158": 2654542817,
|
||||||
"light.light16": 595002566,
|
"light.light159": 2637765198,
|
||||||
"light.light160": 678233334,
|
"light.light16": 2333582998,
|
||||||
"light.light161": 678298871,
|
"light.light160": 2621134674,
|
||||||
"light.light162": 678364408,
|
"light.light161": 2637912293,
|
||||||
"light.light163": 678429945,
|
"light.light162": 2587579436,
|
||||||
"light.light164": 678495482,
|
"light.light163": 2604357055,
|
||||||
"light.light165": 678561019,
|
"light.light164": 2554024198,
|
||||||
"light.light166": 678626556,
|
"light.light165": 2570801817,
|
||||||
"light.light167": 678692093,
|
"light.light166": 2520468960,
|
||||||
"light.light168": 678757630,
|
"light.light167": 2537246579,
|
||||||
"light.light169": 678823167,
|
"light.light168": 2755355626,
|
||||||
"light.light17": 595068103,
|
"light.light169": 2772133245,
|
||||||
"light.light170": 678364407,
|
"light.light17": 2350360617,
|
||||||
"light.light171": 678429944,
|
"light.light170": 2721947483,
|
||||||
"light.light172": 678495481,
|
"light.light171": 2705169864,
|
||||||
"light.light173": 678561018,
|
"light.light172": 2755502721,
|
||||||
"light.light174": 678626555,
|
"light.light173": 2738725102,
|
||||||
"light.light175": 678692092,
|
"light.light174": 2789057959,
|
||||||
"light.light176": 678757629,
|
"light.light175": 2772280340,
|
||||||
"light.light177": 678823166,
|
"light.light176": 2822613197,
|
||||||
"light.light178": 678888703,
|
"light.light177": 2805835578,
|
||||||
"light.light179": 678954240,
|
"light.light178": 2587726531,
|
||||||
"light.light18": 595133640,
|
"light.light179": 2570948912,
|
||||||
"light.light180": 678495480,
|
"light.light18": 2501359188,
|
||||||
"light.light181": 678561017,
|
"light.light180": 408166252,
|
||||||
"light.light182": 678626554,
|
"light.light181": 424943871,
|
||||||
"light.light183": 678692091,
|
"light.light182": 441721490,
|
||||||
"light.light184": 678757628,
|
"light.light183": 458499109,
|
||||||
"light.light185": 678823165,
|
"light.light184": 341055776,
|
||||||
"light.light186": 678888702,
|
"light.light185": 357833395,
|
||||||
"light.light187": 678954239,
|
"light.light186": 374611014,
|
||||||
"light.light188": 679019776,
|
"light.light187": 391388633,
|
||||||
"light.light189": 679085313,
|
"light.light188": 542387204,
|
||||||
"light.light19": 595199177,
|
"light.light189": 559164823,
|
||||||
"light.light190": 678626553,
|
"light.light19": 2518136807,
|
||||||
"light.light191": 678692090,
|
"light.light190": 508979061,
|
||||||
"light.light192": 678757627,
|
"light.light191": 492201442,
|
||||||
"light.light193": 678823164,
|
"light.light192": 475423823,
|
||||||
"light.light194": 678888701,
|
"light.light193": 458646204,
|
||||||
"light.light195": 678954238,
|
"light.light194": 441868585,
|
||||||
"light.light196": 679019775,
|
"light.light195": 425090966,
|
||||||
"light.light197": 679085312,
|
"light.light196": 408313347,
|
||||||
"light.light198": 679150849,
|
"light.light197": 391535728,
|
||||||
"light.light199": 679216386,
|
"light.light198": 643200013,
|
||||||
"light.light2": 514983057,
|
"light.light199": 626422394,
|
||||||
"light.light20": 594740417,
|
"light.light2": 335133085,
|
||||||
"light.light200": 677643505,
|
"light.light20": 522144599,
|
||||||
|
"light.light200": 1698935589,
|
||||||
"light.light201": 1682157970,
|
"light.light201": 1682157970,
|
||||||
"light.light202": 1665380351,
|
"light.light202": 1665380351,
|
||||||
"light.light203": 1648602732,
|
"light.light203": 1648602732,
|
||||||
|
@ -293,8 +287,8 @@ async def test_aid_generation_no_unique_ids_handles_collision(
|
||||||
"light.light207": 1581492256,
|
"light.light207": 1581492256,
|
||||||
"light.light208": 1833156541,
|
"light.light208": 1833156541,
|
||||||
"light.light209": 1816378922,
|
"light.light209": 1816378922,
|
||||||
"light.light21": 594805954,
|
"light.light21": 505366980,
|
||||||
"light.light210": 677774578,
|
"light.light210": 1598122780,
|
||||||
"light.light211": 1614900399,
|
"light.light211": 1614900399,
|
||||||
"light.light212": 1631678018,
|
"light.light212": 1631678018,
|
||||||
"light.light213": 1648455637,
|
"light.light213": 1648455637,
|
||||||
|
@ -304,215 +298,217 @@ async def test_aid_generation_no_unique_ids_handles_collision(
|
||||||
"light.light217": 1581345161,
|
"light.light217": 1581345161,
|
||||||
"light.light218": 1732343732,
|
"light.light218": 1732343732,
|
||||||
"light.light219": 1749121351,
|
"light.light219": 1749121351,
|
||||||
"light.light22": 594871491,
|
"light.light22": 555699837,
|
||||||
"light.light23": 594937028,
|
"light.light23": 538922218,
|
||||||
"light.light24": 595002565,
|
"light.light24": 455034123,
|
||||||
"light.light25": 595068102,
|
"light.light25": 438256504,
|
||||||
"light.light26": 595133639,
|
"light.light26": 488589361,
|
||||||
"light.light27": 595199176,
|
"light.light27": 471811742,
|
||||||
"light.light28": 595264713,
|
"light.light28": 387923647,
|
||||||
"light.light29": 595330250,
|
"light.light29": 371146028,
|
||||||
"light.light3": 515048594,
|
"light.light3": 318355466,
|
||||||
"light.light30": 594871490,
|
"light.light30": 421331790,
|
||||||
"light.light31": 594937027,
|
"light.light31": 438109409,
|
||||||
"light.light32": 595002564,
|
"light.light32": 387776552,
|
||||||
"light.light33": 595068101,
|
"light.light33": 404554171,
|
||||||
"light.light34": 595133638,
|
"light.light34": 488442266,
|
||||||
"light.light35": 595199175,
|
"light.light35": 505219885,
|
||||||
"light.light36": 595264712,
|
"light.light36": 454887028,
|
||||||
"light.light37": 595330249,
|
"light.light37": 471664647,
|
||||||
"light.light38": 595395786,
|
"light.light38": 287110838,
|
||||||
"light.light39": 595461323,
|
"light.light39": 303888457,
|
||||||
"light.light4": 515114131,
|
"light.light4": 234467371,
|
||||||
"light.light40": 595002563,
|
"light.light40": 454048385,
|
||||||
"light.light41": 595068100,
|
"light.light41": 437270766,
|
||||||
"light.light42": 595133637,
|
"light.light42": 420493147,
|
||||||
"light.light43": 595199174,
|
"light.light43": 403715528,
|
||||||
"light.light44": 595264711,
|
"light.light44": 521158861,
|
||||||
"light.light45": 595330248,
|
"light.light45": 504381242,
|
||||||
"light.light46": 595395785,
|
"light.light46": 487603623,
|
||||||
"light.light47": 595461322,
|
"light.light47": 470826004,
|
||||||
"light.light48": 595526859,
|
"light.light48": 319827433,
|
||||||
"light.light49": 595592396,
|
"light.light49": 303049814,
|
||||||
"light.light5": 515179668,
|
"light.light5": 217689752,
|
||||||
"light.light50": 595133636,
|
"light.light50": 353235576,
|
||||||
"light.light51": 595199173,
|
"light.light51": 370013195,
|
||||||
"light.light52": 595264710,
|
"light.light52": 386790814,
|
||||||
"light.light53": 595330247,
|
"light.light53": 403568433,
|
||||||
"light.light54": 595395784,
|
"light.light54": 420346052,
|
||||||
"light.light55": 595461321,
|
"light.light55": 437123671,
|
||||||
"light.light56": 595526858,
|
"light.light56": 453901290,
|
||||||
"light.light57": 595592395,
|
"light.light57": 470678909,
|
||||||
"light.light58": 595657932,
|
"light.light58": 219014624,
|
||||||
"light.light59": 595723469,
|
"light.light59": 235792243,
|
||||||
"light.light6": 515245205,
|
"light.light6": 268022609,
|
||||||
"light.light60": 595264709,
|
"light.light60": 2266325427,
|
||||||
"light.light61": 595330246,
|
"light.light61": 2249547808,
|
||||||
"light.light62": 595395783,
|
"light.light62": 2299880665,
|
||||||
"light.light63": 595461320,
|
"light.light63": 2283103046,
|
||||||
"light.light64": 595526857,
|
"light.light64": 2333435903,
|
||||||
"light.light65": 595592394,
|
"light.light65": 2316658284,
|
||||||
"light.light66": 595657931,
|
"light.light66": 2366991141,
|
||||||
"light.light67": 595723468,
|
"light.light67": 2350213522,
|
||||||
"light.light68": 595789005,
|
"light.light68": 2400546379,
|
||||||
"light.light69": 595854542,
|
"light.light69": 2383768760,
|
||||||
"light.light7": 515310742,
|
"light.light7": 251244990,
|
||||||
"light.light70": 595395782,
|
"light.light70": 554861194,
|
||||||
"light.light71": 595461319,
|
"light.light71": 571638813,
|
||||||
"light.light72": 595526856,
|
"light.light72": 521305956,
|
||||||
"light.light73": 595592393,
|
"light.light73": 538083575,
|
||||||
"light.light74": 595657930,
|
"light.light74": 487750718,
|
||||||
"light.light75": 595723467,
|
"light.light75": 504528337,
|
||||||
"light.light76": 595789004,
|
"light.light76": 454195480,
|
||||||
"light.light77": 595854541,
|
"light.light77": 470973099,
|
||||||
"light.light78": 595920078,
|
"light.light78": 420640242,
|
||||||
"light.light79": 595985615,
|
"light.light79": 437417861,
|
||||||
"light.light8": 515376279,
|
"light.light8": 167356895,
|
||||||
"light.light80": 595526855,
|
"light.light80": 2735113021,
|
||||||
"light.light81": 595592392,
|
"light.light81": 2718335402,
|
||||||
"light.light82": 595657929,
|
"light.light82": 2701557783,
|
||||||
"light.light83": 595723466,
|
"light.light83": 2684780164,
|
||||||
"light.light84": 595789003,
|
"light.light84": 2668002545,
|
||||||
"light.light85": 595854540,
|
"light.light85": 2651224926,
|
||||||
"light.light86": 595920077,
|
"light.light86": 2634447307,
|
||||||
"light.light87": 595985614,
|
"light.light87": 2617669688,
|
||||||
"light.light88": 596051151,
|
"light.light88": 2600892069,
|
||||||
"light.light89": 596116688,
|
"light.light89": 2584114450,
|
||||||
"light.light9": 515441816,
|
"light.light9": 150579276,
|
||||||
"light.light90": 595657928,
|
"light.light90": 2634300212,
|
||||||
"light.light91": 595723465,
|
"light.light91": 2651077831,
|
||||||
"light.light92": 595789002,
|
"light.light92": 2667855450,
|
||||||
"light.light93": 595854539,
|
"light.light93": 2684633069,
|
||||||
"light.light94": 595920076,
|
"light.light94": 2567189736,
|
||||||
"light.light95": 595985613,
|
"light.light95": 2583967355,
|
||||||
"light.light96": 596051150,
|
"light.light96": 2600744974,
|
||||||
"light.light97": 596116687,
|
"light.light97": 2617522593,
|
||||||
"light.light98": 596182224,
|
"light.light98": 2500079260,
|
||||||
"light.light99": 596247761,
|
"light.light99": 2516856879,
|
||||||
}
|
}
|
||||||
|
|
||||||
await aid_storage.async_save()
|
await aid_storage.async_save()
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
aid_storage = AccessoryAidStorage(hass, config_entry)
|
with patch("fnvhash.fnv1a_32", side_effect=Exception):
|
||||||
|
aid_storage = AccessoryAidStorage(hass, config_entry)
|
||||||
await aid_storage.async_initialize()
|
await aid_storage.async_initialize()
|
||||||
|
|
||||||
assert aid_storage.allocations == {
|
assert aid_storage.allocations == {
|
||||||
"light.light0": 514851983,
|
"device.light.unique_id": 1953095294,
|
||||||
"light.light1": 514917520,
|
"light.light0": 301577847,
|
||||||
"light.light10": 594609344,
|
"light.light1": 284800228,
|
||||||
"light.light100": 677446896,
|
"light.light10": 2367138236,
|
||||||
"light.light101": 677512433,
|
"light.light100": 2822760292,
|
||||||
"light.light102": 677577970,
|
"light.light101": 2839537911,
|
||||||
"light.light103": 677643507,
|
"light.light102": 2856315530,
|
||||||
"light.light104": 677709044,
|
"light.light103": 2873093149,
|
||||||
"light.light105": 677774581,
|
"light.light104": 2755649816,
|
||||||
"light.light106": 677840118,
|
"light.light105": 2772427435,
|
||||||
"light.light107": 677905655,
|
"light.light106": 2789205054,
|
||||||
"light.light108": 677971192,
|
"light.light107": 2805982673,
|
||||||
"light.light109": 678036729,
|
"light.light108": 2688539340,
|
||||||
"light.light11": 594674881,
|
"light.light109": 2705316959,
|
||||||
"light.light110": 677577969,
|
"light.light11": 2383915855,
|
||||||
"light.light111": 677643506,
|
"light.light110": 776141037,
|
||||||
"light.light112": 677709043,
|
"light.light111": 759363418,
|
||||||
"light.light113": 677774580,
|
"light.light112": 742585799,
|
||||||
"light.light114": 677840117,
|
"light.light113": 725808180,
|
||||||
"light.light115": 677905654,
|
"light.light114": 709030561,
|
||||||
"light.light116": 677971191,
|
"light.light115": 692252942,
|
||||||
"light.light117": 678036728,
|
"light.light116": 675475323,
|
||||||
"light.light118": 678102265,
|
"light.light117": 658697704,
|
||||||
"light.light119": 678167802,
|
"light.light118": 641920085,
|
||||||
"light.light12": 594740418,
|
"light.light119": 625142466,
|
||||||
"light.light120": 677709042,
|
"light.light12": 2400693474,
|
||||||
"light.light121": 677774579,
|
"light.light120": 340070038,
|
||||||
"light.light122": 677840116,
|
"light.light121": 356847657,
|
||||||
"light.light123": 677905653,
|
"light.light122": 306514800,
|
||||||
"light.light124": 677971190,
|
"light.light123": 323292419,
|
||||||
"light.light125": 678036727,
|
"light.light124": 407180514,
|
||||||
"light.light126": 678102264,
|
"light.light125": 423958133,
|
||||||
"light.light127": 678167801,
|
"light.light126": 373625276,
|
||||||
"light.light128": 678233338,
|
"light.light127": 390402895,
|
||||||
"light.light129": 678298875,
|
"light.light128": 474290990,
|
||||||
"light.light13": 594805955,
|
"light.light129": 491068609,
|
||||||
"light.light130": 677840115,
|
"light.light13": 2417471093,
|
||||||
"light.light131": 677905652,
|
"light.light130": 440882847,
|
||||||
"light.light132": 677971189,
|
"light.light131": 424105228,
|
||||||
"light.light133": 678036726,
|
"light.light132": 474438085,
|
||||||
"light.light134": 678102263,
|
"light.light133": 457660466,
|
||||||
"light.light135": 678167800,
|
"light.light134": 373772371,
|
||||||
"light.light136": 678233337,
|
"light.light135": 356994752,
|
||||||
"light.light137": 678298874,
|
"light.light136": 407327609,
|
||||||
"light.light138": 678364411,
|
"light.light137": 390549990,
|
||||||
"light.light139": 678429948,
|
"light.light138": 575103799,
|
||||||
"light.light14": 594871492,
|
"light.light139": 558326180,
|
||||||
"light.light140": 677971188,
|
"light.light14": 2300027760,
|
||||||
"light.light141": 678036725,
|
"light.light140": 271973824,
|
||||||
"light.light142": 678102262,
|
"light.light141": 288751443,
|
||||||
"light.light143": 678167799,
|
"light.light142": 305529062,
|
||||||
"light.light144": 678233336,
|
"light.light143": 322306681,
|
||||||
"light.light145": 678298873,
|
"light.light144": 339084300,
|
||||||
"light.light146": 678364410,
|
"light.light145": 355861919,
|
||||||
"light.light147": 678429947,
|
"light.light146": 372639538,
|
||||||
"light.light148": 678495484,
|
"light.light147": 389417157,
|
||||||
"light.light149": 678561021,
|
"light.light148": 406194776,
|
||||||
"light.light15": 594937029,
|
"light.light149": 422972395,
|
||||||
"light.light150": 678102261,
|
"light.light15": 2316805379,
|
||||||
"light.light151": 678167798,
|
"light.light150": 2520321865,
|
||||||
"light.light152": 678233335,
|
"light.light151": 2503544246,
|
||||||
"light.light153": 678298872,
|
"light.light152": 2486766627,
|
||||||
"light.light154": 678364409,
|
"light.light153": 2469989008,
|
||||||
"light.light155": 678429946,
|
"light.light154": 2587432341,
|
||||||
"light.light156": 678495483,
|
"light.light155": 2570654722,
|
||||||
"light.light157": 678561020,
|
"light.light156": 2553877103,
|
||||||
"light.light158": 678626557,
|
"light.light157": 2537099484,
|
||||||
"light.light159": 678692094,
|
"light.light158": 2654542817,
|
||||||
"light.light16": 595002566,
|
"light.light159": 2637765198,
|
||||||
"light.light160": 678233334,
|
"light.light16": 2333582998,
|
||||||
"light.light161": 678298871,
|
"light.light160": 2621134674,
|
||||||
"light.light162": 678364408,
|
"light.light161": 2637912293,
|
||||||
"light.light163": 678429945,
|
"light.light162": 2587579436,
|
||||||
"light.light164": 678495482,
|
"light.light163": 2604357055,
|
||||||
"light.light165": 678561019,
|
"light.light164": 2554024198,
|
||||||
"light.light166": 678626556,
|
"light.light165": 2570801817,
|
||||||
"light.light167": 678692093,
|
"light.light166": 2520468960,
|
||||||
"light.light168": 678757630,
|
"light.light167": 2537246579,
|
||||||
"light.light169": 678823167,
|
"light.light168": 2755355626,
|
||||||
"light.light17": 595068103,
|
"light.light169": 2772133245,
|
||||||
"light.light170": 678364407,
|
"light.light17": 2350360617,
|
||||||
"light.light171": 678429944,
|
"light.light170": 2721947483,
|
||||||
"light.light172": 678495481,
|
"light.light171": 2705169864,
|
||||||
"light.light173": 678561018,
|
"light.light172": 2755502721,
|
||||||
"light.light174": 678626555,
|
"light.light173": 2738725102,
|
||||||
"light.light175": 678692092,
|
"light.light174": 2789057959,
|
||||||
"light.light176": 678757629,
|
"light.light175": 2772280340,
|
||||||
"light.light177": 678823166,
|
"light.light176": 2822613197,
|
||||||
"light.light178": 678888703,
|
"light.light177": 2805835578,
|
||||||
"light.light179": 678954240,
|
"light.light178": 2587726531,
|
||||||
"light.light18": 595133640,
|
"light.light179": 2570948912,
|
||||||
"light.light180": 678495480,
|
"light.light18": 2501359188,
|
||||||
"light.light181": 678561017,
|
"light.light180": 408166252,
|
||||||
"light.light182": 678626554,
|
"light.light181": 424943871,
|
||||||
"light.light183": 678692091,
|
"light.light182": 441721490,
|
||||||
"light.light184": 678757628,
|
"light.light183": 458499109,
|
||||||
"light.light185": 678823165,
|
"light.light184": 341055776,
|
||||||
"light.light186": 678888702,
|
"light.light185": 357833395,
|
||||||
"light.light187": 678954239,
|
"light.light186": 374611014,
|
||||||
"light.light188": 679019776,
|
"light.light187": 391388633,
|
||||||
"light.light189": 679085313,
|
"light.light188": 542387204,
|
||||||
"light.light19": 595199177,
|
"light.light189": 559164823,
|
||||||
"light.light190": 678626553,
|
"light.light19": 2518136807,
|
||||||
"light.light191": 678692090,
|
"light.light190": 508979061,
|
||||||
"light.light192": 678757627,
|
"light.light191": 492201442,
|
||||||
"light.light193": 678823164,
|
"light.light192": 475423823,
|
||||||
"light.light194": 678888701,
|
"light.light193": 458646204,
|
||||||
"light.light195": 678954238,
|
"light.light194": 441868585,
|
||||||
"light.light196": 679019775,
|
"light.light195": 425090966,
|
||||||
"light.light197": 679085312,
|
"light.light196": 408313347,
|
||||||
"light.light198": 679150849,
|
"light.light197": 391535728,
|
||||||
"light.light199": 679216386,
|
"light.light198": 643200013,
|
||||||
"light.light2": 514983057,
|
"light.light199": 626422394,
|
||||||
"light.light20": 594740417,
|
"light.light2": 335133085,
|
||||||
"light.light200": 677643505,
|
"light.light20": 522144599,
|
||||||
|
"light.light200": 1698935589,
|
||||||
"light.light201": 1682157970,
|
"light.light201": 1682157970,
|
||||||
"light.light202": 1665380351,
|
"light.light202": 1665380351,
|
||||||
"light.light203": 1648602732,
|
"light.light203": 1648602732,
|
||||||
|
@ -522,8 +518,8 @@ async def test_aid_generation_no_unique_ids_handles_collision(
|
||||||
"light.light207": 1581492256,
|
"light.light207": 1581492256,
|
||||||
"light.light208": 1833156541,
|
"light.light208": 1833156541,
|
||||||
"light.light209": 1816378922,
|
"light.light209": 1816378922,
|
||||||
"light.light21": 594805954,
|
"light.light21": 505366980,
|
||||||
"light.light210": 677774578,
|
"light.light210": 1598122780,
|
||||||
"light.light211": 1614900399,
|
"light.light211": 1614900399,
|
||||||
"light.light212": 1631678018,
|
"light.light212": 1631678018,
|
||||||
"light.light213": 1648455637,
|
"light.light213": 1648455637,
|
||||||
|
@ -533,91 +529,91 @@ async def test_aid_generation_no_unique_ids_handles_collision(
|
||||||
"light.light217": 1581345161,
|
"light.light217": 1581345161,
|
||||||
"light.light218": 1732343732,
|
"light.light218": 1732343732,
|
||||||
"light.light219": 1749121351,
|
"light.light219": 1749121351,
|
||||||
"light.light22": 594871491,
|
"light.light22": 555699837,
|
||||||
"light.light23": 594937028,
|
"light.light23": 538922218,
|
||||||
"light.light24": 595002565,
|
"light.light24": 455034123,
|
||||||
"light.light25": 595068102,
|
"light.light25": 438256504,
|
||||||
"light.light26": 595133639,
|
"light.light26": 488589361,
|
||||||
"light.light27": 595199176,
|
"light.light27": 471811742,
|
||||||
"light.light28": 595264713,
|
"light.light28": 387923647,
|
||||||
"light.light29": 595330250,
|
"light.light29": 371146028,
|
||||||
"light.light3": 515048594,
|
"light.light3": 318355466,
|
||||||
"light.light30": 594871490,
|
"light.light30": 421331790,
|
||||||
"light.light31": 594937027,
|
"light.light31": 438109409,
|
||||||
"light.light32": 595002564,
|
"light.light32": 387776552,
|
||||||
"light.light33": 595068101,
|
"light.light33": 404554171,
|
||||||
"light.light34": 595133638,
|
"light.light34": 488442266,
|
||||||
"light.light35": 595199175,
|
"light.light35": 505219885,
|
||||||
"light.light36": 595264712,
|
"light.light36": 454887028,
|
||||||
"light.light37": 595330249,
|
"light.light37": 471664647,
|
||||||
"light.light38": 595395786,
|
"light.light38": 287110838,
|
||||||
"light.light39": 595461323,
|
"light.light39": 303888457,
|
||||||
"light.light4": 515114131,
|
"light.light4": 234467371,
|
||||||
"light.light40": 595002563,
|
"light.light40": 454048385,
|
||||||
"light.light41": 595068100,
|
"light.light41": 437270766,
|
||||||
"light.light42": 595133637,
|
"light.light42": 420493147,
|
||||||
"light.light43": 595199174,
|
"light.light43": 403715528,
|
||||||
"light.light44": 595264711,
|
"light.light44": 521158861,
|
||||||
"light.light45": 595330248,
|
"light.light45": 504381242,
|
||||||
"light.light46": 595395785,
|
"light.light46": 487603623,
|
||||||
"light.light47": 595461322,
|
"light.light47": 470826004,
|
||||||
"light.light48": 595526859,
|
"light.light48": 319827433,
|
||||||
"light.light49": 595592396,
|
"light.light49": 303049814,
|
||||||
"light.light5": 515179668,
|
"light.light5": 217689752,
|
||||||
"light.light50": 595133636,
|
"light.light50": 353235576,
|
||||||
"light.light51": 595199173,
|
"light.light51": 370013195,
|
||||||
"light.light52": 595264710,
|
"light.light52": 386790814,
|
||||||
"light.light53": 595330247,
|
"light.light53": 403568433,
|
||||||
"light.light54": 595395784,
|
"light.light54": 420346052,
|
||||||
"light.light55": 595461321,
|
"light.light55": 437123671,
|
||||||
"light.light56": 595526858,
|
"light.light56": 453901290,
|
||||||
"light.light57": 595592395,
|
"light.light57": 470678909,
|
||||||
"light.light58": 595657932,
|
"light.light58": 219014624,
|
||||||
"light.light59": 595723469,
|
"light.light59": 235792243,
|
||||||
"light.light6": 515245205,
|
"light.light6": 268022609,
|
||||||
"light.light60": 595264709,
|
"light.light60": 2266325427,
|
||||||
"light.light61": 595330246,
|
"light.light61": 2249547808,
|
||||||
"light.light62": 595395783,
|
"light.light62": 2299880665,
|
||||||
"light.light63": 595461320,
|
"light.light63": 2283103046,
|
||||||
"light.light64": 595526857,
|
"light.light64": 2333435903,
|
||||||
"light.light65": 595592394,
|
"light.light65": 2316658284,
|
||||||
"light.light66": 595657931,
|
"light.light66": 2366991141,
|
||||||
"light.light67": 595723468,
|
"light.light67": 2350213522,
|
||||||
"light.light68": 595789005,
|
"light.light68": 2400546379,
|
||||||
"light.light69": 595854542,
|
"light.light69": 2383768760,
|
||||||
"light.light7": 515310742,
|
"light.light7": 251244990,
|
||||||
"light.light70": 595395782,
|
"light.light70": 554861194,
|
||||||
"light.light71": 595461319,
|
"light.light71": 571638813,
|
||||||
"light.light72": 595526856,
|
"light.light72": 521305956,
|
||||||
"light.light73": 595592393,
|
"light.light73": 538083575,
|
||||||
"light.light74": 595657930,
|
"light.light74": 487750718,
|
||||||
"light.light75": 595723467,
|
"light.light75": 504528337,
|
||||||
"light.light76": 595789004,
|
"light.light76": 454195480,
|
||||||
"light.light77": 595854541,
|
"light.light77": 470973099,
|
||||||
"light.light78": 595920078,
|
"light.light78": 420640242,
|
||||||
"light.light79": 595985615,
|
"light.light79": 437417861,
|
||||||
"light.light8": 515376279,
|
"light.light8": 167356895,
|
||||||
"light.light80": 595526855,
|
"light.light80": 2735113021,
|
||||||
"light.light81": 595592392,
|
"light.light81": 2718335402,
|
||||||
"light.light82": 595657929,
|
"light.light82": 2701557783,
|
||||||
"light.light83": 595723466,
|
"light.light83": 2684780164,
|
||||||
"light.light84": 595789003,
|
"light.light84": 2668002545,
|
||||||
"light.light85": 595854540,
|
"light.light85": 2651224926,
|
||||||
"light.light86": 595920077,
|
"light.light86": 2634447307,
|
||||||
"light.light87": 595985614,
|
"light.light87": 2617669688,
|
||||||
"light.light88": 596051151,
|
"light.light88": 2600892069,
|
||||||
"light.light89": 596116688,
|
"light.light89": 2584114450,
|
||||||
"light.light9": 515441816,
|
"light.light9": 150579276,
|
||||||
"light.light90": 595657928,
|
"light.light90": 2634300212,
|
||||||
"light.light91": 595723465,
|
"light.light91": 2651077831,
|
||||||
"light.light92": 595789002,
|
"light.light92": 2667855450,
|
||||||
"light.light93": 595854539,
|
"light.light93": 2684633069,
|
||||||
"light.light94": 595920076,
|
"light.light94": 2567189736,
|
||||||
"light.light95": 595985613,
|
"light.light95": 2583967355,
|
||||||
"light.light96": 596051150,
|
"light.light96": 2600744974,
|
||||||
"light.light97": 596116687,
|
"light.light97": 2617522593,
|
||||||
"light.light98": 596182224,
|
"light.light98": 2500079260,
|
||||||
"light.light99": 596247761,
|
"light.light99": 2516856879,
|
||||||
}
|
}
|
||||||
|
|
||||||
aidstore = get_aid_storage_filename_for_entry_id(config_entry.entry_id)
|
aidstore = get_aid_storage_filename_for_entry_id(config_entry.entry_id)
|
||||||
|
|
|
@ -390,15 +390,15 @@ async def test_homekit_add_accessory(hass):
|
||||||
with patch(f"{PATH_HOMEKIT}.get_accessory") as mock_get_acc:
|
with patch(f"{PATH_HOMEKIT}.get_accessory") as mock_get_acc:
|
||||||
mock_get_acc.side_effect = [None, "acc", None]
|
mock_get_acc.side_effect = [None, "acc", None]
|
||||||
homekit.add_bridge_accessory(State("light.demo", "on"))
|
homekit.add_bridge_accessory(State("light.demo", "on"))
|
||||||
mock_get_acc.assert_called_with(hass, "driver", ANY, 363398124, {})
|
mock_get_acc.assert_called_with(hass, "driver", ANY, 1403373688, {})
|
||||||
assert not mock_bridge.add_accessory.called
|
assert not mock_bridge.add_accessory.called
|
||||||
|
|
||||||
homekit.add_bridge_accessory(State("demo.test", "on"))
|
homekit.add_bridge_accessory(State("demo.test", "on"))
|
||||||
mock_get_acc.assert_called_with(hass, "driver", ANY, 294192020, {})
|
mock_get_acc.assert_called_with(hass, "driver", ANY, 600325356, {})
|
||||||
assert mock_bridge.add_accessory.called
|
assert mock_bridge.add_accessory.called
|
||||||
|
|
||||||
homekit.add_bridge_accessory(State("demo.test_2", "on"))
|
homekit.add_bridge_accessory(State("demo.test_2", "on"))
|
||||||
mock_get_acc.assert_called_with(hass, "driver", ANY, 429982757, {})
|
mock_get_acc.assert_called_with(hass, "driver", ANY, 1467253281, {})
|
||||||
mock_bridge.add_accessory.assert_called_with("acc")
|
mock_bridge.add_accessory.assert_called_with("acc")
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue