Include border agent ID in thread router discovery (#98378)

This commit is contained in:
Erik Montnemery 2023-08-14 16:46:55 +02:00 committed by GitHub
parent 2272a9db00
commit d4753ebd3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 2 deletions

View File

@ -32,6 +32,7 @@ class ThreadRouterDiscoveryData:
"""Thread router discovery data."""
addresses: list[str] | None
border_agent_id: str | None
brand: str | None
extended_address: str | None
extended_pan_id: str | None
@ -61,13 +62,16 @@ def async_discovery_data_from_service(
# For legacy backwards compatibility zeroconf allows properties to be set
# as strings but we never do that so we can safely cast here.
service_properties = cast(dict[bytes, bytes | None], service.properties)
border_agent_id = service_properties.get(b"id")
ext_addr = service_properties.get(b"xa")
ext_pan_id = service_properties.get(b"xp")
network_name = try_decode(service_properties.get(b"nn"))
model_name = try_decode(service_properties.get(b"mn"))
network_name = try_decode(service_properties.get(b"nn"))
server = service.server
vendor_name = try_decode(service_properties.get(b"vn"))
thread_version = try_decode(service_properties.get(b"tv"))
vendor_name = try_decode(service_properties.get(b"vn"))
unconfigured = None
brand = KNOWN_BRANDS.get(vendor_name)
if brand == "homeassistant":
@ -84,6 +88,7 @@ def async_discovery_data_from_service(
return ThreadRouterDiscoveryData(
addresses=service.parsed_addresses(),
border_agent_id=border_agent_id.hex() if border_agent_id is not None else None,
brand=brand,
extended_address=ext_addr.hex() if ext_addr is not None else None,
extended_pan_id=ext_pan_id.hex() if ext_pan_id is not None else None,

View File

@ -93,6 +93,7 @@ ROUTER_DISCOVERY_HASS = {
"server": "core-silabs-multiprotocol.local.",
"properties": {
b"rv": b"1",
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
b"vn": b"HomeAssistant",
b"mn": b"OpenThreadBorderRouter",
b"nn": b"OpenThread HC",
@ -105,6 +106,7 @@ ROUTER_DISCOVERY_HASS = {
b"sq": b"3",
b"bb": b"\xf0\xbf",
b"dn": b"DefaultDomain",
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
},
"interface_index": None,
}
@ -119,6 +121,7 @@ ROUTER_DISCOVERY_HASS_BAD_DATA = {
"server": "core-silabs-multiprotocol.local.",
"properties": {
b"rv": b"1",
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
b"vn": b"HomeAssistant\xff", # Invalid UTF-8
b"mn": b"OpenThreadBorderRouter",
b"nn": b"OpenThread HC",
@ -131,6 +134,7 @@ ROUTER_DISCOVERY_HASS_BAD_DATA = {
b"sq": b"3",
b"bb": b"\xf0\xbf",
b"dn": b"DefaultDomain",
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
},
"interface_index": None,
}
@ -145,6 +149,7 @@ ROUTER_DISCOVERY_HASS_MISSING_DATA = {
"server": "core-silabs-multiprotocol.local.",
"properties": {
b"rv": b"1",
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
b"mn": b"OpenThreadBorderRouter",
b"nn": b"OpenThread HC",
b"xp": b"\xe6\x0f\xc7\xc1\x86!,\xe5",
@ -156,6 +161,7 @@ ROUTER_DISCOVERY_HASS_MISSING_DATA = {
b"sq": b"3",
b"bb": b"\xf0\xbf",
b"dn": b"DefaultDomain",
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
},
"interface_index": None,
}
@ -171,6 +177,7 @@ ROUTER_DISCOVERY_HASS_MISSING_MANDATORY_DATA = {
"server": "core-silabs-multiprotocol.local.",
"properties": {
b"rv": b"1",
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
b"vn": b"HomeAssistant",
b"mn": b"OpenThreadBorderRouter",
b"nn": b"OpenThread HC",
@ -182,6 +189,7 @@ ROUTER_DISCOVERY_HASS_MISSING_MANDATORY_DATA = {
b"sq": b"3",
b"bb": b"\xf0\xbf",
b"dn": b"DefaultDomain",
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
},
"interface_index": None,
}
@ -197,6 +205,7 @@ ROUTER_DISCOVERY_HASS_NO_ACTIVE_TIMESTAMP = {
"server": "core-silabs-multiprotocol.local.",
"properties": {
b"rv": b"1",
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
b"vn": b"HomeAssistant",
b"mn": b"OpenThreadBorderRouter",
b"nn": b"OpenThread HC",
@ -208,6 +217,7 @@ ROUTER_DISCOVERY_HASS_NO_ACTIVE_TIMESTAMP = {
b"sq": b"3",
b"bb": b"\xf0\xbf",
b"dn": b"DefaultDomain",
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
},
"interface_index": None,
}
@ -223,6 +233,7 @@ ROUTER_DISCOVERY_HASS_NO_STATE_BITMAP = {
"server": "core-silabs-multiprotocol.local.",
"properties": {
b"rv": b"1",
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
b"vn": b"HomeAssistant",
b"mn": b"OpenThreadBorderRouter",
b"nn": b"OpenThread HC",
@ -234,6 +245,7 @@ ROUTER_DISCOVERY_HASS_NO_STATE_BITMAP = {
b"sq": b"3",
b"bb": b"\xf0\xbf",
b"dn": b"DefaultDomain",
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
},
"interface_index": None,
}
@ -249,6 +261,7 @@ ROUTER_DISCOVERY_HASS_BAD_STATE_BITMAP = {
"server": "core-silabs-multiprotocol.local.",
"properties": {
b"rv": b"1",
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
b"vn": b"HomeAssistant",
b"mn": b"OpenThreadBorderRouter",
b"nn": b"OpenThread HC",
@ -261,6 +274,7 @@ ROUTER_DISCOVERY_HASS_BAD_STATE_BITMAP = {
b"sq": b"3",
b"bb": b"\xf0\xbf",
b"dn": b"DefaultDomain",
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
},
"interface_index": None,
}
@ -276,6 +290,7 @@ ROUTER_DISCOVERY_HASS_STATE_BITMAP_NOT_ACTIVE = {
"server": "core-silabs-multiprotocol.local.",
"properties": {
b"rv": b"1",
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
b"vn": b"HomeAssistant",
b"mn": b"OpenThreadBorderRouter",
b"nn": b"OpenThread HC",
@ -288,6 +303,7 @@ ROUTER_DISCOVERY_HASS_STATE_BITMAP_NOT_ACTIVE = {
b"sq": b"3",
b"bb": b"\xf0\xbf",
b"dn": b"DefaultDomain",
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
},
"interface_index": None,
}

View File

@ -72,6 +72,7 @@ async def test_discover_routers(hass: HomeAssistant, mock_async_zeroconf: None)
"aeeb2f594b570bbf",
discovery.ThreadRouterDiscoveryData(
addresses=["192.168.0.115"],
border_agent_id="230c6a1ac57f6f4be262acf32e5ef52c",
brand="homeassistant",
extended_address="aeeb2f594b570bbf",
extended_pan_id="e60fc7c186212ce5",
@ -98,6 +99,7 @@ async def test_discover_routers(hass: HomeAssistant, mock_async_zeroconf: None)
"f6a99b425a67abed",
discovery.ThreadRouterDiscoveryData(
addresses=["192.168.0.124"],
border_agent_id="bc3740c3e963aa8735bebecd7cc503c7",
brand="google",
extended_address="f6a99b425a67abed",
extended_pan_id="9e75e256f61409a3",
@ -176,6 +178,7 @@ async def test_discover_routers_unconfigured(
"aeeb2f594b570bbf",
discovery.ThreadRouterDiscoveryData(
addresses=["192.168.0.115"],
border_agent_id="230c6a1ac57f6f4be262acf32e5ef52c",
brand="homeassistant",
extended_address="aeeb2f594b570bbf",
extended_pan_id="e60fc7c186212ce5",
@ -221,6 +224,7 @@ async def test_discover_routers_bad_data(
"aeeb2f594b570bbf",
discovery.ThreadRouterDiscoveryData(
addresses=["192.168.0.115"],
border_agent_id="230c6a1ac57f6f4be262acf32e5ef52c",
brand=None,
extended_address="aeeb2f594b570bbf",
extended_pan_id="e60fc7c186212ce5",

View File

@ -332,6 +332,7 @@ async def test_discover_routers(
"event": {
"data": {
"addresses": ["192.168.0.115"],
"border_agent_id": "230c6a1ac57f6f4be262acf32e5ef52c",
"brand": "homeassistant",
"extended_address": "aeeb2f594b570bbf",
"extended_pan_id": "e60fc7c186212ce5",
@ -361,6 +362,7 @@ async def test_discover_routers(
"event": {
"data": {
"addresses": ["192.168.0.124"],
"border_agent_id": "bc3740c3e963aa8735bebecd7cc503c7",
"brand": "google",
"extended_address": "f6a99b425a67abed",
"extended_pan_id": "9e75e256f61409a3",