Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 36 additions & 1 deletion tests/test_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@
from zigpy.exceptions import ZigbeeException
import zigpy.profiles.zha
from zigpy.quirks.registry import DeviceRegistry
from zigpy.quirks.v2 import DeviceAlertLevel, DeviceAlertMetadata, QuirkBuilder
from zigpy.quirks.v2 import (
DeviceAlertLevel,
DeviceAlertMetadata,
ExposesFeatureMetadata,
QuirkBuilder,
)
from zigpy.quirks.v2.homeassistant import EntityType
from zigpy.quirks.v2.homeassistant.sensor import SensorDeviceClass, SensorStateClass
import zigpy.types
Expand Down Expand Up @@ -1123,6 +1128,36 @@ async def test_quirks_v2_translation_placeholders(zha_gateway: Gateway) -> None:
)


async def test_quirks_v2_exposed_features(zha_gateway: Gateway) -> None:
"""Test quirks v2 exposed features."""
registry = DeviceRegistry()

(
QuirkBuilder("CentraLite", "3405-L", registry=registry)
.exposes_feature("some_feature")
.exposes_feature("another_feature", config={"option": True})
.add_to_registry()
)

zigpy_dev = registry.get_device(
await zigpy_device_from_json(
zha_gateway.application_controller,
"tests/data/devices/centralite-3405-l.json",
)
)

zha_device = await join_zigpy_device(zha_gateway, zigpy_dev)

# can access the set of exposed features, similar to v1 quirks
assert zha_device.exposes_features == {"some_feature", "another_feature"}

# can access the quirk metadata for config features
assert zha_device.quirk_metadata.exposes_features == (
ExposesFeatureMetadata(feature="some_feature"),
ExposesFeatureMetadata(feature="another_feature", config={"option": True}),
)


async def test_join_binding_reporting(zha_gateway: Gateway) -> None:
"""Test that new joins go through binding and attribute reporting."""

Expand Down
6 changes: 6 additions & 0 deletions zha/zigbee/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,12 @@ def __init__(
qid: set[str] | str = getattr(self._zigpy_device, ATTR_QUIRK_ID, set())
self.exposes_features: set[str] = {qid} if isinstance(qid, str) else set(qid)

# add v2 quirk exposed features
if self.quirk_metadata is not None:
self.exposes_features.update(
f.feature for f in self.quirk_metadata.exposes_features
)

self._power_config_ch: ClusterHandler | None = None
self._identify_ch: ClusterHandler | None = None
self._basic_ch: ClusterHandler | None = None
Expand Down
Loading