diff --git a/homeassistant/components/zha/manifest.json b/homeassistant/components/zha/manifest.json index 5df8cddc1672c8cbbb4e5bf5b544a7ab5bdac054..93d9816d339e4fce105118899be0eca057c199c8 100644 --- a/homeassistant/components/zha/manifest.json +++ b/homeassistant/components/zha/manifest.json @@ -16,10 +16,10 @@ "zigpy-znp==0.5.3" ], "usb": [ - {"vid":"10C4","pid":"EA60"}, - {"vid":"1CF1","pid":"0030"}, - {"vid":"1A86","pid":"7523"}, - {"vid":"10C4","pid":"8A2A"} + {"vid":"10C4","pid":"EA60","known_devices":["slae.sh cc2652rb stick"]}, + {"vid":"1CF1","pid":"0030","known_devices":["Conbee II"]}, + {"vid":"1A86","pid":"7523","known_devices":["Electrolama zig-a-zig-ah"]}, + {"vid":"10C4","pid":"8A2A","known_devices":["Nortek HUSBZB-1"]} ], "codeowners": ["@dmulcahey", "@adminiuga"], "zeroconf": [ diff --git a/homeassistant/components/zwave_js/manifest.json b/homeassistant/components/zwave_js/manifest.json index 5c2d1f0db81ab39ed833e68d0576153e4d7c7402..23a1546a42149ea1a6c1276755869ebb4497f487 100644 --- a/homeassistant/components/zwave_js/manifest.json +++ b/homeassistant/components/zwave_js/manifest.json @@ -8,8 +8,8 @@ "dependencies": ["usb", "http", "websocket_api"], "iot_class": "local_push", "usb": [ - {"vid":"0658","pid":"0200"}, - {"vid":"10C4","pid":"8A2A"}, - {"vid":"10C4","pid":"EA60"} + {"vid":"0658","pid":"0200","known_devices":["Aeotec Z-Stick Gen5+", "Z-WaveMe UZB"]}, + {"vid":"10C4","pid":"8A2A","known_devices":["Nortek HUSBZB-1"]}, + {"vid":"10C4","pid":"EA60","known_devices":["Aeotec Z-Stick 7", "Silicon Labs UZB-7", "Zooz ZST10 700"]} ] } diff --git a/homeassistant/loader.py b/homeassistant/loader.py index 57244d9ec7b94e6edeeab5020accf4f90c5603cd..e186c5d24ba34a10f1e2726f8bba92396b7746ea 100644 --- a/homeassistant/loader.py +++ b/homeassistant/loader.py @@ -230,7 +230,12 @@ async def async_get_usb(hass: HomeAssistant) -> list[dict[str, str]]: if not integration.usb: continue for entry in integration.usb: - usb.append({"domain": integration.domain, **entry}) + usb.append( + { + "domain": integration.domain, + **{k: v for k, v in entry.items() if k != "known_devices"}, + } + ) return usb diff --git a/script/hassfest/manifest.py b/script/hassfest/manifest.py index acb2a999fe35456e205ac1813c76abe51ab5adf3..8c9776ed7c9e06007aefe003f6be9184220456f9 100644 --- a/script/hassfest/manifest.py +++ b/script/hassfest/manifest.py @@ -210,6 +210,7 @@ MANIFEST_SCHEMA = vol.Schema( { vol.Optional("vid"): vol.All(str, verify_uppercase), vol.Optional("pid"): vol.All(str, verify_uppercase), + vol.Optional("known_devices"): [str], } ) ], diff --git a/script/hassfest/usb.py b/script/hassfest/usb.py index 49da04ee03f3185e8ca1616ce7b2aa8e64691a7b..6377fdcb8af3309a4981008a3cb35d70adbe5c91 100644 --- a/script/hassfest/usb.py +++ b/script/hassfest/usb.py @@ -33,7 +33,12 @@ def generate_and_validate(integrations: list[dict[str, str]]) -> str: continue for entry in match_types: - match_list.append({"domain": domain, **entry}) + match_list.append( + { + "domain": domain, + **{k: v for k, v in entry.items() if k != "known_devices"}, + } + ) return BASE.format(json.dumps(match_list, indent=4)) diff --git a/tests/test_loader.py b/tests/test_loader.py index 2c5eb91d0fbb4ad4808aa38166f5231ee369a4a8..9786c9fdcfb9945d5063a4597fb1c7a9b71004cb 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -369,10 +369,18 @@ def _get_test_integration_with_usb_matcher(hass, name, config_flow): "dependencies": [], "requirements": [], "usb": [ - {"vid": "10C4", "pid": "EA60"}, - {"vid": "1CF1", "pid": "0030"}, - {"vid": "1A86", "pid": "7523"}, - {"vid": "10C4", "pid": "8A2A"}, + { + "vid": "10C4", + "pid": "EA60", + "known_devices": ["slae.sh cc2652rb stick"], + }, + {"vid": "1CF1", "pid": "0030", "known_devices": ["Conbee II"]}, + { + "vid": "1A86", + "pid": "7523", + "known_devices": ["Electrolama zig-a-zig-ah"], + }, + {"vid": "10C4", "pid": "8A2A", "known_devices": ["Nortek HUSBZB-1"]}, ], }, )