mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Include border agent ID in thread router discovery (#98378)
This commit is contained in:
parent
2272a9db00
commit
d4753ebd3b
@ -32,6 +32,7 @@ class ThreadRouterDiscoveryData:
|
|||||||
"""Thread router discovery data."""
|
"""Thread router discovery data."""
|
||||||
|
|
||||||
addresses: list[str] | None
|
addresses: list[str] | None
|
||||||
|
border_agent_id: str | None
|
||||||
brand: str | None
|
brand: str | None
|
||||||
extended_address: str | None
|
extended_address: str | None
|
||||||
extended_pan_id: 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
|
# For legacy backwards compatibility zeroconf allows properties to be set
|
||||||
# as strings but we never do that so we can safely cast here.
|
# as strings but we never do that so we can safely cast here.
|
||||||
service_properties = cast(dict[bytes, bytes | None], service.properties)
|
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_addr = service_properties.get(b"xa")
|
||||||
ext_pan_id = service_properties.get(b"xp")
|
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"))
|
model_name = try_decode(service_properties.get(b"mn"))
|
||||||
|
network_name = try_decode(service_properties.get(b"nn"))
|
||||||
server = service.server
|
server = service.server
|
||||||
vendor_name = try_decode(service_properties.get(b"vn"))
|
|
||||||
thread_version = try_decode(service_properties.get(b"tv"))
|
thread_version = try_decode(service_properties.get(b"tv"))
|
||||||
|
vendor_name = try_decode(service_properties.get(b"vn"))
|
||||||
|
|
||||||
unconfigured = None
|
unconfigured = None
|
||||||
brand = KNOWN_BRANDS.get(vendor_name)
|
brand = KNOWN_BRANDS.get(vendor_name)
|
||||||
if brand == "homeassistant":
|
if brand == "homeassistant":
|
||||||
@ -84,6 +88,7 @@ def async_discovery_data_from_service(
|
|||||||
|
|
||||||
return ThreadRouterDiscoveryData(
|
return ThreadRouterDiscoveryData(
|
||||||
addresses=service.parsed_addresses(),
|
addresses=service.parsed_addresses(),
|
||||||
|
border_agent_id=border_agent_id.hex() if border_agent_id is not None else None,
|
||||||
brand=brand,
|
brand=brand,
|
||||||
extended_address=ext_addr.hex() if ext_addr is not None else None,
|
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,
|
extended_pan_id=ext_pan_id.hex() if ext_pan_id is not None else None,
|
||||||
|
@ -93,6 +93,7 @@ ROUTER_DISCOVERY_HASS = {
|
|||||||
"server": "core-silabs-multiprotocol.local.",
|
"server": "core-silabs-multiprotocol.local.",
|
||||||
"properties": {
|
"properties": {
|
||||||
b"rv": b"1",
|
b"rv": b"1",
|
||||||
|
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
|
||||||
b"vn": b"HomeAssistant",
|
b"vn": b"HomeAssistant",
|
||||||
b"mn": b"OpenThreadBorderRouter",
|
b"mn": b"OpenThreadBorderRouter",
|
||||||
b"nn": b"OpenThread HC",
|
b"nn": b"OpenThread HC",
|
||||||
@ -105,6 +106,7 @@ ROUTER_DISCOVERY_HASS = {
|
|||||||
b"sq": b"3",
|
b"sq": b"3",
|
||||||
b"bb": b"\xf0\xbf",
|
b"bb": b"\xf0\xbf",
|
||||||
b"dn": b"DefaultDomain",
|
b"dn": b"DefaultDomain",
|
||||||
|
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
|
||||||
},
|
},
|
||||||
"interface_index": None,
|
"interface_index": None,
|
||||||
}
|
}
|
||||||
@ -119,6 +121,7 @@ ROUTER_DISCOVERY_HASS_BAD_DATA = {
|
|||||||
"server": "core-silabs-multiprotocol.local.",
|
"server": "core-silabs-multiprotocol.local.",
|
||||||
"properties": {
|
"properties": {
|
||||||
b"rv": b"1",
|
b"rv": b"1",
|
||||||
|
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
|
||||||
b"vn": b"HomeAssistant\xff", # Invalid UTF-8
|
b"vn": b"HomeAssistant\xff", # Invalid UTF-8
|
||||||
b"mn": b"OpenThreadBorderRouter",
|
b"mn": b"OpenThreadBorderRouter",
|
||||||
b"nn": b"OpenThread HC",
|
b"nn": b"OpenThread HC",
|
||||||
@ -131,6 +134,7 @@ ROUTER_DISCOVERY_HASS_BAD_DATA = {
|
|||||||
b"sq": b"3",
|
b"sq": b"3",
|
||||||
b"bb": b"\xf0\xbf",
|
b"bb": b"\xf0\xbf",
|
||||||
b"dn": b"DefaultDomain",
|
b"dn": b"DefaultDomain",
|
||||||
|
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
|
||||||
},
|
},
|
||||||
"interface_index": None,
|
"interface_index": None,
|
||||||
}
|
}
|
||||||
@ -145,6 +149,7 @@ ROUTER_DISCOVERY_HASS_MISSING_DATA = {
|
|||||||
"server": "core-silabs-multiprotocol.local.",
|
"server": "core-silabs-multiprotocol.local.",
|
||||||
"properties": {
|
"properties": {
|
||||||
b"rv": b"1",
|
b"rv": b"1",
|
||||||
|
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
|
||||||
b"mn": b"OpenThreadBorderRouter",
|
b"mn": b"OpenThreadBorderRouter",
|
||||||
b"nn": b"OpenThread HC",
|
b"nn": b"OpenThread HC",
|
||||||
b"xp": b"\xe6\x0f\xc7\xc1\x86!,\xe5",
|
b"xp": b"\xe6\x0f\xc7\xc1\x86!,\xe5",
|
||||||
@ -156,6 +161,7 @@ ROUTER_DISCOVERY_HASS_MISSING_DATA = {
|
|||||||
b"sq": b"3",
|
b"sq": b"3",
|
||||||
b"bb": b"\xf0\xbf",
|
b"bb": b"\xf0\xbf",
|
||||||
b"dn": b"DefaultDomain",
|
b"dn": b"DefaultDomain",
|
||||||
|
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
|
||||||
},
|
},
|
||||||
"interface_index": None,
|
"interface_index": None,
|
||||||
}
|
}
|
||||||
@ -171,6 +177,7 @@ ROUTER_DISCOVERY_HASS_MISSING_MANDATORY_DATA = {
|
|||||||
"server": "core-silabs-multiprotocol.local.",
|
"server": "core-silabs-multiprotocol.local.",
|
||||||
"properties": {
|
"properties": {
|
||||||
b"rv": b"1",
|
b"rv": b"1",
|
||||||
|
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
|
||||||
b"vn": b"HomeAssistant",
|
b"vn": b"HomeAssistant",
|
||||||
b"mn": b"OpenThreadBorderRouter",
|
b"mn": b"OpenThreadBorderRouter",
|
||||||
b"nn": b"OpenThread HC",
|
b"nn": b"OpenThread HC",
|
||||||
@ -182,6 +189,7 @@ ROUTER_DISCOVERY_HASS_MISSING_MANDATORY_DATA = {
|
|||||||
b"sq": b"3",
|
b"sq": b"3",
|
||||||
b"bb": b"\xf0\xbf",
|
b"bb": b"\xf0\xbf",
|
||||||
b"dn": b"DefaultDomain",
|
b"dn": b"DefaultDomain",
|
||||||
|
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
|
||||||
},
|
},
|
||||||
"interface_index": None,
|
"interface_index": None,
|
||||||
}
|
}
|
||||||
@ -197,6 +205,7 @@ ROUTER_DISCOVERY_HASS_NO_ACTIVE_TIMESTAMP = {
|
|||||||
"server": "core-silabs-multiprotocol.local.",
|
"server": "core-silabs-multiprotocol.local.",
|
||||||
"properties": {
|
"properties": {
|
||||||
b"rv": b"1",
|
b"rv": b"1",
|
||||||
|
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
|
||||||
b"vn": b"HomeAssistant",
|
b"vn": b"HomeAssistant",
|
||||||
b"mn": b"OpenThreadBorderRouter",
|
b"mn": b"OpenThreadBorderRouter",
|
||||||
b"nn": b"OpenThread HC",
|
b"nn": b"OpenThread HC",
|
||||||
@ -208,6 +217,7 @@ ROUTER_DISCOVERY_HASS_NO_ACTIVE_TIMESTAMP = {
|
|||||||
b"sq": b"3",
|
b"sq": b"3",
|
||||||
b"bb": b"\xf0\xbf",
|
b"bb": b"\xf0\xbf",
|
||||||
b"dn": b"DefaultDomain",
|
b"dn": b"DefaultDomain",
|
||||||
|
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
|
||||||
},
|
},
|
||||||
"interface_index": None,
|
"interface_index": None,
|
||||||
}
|
}
|
||||||
@ -223,6 +233,7 @@ ROUTER_DISCOVERY_HASS_NO_STATE_BITMAP = {
|
|||||||
"server": "core-silabs-multiprotocol.local.",
|
"server": "core-silabs-multiprotocol.local.",
|
||||||
"properties": {
|
"properties": {
|
||||||
b"rv": b"1",
|
b"rv": b"1",
|
||||||
|
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
|
||||||
b"vn": b"HomeAssistant",
|
b"vn": b"HomeAssistant",
|
||||||
b"mn": b"OpenThreadBorderRouter",
|
b"mn": b"OpenThreadBorderRouter",
|
||||||
b"nn": b"OpenThread HC",
|
b"nn": b"OpenThread HC",
|
||||||
@ -234,6 +245,7 @@ ROUTER_DISCOVERY_HASS_NO_STATE_BITMAP = {
|
|||||||
b"sq": b"3",
|
b"sq": b"3",
|
||||||
b"bb": b"\xf0\xbf",
|
b"bb": b"\xf0\xbf",
|
||||||
b"dn": b"DefaultDomain",
|
b"dn": b"DefaultDomain",
|
||||||
|
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
|
||||||
},
|
},
|
||||||
"interface_index": None,
|
"interface_index": None,
|
||||||
}
|
}
|
||||||
@ -249,6 +261,7 @@ ROUTER_DISCOVERY_HASS_BAD_STATE_BITMAP = {
|
|||||||
"server": "core-silabs-multiprotocol.local.",
|
"server": "core-silabs-multiprotocol.local.",
|
||||||
"properties": {
|
"properties": {
|
||||||
b"rv": b"1",
|
b"rv": b"1",
|
||||||
|
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
|
||||||
b"vn": b"HomeAssistant",
|
b"vn": b"HomeAssistant",
|
||||||
b"mn": b"OpenThreadBorderRouter",
|
b"mn": b"OpenThreadBorderRouter",
|
||||||
b"nn": b"OpenThread HC",
|
b"nn": b"OpenThread HC",
|
||||||
@ -261,6 +274,7 @@ ROUTER_DISCOVERY_HASS_BAD_STATE_BITMAP = {
|
|||||||
b"sq": b"3",
|
b"sq": b"3",
|
||||||
b"bb": b"\xf0\xbf",
|
b"bb": b"\xf0\xbf",
|
||||||
b"dn": b"DefaultDomain",
|
b"dn": b"DefaultDomain",
|
||||||
|
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
|
||||||
},
|
},
|
||||||
"interface_index": None,
|
"interface_index": None,
|
||||||
}
|
}
|
||||||
@ -276,6 +290,7 @@ ROUTER_DISCOVERY_HASS_STATE_BITMAP_NOT_ACTIVE = {
|
|||||||
"server": "core-silabs-multiprotocol.local.",
|
"server": "core-silabs-multiprotocol.local.",
|
||||||
"properties": {
|
"properties": {
|
||||||
b"rv": b"1",
|
b"rv": b"1",
|
||||||
|
b"id": b"#\x0cj\x1a\xc5\x7foK\xe2b\xac\xf3.^\xf5,",
|
||||||
b"vn": b"HomeAssistant",
|
b"vn": b"HomeAssistant",
|
||||||
b"mn": b"OpenThreadBorderRouter",
|
b"mn": b"OpenThreadBorderRouter",
|
||||||
b"nn": b"OpenThread HC",
|
b"nn": b"OpenThread HC",
|
||||||
@ -288,6 +303,7 @@ ROUTER_DISCOVERY_HASS_STATE_BITMAP_NOT_ACTIVE = {
|
|||||||
b"sq": b"3",
|
b"sq": b"3",
|
||||||
b"bb": b"\xf0\xbf",
|
b"bb": b"\xf0\xbf",
|
||||||
b"dn": b"DefaultDomain",
|
b"dn": b"DefaultDomain",
|
||||||
|
b"omr": b"@\xfd \xbe\x89IZ\x00\x01",
|
||||||
},
|
},
|
||||||
"interface_index": None,
|
"interface_index": None,
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,7 @@ async def test_discover_routers(hass: HomeAssistant, mock_async_zeroconf: None)
|
|||||||
"aeeb2f594b570bbf",
|
"aeeb2f594b570bbf",
|
||||||
discovery.ThreadRouterDiscoveryData(
|
discovery.ThreadRouterDiscoveryData(
|
||||||
addresses=["192.168.0.115"],
|
addresses=["192.168.0.115"],
|
||||||
|
border_agent_id="230c6a1ac57f6f4be262acf32e5ef52c",
|
||||||
brand="homeassistant",
|
brand="homeassistant",
|
||||||
extended_address="aeeb2f594b570bbf",
|
extended_address="aeeb2f594b570bbf",
|
||||||
extended_pan_id="e60fc7c186212ce5",
|
extended_pan_id="e60fc7c186212ce5",
|
||||||
@ -98,6 +99,7 @@ async def test_discover_routers(hass: HomeAssistant, mock_async_zeroconf: None)
|
|||||||
"f6a99b425a67abed",
|
"f6a99b425a67abed",
|
||||||
discovery.ThreadRouterDiscoveryData(
|
discovery.ThreadRouterDiscoveryData(
|
||||||
addresses=["192.168.0.124"],
|
addresses=["192.168.0.124"],
|
||||||
|
border_agent_id="bc3740c3e963aa8735bebecd7cc503c7",
|
||||||
brand="google",
|
brand="google",
|
||||||
extended_address="f6a99b425a67abed",
|
extended_address="f6a99b425a67abed",
|
||||||
extended_pan_id="9e75e256f61409a3",
|
extended_pan_id="9e75e256f61409a3",
|
||||||
@ -176,6 +178,7 @@ async def test_discover_routers_unconfigured(
|
|||||||
"aeeb2f594b570bbf",
|
"aeeb2f594b570bbf",
|
||||||
discovery.ThreadRouterDiscoveryData(
|
discovery.ThreadRouterDiscoveryData(
|
||||||
addresses=["192.168.0.115"],
|
addresses=["192.168.0.115"],
|
||||||
|
border_agent_id="230c6a1ac57f6f4be262acf32e5ef52c",
|
||||||
brand="homeassistant",
|
brand="homeassistant",
|
||||||
extended_address="aeeb2f594b570bbf",
|
extended_address="aeeb2f594b570bbf",
|
||||||
extended_pan_id="e60fc7c186212ce5",
|
extended_pan_id="e60fc7c186212ce5",
|
||||||
@ -221,6 +224,7 @@ async def test_discover_routers_bad_data(
|
|||||||
"aeeb2f594b570bbf",
|
"aeeb2f594b570bbf",
|
||||||
discovery.ThreadRouterDiscoveryData(
|
discovery.ThreadRouterDiscoveryData(
|
||||||
addresses=["192.168.0.115"],
|
addresses=["192.168.0.115"],
|
||||||
|
border_agent_id="230c6a1ac57f6f4be262acf32e5ef52c",
|
||||||
brand=None,
|
brand=None,
|
||||||
extended_address="aeeb2f594b570bbf",
|
extended_address="aeeb2f594b570bbf",
|
||||||
extended_pan_id="e60fc7c186212ce5",
|
extended_pan_id="e60fc7c186212ce5",
|
||||||
|
@ -332,6 +332,7 @@ async def test_discover_routers(
|
|||||||
"event": {
|
"event": {
|
||||||
"data": {
|
"data": {
|
||||||
"addresses": ["192.168.0.115"],
|
"addresses": ["192.168.0.115"],
|
||||||
|
"border_agent_id": "230c6a1ac57f6f4be262acf32e5ef52c",
|
||||||
"brand": "homeassistant",
|
"brand": "homeassistant",
|
||||||
"extended_address": "aeeb2f594b570bbf",
|
"extended_address": "aeeb2f594b570bbf",
|
||||||
"extended_pan_id": "e60fc7c186212ce5",
|
"extended_pan_id": "e60fc7c186212ce5",
|
||||||
@ -361,6 +362,7 @@ async def test_discover_routers(
|
|||||||
"event": {
|
"event": {
|
||||||
"data": {
|
"data": {
|
||||||
"addresses": ["192.168.0.124"],
|
"addresses": ["192.168.0.124"],
|
||||||
|
"border_agent_id": "bc3740c3e963aa8735bebecd7cc503c7",
|
||||||
"brand": "google",
|
"brand": "google",
|
||||||
"extended_address": "f6a99b425a67abed",
|
"extended_address": "f6a99b425a67abed",
|
||||||
"extended_pan_id": "9e75e256f61409a3",
|
"extended_pan_id": "9e75e256f61409a3",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user