Skip to content

Commit 69abf69

Browse files
authored
Allow renaming devices with quirk v2 friendly_name (#283)
Allow renaming devices
1 parent 8897c0f commit 69abf69

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

tests/test_device.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import pytest
1010
from zigpy.exceptions import ZigbeeException
1111
import zigpy.profiles.zha
12+
from zigpy.quirks.registry import DeviceRegistry
13+
from zigpy.quirks.v2 import QuirkBuilder
1214
import zigpy.types
1315
from zigpy.zcl.clusters import general
1416
from zigpy.zcl.foundation import Status, WriteAttributesResponse
@@ -20,6 +22,7 @@
2022
SIG_EP_TYPE,
2123
create_mock_zigpy_device,
2224
join_zigpy_device,
25+
zigpy_device_from_json,
2326
)
2427
from zha.application import Platform
2528
from zha.application.const import (
@@ -795,3 +798,25 @@ async def test_device_properties(
795798
assert zha_device.is_router is None
796799
assert zha_device.is_end_device is None
797800
assert zha_device.is_coordinator is None
801+
802+
803+
async def test_quirks_v2_device_renaming(zha_gateway: Gateway) -> None:
804+
"""Test quirks v2 device renaming."""
805+
registry = DeviceRegistry()
806+
807+
(
808+
QuirkBuilder("CentraLite", "3405-L", registry=registry)
809+
.friendly_name(manufacturer="Lowe's", model="IRIS Keypad V2")
810+
.add_to_registry()
811+
)
812+
813+
zigpy_dev = registry.get_device(
814+
await zigpy_device_from_json(
815+
zha_gateway.application_controller,
816+
"tests/data/devices/centralite-3405-l.json",
817+
)
818+
)
819+
820+
zha_device = await join_zigpy_device(zha_gateway, zigpy_dev)
821+
assert zha_device.model == "IRIS Keypad V2"
822+
assert zha_device.manufacturer == "Lowe's"

zha/zigbee/device.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import zigpy.exceptions
1717
from zigpy.profiles import PROFILES
1818
import zigpy.quirks
19+
from zigpy.quirks.v2 import QuirksV2RegistryEntry
1920
from zigpy.types import uint1_t, uint8_t, uint16_t
2021
from zigpy.types.named import EUI64, NWK, ExtendedPanId
2122
from zigpy.zcl.clusters import Cluster
@@ -266,6 +267,11 @@ def ieee(self) -> EUI64:
266267
"""Return ieee address for device."""
267268
return self._zigpy_device.ieee
268269

270+
@property
271+
def quirk_metadata(self) -> QuirksV2RegistryEntry | None:
272+
"""Return the quirk metadata for this device."""
273+
return getattr(self._zigpy_device, "quirk_metadata", None)
274+
269275
@cached_property
270276
def manufacturer(self) -> str:
271277
"""Return manufacturer for device."""
@@ -277,6 +283,12 @@ def manufacturer(self) -> str:
277283
return ""
278284
return manufacturer
279285

286+
if (
287+
self.quirk_metadata is not None
288+
and self.quirk_metadata.friendly_name is not None
289+
):
290+
return self.quirk_metadata.friendly_name.manufacturer
291+
280292
if self._zigpy_device.manufacturer is None:
281293
return UNKNOWN_MANUFACTURER
282294

@@ -291,6 +303,12 @@ def model(self) -> str:
291303
return f"Generic Zigbee Coordinator ({self.gateway.radio_type.pretty_name})"
292304
return model
293305

306+
if (
307+
self.quirk_metadata is not None
308+
and self.quirk_metadata.friendly_name is not None
309+
):
310+
return self.quirk_metadata.friendly_name.model
311+
294312
if self._zigpy_device.model is None:
295313
return UNKNOWN_MODEL
296314

0 commit comments

Comments
 (0)