156 lines
4.4 KiB
Python
156 lines
4.4 KiB
Python
"""Test ZHA Core channels."""
|
|
import pytest
|
|
import zigpy.types as t
|
|
|
|
import homeassistant.components.zha.core.channels as channels
|
|
import homeassistant.components.zha.core.device as zha_device
|
|
import homeassistant.components.zha.core.registries as registries
|
|
|
|
from .common import make_device
|
|
|
|
|
|
@pytest.fixture
|
|
def ieee():
|
|
"""IEEE fixture."""
|
|
return t.EUI64.deserialize(b"ieeeaddr")[0]
|
|
|
|
|
|
@pytest.fixture
|
|
def nwk():
|
|
"""NWK fixture."""
|
|
return t.NWK(0xBEEF)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"cluster_id, bind_count, attrs",
|
|
[
|
|
(0x0000, 1, {}),
|
|
(0x0001, 1, {"battery_voltage", "battery_percentage_remaining"}),
|
|
(0x0003, 1, {}),
|
|
(0x0004, 1, {}),
|
|
(0x0005, 1, {}),
|
|
(0x0006, 1, {"on_off"}),
|
|
(0x0007, 1, {}),
|
|
(0x0008, 1, {"current_level"}),
|
|
(0x0009, 1, {}),
|
|
(0x000C, 1, {"present_value"}),
|
|
(0x000D, 1, {"present_value"}),
|
|
(0x000E, 1, {"present_value"}),
|
|
(0x000D, 1, {"present_value"}),
|
|
(0x0010, 1, {"present_value"}),
|
|
(0x0011, 1, {"present_value"}),
|
|
(0x0012, 1, {"present_value"}),
|
|
(0x0013, 1, {"present_value"}),
|
|
(0x0014, 1, {"present_value"}),
|
|
(0x0015, 1, {}),
|
|
(0x0016, 1, {}),
|
|
(0x0019, 1, {}),
|
|
(0x001A, 1, {}),
|
|
(0x001B, 1, {}),
|
|
(0x0020, 1, {}),
|
|
(0x0021, 1, {}),
|
|
(0x0101, 1, {"lock_state"}),
|
|
(0x0202, 1, {"fan_mode"}),
|
|
(0x0300, 1, {"current_x", "current_y", "color_temperature"}),
|
|
(0x0400, 1, {"measured_value"}),
|
|
(0x0401, 1, {"level_status"}),
|
|
(0x0402, 1, {"measured_value"}),
|
|
(0x0403, 1, {"measured_value"}),
|
|
(0x0404, 1, {"measured_value"}),
|
|
(0x0405, 1, {"measured_value"}),
|
|
(0x0406, 1, {"occupancy"}),
|
|
(0x0702, 1, {"instantaneous_demand"}),
|
|
(0x0B04, 1, {"active_power"}),
|
|
(0x1000, 1, {}),
|
|
],
|
|
)
|
|
async def test_in_channel_config(cluster_id, bind_count, attrs, zha_gateway, hass):
|
|
"""Test ZHA core channel configuration for input clusters."""
|
|
zigpy_dev = make_device(
|
|
[cluster_id],
|
|
[],
|
|
0x1234,
|
|
"00:11:22:33:44:55:66:77",
|
|
"test manufacturer",
|
|
"test model",
|
|
)
|
|
zha_dev = zha_device.ZHADevice(hass, zigpy_dev, zha_gateway)
|
|
|
|
cluster = zigpy_dev.endpoints[1].in_clusters[cluster_id]
|
|
channel_class = registries.ZIGBEE_CHANNEL_REGISTRY.get(
|
|
cluster_id, channels.AttributeListeningChannel
|
|
)
|
|
channel = channel_class(cluster, zha_dev)
|
|
|
|
await channel.async_configure()
|
|
|
|
assert cluster.bind.call_count == bind_count
|
|
assert cluster.configure_reporting.call_count == len(attrs)
|
|
reported_attrs = {attr[0][0] for attr in cluster.configure_reporting.call_args_list}
|
|
assert set(attrs) == reported_attrs
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"cluster_id, bind_count",
|
|
[
|
|
(0x0000, 1),
|
|
(0x0001, 1),
|
|
(0x0003, 1),
|
|
(0x0004, 1),
|
|
(0x0005, 1),
|
|
(0x0006, 1),
|
|
(0x0007, 1),
|
|
(0x0008, 1),
|
|
(0x0009, 1),
|
|
(0x0015, 1),
|
|
(0x0016, 1),
|
|
(0x0019, 1),
|
|
(0x001A, 1),
|
|
(0x001B, 1),
|
|
(0x0020, 1),
|
|
(0x0021, 1),
|
|
(0x0101, 1),
|
|
(0x0202, 1),
|
|
(0x0300, 1),
|
|
(0x0400, 1),
|
|
(0x0402, 1),
|
|
(0x0403, 1),
|
|
(0x0405, 1),
|
|
(0x0406, 1),
|
|
(0x0702, 1),
|
|
(0x0B04, 1),
|
|
(0x1000, 1),
|
|
],
|
|
)
|
|
async def test_out_channel_config(cluster_id, bind_count, zha_gateway, hass):
|
|
"""Test ZHA core channel configuration for output clusters."""
|
|
zigpy_dev = make_device(
|
|
[],
|
|
[cluster_id],
|
|
0x1234,
|
|
"00:11:22:33:44:55:66:77",
|
|
"test manufacturer",
|
|
"test model",
|
|
)
|
|
zha_dev = zha_device.ZHADevice(hass, zigpy_dev, zha_gateway)
|
|
|
|
cluster = zigpy_dev.endpoints[1].out_clusters[cluster_id]
|
|
cluster.bind_only = True
|
|
channel_class = registries.ZIGBEE_CHANNEL_REGISTRY.get(
|
|
cluster_id, channels.AttributeListeningChannel
|
|
)
|
|
channel = channel_class(cluster, zha_dev)
|
|
|
|
await channel.async_configure()
|
|
|
|
assert cluster.bind.call_count == bind_count
|
|
assert cluster.configure_reporting.call_count == 0
|
|
|
|
|
|
def test_channel_registry():
|
|
"""Test ZIGBEE Channel Registry."""
|
|
for (cluster_id, channel) in registries.ZIGBEE_CHANNEL_REGISTRY.items():
|
|
assert isinstance(cluster_id, int)
|
|
assert 0 <= cluster_id <= 0xFFFF
|
|
assert issubclass(channel, channels.ZigbeeChannel)
|