diff --git a/tests/common.py b/tests/common.py index 1e36f9b88..cf8f499cd 100644 --- a/tests/common.py +++ b/tests/common.py @@ -358,7 +358,7 @@ async def group_entity_availability_test( assert entity.state["available"] is True -def zigpy_device_from_device_data( +def zigpy_device_from_device_data( # noqa: C901 app: ControllerApplication, device_data: dict, patch_cluster: bool = True, @@ -464,11 +464,24 @@ def zigpy_device_from_device_data( attr_name = attr.get("name") # Look up by name to avoid ambiguity with manufacturer-specific attrs - if attr_name is not None: - attr_def = real_cluster.find_attribute(attr_name) - assert attr_def.id == attrid - else: - attr_def = real_cluster.find_attribute(attrid) + try: + if attr_name is not None: + attr_def = real_cluster.find_attribute(attr_name) + else: + attr_def = real_cluster.find_attribute(attrid) + except KeyError: + attr_def = None + + # The attribute may not be defined on the cluster, or a quirk may + # have moved its name to a different id. Cache it as a legacy value + # so the device still loads. + if attr_def is None or attr_def.id != attrid: + if attr.get("value", None) is not None: + real_cluster._attr_cache.set_legacy_value( + attrid, attr["value"] + ) + real_cluster.PLUGGED_ATTR_READS[attrid] = attr["value"] + continue # Quirks can mark attributes as unsupported during cluster init so # the attribute both has a cached value and is unsupported. We need diff --git a/tests/data/devices/adeo-zb-watersensor-d0001.json b/tests/data/devices/adeo-zb-watersensor-d0001-0x21120002.json similarity index 100% rename from tests/data/devices/adeo-zb-watersensor-d0001.json rename to tests/data/devices/adeo-zb-watersensor-d0001-0x21120002.json diff --git a/tests/data/devices/adurosmart-eria-ad-rgbw3001.json b/tests/data/devices/adurosmart-eria-ad-rgbw3001-0x00000001.json similarity index 100% rename from tests/data/devices/adurosmart-eria-ad-rgbw3001.json rename to tests/data/devices/adurosmart-eria-ad-rgbw3001-0x00000001.json diff --git a/tests/data/devices/aqara-lumi-airrtc-aeu001.json b/tests/data/devices/aqara-lumi-airrtc-aeu001-0x00000a1a.json similarity index 100% rename from tests/data/devices/aqara-lumi-airrtc-aeu001.json rename to tests/data/devices/aqara-lumi-airrtc-aeu001-0x00000a1a.json diff --git a/tests/data/devices/aqara-lumi-airrtc-aeu005.json b/tests/data/devices/aqara-lumi-airrtc-aeu005-0x00001227.json similarity index 100% rename from tests/data/devices/aqara-lumi-airrtc-aeu005.json rename to tests/data/devices/aqara-lumi-airrtc-aeu005-0x00001227.json diff --git a/tests/data/devices/aqara-lumi-light-acn132.json b/tests/data/devices/aqara-lumi-light-acn132-0x00001a1a.json similarity index 100% rename from tests/data/devices/aqara-lumi-light-acn132.json rename to tests/data/devices/aqara-lumi-light-acn132-0x00001a1a.json diff --git a/tests/data/devices/aqara-lumi-light-agl003.json b/tests/data/devices/aqara-lumi-light-agl003-0x0000001b.json similarity index 100% rename from tests/data/devices/aqara-lumi-light-agl003.json rename to tests/data/devices/aqara-lumi-light-agl003-0x0000001b.json diff --git a/tests/data/devices/aqara-lumi-light-agl005.json b/tests/data/devices/aqara-lumi-light-agl005-0x0000001b.json similarity index 100% rename from tests/data/devices/aqara-lumi-light-agl005.json rename to tests/data/devices/aqara-lumi-light-agl005-0x0000001b.json diff --git a/tests/data/devices/aqara-lumi-motion-ac01.json b/tests/data/devices/aqara-lumi-motion-ac01-0x00000035.json similarity index 100% rename from tests/data/devices/aqara-lumi-motion-ac01.json rename to tests/data/devices/aqara-lumi-motion-ac01-0x00000035.json diff --git a/tests/data/devices/aqara-lumi-sensor-occupy-agl1.json b/tests/data/devices/aqara-lumi-sensor-occupy-agl1-0x0000001a.json similarity index 100% rename from tests/data/devices/aqara-lumi-sensor-occupy-agl1.json rename to tests/data/devices/aqara-lumi-sensor-occupy-agl1-0x0000001a.json diff --git a/tests/data/devices/aqara-lumi-sensor-occupy-agl8.json b/tests/data/devices/aqara-lumi-sensor-occupy-agl8-0x00003422.json similarity index 100% rename from tests/data/devices/aqara-lumi-sensor-occupy-agl8.json rename to tests/data/devices/aqara-lumi-sensor-occupy-agl8-0x00003422.json diff --git a/tests/data/devices/aqara-lumi-sensor-occupy-agl8-0x00003a29.json b/tests/data/devices/aqara-lumi-sensor-occupy-agl8-0x00003a29.json new file mode 100644 index 000000000..ae5661b2a --- /dev/null +++ b/tests/data/devices/aqara-lumi-sensor-occupy-agl8-0x00003a29.json @@ -0,0 +1,453 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:ae:99:5e:c4", + "nwk": "0x6184", + "manufacturer": "Aqara", + "model": "lumi.sensor_occupy.agl8", + "friendly_manufacturer": "Aqara", + "friendly_model": "lumi.sensor_occupy.agl8", + "name": "Aqara lumi.sensor_occupy.agl8", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4447, + "power_source": "Battery or Unknown", + "lqi": 58, + "rssi": null, + "last_seen": "2026-03-04T05:03:16.935559+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4447, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "OCCUPANCY_SENSOR", + "id": 263 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Aqara" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "lumi.sensor_occupy.agl8" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 255 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 30.3 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0012", + "endpoint_attribute": "multistate_input", + "attributes": [] + }, + { + "cluster_id": "0x0400", + "endpoint_attribute": "illuminance", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 3011 + } + ] + }, + { + "cluster_id": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 2175 + } + ] + }, + { + "cluster_id": "0x0405", + "endpoint_attribute": "humidity", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 3998 + } + ] + }, + { + "cluster_id": "0xfcc0", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 14889 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Aqara", + "model": "lumi.sensor_occupy.agl8", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4447, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0107", + "input_clusters": [ + "0x0012", + "0x0400", + "0x0405", + "0x0402", + "0x0001", + "0x0003", + "0x0000", + "0xfcc0" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 58 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_size": "Unknown", + "battery_quantity": 1, + "battery_voltage": 3.03 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-1024", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Illuminance", + "translation_key": null, + "translation_placeholders": null, + "device_class": "illuminance", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "lx" + }, + "state": { + "class_name": "Illuminance", + "available": true, + "state": 2 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-1026", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Temperature", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 21.75 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-1029", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Humidity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "humidity", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "%" + }, + "state": { + "class_name": "Humidity", + "available": true, + "state": 39.98 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00003a29", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/aqara-lumi-sensor-occupy-agl8-0x0000412a.json b/tests/data/devices/aqara-lumi-sensor-occupy-agl8-0x0000412a.json new file mode 100644 index 000000000..acf9adf89 --- /dev/null +++ b/tests/data/devices/aqara-lumi-sensor-occupy-agl8-0x0000412a.json @@ -0,0 +1,453 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:ae:99:5e:c4", + "nwk": "0x1234", + "manufacturer": "Aqara", + "model": "lumi.sensor_occupy.agl8", + "friendly_manufacturer": "Aqara", + "friendly_model": "lumi.sensor_occupy.agl8", + "name": "Aqara lumi.sensor_occupy.agl8", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4447, + "power_source": "Battery or Unknown", + "lqi": 196, + "rssi": -51, + "last_seen": "2026-06-23T19:11:05.887260+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4447, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 1036, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1036, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "OCCUPANCY_SENSOR", + "id": 263 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Aqara" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "lumi.sensor_occupy.agl8" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 255 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 3.179 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0012", + "endpoint_attribute": "multistate_input", + "attributes": [] + }, + { + "cluster_id": "0x0400", + "endpoint_attribute": "illuminance", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 2734 + } + ] + }, + { + "cluster_id": "0x0405", + "endpoint_attribute": "humidity", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 4599 + } + ] + }, + { + "cluster_id": "0xfcc0", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 16682 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Aqara", + "model": "lumi.sensor_occupy.agl8", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4447, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 1036, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1036, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0107", + "input_clusters": [ + "0x0012", + "0x0400", + "0x0405", + "0x0402", + "0x0001", + "0x0003", + "0x0000", + "0xfcc0" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 196 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -51 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_size": "Unknown", + "battery_quantity": 1, + "battery_voltage": 0.32 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-1024", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Illuminance", + "translation_key": null, + "translation_placeholders": null, + "device_class": "illuminance", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "lx" + }, + "state": { + "class_name": "Illuminance", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-1026", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Temperature", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 27.34 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-1029", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Humidity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "humidity", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "%" + }, + "state": { + "class_name": "Humidity", + "available": true, + "state": 45.99 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:99:5e:c4-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:99:5e:c4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0000412a", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/aqara-lumi-switch-acn047.json b/tests/data/devices/aqara-lumi-switch-acn047-0x0000001c.json similarity index 100% rename from tests/data/devices/aqara-lumi-switch-acn047.json rename to tests/data/devices/aqara-lumi-switch-acn047-0x0000001c.json diff --git a/tests/data/devices/aqara-lumi-switch-aeu003.json b/tests/data/devices/aqara-lumi-switch-aeu003-0x00000e14.json similarity index 100% rename from tests/data/devices/aqara-lumi-switch-aeu003.json rename to tests/data/devices/aqara-lumi-switch-aeu003-0x00000e14.json diff --git a/tests/data/devices/aqara-lumi-switch-agl007.json b/tests/data/devices/aqara-lumi-switch-agl007-0x00001116.json similarity index 100% rename from tests/data/devices/aqara-lumi-switch-agl007.json rename to tests/data/devices/aqara-lumi-switch-agl007-0x00001116.json diff --git a/tests/data/devices/aqara-lumi-switch-agl010.json b/tests/data/devices/aqara-lumi-switch-agl010-0x00001315.json similarity index 100% rename from tests/data/devices/aqara-lumi-switch-agl010.json rename to tests/data/devices/aqara-lumi-switch-agl010-0x00001315.json diff --git a/tests/data/devices/aug-winkhaus-gmbh-co-kg-fm-v-zb.json b/tests/data/devices/aug-winkhaus-gmbh-co-kg-fm-v-zb-0x00000011.json similarity index 100% rename from tests/data/devices/aug-winkhaus-gmbh-co-kg-fm-v-zb.json rename to tests/data/devices/aug-winkhaus-gmbh-co-kg-fm-v-zb-0x00000011.json diff --git a/tests/data/devices/bega-gantenbrink-leuchten-kg-smart-dimmable-light.json b/tests/data/devices/bega-gantenbrink-leuchten-kg-smart-dimmable-light-0x00990be9.json similarity index 100% rename from tests/data/devices/bega-gantenbrink-leuchten-kg-smart-dimmable-light.json rename to tests/data/devices/bega-gantenbrink-leuchten-kg-smart-dimmable-light-0x00990be9.json diff --git a/tests/data/devices/bosch-rbsh-mms-zb-eu.json b/tests/data/devices/bosch-rbsh-mms-zb-eu-0x11136760.json similarity index 100% rename from tests/data/devices/bosch-rbsh-mms-zb-eu.json rename to tests/data/devices/bosch-rbsh-mms-zb-eu-0x11136760.json diff --git a/tests/data/devices/bosch-rbsh-rth0-bat-zb-eu.json b/tests/data/devices/bosch-rbsh-rth0-bat-zb-eu-0x02086a30.json similarity index 100% rename from tests/data/devices/bosch-rbsh-rth0-bat-zb-eu.json rename to tests/data/devices/bosch-rbsh-rth0-bat-zb-eu-0x02086a30.json diff --git a/tests/data/devices/bosch-rbsh-rth0-zb-eu.json b/tests/data/devices/bosch-rbsh-rth0-zb-eu-0x03036a30.json similarity index 100% rename from tests/data/devices/bosch-rbsh-rth0-zb-eu.json rename to tests/data/devices/bosch-rbsh-rth0-zb-eu-0x03036a30.json diff --git a/tests/data/devices/bosch-rbsh-trv0-zb-eu.json b/tests/data/devices/bosch-rbsh-trv0-zb-eu-0x32051514.json similarity index 100% rename from tests/data/devices/bosch-rbsh-trv0-zb-eu.json rename to tests/data/devices/bosch-rbsh-trv0-zb-eu-0x32051514.json diff --git a/tests/data/devices/bosch-rbsh-trv0-zb-eu-0x38011514.json b/tests/data/devices/bosch-rbsh-trv0-zb-eu-0x38011514.json new file mode 100644 index 000000000..56eaf445e --- /dev/null +++ b/tests/data/devices/bosch-rbsh-trv0-zb-eu-0x38011514.json @@ -0,0 +1,1184 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:d1:eb:38:68", + "nwk": "0x7763", + "manufacturer": "BOSCH", + "model": "RBSH-TRV0-ZB-EU", + "friendly_manufacturer": "BOSCH", + "friendly_model": "RBSH-TRV0-ZB-EU", + "name": "BOSCH RBSH-TRV0-ZB-EU", + "quirk_applied": true, + "quirk_class": "zhaquirks.bosch.rbsh_trv0_zb_eu:(BOSCH / RBSH-TRV0-ZB-EU)", + "exposes_features": [], + "manufacturer_code": 4617, + "power_source": "Battery or Unknown", + "lqi": 236, + "rssi": -41, + "last_seen": "2026-02-07T18:19:03.958227+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4617, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "THERMOSTAT", + "id": 769 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "BOSCH" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "RBSH-TRV0-ZB-EU" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 56 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 2 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 3 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 26 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [] + }, + { + "cluster_id": "0x0201", + "endpoint_attribute": "thermostat", + "attributes": [ + { + "id": "0x0006", + "name": "abs_max_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0004", + "name": "abs_max_heat_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0005", + "name": "abs_min_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0003", + "name": "abs_min_heat_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x4043", + "name": "boost_heating", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x001b", + "name": "ctrl_sequence_of_oper", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x0000", + "name": "local_temperature", + "zcl_type": "int16", + "value": 1980 + }, + { + "id": "0x0010", + "name": "local_temperature_calibration", + "zcl_type": "int8", + "value": -37 + }, + { + "id": "0x0018", + "name": "max_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0016", + "name": "max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3000 + }, + { + "id": "0x0017", + "name": "min_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0015", + "name": "min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 500 + }, + { + "id": "0x0002", + "name": "occupancy", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0011", + "name": "occupied_cooling_setpoint", + "zcl_type": "int16", + "value": 2300 + }, + { + "id": "0x0012", + "name": "occupied_heating_setpoint", + "zcl_type": "int16", + "value": 2100 + }, + { + "id": "0x4007", + "name": "operating_mode", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x0007", + "name": "pi_cooling_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x4020", + "name": "pi_heating_demand", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x4040", + "name": "remote_temperature", + "zcl_type": "int16", + "value": 0 + }, + { + "id": "0x001e", + "name": "running_mode", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0029", + "name": "running_state", + "zcl_type": "map16", + "unsupported": true + }, + { + "id": "0x0030", + "name": "setpoint_change_source", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x001c", + "name": "system_mode", + "zcl_type": "enum8", + "value": 4 + }, + { + "id": "0x0013", + "name": "unoccupied_cooling_setpoint", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0014", + "name": "unoccupied_heating_setpoint", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x4022", + "name": "valve_adapt_status", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x4042", + "name": "window_open", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0204", + "endpoint_attribute": "thermostat_ui", + "attributes": [ + { + "id": "0x403b", + "name": "display_brightness", + "zcl_type": "enum8", + "value": 7 + }, + { + "id": "0x403a", + "name": "display_on_time", + "zcl_type": "enum8", + "value": 10 + }, + { + "id": "0x400b", + "name": "display_orientation", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x4039", + "name": "displayed_temperature", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x0001", + "name": "keypad_lockout", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0b05", + "endpoint_attribute": "diagnostic", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 939595028 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "BOSCH", + "model": "RBSH-TRV0-ZB-EU", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4617, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0301", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0004", + "0x0020", + "0x0201", + "0x0204", + "0x0b05" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + }, + { + "info_object": { + "fallback_name": "Calibrate valve", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-calibrate_valve", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "Button", + "translation_key": "calibrate_valve", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "calibrate_valve", + "args": [], + "kwargs": {} + }, + "state": { + "class_name": "Button", + "available": true + } + } + ], + "climate": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1", + "migrate_unique_ids": [], + "platform": "climate", + "class_name": "Thermostat", + "translation_key": "thermostat", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "max_temp": 30.0, + "min_temp": 5.0, + "supported_features": 385, + "fan_modes": null, + "preset_modes": [], + "hvac_modes": [ + "off", + "heat" + ] + }, + "state": { + "class_name": "Thermostat", + "available": true, + "current_temperature": 19.8, + "outdoor_temperature": null, + "target_temperature": 21.0, + "target_temperature_high": null, + "target_temperature_low": null, + "hvac_action": "idle", + "hvac_mode": "heat", + "preset_mode": "none", + "fan_mode": "auto", + "system_mode": "[4]/heat", + "occupancy": null, + "occupied_cooling_setpoint": 2300, + "occupied_heating_setpoint": 2100, + "pi_heating_demand": 0, + "pi_cooling_demand": null, + "unoccupied_cooling_setpoint": null, + "unoccupied_heating_setpoint": null + }, + "extra_state_attributes": [ + "occupancy", + "occupied_cooling_setpoint", + "occupied_heating_setpoint", + "pi_cooling_demand", + "pi_heating_demand", + "system_mode", + "unoccupied_cooling_setpoint", + "unoccupied_heating_setpoint" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-513-local_temperature_calibration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "BoschThermostatLocalTempCalibration", + "translation_key": "local_temperature_calibration", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 5.0, + "native_min_value": -5.0, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "BoschThermostatLocalTempCalibration", + "available": true, + "state": -3.7 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-513-max_heat_setpoint_limit", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "MaxHeatSetpointLimit", + "translation_key": "max_heat_setpoint_limit", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 327.67, + "native_min_value": 5.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "MaxHeatSetpointLimit", + "available": true, + "state": 30.0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-513-min_heat_setpoint_limit", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "MinHeatSetpointLimit", + "translation_key": "min_heat_setpoint_limit", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 30.0, + "native_min_value": -273.15000000000003, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "MinHeatSetpointLimit", + "available": true, + "state": 5.0 + } + }, + { + "info_object": { + "fallback_name": "Display brightness", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-display_brightness", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "display_brightness", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 10, + "native_min_value": 0, + "native_step": 1, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 7 + } + }, + { + "info_object": { + "fallback_name": "Display on-time", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-display_on_time", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "display_on_time", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 30, + "native_min_value": 5, + "native_step": 1, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 10 + } + }, + { + "info_object": { + "fallback_name": "Remote temperature", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-remote_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 30, + "native_min_value": 5, + "native_step": 0.1, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 0.0 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-516-keypad_lockout", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "KeypadLockout", + "translation_key": "keypad_lockout", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "KeypadLockoutEnum", + "options": [ + "Unlock", + "Lock1", + "Lock2", + "Lock3", + "Lock4" + ] + }, + "state": { + "class_name": "KeypadLockout", + "available": true, + "state": "Unlock" + } + }, + { + "info_object": { + "fallback_name": "Control sequence", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-ctrl_sequence_of_oper", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "ctrl_sequence_of_oper", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "BoschControlSequenceOfOperation", + "options": [ + "Cooling", + "Heating" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "Heating" + } + }, + { + "info_object": { + "fallback_name": "Display orientation", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-display_orientation", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "display_orientation", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "BoschDisplayOrientation", + "options": [ + "Normal", + "Flipped" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "Normal" + } + }, + { + "info_object": { + "fallback_name": "Displayed temperature", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-displayed_temperature", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "displayed_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "BoschDisplayedTemperature", + "options": [ + "Target", + "Measured" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "Measured" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 236 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -41 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 28.0, + "battery_size": "AA", + "battery_quantity": 2, + "battery_voltage": 2.6 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-513-hvac_action", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ThermostatHVACAction", + "translation_key": "hvac_action", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "ThermostatHVACAction", + "available": true, + "state": "idle" + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-513-pi_heating_demand", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "PiHeatingDemand", + "translation_key": "pi_heating_demand", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "PiHeatingDemand", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-513-setpoint_change_source", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SetpointChangeSource", + "translation_key": "setpoint_change_source", + "translation_placeholders": null, + "device_class": "enum", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "SetpointChangeSource", + "available": true, + "state": "Manual" + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-513-setpoint_change_source_timestamp", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SetpointChangeSourceTimestamp", + "translation_key": "setpoint_change_source_timestamp", + "translation_placeholders": null, + "device_class": "timestamp", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "SetpointChangeSourceTimestamp", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": "Operating mode", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-operating_mode", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "EnumSensor", + "translation_key": "operating_mode", + "translation_placeholders": null, + "device_class": "enum", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "EnumSensor", + "available": true, + "state": "Manual" + } + }, + { + "info_object": { + "fallback_name": "Valve adaptation status", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-valve_adapt_status", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "EnumSensor", + "translation_key": "valve_adapt_status", + "translation_placeholders": null, + "device_class": "enum", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "EnumSensor", + "available": true, + "state": "CalibrationInProgress" + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": "Boost heating", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-boost_heating", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "boost_heating", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "boost_heating", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "Window open", + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-window_open", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "window_open", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "window_open", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:d1:eb:38:68-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:d1:eb:38:68", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x38011514", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/bosch-rbsh-us4btn-zb-eu.json b/tests/data/devices/bosch-rbsh-us4btn-zb-eu-0x100d6a30.json similarity index 100% rename from tests/data/devices/bosch-rbsh-us4btn-zb-eu.json rename to tests/data/devices/bosch-rbsh-us4btn-zb-eu-0x100d6a30.json diff --git a/tests/data/devices/bweetech-semote.json b/tests/data/devices/bweetech-semote.json new file mode 100644 index 000000000..47ff59ee2 --- /dev/null +++ b/tests/data/devices/bweetech-semote.json @@ -0,0 +1,322 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:c7:ea:48:e4", + "nwk": "0x85C7", + "manufacturer": "Bweetech", + "model": "SEMOTE", + "friendly_manufacturer": "Bweetech", + "friendly_model": "SEMOTE", + "name": "Bweetech SEMOTE", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Battery or Unknown", + "lqi": 104, + "rssi": -85, + "last_seen": "2026-06-03T13:36:37.668513+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "COLOR_DIMMER_SWITCH", + "id": 261 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Bweetech" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "SEMOTE" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + }, + { + "cluster_id": "0x0300", + "endpoint_attribute": "light_color", + "attributes": [] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "Bweetech", + "model": "SEMOTE", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0105", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0004", + "0x1000" + ], + "output_clusters": [ + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x0300", + "0x1000" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c7:ea:48:e4-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:c7:ea:48:e4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c7:ea:48:e4-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:c7:ea:48:e4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 104 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c7:ea:48:e4-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:c7:ea:48:e4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -85 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c7:ea:48:e4-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:c7:ea:48:e4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": null + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/candeo-c-zb-lc20-dim.json b/tests/data/devices/candeo-c-zb-lc20-dim-0x29013001.json similarity index 100% rename from tests/data/devices/candeo-c-zb-lc20-dim.json rename to tests/data/devices/candeo-c-zb-lc20-dim-0x29013001.json diff --git a/tests/data/devices/candeo-c-zb-lc20-rgb.json b/tests/data/devices/candeo-c-zb-lc20-rgb-0x31013001.json similarity index 100% rename from tests/data/devices/candeo-c-zb-lc20-rgb.json rename to tests/data/devices/candeo-c-zb-lc20-rgb-0x31013001.json diff --git a/tests/data/devices/centralite-3300.json b/tests/data/devices/centralite-3300-0x1f075310.json similarity index 100% rename from tests/data/devices/centralite-3300.json rename to tests/data/devices/centralite-3300-0x1f075310.json diff --git a/tests/data/devices/centralite-3310-g.json b/tests/data/devices/centralite-3310-g-0x11015310.json similarity index 100% rename from tests/data/devices/centralite-3310-g.json rename to tests/data/devices/centralite-3310-g-0x11015310.json diff --git a/tests/data/devices/centralite-3315-seu.json b/tests/data/devices/centralite-3315-seu-0x1f085310.json similarity index 100% rename from tests/data/devices/centralite-3315-seu.json rename to tests/data/devices/centralite-3315-seu-0x1f085310.json diff --git a/tests/data/devices/centralite-3326-l-0x1c005310.json b/tests/data/devices/centralite-3326-l-0x1c005310.json new file mode 100644 index 000000000..8de456146 --- /dev/null +++ b/tests/data/devices/centralite-3326-l-0x1c005310.json @@ -0,0 +1,491 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:3f:f3:df:a9", + "nwk": "0xF3FA", + "manufacturer": "CentraLite", + "model": "3326-L", + "friendly_manufacturer": "CentraLite", + "friendly_model": "3326-L", + "name": "CentraLite 3326-L", + "quirk_applied": true, + "quirk_class": "zhaquirks.centralite.motion:CentraLiteMotionSensor", + "exposes_features": [], + "manufacturer_code": 49887, + "power_source": "Battery or Unknown", + "lqi": 255, + "rssi": -71, + "last_seen": "2026-02-09T12:44:38.368741+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 49887, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 0, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "IAS_ZONE", + "id": 1026 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "CentraLite" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "3326-L" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x003e", + "name": "battery_alarm_state", + "zcl_type": "map32", + "value": 0 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 29 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [ + { + "id": "0x0000", + "name": "checkin_interval", + "zcl_type": "uint32", + "value": 13200 + } + ] + }, + { + "cluster_id": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 1562 + } + ] + }, + { + "cluster_id": "0x0500", + "endpoint_attribute": "ias_zone", + "attributes": [ + { + "id": "0x0010", + "name": "cie_addr", + "zcl_type": "EUI64", + "value": [ + 50, + 79, + 50, + 2, + 0, + 141, + 21, + 0 + ] + }, + { + "id": "0x0000", + "name": "zone_state", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x0002", + "name": "zone_status", + "zcl_type": "map16", + "value": 36 + }, + { + "id": "0x0001", + "name": "zone_type", + "zcl_type": "enum16", + "value": 13 + } + ] + }, + { + "cluster_id": "0x0b05", + "endpoint_attribute": "diagnostic", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 469783312 + } + ] + } + ] + }, + "2": { + "profile_id": 49887, + "device_type": { + "name": "unknown", + "id": 263 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0b05", + "endpoint_attribute": "diagnostic", + "attributes": [] + }, + { + "cluster_id": "0xfc46", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "CentraLite", + "model": "3326-L", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 49887, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 0, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0402", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0020", + "0x0402", + "0x0500", + "0x0b05" + ], + "output_clusters": [ + "0x0019" + ] + }, + "2": { + "profile_id": "0xc2df", + "device_type": "0x0107", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0b05", + "0xfc46" + ], + "output_clusters": [ + "0x0003" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3f:f3:df:a9-1-1280", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "IASZone", + "translation_key": null, + "translation_placeholders": null, + "device_class": "motion", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:3f:f3:df:a9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "zone_status" + }, + "state": { + "class_name": "IASZone", + "available": true, + "state": false + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3f:f3:df:a9-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3f:f3:df:a9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3f:f3:df:a9-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3f:f3:df:a9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 255 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3f:f3:df:a9-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3f:f3:df:a9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -71 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3f:f3:df:a9-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3f:f3:df:a9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": null, + "battery_size": "Other", + "battery_quantity": 1, + "battery_voltage": 2.9 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3f:f3:df:a9-1-1026", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Temperature", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3f:f3:df:a9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 15.62 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3f:f3:df:a9-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3f:f3:df:a9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x1c005310", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/centralite-3405-l.json b/tests/data/devices/centralite-3405-l-0x10025310.json similarity index 100% rename from tests/data/devices/centralite-3405-l.json rename to tests/data/devices/centralite-3405-l-0x10025310.json diff --git a/tests/data/devices/centralite-systems-3156105.json b/tests/data/devices/centralite-systems-3156105-0x1418468c.json similarity index 100% rename from tests/data/devices/centralite-systems-3156105.json rename to tests/data/devices/centralite-systems-3156105-0x1418468c.json diff --git a/tests/data/devices/computime-slt3c-0x02040105.json b/tests/data/devices/computime-slt3c-0x02040105.json new file mode 100644 index 000000000..96418d753 --- /dev/null +++ b/tests/data/devices/computime-slt3c-0x02040105.json @@ -0,0 +1,685 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:ad:ea:07:68", + "nwk": "0x4A83", + "manufacturer": "Computime", + "model": "SLT3c", + "friendly_manufacturer": "Computime", + "friendly_model": "SLT3c", + "name": "Computime SLT3c", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4153, + "power_source": "Battery or Unknown", + "lqi": 136, + "rssi": -66, + "last_seen": "2026-06-10T09:45:26.688274+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4153, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "9": { + "profile_id": 260, + "device_type": { + "name": "TEMPERATURE_SENSOR", + "id": 770 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Computime" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "SLT3c" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 64 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 49 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0009", + "endpoint_attribute": "alarms", + "attributes": [] + }, + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [ + { + "id": "0x0003", + "name": "fast_poll_timeout", + "zcl_type": "uint16", + "value": 120 + } + ] + }, + { + "cluster_id": "0x0201", + "endpoint_attribute": "thermostat", + "attributes": [ + { + "id": "0x0006", + "name": "abs_max_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0004", + "name": "abs_max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3000 + }, + { + "id": "0x0005", + "name": "abs_min_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0003", + "name": "abs_min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 508 + }, + { + "id": "0x001b", + "name": "ctrl_sequence_of_oper", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x0000", + "name": "local_temperature", + "zcl_type": "int16", + "value": 0 + }, + { + "id": "0x0010", + "name": "local_temperature_calibration", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0018", + "name": "max_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0016", + "name": "max_heat_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0017", + "name": "min_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0015", + "name": "min_heat_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0002", + "name": "occupancy", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0011", + "name": "occupied_cooling_setpoint", + "zcl_type": "int16", + "value": 2600 + }, + { + "id": "0x0012", + "name": "occupied_heating_setpoint", + "zcl_type": "int16", + "value": 1700 + }, + { + "id": "0x0007", + "name": "pi_cooling_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0008", + "name": "pi_heating_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x001e", + "name": "running_mode", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0029", + "name": "running_state", + "zcl_type": "map16", + "unsupported": true + }, + { + "id": "0x0030", + "name": "setpoint_change_source", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0032", + "name": "setpoint_change_source_timestamp", + "zcl_type": "UTC", + "unsupported": true + }, + { + "id": "0x001c", + "name": "system_mode", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x0013", + "name": "unoccupied_cooling_setpoint", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0014", + "name": "unoccupied_heating_setpoint", + "zcl_type": "int16", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0204", + "endpoint_attribute": "thermostat_ui", + "attributes": [ + { + "id": "0x0001", + "name": "keypad_lockout", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 2179 + } + ] + }, + { + "cluster_id": "0xfd00", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 33816837 + } + ] + }, + { + "cluster_id": "0x0201", + "endpoint_attribute": "thermostat", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "Computime", + "model": "SLT3c", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4153, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "9": { + "profile_id": "0x0104", + "device_type": "0x0302", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0009", + "0x000a", + "0x0020", + "0x0201", + "0x0204", + "0x0402", + "0xfd00" + ], + "output_clusters": [ + "0x0000", + "0x0003", + "0x0019", + "0x0201" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ad:ea:07:68-9-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ad:ea:07:68", + "endpoint_id": 9, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "climate": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ad:ea:07:68-9-513", + "migrate_unique_ids": [], + "platform": "climate", + "class_name": "Thermostat", + "translation_key": "thermostat", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:ad:ea:07:68", + "endpoint_id": 9, + "available": true, + "group_id": null, + "max_temp": 30.0, + "min_temp": 5.1, + "supported_features": 385, + "fan_modes": null, + "preset_modes": [], + "hvac_modes": [ + "off", + "heat" + ] + }, + "state": { + "class_name": "Thermostat", + "available": true, + "current_temperature": 0.0, + "outdoor_temperature": null, + "target_temperature": null, + "target_temperature_high": 26.0, + "target_temperature_low": 17.0, + "hvac_action": null, + "hvac_mode": "heat_cool", + "preset_mode": "none", + "fan_mode": "auto", + "system_mode": "[1]/heat_cool", + "occupancy": null, + "occupied_cooling_setpoint": 2600, + "occupied_heating_setpoint": 1700, + "pi_heating_demand": null, + "pi_cooling_demand": null, + "unoccupied_cooling_setpoint": null, + "unoccupied_heating_setpoint": null + }, + "extra_state_attributes": [ + "occupancy", + "occupied_cooling_setpoint", + "occupied_heating_setpoint", + "pi_cooling_demand", + "pi_heating_demand", + "system_mode", + "unoccupied_cooling_setpoint", + "unoccupied_heating_setpoint" + ] + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ad:ea:07:68-9-516-keypad_lockout", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "KeypadLockout", + "translation_key": "keypad_lockout", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ad:ea:07:68", + "endpoint_id": 9, + "available": true, + "group_id": null, + "enum": "KeypadLockoutEnum", + "options": [ + "Unlock", + "Lock1", + "Lock2", + "Lock3", + "Lock4" + ] + }, + "state": { + "class_name": "KeypadLockout", + "available": true, + "state": "Unlock" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ad:ea:07:68-9-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ad:ea:07:68", + "endpoint_id": 9, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 136 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ad:ea:07:68-9-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ad:ea:07:68", + "endpoint_id": 9, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -66 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ad:ea:07:68-9-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ad:ea:07:68", + "endpoint_id": 9, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 32.0, + "battery_voltage": 4.9 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ad:ea:07:68-9-1026", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Temperature", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ad:ea:07:68", + "endpoint_id": 9, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 21.79 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ad:ea:07:68-9-513-hvac_action", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ThermostatHVACAction", + "translation_key": "hvac_action", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ad:ea:07:68", + "endpoint_id": 9, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "ThermostatHVACAction", + "available": true, + "state": null + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ad:ea:07:68-9-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ad:ea:07:68", + "endpoint_id": 9, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x02040105", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/danfoss-etrv0103.json b/tests/data/devices/danfoss-etrv0103-0x00000014.json similarity index 100% rename from tests/data/devices/danfoss-etrv0103.json rename to tests/data/devices/danfoss-etrv0103-0x00000014.json diff --git a/tests/data/devices/ecodim-bv-eco-dim-05-zigbee.json b/tests/data/devices/ecodim-bv-eco-dim-05-zigbee-0x00000001.json similarity index 100% rename from tests/data/devices/ecodim-bv-eco-dim-05-zigbee.json rename to tests/data/devices/ecodim-bv-eco-dim-05-zigbee-0x00000001.json diff --git a/tests/data/devices/ecolink-4655bc0-r.json b/tests/data/devices/ecolink-4655bc0-r-0x20160921.json similarity index 100% rename from tests/data/devices/ecolink-4655bc0-r.json rename to tests/data/devices/ecolink-4655bc0-r-0x20160921.json diff --git a/tests/data/devices/ericsity-gl-c-008p.json b/tests/data/devices/ericsity-gl-c-008p-0x25013001.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/ericsity-gl-c-008p.json rename to tests/data/devices/ericsity-gl-c-008p-0x25013001.json diff --git a/tests/data/devices/ericsity-gl-c-009p.json b/tests/data/devices/ericsity-gl-c-009p-0x25013001.json similarity index 100% rename from tests/data/devices/ericsity-gl-c-009p.json rename to tests/data/devices/ericsity-gl-c-009p-0x25013001.json diff --git a/tests/data/devices/espressif-zigbeebinaryoutputdevice.json b/tests/data/devices/espressif-zigbeebinaryanalogdevice.json similarity index 100% rename from tests/data/devices/espressif-zigbeebinaryoutputdevice.json rename to tests/data/devices/espressif-zigbeebinaryanalogdevice.json diff --git a/tests/data/devices/eurotronic-spzb0001.json b/tests/data/devices/eurotronic-spzb0001-0x4501001f.json similarity index 100% rename from tests/data/devices/eurotronic-spzb0001.json rename to tests/data/devices/eurotronic-spzb0001-0x4501001f.json diff --git a/tests/data/devices/ewelink-ck-bl702-al-01-7009-z102lg03-1.json b/tests/data/devices/ewelink-ck-bl702-al-01-7009-z102lg03-1-0x00001200.json similarity index 100% rename from tests/data/devices/ewelink-ck-bl702-al-01-7009-z102lg03-1.json rename to tests/data/devices/ewelink-ck-bl702-al-01-7009-z102lg03-1-0x00001200.json diff --git a/tests/data/devices/ewelink-ck-bl702-al-01-7009-z102lg03-1-0x00001203.json b/tests/data/devices/ewelink-ck-bl702-al-01-7009-z102lg03-1-0x00001203.json new file mode 100644 index 000000000..67060caf3 --- /dev/null +++ b/tests/data/devices/ewelink-ck-bl702-al-01-7009-z102lg03-1-0x00001203.json @@ -0,0 +1,649 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:9e:6f:ce:74", + "nwk": "0x6435", + "manufacturer": "eWeLink", + "model": "CK-BL702-AL-01(7009_Z102LG03-1)", + "friendly_manufacturer": "eWeLink", + "friendly_model": "CK-BL702-AL-01(7009_Z102LG03-1)", + "name": "eWeLink CK-BL702-AL-01(7009_Z102LG03-1)", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4742, + "power_source": "Mains", + "lqi": 108, + "rssi": -84, + "last_seen": "2025-09-01T15:24:08.329791+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4742, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 242, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 242, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "EXTENDED_COLOR_LIGHT", + "id": 269 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "eWeLink" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "CK-BL702-AL-01(7009_Z102LG03-1)" + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 1 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "value": 1 + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [ + { + "id": "0x0000", + "name": "current_level", + "zcl_type": "uint8", + "value": 254 + }, + { + "id": "0x0014", + "name": "default_move_rate", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0013", + "name": "off_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0011", + "name": "on_level", + "zcl_type": "uint8", + "value": 255 + }, + { + "id": "0x0010", + "name": "on_off_transition_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0012", + "name": "on_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x4000", + "name": "start_up_current_level", + "zcl_type": "uint8", + "value": 255 + } + ] + }, + { + "cluster_id": "0x0300", + "endpoint_attribute": "light_color", + "attributes": [ + { + "id": "0x400a", + "name": "color_capabilities", + "zcl_type": "map16", + "value": 31 + }, + { + "id": "0x4002", + "name": "color_loop_active", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0008", + "name": "color_mode", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x400c", + "name": "color_temp_physical_max", + "zcl_type": "uint16", + "value": 500 + }, + { + "id": "0x400b", + "name": "color_temp_physical_min", + "zcl_type": "uint16", + "value": 142 + }, + { + "id": "0x0007", + "name": "color_temperature", + "zcl_type": "uint16", + "value": 153 + }, + { + "id": "0x0000", + "name": "current_hue", + "zcl_type": "uint8", + "value": 21 + }, + { + "id": "0x0001", + "name": "current_saturation", + "zcl_type": "uint8", + "value": 240 + }, + { + "id": "0x0003", + "name": "current_x", + "zcl_type": "uint16", + "value": 20495 + }, + { + "id": "0x0004", + "name": "current_y", + "zcl_type": "uint16", + "value": 21541 + }, + { + "id": "0x000f", + "name": "options", + "zcl_type": "map8", + "value": 1 + }, + { + "id": "0x4010", + "name": "start_up_color_temperature", + "zcl_type": "uint16", + "value": 65535 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": null, + "attributes": [] + }, + { + "cluster_id": "0xfc11", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + }, + { + "cluster_id": "0xfc57", + "endpoint_attribute": "works_with_all_hubs", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 4611 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "eWeLink", + "model": "CK-BL702-AL-01(7009_Z102LG03-1)", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4742, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 242, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 242, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x010d", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x0300", + "0x1000", + "0xef00", + "0xfc11", + "0xfc57" + ], + "output_clusters": [ + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "light": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1", + "migrate_unique_ids": [], + "platform": "light", + "class_name": "ForceOnLight", + "translation_key": "light", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "effect_list": [ + "off", + "colorloop" + ], + "supported_features": 44, + "min_mireds": 142, + "max_mireds": 500 + }, + "state": { + "class_name": "ForceOnLight", + "available": true, + "on": true, + "brightness": 254, + "xy_color": [ + 0.31273365377279316, + 0.3286945906767376 + ], + "color_temp": 153, + "effect_list": [ + "off", + "colorloop" + ], + "effect": "off", + "supported_features": 44, + "color_mode": "xy", + "supported_color_modes": [ + "brightness", + "color_temp", + "onoff", + "xy" + ], + "off_with_transition": false, + "off_brightness": null + }, + "extra_state_attributes": [ + "off_brightness", + "off_with_transition" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1-768-start_up_color_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "StartUpColorTemperatureConfigurationEntity", + "translation_key": "start_up_color_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 500, + "native_min_value": 142, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "StartUpColorTemperatureConfigurationEntity", + "available": true, + "state": 65535 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1-8-on_level", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "OnLevelConfigurationEntity", + "translation_key": "on_level", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "OnLevelConfigurationEntity", + "available": true, + "state": 255 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1-8-on_off_transition_time", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "OnOffTransitionTimeConfigurationEntity", + "translation_key": "on_off_transition_time", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 65535, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "OnOffTransitionTimeConfigurationEntity", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1-8-start_up_current_level", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "StartUpCurrentLevelConfigurationEntity", + "translation_key": "start_up_current_level", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "StartUpCurrentLevelConfigurationEntity", + "available": true, + "state": 255 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1-6-StartUpOnOff", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "StartupOnOffSelectEntity", + "translation_key": "start_up_on_off", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "StartUpOnOff", + "options": [ + "Off", + "On", + "Toggle", + "PreviousValue" + ] + }, + "state": { + "class_name": "StartupOnOffSelectEntity", + "available": true, + "state": "On" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 108 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -84 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9e:6f:ce:74-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9e:6f:ce:74", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00001203", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/ewelink-ck-tlsr8656-ss5-01-7000.json b/tests/data/devices/ewelink-ck-tlsr8656-ss5-01-7000-0x00001102.json similarity index 100% rename from tests/data/devices/ewelink-ck-tlsr8656-ss5-01-7000.json rename to tests/data/devices/ewelink-ck-tlsr8656-ss5-01-7000-0x00001102.json diff --git a/tests/data/devices/ewelink-snzb-01p.json b/tests/data/devices/ewelink-snzb-01p-0x00002000.json similarity index 100% rename from tests/data/devices/ewelink-snzb-01p.json rename to tests/data/devices/ewelink-snzb-01p-0x00002000.json diff --git a/tests/data/devices/ewelink-snzb-01p-0x00002200.json b/tests/data/devices/ewelink-snzb-01p-0x00002200.json new file mode 100644 index 000000000..e2e88652d --- /dev/null +++ b/tests/data/devices/ewelink-snzb-01p-0x00002200.json @@ -0,0 +1,341 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:6a:05:59:94", + "nwk": "0x1089", + "manufacturer": "eWeLink", + "model": "SNZB-01P", + "friendly_manufacturer": "eWeLink", + "friendly_model": "SNZB-01P", + "name": "eWeLink SNZB-01P", + "quirk_applied": true, + "quirk_class": "zhaquirks.sonoff.button:(eWeLink / WB01)", + "exposes_features": [], + "manufacturer_code": 4742, + "power_source": "Battery or Unknown", + "lqi": 123, + "rssi": null, + "last_seen": "2025-10-13T08:08:01.415322+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4742, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_SWITCH", + "id": 0 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "eWeLink" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "SNZB-01P" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 31 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [ + { + "id": "0x0003", + "name": "fast_poll_timeout", + "zcl_type": "uint16", + "value": 120 + } + ] + }, + { + "cluster_id": "0xfc57", + "endpoint_attribute": "works_with_all_hubs", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 8704 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "eWeLink", + "model": "SNZB-01P", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4742, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0000", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0020", + "0xfc57" + ], + "output_clusters": [ + "0x0003", + "0x0006", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:05:59:94-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:05:59:94", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:05:59:94-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:05:59:94", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 123 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:05:59:94-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:05:59:94", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:05:59:94-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:05:59:94", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_voltage": 3.1 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:05:59:94-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:05:59:94", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00002200", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/ewelink-snzb-02p.json b/tests/data/devices/ewelink-snzb-02p-0x00002100.json similarity index 100% rename from tests/data/devices/ewelink-snzb-02p.json rename to tests/data/devices/ewelink-snzb-02p-0x00002100.json diff --git a/tests/data/devices/ewelink-snzb-03p.json b/tests/data/devices/ewelink-snzb-03p-0x00002201.json similarity index 100% rename from tests/data/devices/ewelink-snzb-03p.json rename to tests/data/devices/ewelink-snzb-03p-0x00002201.json diff --git a/tests/data/devices/ewelink-snzb-04p.json b/tests/data/devices/ewelink-snzb-04p-0x00002200.json similarity index 100% rename from tests/data/devices/ewelink-snzb-04p.json rename to tests/data/devices/ewelink-snzb-04p-0x00002200.json diff --git a/tests/data/devices/ezviz-cs-t55-r100-g.json b/tests/data/devices/ezviz-cs-t55-r100-g-0x00000002.json similarity index 100% rename from tests/data/devices/ezviz-cs-t55-r100-g.json rename to tests/data/devices/ezviz-cs-t55-r100-g-0x00000002.json diff --git a/tests/data/devices/frient-a-s-aqszb-110.json b/tests/data/devices/frient-a-s-aqszb-110-0x00040001.json similarity index 100% rename from tests/data/devices/frient-a-s-aqszb-110.json rename to tests/data/devices/frient-a-s-aqszb-110-0x00040001.json diff --git a/tests/data/devices/frient-a-s-emizb-141.json b/tests/data/devices/frient-a-s-emizb-141-0x00030102.json similarity index 100% rename from tests/data/devices/frient-a-s-emizb-141.json rename to tests/data/devices/frient-a-s-emizb-141-0x00030102.json diff --git a/tests/data/devices/frient-a-s-emizb-151.json b/tests/data/devices/frient-a-s-emizb-151-0x00030107.json similarity index 100% rename from tests/data/devices/frient-a-s-emizb-151.json rename to tests/data/devices/frient-a-s-emizb-151-0x00030107.json diff --git a/tests/data/devices/frient-a-s-flszb-110.json b/tests/data/devices/frient-a-s-flszb-110-0x00040001.json similarity index 100% rename from tests/data/devices/frient-a-s-flszb-110.json rename to tests/data/devices/frient-a-s-flszb-110-0x00040001.json diff --git a/tests/data/devices/frient-a-s-hmszb-120.json b/tests/data/devices/frient-a-s-hmszb-120-0x00040001.json similarity index 100% rename from tests/data/devices/frient-a-s-hmszb-120.json rename to tests/data/devices/frient-a-s-hmszb-120-0x00040001.json diff --git a/tests/data/devices/frient-a-s-iomzb-110.json b/tests/data/devices/frient-a-s-iomzb-110-0x00020001.json similarity index 100% rename from tests/data/devices/frient-a-s-iomzb-110.json rename to tests/data/devices/frient-a-s-iomzb-110-0x00020001.json diff --git a/tests/data/devices/frient-a-s-kepzb-110-0x0001060a.json b/tests/data/devices/frient-a-s-kepzb-110-0x0001060a.json new file mode 100644 index 000000000..76904592a --- /dev/null +++ b/tests/data/devices/frient-a-s-kepzb-110-0x0001060a.json @@ -0,0 +1,465 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:44:6d:00:26", + "nwk": "0x70E8", + "manufacturer": "frient A/S", + "model": "KEPZB-110", + "friendly_manufacturer": "frient A/S", + "friendly_model": "KEPZB-110", + "name": "frient A/S KEPZB-110", + "quirk_applied": true, + "quirk_class": "zhaquirks.develco.intelligent_keypad:(frient A/S / KEPZB-110)", + "exposes_features": [], + "manufacturer_code": 4117, + "power_source": "Battery or Unknown", + "lqi": 76, + "rssi": -92, + "last_seen": "2025-10-07T16:08:43.497224+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4117, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 1500, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1500, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 49353, + "device_type": { + "name": "unknown", + "id": 1 + }, + "in_clusters": [ + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + } + ], + "out_clusters": [] + }, + "44": { + "profile_id": 260, + "device_type": { + "name": "IAS_ANCILLARY_CONTROL", + "id": 1025 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "frient A/S" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "KEPZB-110" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 4 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 3 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 62 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [] + }, + { + "cluster_id": "0x0500", + "endpoint_attribute": "ias_zone", + "attributes": [ + { + "id": "0x0010", + "name": "cie_addr", + "zcl_type": "EUI64", + "value": [ + 50, + 79, + 50, + 2, + 0, + 141, + 21, + 0 + ] + }, + { + "id": "0x0000", + "name": "zone_state", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x0002", + "name": "zone_status", + "zcl_type": "map16", + "value": 16 + }, + { + "id": "0x0001", + "name": "zone_type", + "zcl_type": "enum16", + "value": 541 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 67082 + } + ] + }, + { + "cluster_id": "0x0501", + "endpoint_attribute": "ias_ace", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "frient A/S", + "model": "KEPZB-110", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4117, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 1500, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1500, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0xc0c9", + "device_type": "0x0001", + "input_clusters": [ + "0x0005", + "0x0006" + ], + "output_clusters": [] + }, + "44": { + "profile_id": "0x0104", + "device_type": "0x0401", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0020", + "0x0500" + ], + "output_clusters": [ + "0x0003", + "0x000a", + "0x0019", + "0x0501" + ] + } + } + }, + "zha_lib_entities": { + "alarm_control_panel": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:44:6d:00:26-44-1281", + "migrate_unique_ids": [], + "platform": "alarm_control_panel", + "class_name": "AlarmControlPanel", + "translation_key": "alarm_control_panel", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:44:6d:00:26", + "endpoint_id": 44, + "available": true, + "group_id": null, + "code_arm_required": false, + "code_format": "number", + "supported_features": 15 + }, + "state": { + "class_name": "AlarmControlPanel", + "available": true, + "state": "disarmed" + } + } + ], + "binary_sensor": [ + { + "info_object": { + "fallback_name": "Tamper", + "unique_id": "ab:cd:ef:12:44:6d:00:26-44-tamper", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinarySensor", + "translation_key": null, + "translation_placeholders": null, + "device_class": "tamper", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:44:6d:00:26", + "endpoint_id": 44, + "available": true, + "group_id": null, + "attribute_name": "zone_status" + }, + "state": { + "class_name": "BinarySensor", + "available": true, + "state": false + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:44:6d:00:26-44-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:44:6d:00:26", + "endpoint_id": 44, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:44:6d:00:26-44-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:44:6d:00:26", + "endpoint_id": 44, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 76 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:44:6d:00:26-44-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:44:6d:00:26", + "endpoint_id": 44, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -92 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:44:6d:00:26-44-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:44:6d:00:26", + "endpoint_id": 44, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": null, + "battery_size": "AA", + "battery_quantity": 4, + "battery_voltage": 6.2 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:44:6d:00:26-44-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:44:6d:00:26", + "endpoint_id": 44, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0001060a", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/frient-a-s-kepzb-110.json b/tests/data/devices/frient-a-s-kepzb-110-0x00020005.json similarity index 100% rename from tests/data/devices/frient-a-s-kepzb-110.json rename to tests/data/devices/frient-a-s-kepzb-110-0x00020005.json diff --git a/tests/data/devices/frient-a-s-moszb-140.json b/tests/data/devices/frient-a-s-moszb-140-0x00040006.json similarity index 100% rename from tests/data/devices/frient-a-s-moszb-140.json rename to tests/data/devices/frient-a-s-moszb-140-0x00040006.json diff --git a/tests/data/devices/frient-a-s-moszb-153.json b/tests/data/devices/frient-a-s-moszb-153-0x00020006.json similarity index 100% rename from tests/data/devices/frient-a-s-moszb-153.json rename to tests/data/devices/frient-a-s-moszb-153-0x00020006.json diff --git a/tests/data/devices/frient-a-s-sbtzb-110.json b/tests/data/devices/frient-a-s-sbtzb-110-0x00020002.json similarity index 100% rename from tests/data/devices/frient-a-s-sbtzb-110.json rename to tests/data/devices/frient-a-s-sbtzb-110-0x00020002.json diff --git a/tests/data/devices/frient-a-s-scazb-141.json b/tests/data/devices/frient-a-s-scazb-141-0x00010803.json similarity index 100% rename from tests/data/devices/frient-a-s-scazb-141.json rename to tests/data/devices/frient-a-s-scazb-141-0x00010803.json diff --git a/tests/data/devices/frient-a-s-sirzb-111.json b/tests/data/devices/frient-a-s-sirzb-111-0x00020004.json similarity index 100% rename from tests/data/devices/frient-a-s-sirzb-111.json rename to tests/data/devices/frient-a-s-sirzb-111-0x00020004.json diff --git a/tests/data/devices/frient-a-s-smszb-120-0x00040008.json b/tests/data/devices/frient-a-s-smszb-120-0x00040008.json new file mode 100644 index 000000000..3f407c905 --- /dev/null +++ b/tests/data/devices/frient-a-s-smszb-120-0x00040008.json @@ -0,0 +1,576 @@ +{ + "version": 2, + "ieee": "00:15:bc:00:31:01:f8:92", + "nwk": "0x614F", + "manufacturer": "frient A/S", + "model": "SMSZB-120", + "friendly_manufacturer": "frient A/S", + "friendly_model": "SMSZB-120", + "name": "frient A/S SMSZB-120", + "quirk_applied": true, + "quirk_class": "zhaquirks.develco.smoke_alarm:(frient A/S / SMSZB-120)", + "exposes_features": [ + "siren_basic" + ], + "manufacturer_code": 4117, + "power_source": "Battery or Unknown", + "lqi": null, + "rssi": null, + "last_seen": "2025-04-21T22:42:30.528067+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 0, + "manufacturer_code": 4117, + "maximum_buffer_size": 80, + "maximum_incoming_transfer_size": 80, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 80, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 49353, + "device_type": { + "name": "unknown", + "id": 1 + }, + "in_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + } + ], + "out_clusters": [] + }, + "35": { + "profile_id": 260, + "device_type": { + "name": "IAS_ZONE", + "id": 1026 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "frient A/S" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "SMSZB-120" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x003e", + "name": "battery_alarm_state", + "zcl_type": "map32", + "value": 0 + }, + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 150 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 8 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 29 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x000f", + "endpoint_attribute": "binary_input", + "attributes": [ + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x006f", + "name": "status_flags", + "zcl_type": "map8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [ + { + "id": "0x0000", + "name": "checkin_interval", + "zcl_type": "uint32", + "value": 13200 + } + ] + }, + { + "cluster_id": "0x0500", + "endpoint_attribute": "ias_zone", + "attributes": [ + { + "id": "0x0010", + "name": "cie_addr", + "zcl_type": "EUI64", + "value": [ + 50, + 79, + 50, + 2, + 0, + 141, + 21, + 0 + ] + }, + { + "id": "0x0000", + "name": "zone_state", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0002", + "name": "zone_status", + "zcl_type": "map16", + "value": 48 + }, + { + "id": "0x0001", + "name": "zone_type", + "zcl_type": "enum16", + "value": 40 + } + ] + }, + { + "cluster_id": "0x0502", + "endpoint_attribute": "ias_wd", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 262152 + } + ] + } + ] + }, + "38": { + "profile_id": 260, + "device_type": { + "name": "TEMPERATURE_SENSOR", + "id": 770 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 2281 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "frient A/S", + "model": "SMSZB-120", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 0, + "manufacturer_code": 4117, + "maximum_buffer_size": 80, + "maximum_incoming_transfer_size": 80, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 80, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0xc0c9", + "device_type": "0x0001", + "input_clusters": [ + "0x0003", + "0x0005", + "0x0006" + ], + "output_clusters": [] + }, + "35": { + "profile_id": "0x0104", + "device_type": "0x0402", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x000f", + "0x0020", + "0x0500", + "0x0502" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + }, + "38": { + "profile_id": "0x0104", + "device_type": "0x0302", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0402" + ], + "output_clusters": [ + "0x0003" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "00:15:bc:00:31:01:f8:92-35-1280", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "IASZone", + "translation_key": null, + "translation_placeholders": null, + "device_class": "smoke", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "00:15:bc:00:31:01:f8:92", + "endpoint_id": 35, + "available": true, + "group_id": null, + "attribute_name": "zone_status" + }, + "state": { + "class_name": "IASZone", + "available": true, + "state": false + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "00:15:bc:00:31:01:f8:92-35-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "00:15:bc:00:31:01:f8:92", + "endpoint_id": 35, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "00:15:bc:00:31:01:f8:92-35-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "00:15:bc:00:31:01:f8:92", + "endpoint_id": 35, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "00:15:bc:00:31:01:f8:92-35-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "00:15:bc:00:31:01:f8:92", + "endpoint_id": 35, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "00:15:bc:00:31:01:f8:92-35-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "00:15:bc:00:31:01:f8:92", + "endpoint_id": 35, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 75.0, + "battery_size": "CR123A", + "battery_quantity": 1, + "battery_voltage": 2.9 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "00:15:bc:00:31:01:f8:92-38-1026", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Temperature", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "00:15:bc:00:31:01:f8:92", + "endpoint_id": 38, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 22.81 + } + } + ], + "siren": [ + { + "info_object": { + "fallback_name": "Siren", + "unique_id": "00:15:bc:00:31:01:f8:92-35-1282", + "migrate_unique_ids": [], + "platform": "siren", + "class_name": "BasicSiren", + "translation_key": null, + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "00:15:bc:00:31:01:f8:92", + "endpoint_id": 35, + "available": true, + "group_id": null, + "available_tones": {}, + "supported_features": 19 + }, + "state": { + "class_name": "BasicSiren", + "available": true, + "state": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "00:15:bc:00:31:01:f8:92-35-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "00:15:bc:00:31:01:f8:92", + "endpoint_id": 35, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00040008", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/frient-a-s-smszb-120.json b/tests/data/devices/frient-a-s-smszb-120.json index 3f407c905..fd87f5f8a 100644 --- a/tests/data/devices/frient-a-s-smszb-120.json +++ b/tests/data/devices/frient-a-s-smszb-120.json @@ -1,7 +1,7 @@ { "version": 2, - "ieee": "00:15:bc:00:31:01:f8:92", - "nwk": "0x614F", + "ieee": "ab:cd:ef:12:2d:1d:92:32", + "nwk": "0x58EB", "manufacturer": "frient A/S", "model": "SMSZB-120", "friendly_manufacturer": "frient A/S", @@ -14,9 +14,9 @@ ], "manufacturer_code": 4117, "power_source": "Battery or Unknown", - "lqi": null, - "rssi": null, - "last_seen": "2025-04-21T22:42:30.528067+00:00", + "lqi": 212, + "rssi": -47, + "last_seen": "2025-09-09T14:07:27.359123+00:00", "available": true, "device_type": "EndDevice", "active_coordinator": false, @@ -56,7 +56,14 @@ { "cluster_id": "0x0006", "endpoint_attribute": "on_off", - "attributes": [] + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "unsupported": true + } + ] } ], "out_clusters": [] @@ -100,25 +107,13 @@ "id": "0x0021", "name": "battery_percentage_remaining", "zcl_type": "uint8", - "value": 150 - }, - { - "id": "0x0033", - "name": "battery_quantity", - "zcl_type": "uint8", - "value": 1 - }, - { - "id": "0x0031", - "name": "battery_size", - "zcl_type": "enum8", - "value": 8 + "value": 200 }, { "id": "0x0020", "name": "battery_voltage", "zcl_type": "uint8", - "value": 29 + "value": 32 } ] }, @@ -176,12 +171,6 @@ 0 ] }, - { - "id": "0x0000", - "name": "zone_state", - "zcl_type": "enum8", - "value": 0 - }, { "id": "0x0002", "name": "zone_status", @@ -211,14 +200,7 @@ { "cluster_id": "0x0019", "endpoint_attribute": "ota", - "attributes": [ - { - "id": "0x0002", - "name": "current_file_version", - "zcl_type": "uint32", - "value": 262152 - } - ] + "attributes": [] } ] }, @@ -247,7 +229,7 @@ "id": "0x0000", "name": "measured_value", "zcl_type": "int16", - "value": 2281 + "value": 2343 } ] } @@ -326,7 +308,7 @@ { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:31:01:f8:92-35-1280", + "unique_id": "ab:cd:ef:12:2d:1d:92:32-35-1280", "migrate_unique_ids": [], "platform": "binary_sensor", "class_name": "IASZone", @@ -338,7 +320,7 @@ "entity_registry_enabled_default": true, "enabled": true, "primary": true, - "device_ieee": "00:15:bc:00:31:01:f8:92", + "device_ieee": "ab:cd:ef:12:2d:1d:92:32", "endpoint_id": 35, "available": true, "group_id": null, @@ -355,7 +337,7 @@ { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:31:01:f8:92-35-3", + "unique_id": "ab:cd:ef:12:2d:1d:92:32-35-3", "migrate_unique_ids": [], "platform": "button", "class_name": "IdentifyButton", @@ -367,7 +349,7 @@ "entity_registry_enabled_default": true, "enabled": true, "primary": false, - "device_ieee": "00:15:bc:00:31:01:f8:92", + "device_ieee": "ab:cd:ef:12:2d:1d:92:32", "endpoint_id": 35, "available": true, "group_id": null, @@ -387,7 +369,7 @@ { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:31:01:f8:92-35-0-lqi", + "unique_id": "ab:cd:ef:12:2d:1d:92:32-35-0-lqi", "migrate_unique_ids": [], "platform": "sensor", "class_name": "LQISensor", @@ -399,7 +381,7 @@ "entity_registry_enabled_default": false, "enabled": true, "primary": false, - "device_ieee": "00:15:bc:00:31:01:f8:92", + "device_ieee": "ab:cd:ef:12:2d:1d:92:32", "endpoint_id": 35, "available": true, "group_id": null, @@ -409,13 +391,13 @@ "state": { "class_name": "LQISensor", "available": true, - "state": null + "state": 212 } }, { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:31:01:f8:92-35-0-rssi", + "unique_id": "ab:cd:ef:12:2d:1d:92:32-35-0-rssi", "migrate_unique_ids": [], "platform": "sensor", "class_name": "RSSISensor", @@ -427,7 +409,7 @@ "entity_registry_enabled_default": false, "enabled": true, "primary": false, - "device_ieee": "00:15:bc:00:31:01:f8:92", + "device_ieee": "ab:cd:ef:12:2d:1d:92:32", "endpoint_id": 35, "available": true, "group_id": null, @@ -437,13 +419,13 @@ "state": { "class_name": "RSSISensor", "available": true, - "state": null + "state": -47 } }, { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:31:01:f8:92-35-1", + "unique_id": "ab:cd:ef:12:2d:1d:92:32-35-1", "migrate_unique_ids": [], "platform": "sensor", "class_name": "Battery", @@ -455,7 +437,7 @@ "entity_registry_enabled_default": true, "enabled": true, "primary": false, - "device_ieee": "00:15:bc:00:31:01:f8:92", + "device_ieee": "ab:cd:ef:12:2d:1d:92:32", "endpoint_id": 35, "available": true, "group_id": null, @@ -465,10 +447,8 @@ "state": { "class_name": "Battery", "available": true, - "state": 75.0, - "battery_size": "CR123A", - "battery_quantity": 1, - "battery_voltage": 2.9 + "state": 100.0, + "battery_voltage": 3.2 }, "extra_state_attributes": [ "battery_quantity", @@ -479,7 +459,7 @@ { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:31:01:f8:92-38-1026", + "unique_id": "ab:cd:ef:12:2d:1d:92:32-38-1026", "migrate_unique_ids": [], "platform": "sensor", "class_name": "Temperature", @@ -491,7 +471,7 @@ "entity_registry_enabled_default": true, "enabled": true, "primary": false, - "device_ieee": "00:15:bc:00:31:01:f8:92", + "device_ieee": "ab:cd:ef:12:2d:1d:92:32", "endpoint_id": 38, "available": true, "group_id": null, @@ -501,7 +481,7 @@ "state": { "class_name": "Temperature", "available": true, - "state": 22.81 + "state": 23.43 } } ], @@ -509,7 +489,7 @@ { "info_object": { "fallback_name": "Siren", - "unique_id": "00:15:bc:00:31:01:f8:92-35-1282", + "unique_id": "ab:cd:ef:12:2d:1d:92:32-35-1282", "migrate_unique_ids": [], "platform": "siren", "class_name": "BasicSiren", @@ -521,7 +501,7 @@ "entity_registry_enabled_default": true, "enabled": true, "primary": false, - "device_ieee": "00:15:bc:00:31:01:f8:92", + "device_ieee": "ab:cd:ef:12:2d:1d:92:32", "endpoint_id": 35, "available": true, "group_id": null, @@ -539,7 +519,7 @@ { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:31:01:f8:92-35-25-firmware_update", + "unique_id": "ab:cd:ef:12:2d:1d:92:32-35-25-firmware_update", "migrate_unique_ids": [], "platform": "update", "class_name": "FirmwareUpdateEntity", @@ -551,7 +531,7 @@ "entity_registry_enabled_default": true, "enabled": true, "primary": false, - "device_ieee": "00:15:bc:00:31:01:f8:92", + "device_ieee": "ab:cd:ef:12:2d:1d:92:32", "endpoint_id": 35, "available": true, "group_id": null, @@ -560,7 +540,7 @@ "state": { "class_name": "FirmwareUpdateEntity", "available": true, - "installed_version": "0x00040008", + "installed_version": null, "in_progress": false, "update_percentage": null, "latest_version": null, diff --git a/tests/data/devices/frient-a-s-splzb-141.json b/tests/data/devices/frient-a-s-splzb-141-0x00020009.json similarity index 100% rename from tests/data/devices/frient-a-s-splzb-141.json rename to tests/data/devices/frient-a-s-splzb-141-0x00020009.json diff --git a/tests/data/devices/frient-a-s-wiszb-131.json b/tests/data/devices/frient-a-s-wiszb-131-0x00020006.json similarity index 100% rename from tests/data/devices/frient-a-s-wiszb-131.json rename to tests/data/devices/frient-a-s-wiszb-131-0x00020006.json diff --git a/tests/data/devices/gledopto-gl-b-008p.json b/tests/data/devices/gledopto-gl-b-008p-0x00000006.json similarity index 100% rename from tests/data/devices/gledopto-gl-b-008p.json rename to tests/data/devices/gledopto-gl-b-008p-0x00000006.json diff --git a/tests/data/devices/gledopto-gl-c-009p-0x17013001.json b/tests/data/devices/gledopto-gl-c-009p-0x17013001.json new file mode 100644 index 000000000..67000a6cb --- /dev/null +++ b/tests/data/devices/gledopto-gl-c-009p-0x17013001.json @@ -0,0 +1,574 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:8c:97:e8:62", + "nwk": "0x176A", + "manufacturer": "GLEDOPTO", + "model": "GL-C-009P", + "friendly_manufacturer": "GLEDOPTO", + "friendly_model": "GL-C-009P", + "name": "GLEDOPTO GL-C-009P", + "quirk_applied": true, + "quirk_class": "zhaquirks.gledopto.glc009p:(GLEDOPTO / GL-C-009P)", + "exposes_features": [], + "manufacturer_code": 4687, + "power_source": "Mains", + "lqi": 204, + "rssi": -60, + "last_seen": "2026-06-07T01:36:10.165238+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4687, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "DIMMABLE_LIGHT", + "id": 257 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "GLEDOPTO" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "GL-C-009P" + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [ + { + "id": "0x0000", + "name": "current_level", + "zcl_type": "uint8", + "value": 143 + }, + { + "id": "0x0014", + "name": "default_move_rate", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0013", + "name": "off_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0011", + "name": "on_level", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0010", + "name": "on_off_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0012", + "name": "on_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x4000", + "name": "start_up_current_level", + "zcl_type": "uint8", + "value": 255 + } + ] + }, + { + "cluster_id": "0x0300", + "endpoint_attribute": "light_color", + "attributes": [ + { + "id": "0x400a", + "name": "color_capabilities", + "zcl_type": "map16", + "value": 0 + }, + { + "id": "0x4002", + "name": "color_loop_active", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0008", + "name": "color_mode", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x400c", + "name": "color_temp_physical_max", + "zcl_type": "uint16", + "value": 495 + }, + { + "id": "0x400b", + "name": "color_temp_physical_min", + "zcl_type": "uint16", + "value": 158 + }, + { + "id": "0x0007", + "name": "color_temperature", + "zcl_type": "uint16", + "value": 158 + }, + { + "id": "0x0003", + "name": "current_x", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0004", + "name": "current_y", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x000f", + "name": "options", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x4010", + "name": "start_up_color_temperature", + "zcl_type": "uint16", + "value": 65535 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 385953793 + } + ] + } + ] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "PROXY_BASIC", + "id": 97 + }, + "in_clusters": [], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "GLEDOPTO", + "model": "GL-C-009P", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4687, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0101", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x0300", + "0x1000" + ], + "output_clusters": [ + "0x0019" + ] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0061", + "input_clusters": [], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "light": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-1", + "migrate_unique_ids": [], + "platform": "light", + "class_name": "Light", + "translation_key": "light", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 1, + "available": true, + "group_id": null, + "effect_list": [ + "off" + ], + "supported_features": 40, + "min_mireds": 158, + "max_mireds": 495 + }, + "state": { + "class_name": "Light", + "available": true, + "on": false, + "brightness": 143, + "xy_color": null, + "color_temp": 158, + "effect_list": [ + "off" + ], + "effect": "off", + "supported_features": 40, + "color_mode": "color_temp", + "supported_color_modes": [ + "brightness", + "color_temp", + "onoff" + ], + "off_with_transition": false, + "off_brightness": null + }, + "extra_state_attributes": [ + "off_brightness", + "off_with_transition" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-1-768-start_up_color_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "StartUpColorTemperatureConfigurationEntity", + "translation_key": "start_up_color_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 495, + "native_min_value": 158, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "StartUpColorTemperatureConfigurationEntity", + "available": true, + "state": 65535 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-1-8-start_up_current_level", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "StartUpCurrentLevelConfigurationEntity", + "translation_key": "start_up_current_level", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "StartUpCurrentLevelConfigurationEntity", + "available": true, + "state": 255 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-1-6-StartUpOnOff", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "StartupOnOffSelectEntity", + "translation_key": "start_up_on_off", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "StartUpOnOff", + "options": [ + "Off", + "On", + "Toggle", + "PreviousValue" + ] + }, + "state": { + "class_name": "StartupOnOffSelectEntity", + "available": true, + "state": "Off" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 204 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -60 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x17013001", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/gledopto-gl-c-009p-0x25013001.json b/tests/data/devices/gledopto-gl-c-009p-0x25013001.json new file mode 100644 index 000000000..30012337a --- /dev/null +++ b/tests/data/devices/gledopto-gl-c-009p-0x25013001.json @@ -0,0 +1,453 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:8c:97:e8:62", + "nwk": "0x27EB", + "manufacturer": "GLEDOPTO", + "model": "GL-C-009P", + "friendly_manufacturer": "GLEDOPTO", + "friendly_model": "GL-C-009P", + "name": "GLEDOPTO GL-C-009P", + "quirk_applied": true, + "quirk_class": "zhaquirks.gledopto.glc009p:(GLEDOPTO / GL-C-009P)", + "exposes_features": [], + "manufacturer_code": 4687, + "power_source": "Mains", + "lqi": 112, + "rssi": -72, + "last_seen": "2026-03-07T18:12:04.230931+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4687, + "maximum_buffer_size": 74, + "maximum_incoming_transfer_size": 404, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 404, + "descriptor_capability_field": 0 + }, + "endpoints": { + "11": { + "profile_id": 260, + "device_type": { + "name": "DIMMABLE_LIGHT", + "id": 257 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "GLEDOPTO" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "GL-C-009P" + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 1 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "value": 255 + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [ + { + "id": "0x0000", + "name": "current_level", + "zcl_type": "uint8", + "value": 138 + }, + { + "id": "0x0014", + "name": "default_move_rate", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0013", + "name": "off_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0011", + "name": "on_level", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0010", + "name": "on_off_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0012", + "name": "on_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x4000", + "name": "start_up_current_level", + "zcl_type": "uint8", + "value": 255 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 620834817 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "GLEDOPTO", + "model": "GL-C-009P", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4687, + "maximum_buffer_size": 74, + "maximum_incoming_transfer_size": 404, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 404, + "descriptor_capability_field": 0 + }, + "endpoints": { + "11": { + "profile_id": "0x0104", + "device_type": "0x0101", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x0300", + "0x1000" + ], + "output_clusters": [ + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-11-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 11, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "light": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-11", + "migrate_unique_ids": [], + "platform": "light", + "class_name": "Light", + "translation_key": "light", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 11, + "available": true, + "group_id": null, + "effect_list": [ + "off" + ], + "supported_features": 40, + "min_mireds": 153, + "max_mireds": 500 + }, + "state": { + "class_name": "Light", + "available": true, + "on": true, + "brightness": 138, + "xy_color": null, + "color_temp": null, + "effect_list": [ + "off" + ], + "effect": "off", + "supported_features": 40, + "color_mode": "brightness", + "supported_color_modes": [ + "brightness", + "onoff" + ], + "off_with_transition": false, + "off_brightness": null + }, + "extra_state_attributes": [ + "off_brightness", + "off_with_transition" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-11-8-start_up_current_level", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "StartUpCurrentLevelConfigurationEntity", + "translation_key": "start_up_current_level", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 11, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "StartUpCurrentLevelConfigurationEntity", + "available": true, + "state": 255 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-11-6-StartUpOnOff", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "StartupOnOffSelectEntity", + "translation_key": "start_up_on_off", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 11, + "available": true, + "group_id": null, + "enum": "StartUpOnOff", + "options": [ + "Off", + "On", + "Toggle", + "PreviousValue" + ] + }, + "state": { + "class_name": "StartupOnOffSelectEntity", + "available": true, + "state": "PreviousValue" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-11-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 11, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 112 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-11-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 11, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -72 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:97:e8:62-11-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:97:e8:62", + "endpoint_id": 11, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x25013001", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/gledopto-gl-c-009p.json b/tests/data/devices/gledopto-gl-c-009p-0x29013001.json similarity index 100% rename from tests/data/devices/gledopto-gl-c-009p.json rename to tests/data/devices/gledopto-gl-c-009p-0x29013001.json diff --git a/tests/data/devices/gledopto-gl-sd-301p.json b/tests/data/devices/gledopto-gl-sd-301p-0x26013001.json similarity index 100% rename from tests/data/devices/gledopto-gl-sd-301p.json rename to tests/data/devices/gledopto-gl-sd-301p-0x26013001.json diff --git a/tests/data/devices/handshake-finland-agge-zigbee-smart-rotary-dimmer.json b/tests/data/devices/handshake-finland-agge-zigbee-smart-rotary-dimmer-0x00000002.json similarity index 100% rename from tests/data/devices/handshake-finland-agge-zigbee-smart-rotary-dimmer.json rename to tests/data/devices/handshake-finland-agge-zigbee-smart-rotary-dimmer-0x00000002.json diff --git a/tests/data/devices/hive-mbr1.json b/tests/data/devices/hive-mbr1-0x01047320.json similarity index 100% rename from tests/data/devices/hive-mbr1.json rename to tests/data/devices/hive-mbr1-0x01047320.json diff --git a/tests/data/devices/ikea-of-sweden-badring-water-leakage-sensor.json b/tests/data/devices/ikea-of-sweden-badring-water-leakage-sensor-0x01000007.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-badring-water-leakage-sensor.json rename to tests/data/devices/ikea-of-sweden-badring-water-leakage-sensor-0x01000007.json diff --git a/tests/data/devices/ikea-of-sweden-fyrtur-block-out-roller-blind.json b/tests/data/devices/ikea-of-sweden-fyrtur-block-out-roller-blind-0x23088631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-fyrtur-block-out-roller-blind.json rename to tests/data/devices/ikea-of-sweden-fyrtur-block-out-roller-blind-0x23088631.json diff --git a/tests/data/devices/ikea-of-sweden-inspelning-smart-plug.json b/tests/data/devices/ikea-of-sweden-inspelning-smart-plug-0x02040045.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-inspelning-smart-plug.json rename to tests/data/devices/ikea-of-sweden-inspelning-smart-plug-0x02040045.json diff --git a/tests/data/devices/ikea-of-sweden-ormanas-led-strip.json b/tests/data/devices/ikea-of-sweden-ormanas-led-strip-0x01010010.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-ormanas-led-strip.json rename to tests/data/devices/ikea-of-sweden-ormanas-led-strip-0x01010010.json diff --git a/tests/data/devices/ikea-of-sweden-parasoll-door-window-sensor.json b/tests/data/devices/ikea-of-sweden-parasoll-door-window-sensor-0x01000019.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-parasoll-door-window-sensor.json rename to tests/data/devices/ikea-of-sweden-parasoll-door-window-sensor-0x01000019.json diff --git a/tests/data/devices/ikea-of-sweden-praktlysing-cellular-blind.json b/tests/data/devices/ikea-of-sweden-praktlysing-cellular-blind-0x23088631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-praktlysing-cellular-blind.json rename to tests/data/devices/ikea-of-sweden-praktlysing-cellular-blind-0x23088631.json diff --git a/tests/data/devices/ikea-of-sweden-rodret-dimmer.json b/tests/data/devices/ikea-of-sweden-rodret-dimmer-0x01000047.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-rodret-dimmer.json rename to tests/data/devices/ikea-of-sweden-rodret-dimmer-0x01000047.json diff --git a/tests/data/devices/ikea-of-sweden-rodret-dimmer-0x01000057.json b/tests/data/devices/ikea-of-sweden-rodret-dimmer-0x01000057.json new file mode 100644 index 000000000..ed24009cd --- /dev/null +++ b/tests/data/devices/ikea-of-sweden-rodret-dimmer-0x01000057.json @@ -0,0 +1,393 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:05:fa:0a:e0", + "nwk": "0x0E8A", + "manufacturer": "IKEA of Sweden", + "model": "RODRET Dimmer", + "friendly_manufacturer": "IKEA of Sweden", + "friendly_model": "RODRET Dimmer", + "name": "IKEA of Sweden RODRET Dimmer", + "quirk_applied": true, + "quirk_class": "zhaquirks.ikea.twobtnremote:IkeaRodretRemote2BtnNew", + "exposes_features": [], + "manufacturer_code": 4476, + "power_source": "Battery or Unknown", + "lqi": 15, + "rssi": null, + "last_seen": "2025-08-14T19:37:13.098110+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4476, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "NON_COLOR_CONTROLLER", + "id": 2080 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0013", + "name": "alarm_mask", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "IKEA of Sweden" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "RODRET Dimmer" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0034", + "name": "battery_rated_voltage", + "zcl_type": "uint8", + "value": 15 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 4 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 15 + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [ + { + "id": "0x0003", + "name": "fast_poll_timeout", + "zcl_type": "uint16", + "value": 120 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + }, + { + "cluster_id": "0xfc7c", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 3 + } + ] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 16777303 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "IKEA of Sweden", + "model": "RODRET Dimmer", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4476, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0820", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0004", + "0x0020", + "0x1000", + "0xfc7c" + ], + "output_clusters": [ + "0x0003", + "0x0004", + "0x0006", + "0x0008", + "0x0019", + "0x1000" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:fa:0a:e0-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:fa:0a:e0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:fa:0a:e0-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:fa:0a:e0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 15 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:fa:0a:e0-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:fa:0a:e0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:fa:0a:e0-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:fa:0a:e0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_size": "AAA", + "battery_quantity": 1, + "battery_voltage": 1.5 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:fa:0a:e0-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:fa:0a:e0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x01000057", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/ikea-of-sweden-rodret-wireless-dimmer.json b/tests/data/devices/ikea-of-sweden-rodret-wireless-dimmer-0x01000057.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-rodret-wireless-dimmer.json rename to tests/data/devices/ikea-of-sweden-rodret-wireless-dimmer-0x01000057.json diff --git a/tests/data/devices/ikea-of-sweden-somrig-shortcut-button.json b/tests/data/devices/ikea-of-sweden-somrig-shortcut-button-0x01000021.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-somrig-shortcut-button.json rename to tests/data/devices/ikea-of-sweden-somrig-shortcut-button-0x01000021.json diff --git a/tests/data/devices/ikea-of-sweden-starkvind-air-purifier.json b/tests/data/devices/ikea-of-sweden-starkvind-air-purifier-0x00011001.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-starkvind-air-purifier.json rename to tests/data/devices/ikea-of-sweden-starkvind-air-purifier-0x00011001.json diff --git a/tests/data/devices/ikea-of-sweden-starkvind-air-purifier-table.json b/tests/data/devices/ikea-of-sweden-starkvind-air-purifier-table-0x00011001.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-starkvind-air-purifier-table.json rename to tests/data/devices/ikea-of-sweden-starkvind-air-purifier-table-0x00011001.json diff --git a/tests/data/devices/ikea-of-sweden-symfonisk-sound-remote-gen2.json b/tests/data/devices/ikea-of-sweden-symfonisk-sound-remote-gen2-0x00010012.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-symfonisk-sound-remote-gen2.json rename to tests/data/devices/ikea-of-sweden-symfonisk-sound-remote-gen2-0x00010012.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-e12-w-op-ch-400lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-e12-w-op-ch-400lm-0x23094631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-e12-w-op-ch-400lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-e12-w-op-ch-400lm-0x23094631.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-e12-ws-opal-400lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-e12-ws-opal-400lm-0x23087631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-e12-ws-opal-400lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-e12-ws-opal-400lm-0x23087631.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-e14-ws-globe-470lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-e14-ws-globe-470lm-0x01010020.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-e14-ws-globe-470lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-e14-ws-globe-470lm-0x01010020.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-opal-1000lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-opal-1000lm-0x23094631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-opal-1000lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-opal-1000lm-0x23094631.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-w-opal-1000lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-w-opal-1000lm-0x23094631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-w-opal-1000lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-w-opal-1000lm-0x23094631.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-ws-opal-980lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-ws-opal-980lm-0x23095631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-ws-opal-980lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-ws-opal-980lm-0x23095631.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-e27-ws-globe-1055lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-e27-ws-globe-1055lm-0x02040005.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-e27-ws-globe-1055lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-e27-ws-globe-1055lm-0x02040005.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-e27-ww-g95-cl-470lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-e27-ww-g95-cl-470lm-0x00011006.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-e27-ww-g95-cl-470lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-e27-ww-g95-cl-470lm-0x00011006.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ww-400lm.json b/tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ww-400lm-0x23093631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ww-400lm.json rename to tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ww-400lm-0x23093631.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-control-outlet.json b/tests/data/devices/ikea-of-sweden-tradfri-control-outlet-0x23089631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-control-outlet.json rename to tests/data/devices/ikea-of-sweden-tradfri-control-outlet-0x23089631.json diff --git a/tests/data/devices/ikea-of-sweden-tradfri-open-close-remote.json b/tests/data/devices/ikea-of-sweden-tradfri-open-close-remote-0x23079631.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-tradfri-open-close-remote.json rename to tests/data/devices/ikea-of-sweden-tradfri-open-close-remote-0x23079631.json diff --git a/tests/data/devices/ikea-of-sweden-vallhorn-wireless-motion-sensor.json b/tests/data/devices/ikea-of-sweden-vallhorn-wireless-motion-sensor-0x01000064.json similarity index 100% rename from tests/data/devices/ikea-of-sweden-vallhorn-wireless-motion-sensor.json rename to tests/data/devices/ikea-of-sweden-vallhorn-wireless-motion-sensor-0x01000064.json diff --git a/tests/data/devices/innr-ae-280-c.json b/tests/data/devices/innr-ae-280-c-0x20026a30.json similarity index 100% rename from tests/data/devices/innr-ae-280-c.json rename to tests/data/devices/innr-ae-280-c-0x20026a30.json diff --git a/tests/data/devices/innr-rb-285-c.json b/tests/data/devices/innr-rb-285-c-0x10051567.json similarity index 100% rename from tests/data/devices/innr-rb-285-c.json rename to tests/data/devices/innr-rb-285-c-0x10051567.json diff --git a/tests/data/devices/innr-rc-250.json b/tests/data/devices/innr-rc-250-0x21086500.json similarity index 100% rename from tests/data/devices/innr-rc-250.json rename to tests/data/devices/innr-rc-250-0x21086500.json diff --git a/tests/data/devices/innr-rs-232-c.json b/tests/data/devices/innr-rs-232-c-0x22151511.json similarity index 100% rename from tests/data/devices/innr-rs-232-c.json rename to tests/data/devices/innr-rs-232-c-0x22151511.json diff --git a/tests/data/devices/innr-sp-120.json b/tests/data/devices/innr-sp-120-0x11040002.json similarity index 100% rename from tests/data/devices/innr-sp-120.json rename to tests/data/devices/innr-sp-120-0x11040002.json diff --git a/tests/data/devices/innr-sp-234.json b/tests/data/devices/innr-sp-234-0x31016610.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/innr-sp-234.json rename to tests/data/devices/innr-sp-234-0x31016610.json diff --git a/tests/data/devices/innr-sp-240.json b/tests/data/devices/innr-sp-240-0x191e3685.json similarity index 100% rename from tests/data/devices/innr-sp-240.json rename to tests/data/devices/innr-sp-240-0x191e3685.json diff --git a/tests/data/devices/innr-sp-242.json b/tests/data/devices/innr-sp-242-0x17173685.json similarity index 100% rename from tests/data/devices/innr-sp-242.json rename to tests/data/devices/innr-sp-242-0x17173685.json diff --git a/tests/data/devices/inovelli-vzm30-sn-0x01100100.json b/tests/data/devices/inovelli-vzm30-sn-0x01100100.json new file mode 100644 index 000000000..caa7ceec6 --- /dev/null +++ b/tests/data/devices/inovelli-vzm30-sn-0x01100100.json @@ -0,0 +1,1354 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "nwk": "0x3F4D", + "manufacturer": "Inovelli", + "model": "VZM30-SN", + "friendly_manufacturer": "Inovelli", + "friendly_model": "VZM30-SN", + "name": "Inovelli VZM30-SN", + "quirk_applied": true, + "quirk_class": "zhaquirks.inovelli.VZM30SN:(Inovelli / VZM30-SN)", + "exposes_features": [], + "manufacturer_code": 4655, + "power_source": "Mains", + "lqi": 192, + "rssi": -52, + "last_seen": "2025-07-31T03:56:46.670783+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4655, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 500, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 500, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "DIMMABLE_LIGHT", + "id": 257 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Inovelli" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "VZM30-SN" + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "value": 255 + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [ + { + "id": "0x0000", + "name": "current_level", + "zcl_type": "uint8", + "value": 254 + }, + { + "id": "0x0014", + "name": "default_move_rate", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0013", + "name": "off_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0011", + "name": "on_level", + "zcl_type": "uint8", + "value": 255 + }, + { + "id": "0x0010", + "name": "on_off_transition_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0012", + "name": "on_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x4000", + "name": "start_up_current_level", + "zcl_type": "uint8", + "value": 255 + } + ] + }, + { + "cluster_id": "0x0702", + "endpoint_attribute": "smartenergy_metering", + "attributes": [ + { + "id": "0x0000", + "name": "current_summ_delivered", + "zcl_type": "uint48", + "value": 7061 + }, + { + "id": "0x0001", + "name": "current_summ_received", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0100", + "name": "current_tier1_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0102", + "name": "current_tier2_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0104", + "name": "current_tier3_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0106", + "name": "current_tier4_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0108", + "name": "current_tier5_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x010a", + "name": "current_tier6_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0304", + "name": "demand_formatting", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0302", + "name": "divisor", + "zcl_type": "uint24", + "value": 100 + }, + { + "id": "0x0400", + "name": "instantaneous_demand", + "zcl_type": "int24", + "unsupported": true + }, + { + "id": "0x0306", + "name": "metering_device_type", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x0301", + "name": "multiplier", + "zcl_type": "uint24", + "value": 1 + }, + { + "id": "0x0200", + "name": "status", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x0303", + "name": "summation_formatting", + "zcl_type": "map8", + "value": 66 + }, + { + "id": "0x0300", + "name": "unit_of_measure", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0b04", + "endpoint_attribute": "electrical_measurement", + "attributes": [ + { + "id": "0x0603", + "name": "ac_current_divisor", + "zcl_type": "uint16", + "value": 99 + }, + { + "id": "0x0602", + "name": "ac_current_multiplier", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0300", + "name": "ac_frequency", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0401", + "name": "ac_frequency_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0302", + "name": "ac_frequency_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0400", + "name": "ac_frequency_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0605", + "name": "ac_power_divisor", + "zcl_type": "uint16", + "value": 10 + }, + { + "id": "0x0604", + "name": "ac_power_multiplier", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0601", + "name": "ac_voltage_divisor", + "zcl_type": "uint16", + "value": 10 + }, + { + "id": "0x0600", + "name": "ac_voltage_multiplier", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x050b", + "name": "active_power", + "zcl_type": "int16", + "value": 0 + }, + { + "id": "0x050d", + "name": "active_power_max", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x090d", + "name": "active_power_max_ph_b", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0a0d", + "name": "active_power_max_ph_c", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x090b", + "name": "active_power_ph_b", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0a0b", + "name": "active_power_ph_c", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x050f", + "name": "apparent_power", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0000", + "name": "measurement_type", + "zcl_type": "map32", + "unsupported": true + }, + { + "id": "0x0403", + "name": "power_divisor", + "zcl_type": "uint32", + "unsupported": true + }, + { + "id": "0x0510", + "name": "power_factor", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0910", + "name": "power_factor_ph_b", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0a10", + "name": "power_factor_ph_c", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0402", + "name": "power_multiplier", + "zcl_type": "uint32", + "unsupported": true + }, + { + "id": "0x0508", + "name": "rms_current", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x050a", + "name": "rms_current_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x090a", + "name": "rms_current_max_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a0a", + "name": "rms_current_max_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0908", + "name": "rms_current_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a08", + "name": "rms_current_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0505", + "name": "rms_voltage", + "zcl_type": "uint16", + "value": 1244 + }, + { + "id": "0x0507", + "name": "rms_voltage_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0907", + "name": "rms_voltage_max_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a07", + "name": "rms_voltage_max_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0905", + "name": "rms_voltage_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a05", + "name": "rms_voltage_ph_c", + "zcl_type": "uint16", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0b05", + "endpoint_attribute": "diagnostic", + "attributes": [] + }, + { + "cluster_id": "0xfc31", + "endpoint_attribute": "inovelli_vzm31sn_cluster", + "attributes": [ + { + "id": "0x0020", + "name": "internal_temp_monitor", + "zcl_type": "int8", + "value": 31 + }, + { + "id": "0x0021", + "name": "overheated", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0xfc57", + "endpoint_attribute": "works_with_all_hubs", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 17826048 + } + ] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "DIMMER_SWITCH", + "id": 260 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + }, + { + "cluster_id": "0xfc31", + "endpoint_attribute": "inovelli_vzm31sn_cluster", + "attributes": [] + } + ] + }, + "3": { + "profile_id": 260, + "device_type": { + "name": "DIMMER_SWITCH", + "id": 260 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + }, + { + "cluster_id": "0xfc31", + "endpoint_attribute": "inovelli_vzm31sn_cluster", + "attributes": [] + } + ] + }, + "4": { + "profile_id": 260, + "device_type": { + "name": "TEMPERATURE_SENSOR", + "id": 770 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 2224 + } + ] + }, + { + "cluster_id": "0x0405", + "endpoint_attribute": "humidity", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 5051 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + } + ] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "PROXY_BASIC", + "id": 97 + }, + "in_clusters": [], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "Inovelli", + "model": "VZM30-SN", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4655, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 500, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 500, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0101", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x0702", + "0x0b04", + "0x0b05", + "0xfc31", + "0xfc57" + ], + "output_clusters": [ + "0x0019" + ] + }, + "2": { + "profile_id": "0x0104", + "device_type": "0x0104", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005" + ], + "output_clusters": [ + "0x0003", + "0x0006", + "0x0008", + "0xfc31" + ] + }, + "3": { + "profile_id": "0x0104", + "device_type": "0x0104", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005" + ], + "output_clusters": [ + "0x0003", + "0x0006", + "0x0008", + "0xfc31" + ] + }, + "4": { + "profile_id": "0x0104", + "device_type": "0x0302", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0402", + "0x0405" + ], + "output_clusters": [ + "0x0003" + ] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0061", + "input_clusters": [], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "light": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1", + "migrate_unique_ids": [], + "platform": "light", + "class_name": "Light", + "translation_key": "light", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "effect_list": [ + "off" + ], + "supported_features": 40, + "min_mireds": 153, + "max_mireds": 500 + }, + "state": { + "class_name": "Light", + "available": true, + "on": false, + "brightness": 254, + "xy_color": null, + "color_temp": null, + "effect_list": [ + "off" + ], + "effect": "off", + "supported_features": 40, + "color_mode": "brightness", + "supported_color_modes": [ + "brightness", + "onoff" + ], + "off_with_transition": false, + "off_brightness": null + }, + "extra_state_attributes": [ + "off_brightness", + "off_with_transition" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-8-default_move_rate", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "DefaultMoveRateConfigurationEntity", + "translation_key": "default_move_rate", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 254, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "DefaultMoveRateConfigurationEntity", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-8-on_level", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "OnLevelConfigurationEntity", + "translation_key": "on_level", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "OnLevelConfigurationEntity", + "available": true, + "state": 255 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-8-on_off_transition_time", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "OnOffTransitionTimeConfigurationEntity", + "translation_key": "on_off_transition_time", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 65535, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "OnOffTransitionTimeConfigurationEntity", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-8-start_up_current_level", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "StartUpCurrentLevelConfigurationEntity", + "translation_key": "start_up_current_level", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "StartUpCurrentLevelConfigurationEntity", + "available": true, + "state": 255 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-6-StartUpOnOff", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "StartupOnOffSelectEntity", + "translation_key": "start_up_on_off", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "StartUpOnOff", + "options": [ + "Off", + "On", + "Toggle", + "PreviousValue" + ] + }, + "state": { + "class_name": "StartupOnOffSelectEntity", + "available": true, + "state": "PreviousValue" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 192 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -52 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-1794-summation_delivered", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SmartEnergySummation", + "translation_key": "summation_delivered", + "translation_placeholders": null, + "device_class": "energy", + "state_class": "total_increasing", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 3, + "unit": "kWh" + }, + "state": { + "class_name": "SmartEnergySummation", + "available": true, + "state": 70.61, + "device_type": "Electric Metering", + "status": "NO_ALARMS", + "zcl_unit_of_measurement": 0 + }, + "extra_state_attributes": [ + "device_type", + "status", + "zcl_unit_of_measurement" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-2820", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ElectricalMeasurementActivePower", + "translation_key": null, + "translation_placeholders": null, + "device_class": "power", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "W" + }, + "state": { + "class_name": "ElectricalMeasurementActivePower", + "available": true, + "state": 0.0 + }, + "extra_state_attributes": [ + "active_power_max", + "measurement_type" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-2820-rms_current", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ElectricalMeasurementRMSCurrent", + "translation_key": null, + "translation_placeholders": null, + "device_class": "current", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 2, + "unit": "A" + }, + "state": { + "class_name": "ElectricalMeasurementRMSCurrent", + "available": true, + "state": 0.0 + }, + "extra_state_attributes": [ + "measurement_type", + "rms_current_max" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-2820-rms_voltage", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ElectricalMeasurementRMSVoltage", + "translation_key": null, + "translation_placeholders": null, + "device_class": "voltage", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "V" + }, + "state": { + "class_name": "ElectricalMeasurementRMSVoltage", + "available": true, + "state": 124.4 + }, + "extra_state_attributes": [ + "measurement_type", + "rms_voltage_max" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "InovelliInternalTemperature", + "translation_key": "internal_temp_monitor", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "InovelliInternalTemperature", + "available": true, + "state": 31 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-overheated", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "InovelliOverheated", + "translation_key": "overheated", + "translation_placeholders": null, + "device_class": "enum", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "InovelliOverheated", + "available": true, + "state": "Normal" + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-4-1026", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Temperature", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 4, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 22.24 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-4-1029", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Humidity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "humidity", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 4, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "%" + }, + "state": { + "class_name": "Humidity", + "available": true, + "state": 50.51 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x01100100", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/inovelli-vzm30-sn.json b/tests/data/devices/inovelli-vzm30-sn.json index caa7ceec6..d01a0181b 100644 --- a/tests/data/devices/inovelli-vzm30-sn.json +++ b/tests/data/devices/inovelli-vzm30-sn.json @@ -1,7 +1,7 @@ { "version": 2, "ieee": "ab:cd:ef:12:9a:d6:cb:e7", - "nwk": "0x3F4D", + "nwk": "0x0CE2", "manufacturer": "Inovelli", "model": "VZM30-SN", "friendly_manufacturer": "Inovelli", @@ -12,9 +12,9 @@ "exposes_features": [], "manufacturer_code": 4655, "power_source": "Mains", - "lqi": 192, - "rssi": -52, - "last_seen": "2025-07-31T03:56:46.670783+00:00", + "lqi": 240, + "rssi": -40, + "last_seen": "2026-02-15T23:30:25.615727+00:00", "available": true, "device_type": "Router", "active_coordinator": false, @@ -82,7 +82,7 @@ "id": "0x0000", "name": "on_off", "zcl_type": "bool", - "value": 0 + "value": 1 }, { "id": "0x4003", @@ -148,7 +148,7 @@ "id": "0x0000", "name": "current_summ_delivered", "zcl_type": "uint48", - "value": 7061 + "value": 0 }, { "id": "0x0001", @@ -348,6 +348,60 @@ "zcl_type": "uint16", "unsupported": true }, + { + "id": "0x0103", + "name": "dc_current", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0203", + "name": "dc_current_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0202", + "name": "dc_current_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0106", + "name": "dc_power", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0205", + "name": "dc_power_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0204", + "name": "dc_power_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0100", + "name": "dc_voltage", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0201", + "name": "dc_voltage_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0200", + "name": "dc_voltage_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, { "id": "0x0000", "name": "measurement_type", @@ -424,7 +478,7 @@ "id": "0x0505", "name": "rms_voltage", "zcl_type": "uint16", - "value": 1244 + "value": 1185 }, { "id": "0x0507", @@ -455,6 +509,12 @@ "name": "rms_voltage_ph_c", "zcl_type": "uint16", "unsupported": true + }, + { + "id": "0x0304", + "name": "total_active_power", + "zcl_type": "int32", + "unsupported": true } ] }, @@ -468,16 +528,106 @@ "endpoint_attribute": "inovelli_vzm31sn_cluster", "attributes": [ { - "id": "0x0020", - "name": "internal_temp_monitor", - "zcl_type": "int8", - "value": 31 + "id": "0x0012", + "name": "active_power_reports", + "zcl_type": "uint8", + "value": 10 + }, + { + "id": "0x000c", + "name": "auto_off_timer", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x000d", + "name": "default_level_local", + "zcl_type": "uint8", + "value": 255 }, { - "id": "0x0021", - "name": "overheated", + "id": "0x000e", + "name": "default_level_remote", + "zcl_type": "uint8", + "value": 255 + }, + { + "id": "0x0006", + "name": "dimming_speed_down_local", + "zcl_type": "uint8", + "value": 127 + }, + { + "id": "0x0005", + "name": "dimming_speed_down_remote", + "zcl_type": "uint8", + "value": 127 + }, + { + "id": "0x0002", + "name": "dimming_speed_up_local", + "zcl_type": "uint8", + "value": 127 + }, + { + "id": "0x0001", + "name": "dimming_speed_up_remote", + "zcl_type": "uint8", + "value": 25 + }, + { + "id": "0x000b", + "name": "invert_switch", "zcl_type": "bool", "value": 0 + }, + { + "id": "0x0011", + "name": "load_level_indicator_timeout", + "zcl_type": "uint8", + "value": 11 + }, + { + "id": "0x000a", + "name": "maximum_level", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0009", + "name": "minimum_level", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0004", + "name": "ramp_rate_off_to_on_local", + "zcl_type": "uint8", + "value": 127 + }, + { + "id": "0x0003", + "name": "ramp_rate_off_to_on_remote", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0008", + "name": "ramp_rate_on_to_off_local", + "zcl_type": "uint8", + "value": 127 + }, + { + "id": "0x0007", + "name": "ramp_rate_on_to_off_remote", + "zcl_type": "uint8", + "value": 127 + }, + { + "id": "0x000f", + "name": "state_after_power_restored", + "zcl_type": "uint8", + "value": 255 } ] }, @@ -496,7 +646,7 @@ "id": "0x0002", "name": "current_file_version", "zcl_type": "uint32", - "value": 17826048 + "unsupported": true } ] } @@ -629,7 +779,7 @@ "id": "0x0000", "name": "measured_value", "zcl_type": "int16", - "value": 2224 + "value": 1760 } ] }, @@ -641,7 +791,7 @@ "id": "0x0000", "name": "measured_value", "zcl_type": "uint16", - "value": 5051 + "value": 6147 } ] } @@ -691,7 +841,7 @@ "endpoints": { "1": { "profile_id": "0x0104", - "device_type": "0x0101", + "device_type": "0x0100", "input_clusters": [ "0x0000", "0x0003", @@ -827,7 +977,7 @@ "state": { "class_name": "Light", "available": true, - "on": false, + "on": true, "brightness": 254, "xy_color": null, "color_temp": null, @@ -851,6 +1001,409 @@ } ], "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-auto_off_timer", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliAutoShutoffTimer", + "translation_key": "auto_off_timer", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 32767, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliAutoShutoffTimer", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-default_level_local", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliLocalDefaultLevel", + "translation_key": "default_level_local", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliLocalDefaultLevel", + "available": true, + "state": 255 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-default_level_remote", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliRemoteDefaultLevel", + "translation_key": "default_level_remote", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliRemoteDefaultLevel", + "available": true, + "state": 255 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-dimming_speed_down_local", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliLocalDimmingDownSpeed", + "translation_key": "dimming_speed_down_local", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 127, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliLocalDimmingDownSpeed", + "available": true, + "state": 127 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-dimming_speed_down_remote", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliRemoteDimmingDownSpeed", + "translation_key": "dimming_speed_down_remote", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 127, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliRemoteDimmingDownSpeed", + "available": true, + "state": 127 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-dimming_speed_up_local", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliLocalDimmingUpSpeed", + "translation_key": "dimming_speed_up_local", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 127, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliLocalDimmingUpSpeed", + "available": true, + "state": 127 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-dimming_speed_up_remote", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliRemoteDimmingUpSpeed", + "translation_key": "dimming_speed_up_remote", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 126, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliRemoteDimmingUpSpeed", + "available": true, + "state": 25 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-load_level_indicator_timeout", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliLoadLevelIndicatorTimeout", + "translation_key": "load_level_indicator_timeout", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 11, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliLoadLevelIndicatorTimeout", + "available": true, + "state": 11 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-ramp_rate_off_to_on_local", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliLocalRampRateOffToOn", + "translation_key": "ramp_rate_off_to_on_local", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 127, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliLocalRampRateOffToOn", + "available": true, + "state": 127 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-ramp_rate_off_to_on_remote", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliRemoteDimmingSpeedOffToOn", + "translation_key": "ramp_rate_off_to_on_remote", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 127, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliRemoteDimmingSpeedOffToOn", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-ramp_rate_on_to_off_local", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliLocalRampRateOnToOff", + "translation_key": "ramp_rate_on_to_off_local", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 127, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliLocalRampRateOnToOff", + "available": true, + "state": 127 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-ramp_rate_on_to_off_remote", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliRemoteDimmingSpeedOnToOff", + "translation_key": "ramp_rate_on_to_off_remote", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 127, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliRemoteDimmingSpeedOnToOff", + "available": true, + "state": 127 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-state_after_power_restored", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "InovelliStartupDefaultLevel", + "translation_key": "state_after_power_restored", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "InovelliStartupDefaultLevel", + "available": true, + "state": 255 + } + }, { "info_object": { "fallback_name": null, @@ -1037,7 +1590,7 @@ "state": { "class_name": "LQISensor", "available": true, - "state": 192 + "state": 240 } }, { @@ -1065,7 +1618,7 @@ "state": { "class_name": "RSSISensor", "available": true, - "state": -52 + "state": -40 } }, { @@ -1093,7 +1646,7 @@ "state": { "class_name": "SmartEnergySummation", "available": true, - "state": 70.61, + "state": 0.0, "device_type": "Electric Metering", "status": "NO_ALARMS", "zcl_unit_of_measurement": 0 @@ -1193,7 +1746,7 @@ "state": { "class_name": "ElectricalMeasurementRMSVoltage", "available": true, - "state": 124.4 + "state": 118.5 }, "extra_state_attributes": [ "measurement_type", @@ -1225,7 +1778,7 @@ "state": { "class_name": "InovelliInternalTemperature", "available": true, - "state": 31 + "state": null } }, { @@ -1253,7 +1806,7 @@ "state": { "class_name": "InovelliOverheated", "available": true, - "state": "Normal" + "state": null } }, { @@ -1281,7 +1834,7 @@ "state": { "class_name": "Temperature", "available": true, - "state": 22.24 + "state": 17.6 } }, { @@ -1309,7 +1862,41 @@ "state": { "class_name": "Humidity", "available": true, - "state": 50.51 + "state": 61.47 + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9a:d6:cb:e7-1-64561-invert_switch", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "InovelliInvertSwitch", + "translation_key": "invert_switch", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9a:d6:cb:e7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "invert_switch", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "InovelliInvertSwitch", + "available": true, + "state": false, + "inverted": false } } ], @@ -1338,7 +1925,7 @@ "state": { "class_name": "FirmwareUpdateEntity", "available": true, - "installed_version": "0x01100100", + "installed_version": null, "in_progress": false, "update_percentage": null, "latest_version": null, diff --git a/tests/data/devices/inovelli-vzm31-sn.json b/tests/data/devices/inovelli-vzm31-sn-0x01020212.json similarity index 100% rename from tests/data/devices/inovelli-vzm31-sn.json rename to tests/data/devices/inovelli-vzm31-sn-0x01020212.json diff --git a/tests/data/devices/inovelli-vzm35-sn.json b/tests/data/devices/inovelli-vzm35-sn-0x02020107.json similarity index 100% rename from tests/data/devices/inovelli-vzm35-sn.json rename to tests/data/devices/inovelli-vzm35-sn-0x02020107.json diff --git a/tests/data/devices/jasco-products-45856.json b/tests/data/devices/jasco-products-45856-0x00000006.json similarity index 100% rename from tests/data/devices/jasco-products-45856.json rename to tests/data/devices/jasco-products-45856-0x00000006.json diff --git a/tests/data/devices/jasco-products-45857.json b/tests/data/devices/jasco-products-45857-0x00000006.json similarity index 100% rename from tests/data/devices/jasco-products-45857.json rename to tests/data/devices/jasco-products-45857-0x00000006.json diff --git a/tests/data/devices/ke-tradfri-open-close-remote.json b/tests/data/devices/ke-tradfri-open-close-remote-0x22010631.json similarity index 100% rename from tests/data/devices/ke-tradfri-open-close-remote.json rename to tests/data/devices/ke-tradfri-open-close-remote-0x22010631.json diff --git a/tests/data/devices/keen-home-inc-sv01-410-mp-1-1.json b/tests/data/devices/keen-home-inc-sv01-410-mp-1-1-0x10235121.json similarity index 100% rename from tests/data/devices/keen-home-inc-sv01-410-mp-1-1.json rename to tests/data/devices/keen-home-inc-sv01-410-mp-1-1-0x10235121.json diff --git a/tests/data/devices/king-of-fans-inc-hbuniversalcfremote.json b/tests/data/devices/king-of-fans-inc-hbuniversalcfremote-0x0000000f.json similarity index 100% rename from tests/data/devices/king-of-fans-inc-hbuniversalcfremote.json rename to tests/data/devices/king-of-fans-inc-hbuniversalcfremote-0x0000000f.json diff --git a/tests/data/devices/king-of-fans-inc-hdc52eastwindfan.json b/tests/data/devices/king-of-fans-inc-hdc52eastwindfan-0x0000000f.json similarity index 100% rename from tests/data/devices/king-of-fans-inc-hdc52eastwindfan.json rename to tests/data/devices/king-of-fans-inc-hdc52eastwindfan-0x0000000f.json diff --git a/tests/data/devices/konke-3afe28010402000d.json b/tests/data/devices/konke-3afe28010402000d.json old mode 100755 new mode 100644 diff --git a/tests/data/devices/kwikset-smartcode-convert-gen1.json b/tests/data/devices/kwikset-smartcode-convert-gen1-0x30a07a06.json similarity index 100% rename from tests/data/devices/kwikset-smartcode-convert-gen1.json rename to tests/data/devices/kwikset-smartcode-convert-gen1-0x30a07a06.json diff --git a/tests/data/devices/lds-zb-onoffplug-d0005.json b/tests/data/devices/lds-zb-onoffplug-d0005-0x21186230.json similarity index 100% rename from tests/data/devices/lds-zb-onoffplug-d0005.json rename to tests/data/devices/lds-zb-onoffplug-d0005-0x21186230.json diff --git a/tests/data/devices/lds-zbt-cctswitch-d0001.json b/tests/data/devices/lds-zbt-cctswitch-d0001-0x21000006.json similarity index 100% rename from tests/data/devices/lds-zbt-cctswitch-d0001.json rename to tests/data/devices/lds-zbt-cctswitch-d0001-0x21000006.json diff --git a/tests/data/devices/ledvance-a60s-rgbw.json b/tests/data/devices/ledvance-a60s-rgbw-0x02146550.json similarity index 100% rename from tests/data/devices/ledvance-a60s-rgbw.json rename to tests/data/devices/ledvance-a60s-rgbw-0x02146550.json diff --git a/tests/data/devices/ledvance-flex-rgbw.json b/tests/data/devices/ledvance-flex-rgbw-0x00102428.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/ledvance-flex-rgbw.json rename to tests/data/devices/ledvance-flex-rgbw-0x00102428.json diff --git a/tests/data/devices/ledvance-outdoor-accent-light-rgb.json b/tests/data/devices/ledvance-outdoor-accent-light-rgb-0x00102428.json similarity index 100% rename from tests/data/devices/ledvance-outdoor-accent-light-rgb.json rename to tests/data/devices/ledvance-outdoor-accent-light-rgb-0x00102428.json diff --git a/tests/data/devices/ledvance-plug.json b/tests/data/devices/ledvance-plug-0x00102101.json similarity index 100% rename from tests/data/devices/ledvance-plug.json rename to tests/data/devices/ledvance-plug-0x00102101.json diff --git a/tests/data/devices/legrand-dimmer-switch-w-o-neutral.json b/tests/data/devices/legrand-dimmer-switch-w-o-neutral-0x004d45ff.json similarity index 100% rename from tests/data/devices/legrand-dimmer-switch-w-o-neutral.json rename to tests/data/devices/legrand-dimmer-switch-w-o-neutral-0x004d45ff.json diff --git a/tests/data/devices/legrand-light-switch-with-neutral-0x001c4203.json b/tests/data/devices/legrand-light-switch-with-neutral-0x001c4203.json new file mode 100644 index 000000000..4a90c7089 --- /dev/null +++ b/tests/data/devices/legrand-light-switch-with-neutral-0x001c4203.json @@ -0,0 +1,544 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:39:bc:b5:2d", + "nwk": "0x8540", + "manufacturer": " Legrand", + "model": " Light switch with neutral", + "friendly_manufacturer": " Legrand", + "friendly_model": " Light switch with neutral", + "name": " Legrand Light switch with neutral", + "quirk_applied": true, + "quirk_class": "zhaquirks.legrand.switch:( Legrand / Light switch with neutral)", + "exposes_features": [], + "manufacturer_code": 4129, + "power_source": "Mains", + "lqi": 220, + "rssi": -67, + "last_seen": "2025-09-10T13:44:21.223921+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": true, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4129, + "maximum_buffer_size": 89, + "maximum_incoming_transfer_size": 63, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 63, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_LIGHT", + "id": 256 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": " Legrand" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": " Light switch with neutral" + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "value": 255 + } + ] + }, + { + "cluster_id": "0x000f", + "endpoint_attribute": "binary_input", + "attributes": [ + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0xfc01", + "endpoint_attribute": "legrand_cluster", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 1851907 + } + ] + }, + { + "cluster_id": "0x0102", + "endpoint_attribute": "window_covering", + "attributes": [] + }, + { + "cluster_id": "0xfc01", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + } + ] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "COMBO_BASIC", + "id": 102 + }, + "in_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": " Legrand", + "model": " Light switch with neutral", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 1, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4129, + "maximum_buffer_size": 89, + "maximum_incoming_transfer_size": 63, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 63, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0100", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x000f", + "0xfc01" + ], + "output_clusters": [ + "0x0000", + "0x0005", + "0x0006", + "0x0019", + "0x0102", + "0xfc01" + ] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0066", + "input_clusters": [ + "0x0021" + ], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:39:bc:b5:2d-1-15", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinaryInput", + "translation_key": "binary_input", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:39:bc:b5:2d", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "present_value" + }, + "state": { + "class_name": "BinaryInput", + "available": true, + "state": false + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:39:bc:b5:2d-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:39:bc:b5:2d", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "light": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:39:bc:b5:2d-1", + "migrate_unique_ids": [], + "platform": "light", + "class_name": "Light", + "translation_key": "light", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:39:bc:b5:2d", + "endpoint_id": 1, + "available": true, + "group_id": null, + "effect_list": [ + "off" + ], + "supported_features": 8, + "min_mireds": 153, + "max_mireds": 500 + }, + "state": { + "class_name": "Light", + "available": true, + "on": false, + "brightness": null, + "xy_color": null, + "color_temp": null, + "effect_list": [ + "off" + ], + "effect": "off", + "supported_features": 8, + "color_mode": "onoff", + "supported_color_modes": [ + "onoff" + ], + "off_with_transition": false, + "off_brightness": null + }, + "extra_state_attributes": [ + "off_brightness", + "off_with_transition" + ] + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:39:bc:b5:2d-1-6-StartUpOnOff", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "StartupOnOffSelectEntity", + "translation_key": "start_up_on_off", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:39:bc:b5:2d", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "StartUpOnOff", + "options": [ + "Off", + "On", + "Toggle", + "PreviousValue" + ] + }, + "state": { + "class_name": "StartupOnOffSelectEntity", + "available": true, + "state": "PreviousValue" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:39:bc:b5:2d-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:39:bc:b5:2d", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 220 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:39:bc:b5:2d-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:39:bc:b5:2d", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -67 + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": "Turn on LED when off", + "unique_id": "ab:cd:ef:12:39:bc:b5:2d-1-led_dark", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "turn_on_led_when_off", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:39:bc:b5:2d", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "led_dark", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "Turn on LED when on", + "unique_id": "ab:cd:ef:12:39:bc:b5:2d-1-led_on", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "turn_on_led_when_on", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:39:bc:b5:2d", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "led_on", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:39:bc:b5:2d-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:39:bc:b5:2d", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x001c4203", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/legrand-light-switch-with-neutral.json b/tests/data/devices/legrand-light-switch-with-neutral.json index 4a90c7089..8e2c9808c 100644 --- a/tests/data/devices/legrand-light-switch-with-neutral.json +++ b/tests/data/devices/legrand-light-switch-with-neutral.json @@ -1,7 +1,7 @@ { "version": 2, "ieee": "ab:cd:ef:12:39:bc:b5:2d", - "nwk": "0x8540", + "nwk": "0x6CCF", "manufacturer": " Legrand", "model": " Light switch with neutral", "friendly_manufacturer": " Legrand", @@ -12,9 +12,9 @@ "exposes_features": [], "manufacturer_code": 4129, "power_source": "Mains", - "lqi": 220, - "rssi": -67, - "last_seen": "2025-09-10T13:44:21.223921+00:00", + "lqi": 212, + "rssi": -58, + "last_seen": "2025-09-11T19:28:42.125323+00:00", "available": true, "device_type": "Router", "active_coordinator": false, @@ -56,6 +56,12 @@ "name": "model", "zcl_type": "string", "value": " Light switch with neutral" + }, + { + "id": "0x4000", + "name": "sw_build_id", + "zcl_type": "string", + "value": "001c" } ] }, @@ -113,14 +119,34 @@ { "cluster_id": "0xfc01", "endpoint_attribute": "legrand_cluster", - "attributes": [] + "attributes": [ + { + "id": "0x0000", + "name": "device_mode", + "zcl_type": "data16", + "unsupported": true + }, + { + "id": "0x0001", + "name": "led_dark", + "zcl_type": "bool", + "value": 0 + } + ] } ], "out_clusters": [ { "cluster_id": "0x0000", "endpoint_attribute": "basic", - "attributes": [] + "attributes": [ + { + "id": "0x4000", + "name": "sw_build_id", + "zcl_type": "string", + "unsupported": true + } + ] }, { "cluster_id": "0x0005", @@ -140,7 +166,52 @@ "id": "0x0002", "name": "current_file_version", "zcl_type": "uint32", - "value": 1851907 + "unsupported": true + }, + { + "id": "0x0003", + "name": "current_zigbee_stack_version", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x000a", + "name": "image_stamp", + "zcl_type": "uint32", + "unsupported": true + }, + { + "id": "0x0008", + "name": "image_type_id", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x000b", + "name": "upgrade_activation_policy", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0000", + "name": "upgrade_server_id", + "zcl_type": "EUI64", + "value": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] } ] }, @@ -405,7 +476,7 @@ "state": { "class_name": "LQISensor", "available": true, - "state": 220 + "state": 212 } }, { @@ -433,7 +504,7 @@ "state": { "class_name": "RSSISensor", "available": true, - "state": -67 + "state": -58 } } ], @@ -528,7 +599,7 @@ "state": { "class_name": "FirmwareUpdateEntity", "available": true, - "installed_version": "0x001c4203", + "installed_version": null, "in_progress": false, "update_percentage": null, "latest_version": null, diff --git a/tests/data/devices/legrand-mobile-outlet.json b/tests/data/devices/legrand-mobile-outlet-0x006545ff.json similarity index 100% rename from tests/data/devices/legrand-mobile-outlet.json rename to tests/data/devices/legrand-mobile-outlet-0x006545ff.json diff --git a/tests/data/devices/level-home-b2.json b/tests/data/devices/level-home-b2-0x0300001a.json similarity index 100% rename from tests/data/devices/level-home-b2.json rename to tests/data/devices/level-home-b2-0x0300001a.json diff --git a/tests/data/devices/level-home-bolt.json b/tests/data/devices/level-home-bolt-0x03020006.json similarity index 100% rename from tests/data/devices/level-home-bolt.json rename to tests/data/devices/level-home-bolt-0x03020006.json diff --git a/tests/data/devices/lixee-zlinky-tic.json b/tests/data/devices/lixee-zlinky-tic-0x00000011.json similarity index 100% rename from tests/data/devices/lixee-zlinky-tic.json rename to tests/data/devices/lixee-zlinky-tic-0x00000011.json diff --git a/tests/data/devices/lk-zb-doorsensor-d0003.json b/tests/data/devices/lk-zb-doorsensor-d0003.json old mode 100755 new mode 100644 diff --git a/tests/data/devices/lk-zbt-dimswitch-d0001.json b/tests/data/devices/lk-zbt-dimswitch-d0001-0x22166500.json similarity index 100% rename from tests/data/devices/lk-zbt-dimswitch-d0001.json rename to tests/data/devices/lk-zbt-dimswitch-d0001-0x22166500.json diff --git a/tests/data/devices/lk-zbt-onoffplug-d0001.json b/tests/data/devices/lk-zbt-onoffplug-d0001-0x22036610.json similarity index 100% rename from tests/data/devices/lk-zbt-onoffplug-d0001.json rename to tests/data/devices/lk-zbt-onoffplug-d0001-0x22036610.json diff --git a/tests/data/devices/lumi-lumi-airrtc-agl001.json b/tests/data/devices/lumi-lumi-airrtc-agl001-0x0000001e.json similarity index 100% rename from tests/data/devices/lumi-lumi-airrtc-agl001.json rename to tests/data/devices/lumi-lumi-airrtc-agl001-0x0000001e.json diff --git a/tests/data/devices/lumi-lumi-curtain-acn002.json b/tests/data/devices/lumi-lumi-curtain-acn002-0x00000e1f.json similarity index 100% rename from tests/data/devices/lumi-lumi-curtain-acn002.json rename to tests/data/devices/lumi-lumi-curtain-acn002-0x00000e1f.json diff --git a/tests/data/devices/lumi-lumi-curtain-acn002-0x00000f20.json b/tests/data/devices/lumi-lumi-curtain-acn002-0x00000f20.json new file mode 100644 index 000000000..927a26b66 --- /dev/null +++ b/tests/data/devices/lumi-lumi-curtain-acn002-0x00000f20.json @@ -0,0 +1,755 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:dc:6a:11:ac", + "nwk": "0x3A21", + "manufacturer": "LUMI", + "model": "lumi.curtain.acn002", + "friendly_manufacturer": "LUMI", + "friendly_model": "lumi.curtain.acn002", + "name": "LUMI lumi.curtain.acn002", + "quirk_applied": true, + "quirk_class": "zhaquirks.xiaomi.aqara.roller_curtain_e1:(LUMI / lumi.curtain.acn002)", + "exposes_features": [], + "manufacturer_code": 4447, + "power_source": "Battery or Unknown", + "lqi": null, + "rssi": null, + "last_seen": "2026-05-07T05:12:52.177250+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4447, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 100, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 100, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_LIGHT", + "id": 256 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "LUMI" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "lumi.curtain.acn002" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 255 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0002", + "endpoint_attribute": "device_temperature", + "attributes": [ + { + "id": "0x0000", + "name": "current_temperature", + "zcl_type": "int16", + "value": 30 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + }, + { + "cluster_id": "0x0009", + "endpoint_attribute": "alarms", + "attributes": [] + }, + { + "cluster_id": "0x000d", + "endpoint_attribute": "analog_output", + "attributes": [ + { + "id": "0x0100", + "name": "application_type", + "zcl_type": "uint32", + "unsupported": true + }, + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "value": "Current position" + }, + { + "id": "0x0075", + "name": "engineering_units", + "zcl_type": "enum16", + "unsupported": true + }, + { + "id": "0x0041", + "name": "max_present_value", + "zcl_type": "single", + "value": 100.0 + }, + { + "id": "0x0045", + "name": "min_present_value", + "zcl_type": "single", + "value": 0.0 + }, + { + "id": "0x0051", + "name": "out_of_service", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "single", + "value": 0.0 + }, + { + "id": "0x0068", + "name": "relinquish_default", + "zcl_type": "single", + "unsupported": true + }, + { + "id": "0x006a", + "name": "resolution", + "zcl_type": "single", + "value": 1.0 + }, + { + "id": "0x006f", + "name": "status_flags", + "zcl_type": "map8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0013", + "endpoint_attribute": "multistate_output", + "attributes": [ + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "uint16", + "value": 1 + } + ] + }, + { + "cluster_id": "0x0102", + "endpoint_attribute": "window_covering", + "attributes": [ + { + "id": "0x0007", + "name": "config_status", + "zcl_type": "map8", + "value": 43 + }, + { + "id": "0x0008", + "name": "current_position_lift_percentage", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0009", + "name": "current_position_tilt_percentage", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0011", + "name": "installed_closed_limit_lift", + "zcl_type": "uint16", + "value": 65535 + }, + { + "id": "0x0013", + "name": "installed_closed_limit_tilt", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0010", + "name": "installed_open_limit_lift", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0012", + "name": "installed_open_limit_tilt", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0017", + "name": "window_covering_mode", + "zcl_type": "map8", + "value": 8 + }, + { + "id": "0x0000", + "name": "window_covering_type", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0xfcc0", + "endpoint_attribute": "opple_cluster", + "attributes": [ + { + "id": "0x0409", + "name": "charging", + "zcl_type": "uint8", + "value": 2 + }, + { + "id": "0x0402", + "name": "positions_stored", + "zcl_type": "bool", + "value": 1 + }, + { + "id": "0x0408", + "name": "speed", + "zcl_type": "uint8", + "value": 2 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 3872 + } + ] + } + ] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "PROXY_BASIC", + "id": 97 + }, + "in_clusters": [], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "LUMI", + "model": "lumi.curtain.acn002", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4447, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 100, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 100, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0100", + "input_clusters": [ + "0x0000", + "0x0002", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0009", + "0x000d", + "0x0013", + "0x0102" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0061", + "input_clusters": [], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": "Charging", + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-charging", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinarySensor", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery_charging", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "charging" + }, + "state": { + "class_name": "BinarySensor", + "available": true, + "state": false + } + }, + { + "info_object": { + "fallback_name": "Calibrated", + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-positions_stored", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinarySensor", + "translation_key": "calibrated", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "positions_stored" + }, + "state": { + "class_name": "BinarySensor", + "available": true, + "state": true + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "cover": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-258", + "migrate_unique_ids": [], + "platform": "cover", + "class_name": "Cover", + "translation_key": "cover", + "translation_placeholders": null, + "device_class": "shade", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Cover", + "available": true, + "current_position": 100, + "current_tilt_position": null, + "state": "open", + "is_opening": false, + "is_closing": false, + "is_closed": false, + "supported_features": 15 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": "Speed", + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-speed", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "speed", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "AqaraRollerDriverSpeed", + "options": [ + "Low", + "Medium", + "High" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "High" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": null, + "battery_size": "Unknown", + "battery_quantity": 1 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-2", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "DeviceTemperature", + "translation_key": "device_temperature", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "DeviceTemperature", + "available": true, + "state": 0.3 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-258-window_covering_type", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "WindowCoveringTypeSensor", + "translation_key": "window_covering_type", + "translation_placeholders": null, + "device_class": "enum", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "WindowCoveringTypeSensor", + "available": true, + "state": "Rollershade" + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-258-inverted", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "WindowCoveringInversionSwitch", + "translation_key": "inverted", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "config_status", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "WindowCoveringInversionSwitch", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:dc:6a:11:ac-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:dc:6a:11:ac", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000f20", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/lumi-lumi-curtain-agl001.json b/tests/data/devices/lumi-lumi-curtain-agl001-0x00000018.json similarity index 100% rename from tests/data/devices/lumi-lumi-curtain-agl001.json rename to tests/data/devices/lumi-lumi-curtain-agl001-0x00000018.json diff --git a/tests/data/devices/lumi-lumi-flood-acn001.json b/tests/data/devices/lumi-lumi-flood-acn001-0x00000004.json similarity index 100% rename from tests/data/devices/lumi-lumi-flood-acn001.json rename to tests/data/devices/lumi-lumi-flood-acn001-0x00000004.json diff --git a/tests/data/devices/lumi-lumi-flood-agl02.json b/tests/data/devices/lumi-lumi-flood-agl02-0x00000020.json similarity index 100% rename from tests/data/devices/lumi-lumi-flood-agl02.json rename to tests/data/devices/lumi-lumi-flood-agl02-0x00000020.json diff --git a/tests/data/devices/lumi-lumi-light-aqcn02.json b/tests/data/devices/lumi-lumi-light-aqcn02-0x00000017.json similarity index 100% rename from tests/data/devices/lumi-lumi-light-aqcn02.json rename to tests/data/devices/lumi-lumi-light-aqcn02-0x00000017.json diff --git a/tests/data/devices/lumi-lumi-magnet-acn001.json b/tests/data/devices/lumi-lumi-magnet-acn001-0x00000004.json similarity index 100% rename from tests/data/devices/lumi-lumi-magnet-acn001.json rename to tests/data/devices/lumi-lumi-magnet-acn001-0x00000004.json diff --git a/tests/data/devices/lumi-lumi-magnet-agl02.json b/tests/data/devices/lumi-lumi-magnet-agl02-0x0000001e.json similarity index 100% rename from tests/data/devices/lumi-lumi-magnet-agl02.json rename to tests/data/devices/lumi-lumi-magnet-agl02-0x0000001e.json diff --git a/tests/data/devices/lumi-lumi-motion-ac02.json b/tests/data/devices/lumi-lumi-motion-ac02.json old mode 100755 new mode 100644 diff --git a/tests/data/devices/lumi-lumi-motion-agl04.json b/tests/data/devices/lumi-lumi-motion-agl04-0x00000019.json similarity index 100% rename from tests/data/devices/lumi-lumi-motion-agl04.json rename to tests/data/devices/lumi-lumi-motion-agl04-0x00000019.json diff --git a/tests/data/devices/lumi-lumi-plug-maeu01-0x0000002d.json b/tests/data/devices/lumi-lumi-plug-maeu01-0x0000002d.json new file mode 100644 index 000000000..138268826 --- /dev/null +++ b/tests/data/devices/lumi-lumi-plug-maeu01-0x0000002d.json @@ -0,0 +1,1032 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:49:c1:10:71", + "nwk": "0x3E39", + "manufacturer": "LUMI", + "model": "lumi.plug.maeu01", + "friendly_manufacturer": "LUMI", + "friendly_model": "lumi.plug.maeu01", + "name": "LUMI lumi.plug.maeu01", + "quirk_applied": true, + "quirk_class": "zhaquirks.xiaomi.aqara.plug_eu:PlugMAEU01", + "exposes_features": [], + "manufacturer_code": 4447, + "power_source": "Mains", + "lqi": 164, + "rssi": -70, + "last_seen": "2026-04-18T05:25:30.234077+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4447, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 100, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 100, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 45 + }, + { + "id": "0x0006", + "name": "date_code", + "zcl_type": "string", + "value": "07-19-2024" + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "LUMI" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "lumi.plug.maeu01" + } + ] + }, + { + "cluster_id": "0x0002", + "endpoint_attribute": "device_temperature", + "attributes": [ + { + "id": "0x0000", + "name": "current_temperature", + "zcl_type": "int16", + "value": 1800 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 1 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0009", + "endpoint_attribute": "alarms", + "attributes": [] + }, + { + "cluster_id": "0x0702", + "endpoint_attribute": "smartenergy_metering", + "attributes": [ + { + "id": "0x0000", + "name": "current_summ_delivered", + "zcl_type": "uint48", + "value": 36079 + }, + { + "id": "0x0001", + "name": "current_summ_received", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0100", + "name": "current_tier1_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0102", + "name": "current_tier2_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0104", + "name": "current_tier3_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0106", + "name": "current_tier4_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0108", + "name": "current_tier5_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x010a", + "name": "current_tier6_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0304", + "name": "demand_formatting", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0302", + "name": "divisor", + "zcl_type": "uint24", + "value": 1000 + }, + { + "id": "0x0400", + "name": "instantaneous_demand", + "zcl_type": "int24", + "unsupported": true + }, + { + "id": "0x0306", + "name": "metering_device_type", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x0301", + "name": "multiplier", + "zcl_type": "uint24", + "value": 1 + }, + { + "id": "0x0200", + "name": "status", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0303", + "name": "summation_formatting", + "zcl_type": "map8", + "value": 35 + }, + { + "id": "0x0300", + "name": "unit_of_measure", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0b04", + "endpoint_attribute": "electrical_measurement", + "attributes": [ + { + "id": "0x0603", + "name": "ac_current_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0602", + "name": "ac_current_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0300", + "name": "ac_frequency", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0401", + "name": "ac_frequency_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0302", + "name": "ac_frequency_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0400", + "name": "ac_frequency_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0605", + "name": "ac_power_divisor", + "zcl_type": "uint16", + "value": 10 + }, + { + "id": "0x0604", + "name": "ac_power_multiplier", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0601", + "name": "ac_voltage_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0600", + "name": "ac_voltage_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x050b", + "name": "active_power", + "zcl_type": "int16", + "value": 0 + }, + { + "id": "0x050d", + "name": "active_power_max", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x090d", + "name": "active_power_max_ph_b", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0a0d", + "name": "active_power_max_ph_c", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x090b", + "name": "active_power_ph_b", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0a0b", + "name": "active_power_ph_c", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x050f", + "name": "apparent_power", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0103", + "name": "dc_current", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0203", + "name": "dc_current_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0202", + "name": "dc_current_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0106", + "name": "dc_power", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0205", + "name": "dc_power_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0204", + "name": "dc_power_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0100", + "name": "dc_voltage", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0201", + "name": "dc_voltage_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0200", + "name": "dc_voltage_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0000", + "name": "measurement_type", + "zcl_type": "map32", + "unsupported": true + }, + { + "id": "0x0403", + "name": "power_divisor", + "zcl_type": "uint32", + "value": 1 + }, + { + "id": "0x0510", + "name": "power_factor", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0910", + "name": "power_factor_ph_b", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0a10", + "name": "power_factor_ph_c", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0402", + "name": "power_multiplier", + "zcl_type": "uint32", + "value": 1 + }, + { + "id": "0x0508", + "name": "rms_current", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x050a", + "name": "rms_current_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x090a", + "name": "rms_current_max_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a0a", + "name": "rms_current_max_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0908", + "name": "rms_current_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a08", + "name": "rms_current_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0505", + "name": "rms_voltage", + "zcl_type": "uint16", + "value": 230 + }, + { + "id": "0x0507", + "name": "rms_voltage_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0907", + "name": "rms_voltage_max_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a07", + "name": "rms_voltage_max_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0905", + "name": "rms_voltage_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a05", + "name": "rms_voltage_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0304", + "name": "total_active_power", + "zcl_type": "int32", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xfcc0", + "endpoint_attribute": "opple_cluster", + "attributes": [ + { + "id": "0x0207", + "name": "consumer_connected", + "zcl_type": "bool", + "value": 1 + }, + { + "id": "0x0009", + "name": "mode", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0201", + "name": "power_outage_memory", + "zcl_type": "bool", + "value": 1 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 45 + } + ] + } + ] + }, + "21": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x000c", + "endpoint_attribute": "analog_input", + "attributes": [ + { + "id": "0x0100", + "name": "application_type", + "zcl_type": "uint32", + "value": 589824 + }, + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0x0075", + "name": "engineering_units", + "zcl_type": "enum16", + "unsupported": true + }, + { + "id": "0x0041", + "name": "max_present_value", + "zcl_type": "single", + "unsupported": true + }, + { + "id": "0x0045", + "name": "min_present_value", + "zcl_type": "single", + "unsupported": true + }, + { + "id": "0x0051", + "name": "out_of_service", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "single", + "value": 0.0 + }, + { + "id": "0x0067", + "name": "reliability", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x006a", + "name": "resolution", + "zcl_type": "single", + "unsupported": true + }, + { + "id": "0x006f", + "name": "status_flags", + "zcl_type": "map8", + "value": 0 + } + ] + } + ], + "out_clusters": [] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "PROXY_BASIC", + "id": 97 + }, + "in_clusters": [], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "LUMI", + "model": "lumi.plug.maeu01", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4447, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 100, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 100, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0000", + "0x0002", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0009", + "0x0702", + "0x0b04" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0061", + "input_clusters": [], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-64704-consumer_connected", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "XiaomiPlugConsumerConnected", + "translation_key": "consumer_connected", + "translation_placeholders": null, + "device_class": "plug", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "consumer_connected" + }, + "state": { + "class_name": "XiaomiPlugConsumerConnected", + "available": true, + "state": true + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 164 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -70 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-1794-summation_delivered", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SmartEnergySummation", + "translation_key": "summation_delivered", + "translation_placeholders": null, + "device_class": "energy", + "state_class": "total_increasing", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 3, + "unit": "kWh" + }, + "state": { + "class_name": "SmartEnergySummation", + "available": true, + "state": 36.079, + "device_type": "Electric Metering", + "zcl_unit_of_measurement": 0 + }, + "extra_state_attributes": [ + "device_type", + "status", + "zcl_unit_of_measurement" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-2", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "DeviceTemperature", + "translation_key": "device_temperature", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "DeviceTemperature", + "available": true, + "state": 18.0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-2820", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ElectricalMeasurementActivePower", + "translation_key": null, + "translation_placeholders": null, + "device_class": "power", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "W" + }, + "state": { + "class_name": "ElectricalMeasurementActivePower", + "available": true, + "state": 0.0 + }, + "extra_state_attributes": [ + "active_power_max", + "measurement_type" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-2820-rms_voltage", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ElectricalMeasurementRMSVoltage", + "translation_key": null, + "translation_placeholders": null, + "device_class": "voltage", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "V" + }, + "state": { + "class_name": "ElectricalMeasurementRMSVoltage", + "available": true, + "state": 230.0 + }, + "extra_state_attributes": [ + "measurement_type", + "rms_voltage_max" + ] + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "Switch", + "translation_key": "switch", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 1, + "available": true + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-power_outage_memory", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "XiaomiPlugPowerOutageMemorySwitch", + "translation_key": "power_outage_memory", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "power_outage_memory", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "XiaomiPlugPowerOutageMemorySwitch", + "available": true, + "state": true, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:49:c1:10:71-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:49:c1:10:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0000002d", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/lumi-lumi-plug-maus01.json b/tests/data/devices/lumi-lumi-plug-maus01-0x0000000b.json similarity index 100% rename from tests/data/devices/lumi-lumi-plug-maus01.json rename to tests/data/devices/lumi-lumi-plug-maus01-0x0000000b.json diff --git a/tests/data/devices/lumi-lumi-relay-c2acn01.json b/tests/data/devices/lumi-lumi-relay-c2acn01-0x00000024.json similarity index 100% rename from tests/data/devices/lumi-lumi-relay-c2acn01.json rename to tests/data/devices/lumi-lumi-relay-c2acn01-0x00000024.json diff --git a/tests/data/devices/lumi-lumi-remote-b486opcn01.json b/tests/data/devices/lumi-lumi-remote-b486opcn01.json old mode 100755 new mode 100644 diff --git a/tests/data/devices/lumi-lumi-remote-cagl02-0x0000001c.json b/tests/data/devices/lumi-lumi-remote-cagl02-0x0000001c.json new file mode 100644 index 000000000..82c933a5d --- /dev/null +++ b/tests/data/devices/lumi-lumi-remote-cagl02-0x0000001c.json @@ -0,0 +1,384 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:6c:02:d4:c2", + "nwk": "0x16E8", + "manufacturer": "LUMI", + "model": "lumi.remote.cagl02", + "friendly_manufacturer": "LUMI", + "friendly_model": "lumi.remote.cagl02", + "name": "LUMI lumi.remote.cagl02", + "quirk_applied": true, + "quirk_class": "zhaquirks.xiaomi.aqara.cube_aqgl01:CubeCAGL02", + "exposes_features": [], + "manufacturer_code": 4447, + "power_source": "Battery or Unknown", + "lqi": 255, + "rssi": -21, + "last_seen": "2025-09-03T12:34:21.195400+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4447, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 100, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 100, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "undefined_0x6f01", + "id": 28417 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 9 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0012", + "endpoint_attribute": "multistate_input", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 28 + } + ] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "undefined_0x6f01", + "id": 28417 + }, + "in_clusters": [ + { + "cluster_id": "0x0012", + "endpoint_attribute": "multistate_input", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0012", + "endpoint_attribute": "multistate_input", + "attributes": [] + } + ] + }, + "3": { + "profile_id": 260, + "device_type": { + "name": "undefined_0x6f01", + "id": 28417 + }, + "in_clusters": [ + { + "cluster_id": "0x000c", + "endpoint_attribute": "analog_input", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000c", + "endpoint_attribute": "analog_input", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "LUMI", + "model": "lumi.remote.cagl02", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4447, + "maximum_buffer_size": 127, + "maximum_incoming_transfer_size": 100, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 100, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0103", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0006", + "0x0012" + ], + "output_clusters": [ + "0x0000", + "0x0003", + "0x0019" + ] + }, + "2": { + "profile_id": "0x0104", + "device_type": "0x0103", + "input_clusters": [ + "0x0012" + ], + "output_clusters": [ + "0x0012" + ] + }, + "3": { + "profile_id": "0x0104", + "device_type": "0x0103", + "input_clusters": [ + "0x000c" + ], + "output_clusters": [ + "0x000c" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6c:02:d4:c2-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6c:02:d4:c2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6c:02:d4:c2-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6c:02:d4:c2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 255 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6c:02:d4:c2-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6c:02:d4:c2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -21 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6c:02:d4:c2-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6c:02:d4:c2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": null, + "battery_size": "CR2450", + "battery_quantity": 1 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6c:02:d4:c2-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6c:02:d4:c2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0000001c", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/lumi-lumi-sensor-smoke-acn03.json b/tests/data/devices/lumi-lumi-sensor-smoke-acn03-0x00000011.json similarity index 100% rename from tests/data/devices/lumi-lumi-sensor-smoke-acn03.json rename to tests/data/devices/lumi-lumi-sensor-smoke-acn03-0x00000011.json diff --git a/tests/data/devices/lumi-lumi-switch-b1laus01.json b/tests/data/devices/lumi-lumi-switch-b1laus01-0x00000020.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/lumi-lumi-switch-b1laus01.json rename to tests/data/devices/lumi-lumi-switch-b1laus01-0x00000020.json diff --git a/tests/data/devices/lumi-lumi-switch-b1naus01.json b/tests/data/devices/lumi-lumi-switch-b1naus01-0x0000001f.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/lumi-lumi-switch-b1naus01.json rename to tests/data/devices/lumi-lumi-switch-b1naus01-0x0000001f.json diff --git a/tests/data/devices/lumi-lumi-switch-l1aeu1.json b/tests/data/devices/lumi-lumi-switch-l1aeu1-0x00000e0b.json similarity index 100% rename from tests/data/devices/lumi-lumi-switch-l1aeu1.json rename to tests/data/devices/lumi-lumi-switch-l1aeu1-0x00000e0b.json diff --git a/tests/data/devices/lumi-lumi-switch-l2aeu1.json b/tests/data/devices/lumi-lumi-switch-l2aeu1-0x00000e0b.json similarity index 100% rename from tests/data/devices/lumi-lumi-switch-l2aeu1.json rename to tests/data/devices/lumi-lumi-switch-l2aeu1-0x00000e0b.json diff --git a/tests/data/devices/lumi-lumi-switch-n0agl1-0x0000001e.json b/tests/data/devices/lumi-lumi-switch-n0agl1-0x0000001e.json new file mode 100644 index 000000000..dc13b9a23 --- /dev/null +++ b/tests/data/devices/lumi-lumi-switch-n0agl1-0x0000001e.json @@ -0,0 +1,1041 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:e9:c7:8a:67", + "nwk": "0x8AF1", + "manufacturer": "LUMI", + "model": "lumi.switch.n0agl1", + "friendly_manufacturer": "LUMI", + "friendly_model": "lumi.switch.n0agl1", + "name": "LUMI lumi.switch.n0agl1", + "quirk_applied": true, + "quirk_class": "zhaquirks.xiaomi.aqara.switch_t1:SwitchT1Alt3", + "exposes_features": [], + "manufacturer_code": 4447, + "power_source": "Mains", + "lqi": 255, + "rssi": -64, + "last_seen": "2025-05-12T10:38:28.889996+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4447, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_SWITCH", + "id": 0 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "LUMI" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "lumi.switch.n0agl1" + }, + { + "id": "0x4000", + "name": "sw_build_id", + "zcl_type": "string", + "value": "" + } + ] + }, + { + "cluster_id": "0x0002", + "endpoint_attribute": "device_temperature", + "attributes": [ + { + "id": "0x0000", + "name": "current_temperature", + "zcl_type": "int16", + "value": 18 + }, + { + "id": "0x0010", + "name": "dev_temp_alarm_mask", + "zcl_type": "map8", + "value": 1 + }, + { + "id": "0x0012", + "name": "high_temp_thres", + "zcl_type": "int16", + "value": 70 + }, + { + "id": "0x0011", + "name": "low_temp_thres", + "zcl_type": "int16", + "value": 0 + }, + { + "id": "0x0002", + "name": "max_temp_experienced", + "zcl_type": "int16", + "value": 0 + }, + { + "id": "0x0001", + "name": "min_temp_experienced", + "zcl_type": "int16", + "value": 0 + }, + { + "id": "0x0003", + "name": "over_temp_total_dwell", + "zcl_type": "uint16", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "value": 255 + } + ] + }, + { + "cluster_id": "0x0009", + "endpoint_attribute": "alarms", + "attributes": [] + }, + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0702", + "endpoint_attribute": "smartenergy_metering", + "attributes": [ + { + "id": "0x0019", + "name": "control_temperature", + "zcl_type": "int24", + "unsupported": true + }, + { + "id": "0x0000", + "name": "current_summ_delivered", + "zcl_type": "uint48", + "value": 41150 + }, + { + "id": "0x0001", + "name": "current_summ_received", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0100", + "name": "current_tier1_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0102", + "name": "current_tier2_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0104", + "name": "current_tier3_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0106", + "name": "current_tier4_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0108", + "name": "current_tier5_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x010a", + "name": "current_tier6_summ_delivered", + "zcl_type": "uint48", + "unsupported": true + }, + { + "id": "0x0304", + "name": "demand_formatting", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0302", + "name": "divisor", + "zcl_type": "uint24", + "value": 1000 + }, + { + "id": "0x0017", + "name": "inlet_temperature", + "zcl_type": "int24", + "unsupported": true + }, + { + "id": "0x0400", + "name": "instantaneous_demand", + "zcl_type": "int24", + "unsupported": true + }, + { + "id": "0x0306", + "name": "metering_device_type", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x0301", + "name": "multiplier", + "zcl_type": "uint24", + "value": 1 + }, + { + "id": "0x0018", + "name": "outlet_temperature", + "zcl_type": "int24", + "unsupported": true + }, + { + "id": "0x0200", + "name": "status", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x0303", + "name": "summation_formatting", + "zcl_type": "map8", + "value": 35 + }, + { + "id": "0x030d", + "name": "temperature_formatting", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x030c", + "name": "temperature_unit_of_measure", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0300", + "name": "unit_of_measure", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0803", + "name": "water_specific_alarm_mask", + "zcl_type": "map16", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0b04", + "endpoint_attribute": "electrical_measurement", + "attributes": [ + { + "id": "0x0603", + "name": "ac_current_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0602", + "name": "ac_current_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0300", + "name": "ac_frequency", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0401", + "name": "ac_frequency_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0302", + "name": "ac_frequency_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0400", + "name": "ac_frequency_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0605", + "name": "ac_power_divisor", + "zcl_type": "uint16", + "value": 10 + }, + { + "id": "0x0604", + "name": "ac_power_multiplier", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0601", + "name": "ac_voltage_divisor", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0600", + "name": "ac_voltage_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x050b", + "name": "active_power", + "zcl_type": "int16", + "value": 0 + }, + { + "id": "0x050d", + "name": "active_power_max", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x090d", + "name": "active_power_max_ph_b", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0a0d", + "name": "active_power_max_ph_c", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x090b", + "name": "active_power_ph_b", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0a0b", + "name": "active_power_ph_c", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x050f", + "name": "apparent_power", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0000", + "name": "measurement_type", + "zcl_type": "map32", + "value": 8 + }, + { + "id": "0x0403", + "name": "power_divisor", + "zcl_type": "uint32", + "value": 1 + }, + { + "id": "0x0510", + "name": "power_factor", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0910", + "name": "power_factor_ph_b", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0a10", + "name": "power_factor_ph_c", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0402", + "name": "power_multiplier", + "zcl_type": "uint32", + "value": 1 + }, + { + "id": "0x0508", + "name": "rms_current", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x050a", + "name": "rms_current_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x090a", + "name": "rms_current_max_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a0a", + "name": "rms_current_max_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0908", + "name": "rms_current_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a08", + "name": "rms_current_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0505", + "name": "rms_voltage", + "zcl_type": "uint16", + "value": 229 + }, + { + "id": "0x0507", + "name": "rms_voltage_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0907", + "name": "rms_voltage_max_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a07", + "name": "rms_voltage_max_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0905", + "name": "rms_voltage_ph_b", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0a05", + "name": "rms_voltage_ph_c", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0304", + "name": "total_active_power", + "zcl_type": "int32", + "value": 42380 + } + ] + }, + { + "cluster_id": "0xfcc0", + "endpoint_attribute": "opple_cluster", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 30 + } + ] + } + ] + }, + "21": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_SWITCH", + "id": 0 + }, + "in_clusters": [ + { + "cluster_id": "0x000c", + "endpoint_attribute": "analog_input", + "attributes": [ + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "single", + "value": 0.0 + } + ] + } + ], + "out_clusters": [] + }, + "31": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_SWITCH", + "id": 0 + }, + "in_clusters": [ + { + "cluster_id": "0x000c", + "endpoint_attribute": "analog_input", + "attributes": [] + } + ], + "out_clusters": [] + }, + "41": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_SWITCH", + "id": 0 + }, + "in_clusters": [ + { + "cluster_id": "0x0012", + "endpoint_attribute": "multistate_input", + "attributes": [] + } + ], + "out_clusters": [] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "PROXY_BASIC", + "id": 97 + }, + "in_clusters": [], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "LUMI", + "model": "lumi.switch.n0agl1", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4447, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0100", + "input_clusters": [ + "0x0000", + "0x0002", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0009", + "0x000a", + "0x0702", + "0x0b04", + "0xfcc0" + ], + "output_clusters": [ + "0x0019" + ] + }, + "21": { + "profile_id": "0x0104", + "device_type": "0x0100", + "input_clusters": [ + "0x000c" + ], + "output_clusters": [] + }, + "31": { + "profile_id": "0x0104", + "device_type": "0x0100", + "input_clusters": [ + "0x000c" + ], + "output_clusters": [] + }, + "41": { + "profile_id": "0x0104", + "device_type": "0x0100", + "input_clusters": [ + "0x0012" + ], + "output_clusters": [] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0061", + "input_clusters": [], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-6-StartUpOnOff", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "StartupOnOffSelectEntity", + "translation_key": "start_up_on_off", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "StartUpOnOff", + "options": [ + "Off", + "On", + "Toggle", + "PreviousValue" + ] + }, + "state": { + "class_name": "StartupOnOffSelectEntity", + "available": true, + "state": "PreviousValue" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 255 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -64 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-1794-summation_delivered", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SmartEnergySummation", + "translation_key": "summation_delivered", + "translation_placeholders": null, + "device_class": "energy", + "state_class": "total_increasing", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 3, + "unit": "kWh" + }, + "state": { + "class_name": "SmartEnergySummation", + "available": true, + "state": 41.15, + "device_type": "Electric Metering", + "status": "NO_ALARMS", + "zcl_unit_of_measurement": 0 + }, + "extra_state_attributes": [ + "device_type", + "status", + "zcl_unit_of_measurement" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-2", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "DeviceTemperature", + "translation_key": "device_temperature", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "DeviceTemperature", + "available": true, + "state": 0.18 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-2820", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ElectricalMeasurementActivePower", + "translation_key": null, + "translation_placeholders": null, + "device_class": "power", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "W" + }, + "state": { + "class_name": "ElectricalMeasurementActivePower", + "available": true, + "state": 0.0, + "measurement_type": "PHASE_A_MEASUREMENT" + }, + "extra_state_attributes": [ + "active_power_max", + "measurement_type" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-2820-rms_voltage", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ElectricalMeasurementRMSVoltage", + "translation_key": null, + "translation_placeholders": null, + "device_class": "voltage", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "V" + }, + "state": { + "class_name": "ElectricalMeasurementRMSVoltage", + "available": true, + "state": 229.0, + "measurement_type": "PHASE_A_MEASUREMENT" + }, + "extra_state_attributes": [ + "measurement_type", + "rms_voltage_max" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-2820-total_active_power", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ElectricalMeasurementTotalActivePower", + "translation_key": "total_active_power", + "translation_placeholders": null, + "device_class": "power", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "W" + }, + "state": { + "class_name": "ElectricalMeasurementTotalActivePower", + "available": true, + "state": 4238.0, + "measurement_type": "PHASE_A_MEASUREMENT" + }, + "extra_state_attributes": [ + "active_power_max", + "measurement_type" + ] + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-6", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "Switch", + "translation_key": "switch", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 0, + "available": true + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:c7:8a:67-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e9:c7:8a:67", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0000001e", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/lumi-lumi-switch-n0agl1.json b/tests/data/devices/lumi-lumi-switch-n0agl1.json index dc13b9a23..058873310 100644 --- a/tests/data/devices/lumi-lumi-switch-n0agl1.json +++ b/tests/data/devices/lumi-lumi-switch-n0agl1.json @@ -536,7 +536,7 @@ "id": "0x0002", "name": "current_file_version", "zcl_type": "uint32", - "value": 30 + "unsupported": true } ] } @@ -1025,7 +1025,7 @@ "state": { "class_name": "FirmwareUpdateEntity", "available": true, - "installed_version": "0x0000001e", + "installed_version": null, "in_progress": false, "update_percentage": null, "latest_version": null, diff --git a/tests/data/devices/lumi-lumi-vibration-agl01.json b/tests/data/devices/lumi-lumi-vibration-agl01-0x0000001c.json similarity index 100% rename from tests/data/devices/lumi-lumi-vibration-agl01.json rename to tests/data/devices/lumi-lumi-vibration-agl01-0x0000001c.json diff --git a/tests/data/devices/lumi-lumi-weather.json b/tests/data/devices/lumi-lumi-weather.json old mode 100755 new mode 100644 diff --git a/tests/data/devices/lutron-z3-1brl.json b/tests/data/devices/lutron-z3-1brl-0x00000c08.json similarity index 100% rename from tests/data/devices/lutron-z3-1brl.json rename to tests/data/devices/lutron-z3-1brl-0x00000c08.json diff --git a/tests/data/devices/mli-tint-extendedcolor.json b/tests/data/devices/mli-tint-extendedcolor-0x10012001.json similarity index 100% rename from tests/data/devices/mli-tint-extendedcolor.json rename to tests/data/devices/mli-tint-extendedcolor-0x10012001.json diff --git a/tests/data/devices/mli-zbt-remote-all-rgbw.json b/tests/data/devices/mli-zbt-remote-all-rgbw-0x11010022.json similarity index 100% rename from tests/data/devices/mli-zbt-remote-all-rgbw.json rename to tests/data/devices/mli-zbt-remote-all-rgbw-0x11010022.json diff --git a/tests/data/devices/namron-as-4512785.json b/tests/data/devices/namron-as-4512785-0x0000000e.json similarity index 100% rename from tests/data/devices/namron-as-4512785.json rename to tests/data/devices/namron-as-4512785-0x0000000e.json diff --git a/tests/data/devices/niko-nv-battery-switch-4-button.json b/tests/data/devices/niko-nv-battery-switch-4-button-0x21046760.json similarity index 100% rename from tests/data/devices/niko-nv-battery-switch-4-button.json rename to tests/data/devices/niko-nv-battery-switch-4-button-0x21046760.json diff --git a/tests/data/devices/niko-nv-connectable-motor-control-3a.json b/tests/data/devices/niko-nv-connectable-motor-control-3a-0x21160006.json similarity index 100% rename from tests/data/devices/niko-nv-connectable-motor-control-3a.json rename to tests/data/devices/niko-nv-connectable-motor-control-3a-0x21160006.json diff --git a/tests/data/devices/nodon-sin-4-rs-20.json b/tests/data/devices/nodon-sin-4-rs-20-0x00010300.json similarity index 100% rename from tests/data/devices/nodon-sin-4-rs-20.json rename to tests/data/devices/nodon-sin-4-rs-20-0x00010300.json diff --git a/tests/data/devices/osram-switch-4x-lightify.json b/tests/data/devices/osram-switch-4x-lightify-0x01000000.json similarity index 100% rename from tests/data/devices/osram-switch-4x-lightify.json rename to tests/data/devices/osram-switch-4x-lightify-0x01000000.json diff --git a/tests/data/devices/philips-7602031u7.json b/tests/data/devices/philips-7602031u7-0x01001d00.json similarity index 100% rename from tests/data/devices/philips-7602031u7.json rename to tests/data/devices/philips-7602031u7-0x01001d00.json diff --git a/tests/data/devices/philips-915005988601.json b/tests/data/devices/philips-915005988601-0x01002000.json similarity index 100% rename from tests/data/devices/philips-915005988601.json rename to tests/data/devices/philips-915005988601-0x01002000.json diff --git a/tests/data/devices/philips-lct014.json b/tests/data/devices/philips-lct014-0x01001a02.json similarity index 100% rename from tests/data/devices/philips-lct014.json rename to tests/data/devices/philips-lct014-0x01001a02.json diff --git a/tests/data/devices/philips-llc020.json b/tests/data/devices/philips-llc020-0x42006734.json similarity index 100% rename from tests/data/devices/philips-llc020.json rename to tests/data/devices/philips-llc020-0x42006734.json diff --git a/tests/data/devices/philips-lst002.json b/tests/data/devices/philips-lst002-0x01001700.json similarity index 100% rename from tests/data/devices/philips-lst002.json rename to tests/data/devices/philips-lst002-0x01001700.json diff --git a/tests/data/devices/philips-rom001.json b/tests/data/devices/philips-rom001-0x02002f08.json similarity index 100% rename from tests/data/devices/philips-rom001.json rename to tests/data/devices/philips-rom001-0x02002f08.json diff --git a/tests/data/devices/philips-rwl020-0x420045b6.json b/tests/data/devices/philips-rwl020-0x420045b6.json new file mode 100644 index 000000000..2ea543792 --- /dev/null +++ b/tests/data/devices/philips-rwl020-0x420045b6.json @@ -0,0 +1,432 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:5f:d6:d5:c6", + "nwk": "0xFB08", + "manufacturer": "Philips", + "model": "RWL020", + "friendly_manufacturer": "Philips", + "friendly_model": "RWL020", + "name": "Philips RWL020", + "quirk_applied": true, + "quirk_class": "zhaquirks.philips.rwlfirstgen:PhilipsRWLFirstGen", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Battery or Unknown", + "lqi": 148, + "rssi": -74, + "last_seen": "2026-02-05T20:50:53.872613+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 71, + "maximum_incoming_transfer_size": 45, + "server_mask": 0, + "maximum_outgoing_transfer_size": 45, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 49246, + "device_type": { + "name": "SCENE_CONTROLLER", + "id": 2096 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Philips" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "RWL020" + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "SIMPLE_SENSOR", + "id": 12 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0031", + "name": "philips", + "zcl_type": "map16", + "value": 11 + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 89 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 25 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x000f", + "endpoint_attribute": "binary_input", + "attributes": [ + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "bool", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xfc00", + "endpoint_attribute": "philips_remote_cluster", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 1107314102 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Philips", + "model": "RWL020", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 71, + "maximum_incoming_transfer_size": 45, + "server_mask": 0, + "maximum_outgoing_transfer_size": 45, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0xc05e", + "device_type": "0x0830", + "input_clusters": [ + "0x0000" + ], + "output_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0006", + "0x0008", + "0x0005" + ] + }, + "2": { + "profile_id": "0x0104", + "device_type": "0x000c", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x000f", + "0xfc00" + ], + "output_clusters": [ + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:5f:d6:d5:c6-2-15", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinaryInput", + "translation_key": "binary_input", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:5f:d6:d5:c6", + "endpoint_id": 2, + "available": true, + "group_id": null, + "attribute_name": "present_value" + }, + "state": { + "class_name": "BinaryInput", + "available": true, + "state": false + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:5f:d6:d5:c6-2-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:5f:d6:d5:c6", + "endpoint_id": 2, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:5f:d6:d5:c6-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:5f:d6:d5:c6", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 148 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:5f:d6:d5:c6-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:5f:d6:d5:c6", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -74 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:5f:d6:d5:c6-2-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:5f:d6:d5:c6", + "endpoint_id": 2, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 44.5, + "battery_voltage": 2.5 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:5f:d6:d5:c6-2-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:5f:d6:d5:c6", + "endpoint_id": 2, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x420045b6", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/philips-rwl021.json b/tests/data/devices/philips-rwl021-0x43007305.json similarity index 100% rename from tests/data/devices/philips-rwl021.json rename to tests/data/devices/philips-rwl021-0x43007305.json diff --git a/tests/data/devices/philips-sml001.json b/tests/data/devices/philips-sml001-0x42006bb7.json similarity index 100% rename from tests/data/devices/philips-sml001.json rename to tests/data/devices/philips-sml001-0x42006bb7.json diff --git a/tests/data/devices/philips-sml001-0x43007305.json b/tests/data/devices/philips-sml001-0x43007305.json new file mode 100644 index 000000000..623829f30 --- /dev/null +++ b/tests/data/devices/philips-sml001-0x43007305.json @@ -0,0 +1,615 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:1f:7f:df:14", + "nwk": "0x8B0B", + "manufacturer": "Philips", + "model": "SML001", + "friendly_manufacturer": "Philips", + "friendly_model": "SML001", + "name": "Philips SML001", + "quirk_applied": true, + "quirk_class": "zhaquirks.philips.motion:PhilipsMotion", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Battery or Unknown", + "lqi": null, + "rssi": null, + "last_seen": "2026-02-13T08:47:48.420219+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 89, + "maximum_incoming_transfer_size": 63, + "server_mask": 0, + "maximum_outgoing_transfer_size": 63, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 49246, + "device_type": { + "name": "ON_OFF_SENSOR", + "id": 2128 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + }, + { + "cluster_id": "0x0300", + "endpoint_attribute": "light_color", + "attributes": [] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "OCCUPANCY_SENSOR", + "id": 263 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Philips" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "SML001" + }, + { + "id": "0x0033", + "name": "trigger_indicator", + "zcl_type": "bool", + "value": 1 + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 29 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0400", + "endpoint_attribute": "illuminance", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 10992 + } + ] + }, + { + "cluster_id": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 2475 + } + ] + }, + { + "cluster_id": "0x0406", + "endpoint_attribute": "occupancy", + "attributes": [ + { + "id": "0x0000", + "name": "occupancy", + "zcl_type": "map8", + "value": 1 + }, + { + "id": "0x0030", + "name": "sensitivity", + "zcl_type": "uint8", + "value": 0 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 1124102917 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Philips", + "model": "SML001", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 89, + "maximum_incoming_transfer_size": 63, + "server_mask": 0, + "maximum_outgoing_transfer_size": 63, + "descriptor_capability_field": 0 + }, + "endpoints": { + "2": { + "profile_id": "0x0104", + "device_type": "0x0107", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0406", + "0x0400", + "0x0402" + ], + "output_clusters": [ + "0x0019" + ] + }, + "1": { + "profile_id": "0xc05e", + "device_type": "0x0850", + "input_clusters": [ + "0x0000" + ], + "output_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0006", + "0x0008", + "0x0300", + "0x0005" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-1-6", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "PhilipsMotion", + "translation_key": null, + "translation_placeholders": null, + "device_class": "motion", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "on_off" + }, + "state": { + "class_name": "PhilipsMotion", + "available": true, + "state": false + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1030", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "Occupancy", + "translation_key": null, + "translation_placeholders": null, + "device_class": "occupancy", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "attribute_name": "occupancy" + }, + "state": { + "class_name": "Occupancy", + "available": true, + "state": true + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1030-motion_sensitivity", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "HueV1MotionSensitivity", + "translation_key": "motion_sensitivity", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "enum": "HueV1MotionSensitivities", + "options": [ + "Low", + "Medium", + "High" + ] + }, + "state": { + "class_name": "HueV1MotionSensitivity", + "available": true, + "state": "Low" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_voltage": 2.9 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1024", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Illuminance", + "translation_key": null, + "translation_placeholders": null, + "device_class": "illuminance", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "lx" + }, + "state": { + "class_name": "Illuminance", + "available": true, + "state": 13 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1026", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Temperature", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 24.75 + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-0-trigger_indicator", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "HueMotionTriggerIndicatorSwitch", + "translation_key": "trigger_indicator", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "attribute_name": "trigger_indicator", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "HueMotionTriggerIndicatorSwitch", + "available": true, + "state": true, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x43007305", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/philips-sml001-0x43007401.json b/tests/data/devices/philips-sml001-0x43007401.json new file mode 100644 index 000000000..b37b2d3be --- /dev/null +++ b/tests/data/devices/philips-sml001-0x43007401.json @@ -0,0 +1,615 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:1f:7f:df:14", + "nwk": "0xE1BB", + "manufacturer": "Philips", + "model": "SML001", + "friendly_manufacturer": "Philips", + "friendly_model": "SML001", + "name": "Philips SML001", + "quirk_applied": true, + "quirk_class": "zhaquirks.philips.motion:PhilipsMotion", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Battery or Unknown", + "lqi": 120, + "rssi": -70, + "last_seen": "2026-03-06T04:00:32.519336+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 89, + "maximum_incoming_transfer_size": 63, + "server_mask": 0, + "maximum_outgoing_transfer_size": 63, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 49246, + "device_type": { + "name": "ON_OFF_SENSOR", + "id": 2128 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + }, + { + "cluster_id": "0x0300", + "endpoint_attribute": "light_color", + "attributes": [] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "OCCUPANCY_SENSOR", + "id": 263 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Philips" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "SML001" + }, + { + "id": "0x0033", + "name": "trigger_indicator", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 30 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0400", + "endpoint_attribute": "illuminance", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 2198 + } + ] + }, + { + "cluster_id": "0x0406", + "endpoint_attribute": "occupancy", + "attributes": [ + { + "id": "0x0000", + "name": "occupancy", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x0030", + "name": "sensitivity", + "zcl_type": "uint8", + "value": 2 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 1124103169 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Philips", + "model": "SML001", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 89, + "maximum_incoming_transfer_size": 63, + "server_mask": 0, + "maximum_outgoing_transfer_size": 63, + "descriptor_capability_field": 0 + }, + "endpoints": { + "2": { + "profile_id": "0x0104", + "device_type": "0x0107", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0406", + "0x0400", + "0x0402" + ], + "output_clusters": [ + "0x0019" + ] + }, + "1": { + "profile_id": "0xc05e", + "device_type": "0x0850", + "input_clusters": [ + "0x0000" + ], + "output_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0006", + "0x0008", + "0x0300", + "0x0005" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-1-6", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "PhilipsMotion", + "translation_key": null, + "translation_placeholders": null, + "device_class": "motion", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "on_off" + }, + "state": { + "class_name": "PhilipsMotion", + "available": true, + "state": false + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1030", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "Occupancy", + "translation_key": null, + "translation_placeholders": null, + "device_class": "occupancy", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "attribute_name": "occupancy" + }, + "state": { + "class_name": "Occupancy", + "available": true, + "state": false + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1030-motion_sensitivity", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "HueV1MotionSensitivity", + "translation_key": "motion_sensitivity", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "enum": "HueV1MotionSensitivities", + "options": [ + "Low", + "Medium", + "High" + ] + }, + "state": { + "class_name": "HueV1MotionSensitivity", + "available": true, + "state": "High" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 120 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -70 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_voltage": 3.0 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1024", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Illuminance", + "translation_key": null, + "translation_placeholders": null, + "device_class": "illuminance", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "lx" + }, + "state": { + "class_name": "Illuminance", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-1026", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Temperature", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 21.98 + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-0-trigger_indicator", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "HueMotionTriggerIndicatorSwitch", + "translation_key": "trigger_indicator", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "attribute_name": "trigger_indicator", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "HueMotionTriggerIndicatorSwitch", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1f:7f:df:14-2-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1f:7f:df:14", + "endpoint_id": 2, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x43007401", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/plaid-systems-ps-sprzms-slp3.json b/tests/data/devices/plaid-systems-ps-sprzms-slp3-0x00000001.json similarity index 100% rename from tests/data/devices/plaid-systems-ps-sprzms-slp3.json rename to tests/data/devices/plaid-systems-ps-sprzms-slp3-0x00000001.json diff --git a/tests/data/devices/samjin-button.json b/tests/data/devices/samjin-button-0x00000011.json similarity index 100% rename from tests/data/devices/samjin-button.json rename to tests/data/devices/samjin-button-0x00000011.json diff --git a/tests/data/devices/samjin-multi.json b/tests/data/devices/samjin-multi-0x0000000b.json similarity index 100% rename from tests/data/devices/samjin-multi.json rename to tests/data/devices/samjin-multi-0x0000000b.json diff --git a/tests/data/devices/schneider-electric-eko07259.json b/tests/data/devices/schneider-electric-eko07259-0x01001d00.json similarity index 100% rename from tests/data/devices/schneider-electric-eko07259.json rename to tests/data/devices/schneider-electric-eko07259-0x01001d00.json diff --git a/tests/data/devices/schneider-electric-evsckt-outlet-1.json b/tests/data/devices/schneider-electric-evsckt-outlet-1-0x020a00ff.json similarity index 100% rename from tests/data/devices/schneider-electric-evsckt-outlet-1.json rename to tests/data/devices/schneider-electric-evsckt-outlet-1-0x020a00ff.json diff --git a/tests/data/devices/schneider-electric-nhmotion-unidim-1.json b/tests/data/devices/schneider-electric-nhmotion-unidim-1-0x020b0fff.json similarity index 100% rename from tests/data/devices/schneider-electric-nhmotion-unidim-1.json rename to tests/data/devices/schneider-electric-nhmotion-unidim-1-0x020b0fff.json diff --git a/tests/data/devices/schneider-electric-puck-shutter-1.json b/tests/data/devices/schneider-electric-puck-shutter-1-0x020c02ff.json similarity index 100% rename from tests/data/devices/schneider-electric-puck-shutter-1.json rename to tests/data/devices/schneider-electric-puck-shutter-1-0x020c02ff.json diff --git a/tests/data/devices/schneider-electric-s520619.json b/tests/data/devices/schneider-electric-s520619-0x01003500.json similarity index 100% rename from tests/data/devices/schneider-electric-s520619.json rename to tests/data/devices/schneider-electric-s520619-0x01003500.json diff --git a/tests/data/devices/schneider-electric-socket-outlet-1.json b/tests/data/devices/schneider-electric-socket-outlet-1-0x020612ff.json similarity index 100% rename from tests/data/devices/schneider-electric-socket-outlet-1.json rename to tests/data/devices/schneider-electric-socket-outlet-1-0x020612ff.json diff --git a/tests/data/devices/schneider-electric-socket-outlet-2.json b/tests/data/devices/schneider-electric-socket-outlet-2-0x020612ff.json similarity index 100% rename from tests/data/devices/schneider-electric-socket-outlet-2.json rename to tests/data/devices/schneider-electric-socket-outlet-2-0x020612ff.json diff --git a/tests/data/devices/sengled-e11-g13.json b/tests/data/devices/sengled-e11-g13-0x00000009.json similarity index 100% rename from tests/data/devices/sengled-e11-g13.json rename to tests/data/devices/sengled-e11-g13-0x00000009.json diff --git a/tests/data/devices/sengled-e12-n14.json b/tests/data/devices/sengled-e12-n14-0x00000004.json similarity index 100% rename from tests/data/devices/sengled-e12-n14.json rename to tests/data/devices/sengled-e12-n14-0x00000004.json diff --git a/tests/data/devices/sengled-e12-n1e.json b/tests/data/devices/sengled-e12-n1e-0x0000001e.json similarity index 100% rename from tests/data/devices/sengled-e12-n1e.json rename to tests/data/devices/sengled-e12-n1e-0x0000001e.json diff --git a/tests/data/devices/sengled-e1c-nb7.json b/tests/data/devices/sengled-e1c-nb7-0x0000001a.json similarity index 100% rename from tests/data/devices/sengled-e1c-nb7.json rename to tests/data/devices/sengled-e1c-nb7-0x0000001a.json diff --git a/tests/data/devices/sengled-e1f-n9g.json b/tests/data/devices/sengled-e1f-n9g-0x00000020.json similarity index 100% rename from tests/data/devices/sengled-e1f-n9g.json rename to tests/data/devices/sengled-e1f-n9g-0x00000020.json diff --git a/tests/data/devices/sengled-e1g-g8e.json b/tests/data/devices/sengled-e1g-g8e-0x0000000e.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/sengled-e1g-g8e.json rename to tests/data/devices/sengled-e1g-g8e-0x0000000e.json diff --git a/tests/data/devices/sengled-e21-n1ea.json b/tests/data/devices/sengled-e21-n1ea-0x00000026.json similarity index 100% rename from tests/data/devices/sengled-e21-n1ea.json rename to tests/data/devices/sengled-e21-n1ea-0x00000026.json diff --git a/tests/data/devices/sengled-z01-a19nae26.json b/tests/data/devices/sengled-z01-a19nae26-0x00000020.json similarity index 100% rename from tests/data/devices/sengled-z01-a19nae26.json rename to tests/data/devices/sengled-z01-a19nae26-0x00000020.json diff --git a/tests/data/devices/signify-netherlands-b-v-lca001.json b/tests/data/devices/signify-netherlands-b-v-lca001-0x01002802.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lca001.json rename to tests/data/devices/signify-netherlands-b-v-lca001-0x01002802.json diff --git a/tests/data/devices/signify-netherlands-b-v-lca005.json b/tests/data/devices/signify-netherlands-b-v-lca005-0x01002402.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lca005.json rename to tests/data/devices/signify-netherlands-b-v-lca005-0x01002402.json diff --git a/tests/data/devices/signify-netherlands-b-v-lca007.json b/tests/data/devices/signify-netherlands-b-v-lca007-0x01001f0a.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lca007.json rename to tests/data/devices/signify-netherlands-b-v-lca007-0x01001f0a.json diff --git a/tests/data/devices/signify-netherlands-b-v-lcb001.json b/tests/data/devices/signify-netherlands-b-v-lcb001-0x01002800.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lcb001.json rename to tests/data/devices/signify-netherlands-b-v-lcb001-0x01002800.json diff --git a/tests/data/devices/signify-netherlands-b-v-lcb002.json b/tests/data/devices/signify-netherlands-b-v-lcb002-0x01001f0a.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lcb002.json rename to tests/data/devices/signify-netherlands-b-v-lcb002-0x01001f0a.json diff --git a/tests/data/devices/signify-netherlands-b-v-lce001.json b/tests/data/devices/signify-netherlands-b-v-lce001-0x01002404.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lce001.json rename to tests/data/devices/signify-netherlands-b-v-lce001-0x01002404.json diff --git a/tests/data/devices/signify-netherlands-b-v-lcg006.json b/tests/data/devices/signify-netherlands-b-v-lcg006-0x01002502.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lcg006.json rename to tests/data/devices/signify-netherlands-b-v-lcg006-0x01002502.json diff --git a/tests/data/devices/signify-netherlands-b-v-lcx004.json b/tests/data/devices/signify-netherlands-b-v-lcx004-0x01001802.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lcx004.json rename to tests/data/devices/signify-netherlands-b-v-lcx004-0x01001802.json diff --git a/tests/data/devices/signify-netherlands-b-v-lta010.json b/tests/data/devices/signify-netherlands-b-v-lta010-0x01002402.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lta010.json rename to tests/data/devices/signify-netherlands-b-v-lta010-0x01002402.json diff --git a/tests/data/devices/signify-netherlands-b-v-ltb003.json b/tests/data/devices/signify-netherlands-b-v-ltb003-0x01001f0a.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-ltb003.json rename to tests/data/devices/signify-netherlands-b-v-ltb003-0x01001f0a.json diff --git a/tests/data/devices/signify-netherlands-b-v-lwa003.json b/tests/data/devices/signify-netherlands-b-v-lwa003-0x01001f0a.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-lwa003.json rename to tests/data/devices/signify-netherlands-b-v-lwa003-0x01001f0a.json diff --git a/tests/data/devices/signify-netherlands-b-v-rdm001.json b/tests/data/devices/signify-netherlands-b-v-rdm001-0x0000041a.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-rdm001.json rename to tests/data/devices/signify-netherlands-b-v-rdm001-0x0000041a.json diff --git a/tests/data/devices/signify-netherlands-b-v-rdm002-0x02003b13.json b/tests/data/devices/signify-netherlands-b-v-rdm002-0x02003b13.json new file mode 100644 index 000000000..1d0b92f47 --- /dev/null +++ b/tests/data/devices/signify-netherlands-b-v-rdm002-0x02003b13.json @@ -0,0 +1,370 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:05:d9:30:d2", + "nwk": "0xC0C5", + "manufacturer": "Signify Netherlands B.V.", + "model": "RDM002", + "friendly_manufacturer": "Signify Netherlands B.V.", + "friendly_model": "RDM002", + "name": "Signify Netherlands B.V. RDM002", + "quirk_applied": true, + "quirk_class": "zhaquirks.philips.rdm002:PhilipsRDM002", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Battery or Unknown", + "lqi": 141, + "rssi": null, + "last_seen": "2026-02-08T23:34:48.150482+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 128, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "NON_COLOR_CONTROLLER", + "id": 2080 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Signify Netherlands B.V." + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "RDM002" + }, + { + "id": "0x0031", + "name": "philips", + "zcl_type": "map16", + "value": 11 + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 28 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + }, + { + "cluster_id": "0xfc00", + "endpoint_attribute": "philips_remote_cluster", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 33569555 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "Signify Netherlands B.V.", + "model": "RDM002", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 128, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0830", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0xfc00", + "0x1000" + ], + "output_clusters": [ + "0x0019", + "0x0000", + "0x0003", + "0x0004", + "0x0006", + "0x0008", + "0x0005", + "0x1000" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:d9:30:d2-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:d9:30:d2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:d9:30:d2-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:d9:30:d2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 141 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:d9:30:d2-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:d9:30:d2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:d9:30:d2-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:d9:30:d2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_voltage": 2.8 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:05:d9:30:d2-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:05:d9:30:d2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x02003b13", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/signify-netherlands-b-v-rdm002.json b/tests/data/devices/signify-netherlands-b-v-rdm002-0x02003b19.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-rdm002.json rename to tests/data/devices/signify-netherlands-b-v-rdm002-0x02003b19.json diff --git a/tests/data/devices/signify-netherlands-b-v-rdm004-0x02004d23.json b/tests/data/devices/signify-netherlands-b-v-rdm004-0x02004d23.json new file mode 100644 index 000000000..d2952f272 --- /dev/null +++ b/tests/data/devices/signify-netherlands-b-v-rdm004-0x02004d23.json @@ -0,0 +1,365 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:84:06:58:23", + "nwk": "0xEB94", + "manufacturer": "Signify Netherlands B.V.", + "model": "RDM004", + "friendly_manufacturer": "Signify Netherlands B.V.", + "friendly_model": "RDM004", + "name": "Signify Netherlands B.V. RDM004", + "quirk_applied": true, + "quirk_class": "zhaquirks.philips.wall_switch:PhilipsWallSwitchNewFirmware", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Battery or Unknown", + "lqi": 124, + "rssi": -69, + "last_seen": "2026-06-09T08:29:09.769972+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 128, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "NON_COLOR_SCENE_CONTROLLER", + "id": 2096 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Signify Netherlands B.V." + }, + { + "id": "0x0034", + "name": "mode", + "zcl_type": "enum8", + "value": 3 + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "RDM004" + }, + { + "id": "0x0031", + "name": "philips", + "zcl_type": "map16", + "value": 11 + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 255 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0xfc00", + "endpoint_attribute": "philips_remote_cluster", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 1 + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 33574179 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Signify Netherlands B.V.", + "model": "RDM004", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 128, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0830", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0xfc00" + ], + "output_clusters": [ + "0x0019", + "0x0000", + "0x0003", + "0x0004", + "0x0006", + "0x0008" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:84:06:58:23-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:84:06:58:23", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:84:06:58:23-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:84:06:58:23", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 124 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:84:06:58:23-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:84:06:58:23", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -69 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:84:06:58:23-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:84:06:58:23", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_voltage": 25.5 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:84:06:58:23-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:84:06:58:23", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x02004d23", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/signify-netherlands-b-v-rdm005.json b/tests/data/devices/signify-netherlands-b-v-rdm005-0x02005301.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-rdm005.json rename to tests/data/devices/signify-netherlands-b-v-rdm005-0x02005301.json diff --git a/tests/data/devices/signify-netherlands-b-v-rwl022.json b/tests/data/devices/signify-netherlands-b-v-rwl022-0x02002d02.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-rwl022.json rename to tests/data/devices/signify-netherlands-b-v-rwl022-0x02002d02.json diff --git a/tests/data/devices/signify-netherlands-b-v-rwl022-0x02004d27.json b/tests/data/devices/signify-netherlands-b-v-rwl022-0x02004d27.json new file mode 100644 index 000000000..c530ccc21 --- /dev/null +++ b/tests/data/devices/signify-netherlands-b-v-rwl022-0x02004d27.json @@ -0,0 +1,365 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:e5:92:c2:0e", + "nwk": "0x4C2D", + "manufacturer": "Signify Netherlands B.V.", + "model": "RWL022", + "friendly_manufacturer": "Signify Netherlands B.V.", + "friendly_model": "RWL022", + "name": "Signify Netherlands B.V. RWL022", + "quirk_applied": true, + "quirk_class": "zhaquirks.philips.rwl022:PhilipsRWL022", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Battery or Unknown", + "lqi": 184, + "rssi": -54, + "last_seen": "2026-02-11T17:11:49.715112+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 128, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "NON_COLOR_SCENE_CONTROLLER", + "id": 2096 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0031", + "name": "philips", + "zcl_type": "map16", + "value": 11 + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 30 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + }, + { + "cluster_id": "0xfc00", + "endpoint_attribute": "philips_remote_cluster", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 1 + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 33574183 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "Signify Netherlands B.V.", + "model": "RWL022", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 128, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0830", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0xfc00", + "0x1000" + ], + "output_clusters": [ + "0x0019", + "0x0000", + "0x0003", + "0x0004", + "0x0006", + "0x0008", + "0x0005", + "0x1000" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e5:92:c2:0e-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e5:92:c2:0e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e5:92:c2:0e-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e5:92:c2:0e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 184 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e5:92:c2:0e-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e5:92:c2:0e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -54 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e5:92:c2:0e-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e5:92:c2:0e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_voltage": 3.0 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e5:92:c2:0e-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:e5:92:c2:0e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x02004d27", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/signify-netherlands-b-v-sml003.json b/tests/data/devices/signify-netherlands-b-v-sml003-0x02003506.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-sml003.json rename to tests/data/devices/signify-netherlands-b-v-sml003-0x02003506.json diff --git a/tests/data/devices/signify-netherlands-b-v-sml004.json b/tests/data/devices/signify-netherlands-b-v-sml004-0x02003506.json similarity index 100% rename from tests/data/devices/signify-netherlands-b-v-sml004.json rename to tests/data/devices/signify-netherlands-b-v-sml004-0x02003506.json diff --git a/tests/data/devices/smartthings-multiv4.json b/tests/data/devices/smartthings-multiv4-0x0000001b.json similarity index 100% rename from tests/data/devices/smartthings-multiv4.json rename to tests/data/devices/smartthings-multiv4-0x0000001b.json diff --git a/tests/data/devices/smartthings-tagv4.json b/tests/data/devices/smartthings-tagv4-0x00000019.json similarity index 100% rename from tests/data/devices/smartthings-tagv4.json rename to tests/data/devices/smartthings-tagv4-0x00000019.json diff --git a/tests/data/devices/smartwings-wm25-l-z.json b/tests/data/devices/smartwings-wm25-l-z-0x00000002.json similarity index 100% rename from tests/data/devices/smartwings-wm25-l-z.json rename to tests/data/devices/smartwings-wm25-l-z-0x00000002.json diff --git a/tests/data/devices/somfy-situo-4-zigbee.json b/tests/data/devices/somfy-situo-4-zigbee-0x00011a00.json similarity index 100% rename from tests/data/devices/somfy-situo-4-zigbee.json rename to tests/data/devices/somfy-situo-4-zigbee-0x00011a00.json diff --git a/tests/data/devices/somfy-sonesse-28-wf-li-ion-roller.json b/tests/data/devices/somfy-sonesse-28-wf-li-ion-roller-0x4100e158.json similarity index 100% rename from tests/data/devices/somfy-sonesse-28-wf-li-ion-roller.json rename to tests/data/devices/somfy-sonesse-28-wf-li-ion-roller-0x4100e158.json diff --git a/tests/data/devices/somfy-ysia-5-hp-zigbee.json b/tests/data/devices/somfy-ysia-5-hp-zigbee-0x00e00041.json similarity index 100% rename from tests/data/devices/somfy-ysia-5-hp-zigbee.json rename to tests/data/devices/somfy-ysia-5-hp-zigbee-0x00e00041.json diff --git a/tests/data/devices/sonoff-mini-zbdim.json b/tests/data/devices/sonoff-mini-zbdim-0x00001005.json similarity index 100% rename from tests/data/devices/sonoff-mini-zbdim.json rename to tests/data/devices/sonoff-mini-zbdim-0x00001005.json diff --git a/tests/data/devices/sonoff-mini-zbrbs.json b/tests/data/devices/sonoff-mini-zbrbs-0x00001005.json similarity index 100% rename from tests/data/devices/sonoff-mini-zbrbs.json rename to tests/data/devices/sonoff-mini-zbrbs-0x00001005.json diff --git a/tests/data/devices/sonoff-s26r2zb.json b/tests/data/devices/sonoff-s26r2zb-0x00002000.json similarity index 100% rename from tests/data/devices/sonoff-s26r2zb.json rename to tests/data/devices/sonoff-s26r2zb-0x00002000.json diff --git a/tests/data/devices/sonoff-s60zbtpg.json b/tests/data/devices/sonoff-s60zbtpg-0x00001002.json similarity index 100% rename from tests/data/devices/sonoff-s60zbtpg.json rename to tests/data/devices/sonoff-s60zbtpg-0x00001002.json diff --git a/tests/data/devices/sonoff-snzb-01m.json b/tests/data/devices/sonoff-snzb-01m-0x00001005.json similarity index 100% rename from tests/data/devices/sonoff-snzb-01m.json rename to tests/data/devices/sonoff-snzb-01m-0x00001005.json diff --git a/tests/data/devices/sonoff-snzb-02d.json b/tests/data/devices/sonoff-snzb-02d-0x00002300.json similarity index 100% rename from tests/data/devices/sonoff-snzb-02d.json rename to tests/data/devices/sonoff-snzb-02d-0x00002300.json diff --git a/tests/data/devices/sonoff-snzb-04pr2.json b/tests/data/devices/sonoff-snzb-04pr2-0x00001001.json similarity index 100% rename from tests/data/devices/sonoff-snzb-04pr2.json rename to tests/data/devices/sonoff-snzb-04pr2-0x00001001.json diff --git a/tests/data/devices/sonoff-snzb-05p.json b/tests/data/devices/sonoff-snzb-05p-0x00001002.json similarity index 100% rename from tests/data/devices/sonoff-snzb-05p.json rename to tests/data/devices/sonoff-snzb-05p-0x00001002.json diff --git a/tests/data/devices/sonoff-snzb-06p.json b/tests/data/devices/sonoff-snzb-06p-0x00001006.json similarity index 100% rename from tests/data/devices/sonoff-snzb-06p.json rename to tests/data/devices/sonoff-snzb-06p-0x00001006.json diff --git a/tests/data/devices/sonoff-swv.json b/tests/data/devices/sonoff-swv-0x00001002.json similarity index 100% rename from tests/data/devices/sonoff-swv.json rename to tests/data/devices/sonoff-swv-0x00001002.json diff --git a/tests/data/devices/sonoff-swv-0x00001003.json b/tests/data/devices/sonoff-swv-0x00001003.json new file mode 100644 index 000000000..624ff8f8d --- /dev/null +++ b/tests/data/devices/sonoff-swv-0x00001003.json @@ -0,0 +1,498 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:8c:25:a4:7c", + "nwk": "0x179C", + "manufacturer": "SONOFF", + "model": "SWV", + "friendly_manufacturer": "SONOFF", + "friendly_model": "SWV", + "name": "SONOFF SWV", + "quirk_applied": true, + "quirk_class": "zhaquirks.sonoff.swv:(SONOFF / SWV)", + "exposes_features": [], + "manufacturer_code": 4742, + "power_source": "Battery or Unknown", + "lqi": 144, + "rssi": null, + "last_seen": "2025-07-06T18:23:04.817176+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4742, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_OUTPUT", + "id": 2 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "SONOFF" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "SWV" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 62 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [ + { + "id": "0x0000", + "name": "checkin_interval", + "zcl_type": "uint32", + "value": 13200 + } + ] + }, + { + "cluster_id": "0x0404", + "endpoint_attribute": "flow", + "attributes": [] + }, + { + "cluster_id": "0x0b05", + "endpoint_attribute": "diagnostic", + "attributes": [] + }, + { + "cluster_id": "0xfc11", + "endpoint_attribute": null, + "attributes": [ + { + "id": "0x500c", + "name": "water_valve_state", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xfc57", + "endpoint_attribute": "works_with_all_hubs", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 4099 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "SONOFF", + "model": "SWV", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4742, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0002", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0006", + "0x0020", + "0x0404", + "0x0b05", + "0xfc11", + "0xfc57" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": "Water leak", + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-water_leak_status", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinarySensor", + "translation_key": "water_leak", + "translation_placeholders": null, + "device_class": "moisture", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "water_valve_state" + }, + "state": { + "class_name": "BinarySensor", + "available": true, + "state": false + } + }, + { + "info_object": { + "fallback_name": "Water supply", + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-water_supply_status", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinarySensor", + "translation_key": "water_supply", + "translation_placeholders": null, + "device_class": "problem", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "water_valve_state" + }, + "state": { + "class_name": "BinarySensor", + "available": true, + "state": false + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 144 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_voltage": 6.2 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-1028", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Flow", + "translation_key": null, + "translation_placeholders": null, + "device_class": "volume_flow_rate", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "m\u00b3/h" + }, + "state": { + "class_name": "Flow", + "available": true, + "state": null + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-6", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "Switch", + "translation_key": "switch", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": false, + "available": true + } + }, + { + "info_object": { + "fallback_name": "Water shortage auto-close", + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-auto_close_water_shortage", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "water_shortage_auto_close", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "auto_close_water_shortage", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 30 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:8c:25:a4:7c-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:8c:25:a4:7c", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00001003", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/sonoff-trvzb.json b/tests/data/devices/sonoff-trvzb-0x00001201.json similarity index 100% rename from tests/data/devices/sonoff-trvzb.json rename to tests/data/devices/sonoff-trvzb-0x00001201.json diff --git a/tests/data/devices/sonoff-trvzb-0x00001400.json b/tests/data/devices/sonoff-trvzb-0x00001400.json new file mode 100644 index 000000000..3192c3aa7 --- /dev/null +++ b/tests/data/devices/sonoff-trvzb-0x00001400.json @@ -0,0 +1,1224 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:4d:04:9a:8f", + "nwk": "0xE362", + "manufacturer": "SONOFF", + "model": "TRVZB", + "friendly_manufacturer": "SONOFF", + "friendly_model": "TRVZB", + "name": "SONOFF TRVZB", + "quirk_applied": true, + "quirk_class": "zhaquirks.sonoff.trvzb:(SONOFF / TRVZB)", + "exposes_features": [], + "manufacturer_code": 4742, + "power_source": "Battery or Unknown", + "lqi": 60, + "rssi": null, + "last_seen": "2025-11-22T10:27:47.582709+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4742, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "THERMOSTAT", + "id": 769 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "SONOFF" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TRVZB" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 174 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [ + { + "id": "0x0000", + "name": "checkin_interval", + "zcl_type": "uint32", + "value": 13200 + }, + { + "id": "0x0003", + "name": "fast_poll_timeout", + "zcl_type": "uint16", + "value": 120 + } + ] + }, + { + "cluster_id": "0x0201", + "endpoint_attribute": "thermostat", + "attributes": [ + { + "id": "0x0006", + "name": "abs_max_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0004", + "name": "abs_max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3500 + }, + { + "id": "0x0005", + "name": "abs_min_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0003", + "name": "abs_min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 400 + }, + { + "id": "0x001b", + "name": "ctrl_sequence_of_oper", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x0000", + "name": "local_temperature", + "zcl_type": "int16", + "value": 1800 + }, + { + "id": "0x0010", + "name": "local_temperature_calibration", + "zcl_type": "int8", + "value": 0 + }, + { + "id": "0x0018", + "name": "max_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0016", + "name": "max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3500 + }, + { + "id": "0x0017", + "name": "min_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0015", + "name": "min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 400 + }, + { + "id": "0x0002", + "name": "occupancy", + "zcl_type": "map8", + "value": 1 + }, + { + "id": "0x0011", + "name": "occupied_cooling_setpoint", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0012", + "name": "occupied_heating_setpoint", + "zcl_type": "int16", + "value": 2300 + }, + { + "id": "0x0007", + "name": "pi_cooling_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0008", + "name": "pi_heating_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x001e", + "name": "running_mode", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0029", + "name": "running_state", + "zcl_type": "map16", + "value": 0 + }, + { + "id": "0x0030", + "name": "setpoint_change_source", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x001c", + "name": "system_mode", + "zcl_type": "enum8", + "value": 4 + }, + { + "id": "0x0013", + "name": "unoccupied_cooling_setpoint", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0014", + "name": "unoccupied_heating_setpoint", + "zcl_type": "int16", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xfc11", + "endpoint_attribute": null, + "attributes": [ + { + "id": "0x0000", + "name": "child_lock", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x6004", + "name": "closing_steps", + "zcl_type": "uint16", + "value": 503 + }, + { + "id": "0x600e", + "name": "external_temperature_sensor_enable", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x600d", + "name": "external_temperature_sensor_value", + "zcl_type": "int16", + "value": 1990 + }, + { + "id": "0x6002", + "name": "frost_protection_temperature", + "zcl_type": "int16", + "value": 700 + }, + { + "id": "0x6003", + "name": "idle_steps", + "zcl_type": "uint16", + "value": 264 + }, + { + "id": "0x6000", + "name": "open_window", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x6011", + "name": "temperature_control_accuracy", + "zcl_type": "int16", + "value": -100 + }, + { + "id": "0x600c", + "name": "valve_closing_degree", + "zcl_type": "uint8", + "value": 100 + }, + { + "id": "0x6006", + "name": "valve_closing_limit_voltage", + "zcl_type": "uint16", + "value": 3107 + }, + { + "id": "0x6007", + "name": "valve_motor_running_voltage", + "zcl_type": "uint16", + "value": 1501 + }, + { + "id": "0x600b", + "name": "valve_opening_degree", + "zcl_type": "uint8", + "value": 100 + }, + { + "id": "0x6005", + "name": "valve_opening_limit_voltage", + "zcl_type": "uint16", + "value": 1718 + } + ] + }, + { + "cluster_id": "0xfc57", + "endpoint_attribute": "works_with_all_hubs", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 5120 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "SONOFF", + "model": "TRVZB", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4742, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0301", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0006", + "0x0020", + "0x0201", + "0xfc11", + "0xfc57" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + }, + { + "info_object": { + "fallback_name": "Boost mode", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-boost_mode", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "WriteAttributeButton", + "translation_key": "boost_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "temporary_mode", + "attribute_value": 0 + }, + "state": { + "class_name": "WriteAttributeButton", + "available": true + } + }, + { + "info_object": { + "fallback_name": "Timer mode", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-timer_mode", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "WriteAttributeButton", + "translation_key": "timer_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "temporary_mode", + "attribute_value": 1 + }, + "state": { + "class_name": "WriteAttributeButton", + "available": true + } + } + ], + "climate": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1", + "migrate_unique_ids": [], + "platform": "climate", + "class_name": "Thermostat", + "translation_key": "thermostat", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "max_temp": 35.0, + "min_temp": 4.0, + "supported_features": 385, + "fan_modes": null, + "preset_modes": [], + "hvac_modes": [ + "off", + "heat" + ] + }, + "state": { + "class_name": "Thermostat", + "available": true, + "current_temperature": 18.0, + "outdoor_temperature": null, + "target_temperature": 23.0, + "target_temperature_high": null, + "target_temperature_low": null, + "hvac_action": "idle", + "hvac_mode": "heat", + "preset_mode": "none", + "fan_mode": "auto", + "system_mode": "[4]/heat", + "occupancy": 1, + "occupied_cooling_setpoint": null, + "occupied_heating_setpoint": 2300, + "pi_heating_demand": null, + "pi_cooling_demand": null, + "unoccupied_cooling_setpoint": null, + "unoccupied_heating_setpoint": null + }, + "extra_state_attributes": [ + "occupancy", + "occupied_cooling_setpoint", + "occupied_heating_setpoint", + "pi_cooling_demand", + "pi_heating_demand", + "system_mode", + "unoccupied_cooling_setpoint", + "unoccupied_heating_setpoint" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-local_temperature_calibration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "SonoffThermostatLocalTempCalibration", + "translation_key": "local_temperature_calibration", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 12.7, + "native_min_value": -12.8, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "SonoffThermostatLocalTempCalibration", + "available": true, + "state": 0.0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-max_heat_setpoint_limit", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "MaxHeatSetpointLimit", + "translation_key": "max_heat_setpoint_limit", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 35.0, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "MaxHeatSetpointLimit", + "available": true, + "state": 35.0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-min_heat_setpoint_limit", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "MinHeatSetpointLimit", + "translation_key": "min_heat_setpoint_limit", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 35.0, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "MinHeatSetpointLimit", + "available": true, + "state": 4.0 + } + }, + { + "info_object": { + "fallback_name": "External temperature sensor value", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-external_temperature_sensor_value", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "external_temperature_sensor_value", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 99.9, + "native_min_value": 0.0, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 19.900000000000002 + } + }, + { + "info_object": { + "fallback_name": "Frost protection temperature", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-frost_protection_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "frost_protection_temperature", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 35.0, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 7.0 + } + }, + { + "info_object": { + "fallback_name": "Temperature control accuracy", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-temperature_control_accuracy", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "temperature_control_accuracy", + "translation_placeholders": null, + "device_class": "temperature_delta", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": -0.2, + "native_min_value": -1.0, + "native_step": 0.2, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": -1.0 + } + }, + { + "info_object": { + "fallback_name": "Temporary mode duration", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-temporary_mode_duration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "temporary_mode_duration", + "translation_placeholders": null, + "device_class": "duration", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 1440, + "native_min_value": 0, + "native_step": 1, + "native_unit_of_measurement": "min" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": "Timer mode target temperature", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-timer_mode_target_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "timer_mode_target_temperature", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 35.0, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": "Valve closing degree", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-valve_closing_degree", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "valve_closing_degree", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 100.0, + "native_min_value": 0.0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 100 + } + }, + { + "info_object": { + "fallback_name": "Valve opening degree", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-valve_opening_degree", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "valve_opening_degree", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 100.0, + "native_min_value": 0.0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 100 + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 60 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 87.0 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-hvac_action", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ThermostatHVACAction", + "translation_key": "hvac_action", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "ThermostatHVACAction", + "available": true, + "state": "idle" + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-setpoint_change_source_timestamp", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SetpointChangeSourceTimestamp", + "translation_key": "setpoint_change_source_timestamp", + "translation_placeholders": null, + "device_class": "timestamp", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "SetpointChangeSourceTimestamp", + "available": true, + "state": null + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-6", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "Switch", + "translation_key": "switch", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 0, + "available": true + } + }, + { + "info_object": { + "fallback_name": "Child lock", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-child_lock", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "child_lock", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "child_lock", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "External temperature sensor", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-external_temperature_sensor_enable", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "external_temperature_sensor", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "external_temperature_sensor_enable", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "Open window", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-open_window", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "open_window", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "open_window", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "Adaptive mode", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-smart_temperature_control", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "adaptive_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "smart_temperature_control", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 2 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00001400", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/sonoff-trvzb-0x00001401.json b/tests/data/devices/sonoff-trvzb-0x00001401.json new file mode 100644 index 000000000..ad8e1f688 --- /dev/null +++ b/tests/data/devices/sonoff-trvzb-0x00001401.json @@ -0,0 +1,1218 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:4d:04:9a:8f", + "nwk": "0x7A92", + "manufacturer": "SONOFF", + "model": "TRVZB", + "friendly_manufacturer": "SONOFF", + "friendly_model": "TRVZB", + "name": "SONOFF TRVZB", + "quirk_applied": true, + "quirk_class": "zhaquirks.sonoff.trvzb:(SONOFF / TRVZB)", + "exposes_features": [], + "manufacturer_code": 4742, + "power_source": "Battery or Unknown", + "lqi": 108, + "rssi": -73, + "last_seen": "2026-01-14T08:39:51.493829+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4742, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "THERMOSTAT", + "id": 769 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "SONOFF" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TRVZB" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 1 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [ + { + "id": "0x0003", + "name": "fast_poll_timeout", + "zcl_type": "uint16", + "value": 120 + } + ] + }, + { + "cluster_id": "0x0201", + "endpoint_attribute": "thermostat", + "attributes": [ + { + "id": "0x0006", + "name": "abs_max_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0004", + "name": "abs_max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3500 + }, + { + "id": "0x0005", + "name": "abs_min_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0003", + "name": "abs_min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 400 + }, + { + "id": "0x001b", + "name": "ctrl_sequence_of_oper", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x0000", + "name": "local_temperature", + "zcl_type": "int16", + "value": 3240 + }, + { + "id": "0x0010", + "name": "local_temperature_calibration", + "zcl_type": "int8", + "value": 126 + }, + { + "id": "0x0018", + "name": "max_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0016", + "name": "max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3500 + }, + { + "id": "0x0017", + "name": "min_cool_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0015", + "name": "min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 400 + }, + { + "id": "0x0002", + "name": "occupancy", + "zcl_type": "map8", + "value": 1 + }, + { + "id": "0x0011", + "name": "occupied_cooling_setpoint", + "zcl_type": "int16", + "value": 2600 + }, + { + "id": "0x0012", + "name": "occupied_heating_setpoint", + "zcl_type": "int16", + "value": 1550 + }, + { + "id": "0x0007", + "name": "pi_cooling_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0008", + "name": "pi_heating_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x001e", + "name": "running_mode", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0029", + "name": "running_state", + "zcl_type": "map16", + "value": 0 + }, + { + "id": "0x0030", + "name": "setpoint_change_source", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x001c", + "name": "system_mode", + "zcl_type": "enum8", + "value": 4 + }, + { + "id": "0x0013", + "name": "unoccupied_cooling_setpoint", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0014", + "name": "unoccupied_heating_setpoint", + "zcl_type": "int16", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xfc11", + "endpoint_attribute": null, + "attributes": [ + { + "id": "0x0000", + "name": "child_lock", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x6004", + "name": "closing_steps", + "zcl_type": "uint16", + "value": 317 + }, + { + "id": "0x600e", + "name": "external_temperature_sensor_enable", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x600d", + "name": "external_temperature_sensor_value", + "zcl_type": "int16", + "value": 3470 + }, + { + "id": "0x6002", + "name": "frost_protection_temperature", + "zcl_type": "int16", + "value": 700 + }, + { + "id": "0x6003", + "name": "idle_steps", + "zcl_type": "uint16", + "value": 202 + }, + { + "id": "0x6000", + "name": "open_window", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x6011", + "name": "temperature_control_accuracy", + "zcl_type": "int16", + "value": -100 + }, + { + "id": "0x600c", + "name": "valve_closing_degree", + "zcl_type": "uint8", + "value": 100 + }, + { + "id": "0x6006", + "name": "valve_closing_limit_voltage", + "zcl_type": "uint16", + "value": 2564 + }, + { + "id": "0x6007", + "name": "valve_motor_running_voltage", + "zcl_type": "uint16", + "value": 1403 + }, + { + "id": "0x600b", + "name": "valve_opening_degree", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x6005", + "name": "valve_opening_limit_voltage", + "zcl_type": "uint16", + "value": 1577 + } + ] + }, + { + "cluster_id": "0xfc57", + "endpoint_attribute": "works_with_all_hubs", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 5121 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "SONOFF", + "model": "TRVZB", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4742, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 255, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 255, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0301", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0006", + "0x0020", + "0x0201", + "0xfc11", + "0xfc57" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + }, + { + "info_object": { + "fallback_name": "Boost mode", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-boost_mode", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "WriteAttributeButton", + "translation_key": "boost_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "temporary_mode", + "attribute_value": 0 + }, + "state": { + "class_name": "WriteAttributeButton", + "available": true + } + }, + { + "info_object": { + "fallback_name": "Timer mode", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-timer_mode", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "WriteAttributeButton", + "translation_key": "timer_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "temporary_mode", + "attribute_value": 1 + }, + "state": { + "class_name": "WriteAttributeButton", + "available": true + } + } + ], + "climate": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1", + "migrate_unique_ids": [], + "platform": "climate", + "class_name": "Thermostat", + "translation_key": "thermostat", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "max_temp": 35.0, + "min_temp": 4.0, + "supported_features": 385, + "fan_modes": null, + "preset_modes": [], + "hvac_modes": [ + "off", + "heat" + ] + }, + "state": { + "class_name": "Thermostat", + "available": true, + "current_temperature": 32.4, + "outdoor_temperature": null, + "target_temperature": 15.5, + "target_temperature_high": null, + "target_temperature_low": null, + "hvac_action": "idle", + "hvac_mode": "heat", + "preset_mode": "none", + "fan_mode": "auto", + "system_mode": "[4]/heat", + "occupancy": 1, + "occupied_cooling_setpoint": 2600, + "occupied_heating_setpoint": 1550, + "pi_heating_demand": null, + "pi_cooling_demand": null, + "unoccupied_cooling_setpoint": null, + "unoccupied_heating_setpoint": null + }, + "extra_state_attributes": [ + "occupancy", + "occupied_cooling_setpoint", + "occupied_heating_setpoint", + "pi_cooling_demand", + "pi_heating_demand", + "system_mode", + "unoccupied_cooling_setpoint", + "unoccupied_heating_setpoint" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-local_temperature_calibration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "SonoffThermostatLocalTempCalibration", + "translation_key": "local_temperature_calibration", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 12.7, + "native_min_value": -12.8, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "SonoffThermostatLocalTempCalibration", + "available": true, + "state": 12.600000000000001 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-max_heat_setpoint_limit", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "MaxHeatSetpointLimit", + "translation_key": "max_heat_setpoint_limit", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 35.0, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "MaxHeatSetpointLimit", + "available": true, + "state": 35.0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-min_heat_setpoint_limit", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "MinHeatSetpointLimit", + "translation_key": "min_heat_setpoint_limit", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 35.0, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "MinHeatSetpointLimit", + "available": true, + "state": 4.0 + } + }, + { + "info_object": { + "fallback_name": "External temperature sensor value", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-external_temperature_sensor_value", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "external_temperature_sensor_value", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 99.9, + "native_min_value": 0.0, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 34.7 + } + }, + { + "info_object": { + "fallback_name": "Frost protection temperature", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-frost_protection_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "frost_protection_temperature", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 35.0, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 7.0 + } + }, + { + "info_object": { + "fallback_name": "Temperature control accuracy", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-temperature_control_accuracy", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "temperature_control_accuracy", + "translation_placeholders": null, + "device_class": "temperature_delta", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": -0.2, + "native_min_value": -1.0, + "native_step": 0.2, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": -1.0 + } + }, + { + "info_object": { + "fallback_name": "Temporary mode duration", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-temporary_mode_duration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "temporary_mode_duration", + "translation_placeholders": null, + "device_class": "duration", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 1440, + "native_min_value": 0, + "native_step": 1, + "native_unit_of_measurement": "min" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": "Timer mode target temperature", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-timer_mode_target_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "timer_mode_target_temperature", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 35.0, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": "Valve closing degree", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-valve_closing_degree", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "valve_closing_degree", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 100.0, + "native_min_value": 0.0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 100 + } + }, + { + "info_object": { + "fallback_name": "Valve opening degree", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-valve_opening_degree", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "valve_opening_degree", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 100.0, + "native_min_value": 0.0, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 0 + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 108 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -73 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-hvac_action", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ThermostatHVACAction", + "translation_key": "hvac_action", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "ThermostatHVACAction", + "available": true, + "state": "idle" + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-513-setpoint_change_source_timestamp", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SetpointChangeSourceTimestamp", + "translation_key": "setpoint_change_source_timestamp", + "translation_placeholders": null, + "device_class": "timestamp", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "SetpointChangeSourceTimestamp", + "available": true, + "state": null + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-6", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "Switch", + "translation_key": "switch", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 1, + "available": true + } + }, + { + "info_object": { + "fallback_name": "Child lock", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-child_lock", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "child_lock", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "child_lock", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "External temperature sensor", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-external_temperature_sensor_enable", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "external_temperature_sensor", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "external_temperature_sensor_enable", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "Open window", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-open_window", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "open_window", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "open_window", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "Adaptive mode", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-smart_temperature_control", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "adaptive_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "smart_temperature_control", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 2 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00001401", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/sonoff-zbmicro.json b/tests/data/devices/sonoff-zbmicro-0x00001005.json similarity index 100% rename from tests/data/devices/sonoff-zbmicro.json rename to tests/data/devices/sonoff-zbmicro-0x00001005.json diff --git a/tests/data/devices/sonoff-zbminil2.json b/tests/data/devices/sonoff-zbminil2-0x0000100e.json similarity index 100% rename from tests/data/devices/sonoff-zbminil2.json rename to tests/data/devices/sonoff-zbminil2-0x0000100e.json diff --git a/tests/data/devices/sonoff-zbminir2.json b/tests/data/devices/sonoff-zbminir2-0x00001004.json similarity index 100% rename from tests/data/devices/sonoff-zbminir2.json rename to tests/data/devices/sonoff-zbminir2-0x00001004.json diff --git a/tests/data/devices/sunricher-hk-dim.json b/tests/data/devices/sunricher-hk-dim-0x00000036.json similarity index 100% rename from tests/data/devices/sunricher-hk-dim.json rename to tests/data/devices/sunricher-hk-dim-0x00000036.json diff --git a/tests/data/devices/sunricher-hk-ln-dim-a.json b/tests/data/devices/sunricher-hk-ln-dim-a-0x00000039.json similarity index 100% rename from tests/data/devices/sunricher-hk-ln-dim-a.json rename to tests/data/devices/sunricher-hk-ln-dim-a-0x00000039.json diff --git a/tests/data/devices/sunricher-on-off-2ch.json b/tests/data/devices/sunricher-on-off-2ch-0x00000004.json similarity index 100% rename from tests/data/devices/sunricher-on-off-2ch.json rename to tests/data/devices/sunricher-on-off-2ch-0x00000004.json diff --git a/tests/data/devices/the-home-depot-ecosmart-zbt-a19-cct-bulb.json b/tests/data/devices/the-home-depot-ecosmart-zbt-a19-cct-bulb-0x21036500.json similarity index 100% rename from tests/data/devices/the-home-depot-ecosmart-zbt-a19-cct-bulb.json rename to tests/data/devices/the-home-depot-ecosmart-zbt-a19-cct-bulb-0x21036500.json diff --git a/tests/data/devices/third-reality-inc-3rap0149bz.json b/tests/data/devices/third-reality-inc-3rap0149bz-0x0000000e.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rap0149bz.json rename to tests/data/devices/third-reality-inc-3rap0149bz-0x0000000e.json diff --git a/tests/data/devices/third-reality-inc-3rms16bz.json b/tests/data/devices/third-reality-inc-3rms16bz-0x0000004f.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rms16bz.json rename to tests/data/devices/third-reality-inc-3rms16bz-0x0000004f.json diff --git a/tests/data/devices/third-reality-inc-3rsb015bz.json b/tests/data/devices/third-reality-inc-3rsb015bz-0x00000048.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rsb015bz.json rename to tests/data/devices/third-reality-inc-3rsb015bz-0x00000048.json diff --git a/tests/data/devices/third-reality-inc-3rsm0147z.json b/tests/data/devices/third-reality-inc-3rsm0147z-0x0000001f.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rsm0147z.json rename to tests/data/devices/third-reality-inc-3rsm0147z-0x0000001f.json diff --git a/tests/data/devices/third-reality-inc-3rsnl02043z.json b/tests/data/devices/third-reality-inc-3rsnl02043z-0x0000003c.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rsnl02043z.json rename to tests/data/devices/third-reality-inc-3rsnl02043z-0x0000003c.json diff --git a/tests/data/devices/third-reality-inc-3rsp019bz.json b/tests/data/devices/third-reality-inc-3rsp019bz-0x1001301e.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rsp019bz.json rename to tests/data/devices/third-reality-inc-3rsp019bz-0x1001301e.json diff --git a/tests/data/devices/third-reality-inc-3rsp02028bz.json b/tests/data/devices/third-reality-inc-3rsp02028bz-0x10013058.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rsp02028bz.json rename to tests/data/devices/third-reality-inc-3rsp02028bz-0x10013058.json diff --git a/tests/data/devices/third-reality-inc-3rsp02064z.json b/tests/data/devices/third-reality-inc-3rsp02064z-0x0000002f.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rsp02064z.json rename to tests/data/devices/third-reality-inc-3rsp02064z-0x0000002f.json diff --git a/tests/data/devices/third-reality-inc-3rss009z.json b/tests/data/devices/third-reality-inc-3rss009z-0x0000001d.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rss009z.json rename to tests/data/devices/third-reality-inc-3rss009z-0x0000001d.json diff --git a/tests/data/devices/third-reality-inc-3rths24bz.json b/tests/data/devices/third-reality-inc-3rths24bz-0x00000015.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rths24bz.json rename to tests/data/devices/third-reality-inc-3rths24bz-0x00000015.json diff --git a/tests/data/devices/third-reality-inc-3rvs01031z.json b/tests/data/devices/third-reality-inc-3rvs01031z-0x00000028.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rvs01031z.json rename to tests/data/devices/third-reality-inc-3rvs01031z-0x00000028.json diff --git a/tests/data/devices/third-reality-inc-3rws18bz.json b/tests/data/devices/third-reality-inc-3rws18bz-0x00000038.json similarity index 100% rename from tests/data/devices/third-reality-inc-3rws18bz.json rename to tests/data/devices/third-reality-inc-3rws18bz-0x00000038.json diff --git a/tests/data/devices/third-reality-inc-3rws18bz-0x00000049.json b/tests/data/devices/third-reality-inc-3rws18bz-0x00000049.json new file mode 100644 index 000000000..bfec202f7 --- /dev/null +++ b/tests/data/devices/third-reality-inc-3rws18bz-0x00000049.json @@ -0,0 +1,497 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:6a:84:87:99", + "nwk": "0xACF1", + "manufacturer": "Third Reality, Inc", + "model": "3RWS18BZ", + "friendly_manufacturer": "Third Reality, Inc", + "friendly_model": "3RWS18BZ", + "name": "Third Reality, Inc 3RWS18BZ", + "quirk_applied": true, + "quirk_class": "zhaquirks.thirdreality.water_leak_sensor:(Third Reality, Inc / 3RWS18BZ)", + "exposes_features": [], + "manufacturer_code": 4659, + "power_source": "Battery or Unknown", + "lqi": 60, + "rssi": null, + "last_seen": "2026-03-27T02:03:57.714312+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4659, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "IAS_ZONE", + "id": 1026 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0008", + "name": "generic_device_class", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0010", + "name": "location_desc", + "zcl_type": "string", + "value": "undefined" + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Third Reality, Inc" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "3RWS18BZ" + }, + { + "id": "0x4000", + "name": "sw_build_id", + "zcl_type": "string", + "value": "v1.00.73" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 156 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 28 + } + ] + }, + { + "cluster_id": "0x0500", + "endpoint_attribute": "ias_zone", + "attributes": [ + { + "id": "0x0010", + "name": "cie_addr", + "zcl_type": "EUI64", + "value": [ + 50, + 79, + 50, + 2, + 0, + 141, + 21, + 0 + ] + }, + { + "id": "0x0000", + "name": "zone_state", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0002", + "name": "zone_status", + "zcl_type": "map16", + "value": 0 + }, + { + "id": "0x0001", + "name": "zone_type", + "zcl_type": "enum16", + "value": 42 + } + ] + }, + { + "cluster_id": "0xff00", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + }, + { + "cluster_id": "0xff01", + "endpoint_attribute": null, + "attributes": [ + { + "id": "0x0010", + "name": "enable_siren", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0011", + "name": "siren_time", + "zcl_type": "uint8", + "value": 0 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 73 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Third Reality, Inc", + "model": "3RWS18BZ", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4659, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0402", + "input_clusters": [ + "0x0000", + "0xff01", + "0xff00", + "0x0001", + "0x0500" + ], + "output_clusters": [ + "0x0019", + "0x0006" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:84:87:99-1-1280", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "IASZone", + "translation_key": null, + "translation_placeholders": null, + "device_class": "moisture", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:6a:84:87:99", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "zone_status" + }, + "state": { + "class_name": "IASZone", + "available": true, + "state": false + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:84:87:99-1-6", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "Opening", + "translation_key": null, + "translation_placeholders": null, + "device_class": "opening", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:84:87:99", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "on_off" + }, + "state": { + "class_name": "Opening", + "available": true, + "state": false + } + } + ], + "number": [ + { + "info_object": { + "fallback_name": "Siren time", + "unique_id": "ab:cd:ef:12:6a:84:87:99-1-siren_time", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "siren_time", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:84:87:99", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 255, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": "min" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 0 + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:84:87:99-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:84:87:99", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 60 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:84:87:99-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:84:87:99", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:84:87:99-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:84:87:99", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 78.0, + "battery_voltage": 2.8 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "switch": [ + { + "info_object": { + "fallback_name": "Enable siren", + "unique_id": "ab:cd:ef:12:6a:84:87:99-1-enable_siren", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "enable_siren", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:84:87:99", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "enable_siren", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": true, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:6a:84:87:99-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:6a:84:87:99", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000049", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tyst11-i5j6ifxj-5j6ifxj.json b/tests/data/devices/tyst11-i5j6ifxj-5j6ifxj-0x00000049.json similarity index 100% rename from tests/data/devices/tyst11-i5j6ifxj-5j6ifxj.json rename to tests/data/devices/tyst11-i5j6ifxj-5j6ifxj-0x00000049.json diff --git a/tests/data/devices/tyzb01-o63ssaah-ts0207.json b/tests/data/devices/tyzb01-o63ssaah-ts0207-0x00000043.json similarity index 100% rename from tests/data/devices/tyzb01-o63ssaah-ts0207.json rename to tests/data/devices/tyzb01-o63ssaah-ts0207-0x00000043.json diff --git a/tests/data/devices/tyzb01-qm6djpta-ts0215.json b/tests/data/devices/tyzb01-qm6djpta-ts0215-0x00000046.json similarity index 100% rename from tests/data/devices/tyzb01-qm6djpta-ts0215.json rename to tests/data/devices/tyzb01-qm6djpta-ts0215-0x00000046.json diff --git a/tests/data/devices/tyzb01-rifa0wlb-ts0011.json b/tests/data/devices/tyzb01-rifa0wlb-ts0011-0x00000041.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/devices/tyzb01-rifa0wlb-ts0011.json rename to tests/data/devices/tyzb01-rifa0wlb-ts0011-0x00000041.json diff --git a/tests/data/devices/tz3000-09gto2zn-ts0013-0x00000050.json b/tests/data/devices/tz3000-09gto2zn-ts0013-0x00000050.json new file mode 100644 index 000000000..369fa9d0c --- /dev/null +++ b/tests/data/devices/tz3000-09gto2zn-ts0013-0x00000050.json @@ -0,0 +1,769 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:34:aa:29:f4", + "nwk": "0x28A1", + "manufacturer": "_TZ3000_09gto2zn", + "model": "TS0013", + "friendly_manufacturer": "_TZ3000_09gto2zn", + "friendly_model": "TS0013", + "name": "_TZ3000_09gto2zn TS0013", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts001x:TuyaTripleNoNeutralSwitch_2", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": 188, + "rssi": -53, + "last_seen": "2025-09-06T15:53:42.950149+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_LIGHT", + "id": 256 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 80 + }, + { + "id": "0x0006", + "name": "date_code", + "zcl_type": "string", + "value": "" + }, + { + "id": "0x0012", + "name": "device_enabled", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0x0014", + "name": "disable_local_config", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0003", + "name": "hw_version", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZ3000_09gto2zn" + }, + { + "id": "0x000c", + "name": "manufacturer_version_details", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0013" + }, + { + "id": "0x0007", + "name": "power_source", + "zcl_type": "enum8", + "value": 3 + }, + { + "id": "0x000e", + "name": "product_label", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0x000b", + "name": "product_url", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0000", + "name": "zcl_version", + "zcl_type": "uint8", + "value": 3 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0000", + "name": "identify_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [ + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [ + { + "id": "0x0000", + "name": "count", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0005", + "name": "last_configured_by", + "zcl_type": "EUI64", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x8001", + "name": "backlight_mode", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x8000", + "name": "child_lock", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 2 + }, + { + "id": "0x4000", + "name": "global_scene_control", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0x4002", + "name": "off_wait_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4001", + "name": "on_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x8002", + "name": "power_on_state", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x8004", + "name": "switch_mode", + "zcl_type": "enum8", + "unsupported": true + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 80 + } + ] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_LIGHT", + "id": 256 + }, + "in_clusters": [ + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [ + { + "id": "0x0004", + "name": "name_support", + "zcl_type": "map8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x8001", + "name": "backlight_mode", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x8000", + "name": "child_lock", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 2 + }, + { + "id": "0x4002", + "name": "off_wait_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4001", + "name": "on_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x8002", + "name": "power_on_state", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x8004", + "name": "switch_mode", + "zcl_type": "enum8", + "unsupported": true + } + ] + } + ], + "out_clusters": [] + }, + "3": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_LIGHT", + "id": 256 + }, + "in_clusters": [ + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x8000", + "name": "child_lock", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0x4000", + "name": "global_scene_control", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0x4002", + "name": "off_wait_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4001", + "name": "on_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x8004", + "name": "switch_mode", + "zcl_type": "enum8", + "unsupported": true + } + ] + } + ], + "out_clusters": [] + } + }, + "original_signature": { + "manufacturer": "_TZ3000_09gto2zn", + "model": "TS0013", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0100", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + }, + "2": { + "profile_id": "0x0104", + "device_type": "0x0100", + "input_clusters": [ + "0x0004", + "0x0005", + "0x0006" + ], + "output_clusters": [] + }, + "3": { + "profile_id": "0x0104", + "device_type": "0x0100", + "input_clusters": [ + "0x0004", + "0x0005", + "0x0006" + ], + "output_clusters": [] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:aa:29:f4-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:aa:29:f4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "light": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:aa:29:f4-1", + "migrate_unique_ids": [], + "platform": "light", + "class_name": "Light", + "translation_key": "light", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:aa:29:f4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "effect_list": [ + "off" + ], + "supported_features": 8, + "min_mireds": 153, + "max_mireds": 500 + }, + "state": { + "class_name": "Light", + "available": true, + "on": false, + "brightness": null, + "xy_color": null, + "color_temp": null, + "effect_list": [ + "off" + ], + "effect": "off", + "supported_features": 8, + "color_mode": "onoff", + "supported_color_modes": [ + "onoff" + ], + "off_with_transition": false, + "off_brightness": null + }, + "extra_state_attributes": [ + "off_brightness", + "off_with_transition" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:aa:29:f4-2", + "migrate_unique_ids": [], + "platform": "light", + "class_name": "Light", + "translation_key": "light", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:aa:29:f4", + "endpoint_id": 2, + "available": true, + "group_id": null, + "effect_list": [ + "off" + ], + "supported_features": 8, + "min_mireds": 153, + "max_mireds": 500 + }, + "state": { + "class_name": "Light", + "available": true, + "on": false, + "brightness": null, + "xy_color": null, + "color_temp": null, + "effect_list": [ + "off" + ], + "effect": "off", + "supported_features": 8, + "color_mode": "onoff", + "supported_color_modes": [ + "onoff" + ], + "off_with_transition": false, + "off_brightness": null + }, + "extra_state_attributes": [ + "off_brightness", + "off_with_transition" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:aa:29:f4-3", + "migrate_unique_ids": [], + "platform": "light", + "class_name": "Light", + "translation_key": "light", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:aa:29:f4", + "endpoint_id": 3, + "available": true, + "group_id": null, + "effect_list": [ + "off" + ], + "supported_features": 8, + "min_mireds": 153, + "max_mireds": 500 + }, + "state": { + "class_name": "Light", + "available": true, + "on": false, + "brightness": null, + "xy_color": null, + "color_temp": null, + "effect_list": [ + "off" + ], + "effect": "off", + "supported_features": 8, + "color_mode": "onoff", + "supported_color_modes": [ + "onoff" + ], + "off_with_transition": false, + "off_brightness": null + }, + "extra_state_attributes": [ + "off_brightness", + "off_with_transition" + ] + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:aa:29:f4-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:aa:29:f4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 188 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:aa:29:f4-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:aa:29:f4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -53 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:aa:29:f4-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:aa:29:f4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000050", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tz3000-1dd0d5yi-ts130f-0x00000047.json b/tests/data/devices/tz3000-1dd0d5yi-ts130f-0x00000047.json new file mode 100644 index 000000000..76ebb6aff --- /dev/null +++ b/tests/data/devices/tz3000-1dd0d5yi-ts130f-0x00000047.json @@ -0,0 +1,549 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:15:80:89:33", + "nwk": "0xB0E7", + "manufacturer": "_TZ3000_1dd0d5yi", + "model": "TS130F", + "friendly_manufacturer": "_TZ3000_1dd0d5yi", + "friendly_model": "TS130F", + "name": "_TZ3000_1dd0d5yi TS130F", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts130f:TuyaTS130FTI2", + "exposes_features": [], + "manufacturer_code": 4098, + "power_source": "Mains", + "lqi": 255, + "rssi": -73, + "last_seen": "2025-07-08T17:00:04.111016+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "WINDOW_COVERING_CONTROLLER", + "id": 515 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0013", + "name": "alarm_mask", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 71 + }, + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 2 + }, + { + "id": "0x0006", + "name": "date_code", + "zcl_type": "string", + "value": "" + }, + { + "id": "0x0012", + "name": "device_enabled", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0x0014", + "name": "disable_local_config", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0008", + "name": "generic_device_class", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0009", + "name": "generic_device_type", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0003", + "name": "hw_version", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0010", + "name": "location_desc", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZ3000_1dd0d5yi" + }, + { + "id": "0x000c", + "name": "manufacturer_version_details", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS130F" + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [ + { + "id": "0x0004", + "name": "name_support", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x0003", + "name": "scene_valid", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x8001", + "name": "backlight_mode", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0102", + "endpoint_attribute": "window_covering", + "attributes": [ + { + "id": "0x0015", + "name": "acceleration_time_lift", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0xf001", + "name": "calibration", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0xf003", + "name": "calibration_time", + "zcl_type": "uint16", + "value": 300 + }, + { + "id": "0x0007", + "name": "config_status", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0003", + "name": "current_position_lift", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0008", + "name": "current_position_lift_percentage", + "zcl_type": "uint8", + "value": 100 + }, + { + "id": "0x0009", + "name": "current_position_tilt_percentage", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0011", + "name": "installed_closed_limit_lift", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0013", + "name": "installed_closed_limit_tilt", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0010", + "name": "installed_open_limit_lift", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0012", + "name": "installed_open_limit_tilt", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x8000", + "name": "motor_mode", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0xf002", + "name": "motor_reversal", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0005", + "name": "number_of_actuations_lift", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0xf000", + "name": "tuya_moving_state", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x0017", + "name": "window_covering_mode", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0000", + "name": "window_covering_type", + "zcl_type": "enum8", + "unsupported": true + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0007", + "name": "local_time", + "zcl_type": "uint32", + "unsupported": true + }, + { + "id": "0x0002", + "name": "time_zone", + "zcl_type": "int32", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 71 + }, + { + "id": "0x0004", + "name": "downloaded_file_version", + "zcl_type": "uint32", + "unsupported": true + }, + { + "id": "0x0005", + "name": "downloaded_zigbee_stack_version", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x000a", + "name": "image_stamp", + "zcl_type": "uint32", + "unsupported": true + }, + { + "id": "0x0007", + "name": "manufacturer_id", + "zcl_type": "uint16", + "unsupported": true + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZ3000_1dd0d5yi", + "model": "TS130F", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0203", + "input_clusters": [ + "0x0000", + "0x0004", + "0x0005", + "0x0006", + "0x0102" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "cover": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:15:80:89:33-1-258", + "migrate_unique_ids": [], + "platform": "cover", + "class_name": "Cover", + "translation_key": "cover", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:15:80:89:33", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Cover", + "available": true, + "current_position": 0, + "current_tilt_position": null, + "state": "closed", + "is_opening": false, + "is_closing": false, + "is_closed": true, + "supported_features": 15 + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:15:80:89:33-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:15:80:89:33", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 255 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:15:80:89:33-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:15:80:89:33", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -73 + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:15:80:89:33-1-6", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "Switch", + "translation_key": "switch", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:15:80:89:33", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 0, + "available": true + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:15:80:89:33-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:15:80:89:33", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000047", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tz3000-1dd0d5yi-ts130f.json b/tests/data/devices/tz3000-1dd0d5yi-ts130f.json index 76ebb6aff..e0cb54539 100644 --- a/tests/data/devices/tz3000-1dd0d5yi-ts130f.json +++ b/tests/data/devices/tz3000-1dd0d5yi-ts130f.json @@ -162,7 +162,7 @@ "id": "0x0000", "name": "on_off", "zcl_type": "bool", - "value": 0 + "unsupported": true }, { "id": "0xfffe", @@ -320,7 +320,7 @@ "id": "0x0002", "name": "current_file_version", "zcl_type": "uint32", - "value": 71 + "unsupported": true }, { "id": "0x0004", @@ -403,7 +403,7 @@ "entity_category": null, "entity_registry_enabled_default": true, "enabled": true, - "primary": false, + "primary": true, "device_ieee": "ab:cd:ef:12:15:80:89:33", "endpoint_id": 1, "available": true, @@ -480,34 +480,6 @@ } } ], - "switch": [ - { - "info_object": { - "fallback_name": null, - "unique_id": "ab:cd:ef:12:15:80:89:33-1-6", - "migrate_unique_ids": [], - "platform": "switch", - "class_name": "Switch", - "translation_key": "switch", - "translation_placeholders": null, - "device_class": null, - "state_class": null, - "entity_category": null, - "entity_registry_enabled_default": true, - "enabled": true, - "primary": false, - "device_ieee": "ab:cd:ef:12:15:80:89:33", - "endpoint_id": 1, - "available": true, - "group_id": null - }, - "state": { - "class_name": "Switch", - "state": 0, - "available": true - } - } - ], "update": [ { "info_object": { @@ -533,7 +505,7 @@ "state": { "class_name": "FirmwareUpdateEntity", "available": true, - "installed_version": "0x00000047", + "installed_version": null, "in_progress": false, "update_percentage": null, "latest_version": null, diff --git a/tests/data/devices/tz3000-1o6x1bl0-ts0201.json b/tests/data/devices/tz3000-1o6x1bl0-ts0201-0x00000041.json similarity index 100% rename from tests/data/devices/tz3000-1o6x1bl0-ts0201.json rename to tests/data/devices/tz3000-1o6x1bl0-ts0201-0x00000041.json diff --git a/tests/data/devices/tz3000-3ias4w4o-ts011f.json b/tests/data/devices/tz3000-3ias4w4o-ts011f-0x0000004e.json similarity index 100% rename from tests/data/devices/tz3000-3ias4w4o-ts011f.json rename to tests/data/devices/tz3000-3ias4w4o-ts011f-0x0000004e.json diff --git a/tests/data/devices/tz3000-8nkb7mof-ts0121.json b/tests/data/devices/tz3000-8nkb7mof-ts0121-0x00000042.json similarity index 100% rename from tests/data/devices/tz3000-8nkb7mof-ts0121.json rename to tests/data/devices/tz3000-8nkb7mof-ts0121-0x00000042.json diff --git a/tests/data/devices/tz3000-bgsigers-ts0201.json b/tests/data/devices/tz3000-bgsigers-ts0201-0x00000040.json similarity index 100% rename from tests/data/devices/tz3000-bgsigers-ts0201.json rename to tests/data/devices/tz3000-bgsigers-ts0201-0x00000040.json diff --git a/tests/data/devices/tz3000-bguser20-ts0201.json b/tests/data/devices/tz3000-bguser20-ts0201-0x00000045.json similarity index 100% rename from tests/data/devices/tz3000-bguser20-ts0201.json rename to tests/data/devices/tz3000-bguser20-ts0201-0x00000045.json diff --git a/tests/data/devices/tz3000-cehuw1lw-ts011f.json b/tests/data/devices/tz3000-cehuw1lw-ts011f-0x0000004d.json similarity index 100% rename from tests/data/devices/tz3000-cehuw1lw-ts011f.json rename to tests/data/devices/tz3000-cehuw1lw-ts011f-0x0000004d.json diff --git a/tests/data/devices/tz3000-cicwjqth-ts011f.json b/tests/data/devices/tz3000-cicwjqth-ts011f-0x74013001.json similarity index 100% rename from tests/data/devices/tz3000-cicwjqth-ts011f.json rename to tests/data/devices/tz3000-cicwjqth-ts011f-0x74013001.json diff --git a/tests/data/devices/tz3000-drc9tuqb-ts0001.json b/tests/data/devices/tz3000-drc9tuqb-ts0001-0x00000047.json similarity index 100% rename from tests/data/devices/tz3000-drc9tuqb-ts0001.json rename to tests/data/devices/tz3000-drc9tuqb-ts0001-0x00000047.json diff --git a/tests/data/devices/tz3000-eamtuojw-ts0201.json b/tests/data/devices/tz3000-eamtuojw-ts0201-0x00000041.json similarity index 100% rename from tests/data/devices/tz3000-eamtuojw-ts0201.json rename to tests/data/devices/tz3000-eamtuojw-ts0201-0x00000041.json diff --git a/tests/data/devices/tz3000-f2bw0b6k-ts0201.json b/tests/data/devices/tz3000-f2bw0b6k-ts0201-0x00000046.json similarity index 100% rename from tests/data/devices/tz3000-f2bw0b6k-ts0201.json rename to tests/data/devices/tz3000-f2bw0b6k-ts0201-0x00000046.json diff --git a/tests/data/devices/tz3000-famkxci2-ts0043.json b/tests/data/devices/tz3000-famkxci2-ts0043-0x00000044.json similarity index 100% rename from tests/data/devices/tz3000-famkxci2-ts0043.json rename to tests/data/devices/tz3000-famkxci2-ts0043-0x00000044.json diff --git a/tests/data/devices/tz3000-gbm10jnj-ts0043.json b/tests/data/devices/tz3000-gbm10jnj-ts0043-0x00000042.json similarity index 100% rename from tests/data/devices/tz3000-gbm10jnj-ts0043.json rename to tests/data/devices/tz3000-gbm10jnj-ts0043-0x00000042.json diff --git a/tests/data/devices/tz3000-gjpgagal-ts0049.json b/tests/data/devices/tz3000-gjpgagal-ts0049-0x00000049.json similarity index 100% rename from tests/data/devices/tz3000-gjpgagal-ts0049.json rename to tests/data/devices/tz3000-gjpgagal-ts0049-0x00000049.json diff --git a/tests/data/devices/tz3000-hafsqare-ts0011.json b/tests/data/devices/tz3000-hafsqare-ts0011-0x00000050.json similarity index 100% rename from tests/data/devices/tz3000-hafsqare-ts0011.json rename to tests/data/devices/tz3000-hafsqare-ts0011-0x00000050.json diff --git a/tests/data/devices/tz3000-idhkkbqj-ts0012.json b/tests/data/devices/tz3000-idhkkbqj-ts0012-0x00000041.json similarity index 100% rename from tests/data/devices/tz3000-idhkkbqj-ts0012.json rename to tests/data/devices/tz3000-idhkkbqj-ts0012-0x00000041.json diff --git a/tests/data/devices/tz3000-isw9u95y-ts0201.json b/tests/data/devices/tz3000-isw9u95y-ts0201-0x00000040.json similarity index 100% rename from tests/data/devices/tz3000-isw9u95y-ts0201.json rename to tests/data/devices/tz3000-isw9u95y-ts0201-0x00000040.json diff --git a/tests/data/devices/tz3000-itnrsufe-ts0201.json b/tests/data/devices/tz3000-itnrsufe-ts0201-0x00000042.json similarity index 100% rename from tests/data/devices/tz3000-itnrsufe-ts0201.json rename to tests/data/devices/tz3000-itnrsufe-ts0201-0x00000042.json diff --git a/tests/data/devices/tz3000-j1xl73iw-ts130f.json b/tests/data/devices/tz3000-j1xl73iw-ts130f-0x00000046.json similarity index 100% rename from tests/data/devices/tz3000-j1xl73iw-ts130f.json rename to tests/data/devices/tz3000-j1xl73iw-ts130f-0x00000046.json diff --git a/tests/data/devices/tz3000-ja5osu5g-ts004f.json b/tests/data/devices/tz3000-ja5osu5g-ts004f-0x00000041.json similarity index 100% rename from tests/data/devices/tz3000-ja5osu5g-ts004f.json rename to tests/data/devices/tz3000-ja5osu5g-ts004f-0x00000041.json diff --git a/tests/data/devices/tz3000-kqvb5akv-ts0001.json b/tests/data/devices/tz3000-kqvb5akv-ts0001-0x0000004a.json similarity index 100% rename from tests/data/devices/tz3000-kqvb5akv-ts0001.json rename to tests/data/devices/tz3000-kqvb5akv-ts0001-0x0000004a.json diff --git a/tests/data/devices/tz3000-mgusv51k-ts0052.json b/tests/data/devices/tz3000-mgusv51k-ts0052-0x00000044.json similarity index 100% rename from tests/data/devices/tz3000-mgusv51k-ts0052.json rename to tests/data/devices/tz3000-mgusv51k-ts0052-0x00000044.json diff --git a/tests/data/devices/tz3000-mkhkxx1p-ts0001.json b/tests/data/devices/tz3000-mkhkxx1p-ts0001-0x00000048.json similarity index 100% rename from tests/data/devices/tz3000-mkhkxx1p-ts0001.json rename to tests/data/devices/tz3000-mkhkxx1p-ts0001-0x00000048.json diff --git a/tests/data/devices/tz3000-mugyhz0q-ts0207.json b/tests/data/devices/tz3000-mugyhz0q-ts0207-0x00000041.json similarity index 100% rename from tests/data/devices/tz3000-mugyhz0q-ts0207.json rename to tests/data/devices/tz3000-mugyhz0q-ts0207-0x00000041.json diff --git a/tests/data/devices/tz3000-mw1pqqqt-ts0003.json b/tests/data/devices/tz3000-mw1pqqqt-ts0003-0x0000004a.json similarity index 100% rename from tests/data/devices/tz3000-mw1pqqqt-ts0003.json rename to tests/data/devices/tz3000-mw1pqqqt-ts0003-0x0000004a.json diff --git a/tests/data/devices/tz3000-o1jzcxou-ts011f.json b/tests/data/devices/tz3000-o1jzcxou-ts011f-0x00000043.json similarity index 100% rename from tests/data/devices/tz3000-o1jzcxou-ts011f.json rename to tests/data/devices/tz3000-o1jzcxou-ts011f-0x00000043.json diff --git a/tests/data/devices/tz3000-o4mkahkc-ts0202.json b/tests/data/devices/tz3000-o4mkahkc-ts0202-0x00000046.json similarity index 100% rename from tests/data/devices/tz3000-o4mkahkc-ts0202.json rename to tests/data/devices/tz3000-o4mkahkc-ts0202-0x00000046.json diff --git a/tests/data/devices/tz3000-p26flek3-ts0001.json b/tests/data/devices/tz3000-p26flek3-ts0001-0x00000053.json similarity index 100% rename from tests/data/devices/tz3000-p26flek3-ts0001.json rename to tests/data/devices/tz3000-p26flek3-ts0001-0x00000053.json diff --git a/tests/data/devices/tz3000-pl5v1yyy-ts011f.json b/tests/data/devices/tz3000-pl5v1yyy-ts011f-0x00000050.json similarity index 100% rename from tests/data/devices/tz3000-pl5v1yyy-ts011f.json rename to tests/data/devices/tz3000-pl5v1yyy-ts011f-0x00000050.json diff --git a/tests/data/devices/tz3000-qdnrzbd3-ts0202.json b/tests/data/devices/tz3000-qdnrzbd3-ts0202-0x00000046.json similarity index 100% rename from tests/data/devices/tz3000-qdnrzbd3-ts0202.json rename to tests/data/devices/tz3000-qdnrzbd3-ts0202-0x00000046.json diff --git a/tests/data/devices/tz3000-sgb0xhwn-ts011f.json b/tests/data/devices/tz3000-sgb0xhwn-ts011f-0x00000050.json similarity index 100% rename from tests/data/devices/tz3000-sgb0xhwn-ts011f.json rename to tests/data/devices/tz3000-sgb0xhwn-ts011f-0x00000050.json diff --git a/tests/data/devices/tz3000-tqlv4ug4-ts0001.json b/tests/data/devices/tz3000-tqlv4ug4-ts0001-0x00000048.json similarity index 100% rename from tests/data/devices/tz3000-tqlv4ug4-ts0001.json rename to tests/data/devices/tz3000-tqlv4ug4-ts0001-0x00000048.json diff --git a/tests/data/devices/tz3000-typdpbpg-ts011f.json b/tests/data/devices/tz3000-typdpbpg-ts011f-0x10013607.json similarity index 100% rename from tests/data/devices/tz3000-typdpbpg-ts011f.json rename to tests/data/devices/tz3000-typdpbpg-ts011f-0x10013607.json diff --git a/tests/data/devices/tz3000-u3oupgdy-ts0004.json b/tests/data/devices/tz3000-u3oupgdy-ts0004-0x00000050.json similarity index 100% rename from tests/data/devices/tz3000-u3oupgdy-ts0004.json rename to tests/data/devices/tz3000-u3oupgdy-ts0004-0x00000050.json diff --git a/tests/data/devices/tz3000-u4kojtqz-ts0002.json b/tests/data/devices/tz3000-u4kojtqz-ts0002-0x10013607.json similarity index 100% rename from tests/data/devices/tz3000-u4kojtqz-ts0002.json rename to tests/data/devices/tz3000-u4kojtqz-ts0002-0x10013607.json diff --git a/tests/data/devices/tz3000-uwkja6z1-ts011f.json b/tests/data/devices/tz3000-uwkja6z1-ts011f-0x00000045.json similarity index 100% rename from tests/data/devices/tz3000-uwkja6z1-ts011f.json rename to tests/data/devices/tz3000-uwkja6z1-ts011f-0x00000045.json diff --git a/tests/data/devices/tz3000-vw8pawxa-ts130f.json b/tests/data/devices/tz3000-vw8pawxa-ts130f-0x00000048.json similarity index 100% rename from tests/data/devices/tz3000-vw8pawxa-ts130f.json rename to tests/data/devices/tz3000-vw8pawxa-ts130f-0x00000048.json diff --git a/tests/data/devices/tz3000-wcgyhnp3-ts0222.json b/tests/data/devices/tz3000-wcgyhnp3-ts0222-0x00000045.json similarity index 100% rename from tests/data/devices/tz3000-wcgyhnp3-ts0222.json rename to tests/data/devices/tz3000-wcgyhnp3-ts0222-0x00000045.json diff --git a/tests/data/devices/tz3000-wn65ixz9-ts0001.json b/tests/data/devices/tz3000-wn65ixz9-ts0001-0x00000051.json similarity index 100% rename from tests/data/devices/tz3000-wn65ixz9-ts0001.json rename to tests/data/devices/tz3000-wn65ixz9-ts0001-0x00000051.json diff --git a/tests/data/devices/tz3000-yj6k7vfo-ts0041.json b/tests/data/devices/tz3000-yj6k7vfo-ts0041-0x00000044.json similarity index 100% rename from tests/data/devices/tz3000-yj6k7vfo-ts0041.json rename to tests/data/devices/tz3000-yj6k7vfo-ts0041-0x00000044.json diff --git a/tests/data/devices/tz3000-zl1kmjqx.json b/tests/data/devices/tz3000-zl1kmjqx-0x10013001.json similarity index 100% rename from tests/data/devices/tz3000-zl1kmjqx.json rename to tests/data/devices/tz3000-zl1kmjqx-0x10013001.json diff --git a/tests/data/devices/tz3000-zw7yf6yk-ts0001.json b/tests/data/devices/tz3000-zw7yf6yk-ts0001-0x00000048.json similarity index 100% rename from tests/data/devices/tz3000-zw7yf6yk-ts0001.json rename to tests/data/devices/tz3000-zw7yf6yk-ts0001-0x00000048.json diff --git a/tests/data/devices/tz3002-vaq2bfcu-ts0726.json b/tests/data/devices/tz3002-vaq2bfcu-ts0726-0x00000051.json similarity index 100% rename from tests/data/devices/tz3002-vaq2bfcu-ts0726.json rename to tests/data/devices/tz3002-vaq2bfcu-ts0726-0x00000051.json diff --git a/tests/data/devices/tz3002-zjuvw9zf-ts0726.json b/tests/data/devices/tz3002-zjuvw9zf-ts0726-0x00000055.json similarity index 100% rename from tests/data/devices/tz3002-zjuvw9zf-ts0726.json rename to tests/data/devices/tz3002-zjuvw9zf-ts0726-0x00000055.json diff --git a/tests/data/devices/tz3040-bb6xaihh-ts0202.json b/tests/data/devices/tz3040-bb6xaihh-ts0202-0x00000048.json similarity index 100% rename from tests/data/devices/tz3040-bb6xaihh-ts0202.json rename to tests/data/devices/tz3040-bb6xaihh-ts0202-0x00000048.json diff --git a/tests/data/devices/tz3210-09hzmirw-ts0502b.json b/tests/data/devices/tz3210-09hzmirw-ts0502b-0x0000005b.json similarity index 100% rename from tests/data/devices/tz3210-09hzmirw-ts0502b.json rename to tests/data/devices/tz3210-09hzmirw-ts0502b-0x0000005b.json diff --git a/tests/data/devices/tz3210-3mpwqzuu-ts110e.json b/tests/data/devices/tz3210-3mpwqzuu-ts110e-0x00000040.json similarity index 100% rename from tests/data/devices/tz3210-3mpwqzuu-ts110e.json rename to tests/data/devices/tz3210-3mpwqzuu-ts110e-0x00000040.json diff --git a/tests/data/devices/tz3210-3ulg9kpo-ts0021-0x00000042.json b/tests/data/devices/tz3210-3ulg9kpo-ts0021-0x00000042.json new file mode 100644 index 000000000..8aaf4f31b --- /dev/null +++ b/tests/data/devices/tz3210-3ulg9kpo-ts0021-0x00000042.json @@ -0,0 +1,340 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:97:dd:c8:ba", + "nwk": "0x918A", + "manufacturer": "_TZ3210_3ulg9kpo", + "model": "TS0021", + "friendly_manufacturer": "_TZ3210_3ulg9kpo", + "friendly_model": "TS0021", + "name": "_TZ3210_3ulg9kpo TS0021", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts0021:TS0021", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": 116, + "rssi": -71, + "last_seen": "2026-02-14T14:54:11.527860+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "IAS_ZONE", + "id": 1026 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0500", + "endpoint_attribute": "ias_zone", + "attributes": [ + { + "id": "0x0010", + "name": "cie_addr", + "zcl_type": "EUI64", + "value": [ + 50, + 79, + 50, + 2, + 0, + 141, + 21, + 0 + ] + }, + { + "id": "0x0000", + "name": "zone_state", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x0002", + "name": "zone_status", + "zcl_type": "map16", + "value": 0 + }, + { + "id": "0x0001", + "name": "zone_type", + "zcl_type": "enum16", + "value": 40 + } + ] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": "tuya_manufacturer", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 66 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZ3210_3ulg9kpo", + "model": "TS0021", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0402", + "input_clusters": [ + "0x0001", + "0x0500", + "0xef00", + "0x0000" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:97:dd:c8:ba-1-1280", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "IASZone", + "translation_key": null, + "translation_placeholders": null, + "device_class": "smoke", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:97:dd:c8:ba", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "zone_status" + }, + "state": { + "class_name": "IASZone", + "available": true, + "state": false + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:97:dd:c8:ba-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:97:dd:c8:ba", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 116 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:97:dd:c8:ba-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:97:dd:c8:ba", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -71 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:97:dd:c8:ba-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:97:dd:c8:ba", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 0.0, + "battery_voltage": 0.0 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:97:dd:c8:ba-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:97:dd:c8:ba", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000042", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tz3210-7vgttna6-ts0001.json b/tests/data/devices/tz3210-7vgttna6-ts0001-0x00000073.json similarity index 100% rename from tests/data/devices/tz3210-7vgttna6-ts0001.json rename to tests/data/devices/tz3210-7vgttna6-ts0001-0x00000073.json diff --git a/tests/data/devices/tz3210-a04acm9s-ts0001.json b/tests/data/devices/tz3210-a04acm9s-ts0001-0x00000077.json similarity index 100% rename from tests/data/devices/tz3210-a04acm9s-ts0001.json rename to tests/data/devices/tz3210-a04acm9s-ts0001-0x00000077.json diff --git a/tests/data/devices/tz3210-comkuwws-ts0502b.json b/tests/data/devices/tz3210-comkuwws-ts0502b-0x00000065.json similarity index 100% rename from tests/data/devices/tz3210-comkuwws-ts0502b.json rename to tests/data/devices/tz3210-comkuwws-ts0502b-0x00000065.json diff --git a/tests/data/devices/tz3210-dwytrmda-ts130f.json b/tests/data/devices/tz3210-dwytrmda-ts130f-0x00000042.json similarity index 100% rename from tests/data/devices/tz3210-dwytrmda-ts130f.json rename to tests/data/devices/tz3210-dwytrmda-ts130f-0x00000042.json diff --git a/tests/data/devices/tz3210-ehcanwyc-ts0502b.json b/tests/data/devices/tz3210-ehcanwyc-ts0502b-0x00000065.json similarity index 100% rename from tests/data/devices/tz3210-ehcanwyc-ts0502b.json rename to tests/data/devices/tz3210-ehcanwyc-ts0502b-0x00000065.json diff --git a/tests/data/devices/tz3210-j4pdtz9v-ts0001.json b/tests/data/devices/tz3210-j4pdtz9v-ts0001-0x00000062.json similarity index 100% rename from tests/data/devices/tz3210-j4pdtz9v-ts0001.json rename to tests/data/devices/tz3210-j4pdtz9v-ts0001-0x00000062.json diff --git a/tests/data/devices/tz3210-jaap6jeb-ts0505b.json b/tests/data/devices/tz3210-jaap6jeb-ts0505b-0x00000065.json similarity index 100% rename from tests/data/devices/tz3210-jaap6jeb-ts0505b.json rename to tests/data/devices/tz3210-jaap6jeb-ts0505b-0x00000065.json diff --git a/tests/data/devices/tz3210-jtifm80b-ts0502b.json b/tests/data/devices/tz3210-jtifm80b-ts0502b-0x00000065.json similarity index 100% rename from tests/data/devices/tz3210-jtifm80b-ts0502b.json rename to tests/data/devices/tz3210-jtifm80b-ts0502b-0x00000065.json diff --git a/tests/data/devices/tz3210-k1msuvg6-ts110e.json b/tests/data/devices/tz3210-k1msuvg6-ts110e-0x00000040.json similarity index 100% rename from tests/data/devices/tz3210-k1msuvg6-ts110e.json rename to tests/data/devices/tz3210-k1msuvg6-ts110e-0x00000040.json diff --git a/tests/data/devices/tz3210-kjafhwd2-ts0210.json b/tests/data/devices/tz3210-kjafhwd2-ts0210-0x00000044.json similarity index 100% rename from tests/data/devices/tz3210-kjafhwd2-ts0210.json rename to tests/data/devices/tz3210-kjafhwd2-ts0210-0x00000044.json diff --git a/tests/data/devices/tz3210-klv2wul0-ts0505b.json b/tests/data/devices/tz3210-klv2wul0-ts0505b-0x00000065.json similarity index 100% rename from tests/data/devices/tz3210-klv2wul0-ts0505b.json rename to tests/data/devices/tz3210-klv2wul0-ts0505b-0x00000065.json diff --git a/tests/data/devices/tz3210-ncw88jfq-ts0201.json b/tests/data/devices/tz3210-ncw88jfq-ts0201-0x00000083.json similarity index 100% rename from tests/data/devices/tz3210-ncw88jfq-ts0201.json rename to tests/data/devices/tz3210-ncw88jfq-ts0201-0x00000083.json diff --git a/tests/data/devices/tz3210-qkj7rujp-ts0201.json b/tests/data/devices/tz3210-qkj7rujp-ts0201-0x00000043.json similarity index 100% rename from tests/data/devices/tz3210-qkj7rujp-ts0201.json rename to tests/data/devices/tz3210-qkj7rujp-ts0201-0x00000043.json diff --git a/tests/data/devices/tz3210-r5afgmkl-ts0505b.json b/tests/data/devices/tz3210-r5afgmkl-ts0505b-0x10013607.json similarity index 100% rename from tests/data/devices/tz3210-r5afgmkl-ts0505b.json rename to tests/data/devices/tz3210-r5afgmkl-ts0505b-0x10013607.json diff --git a/tests/data/devices/tz3210-ru41azca-ts0049.json b/tests/data/devices/tz3210-ru41azca-ts0049-0x00000040.json similarity index 100% rename from tests/data/devices/tz3210-ru41azca-ts0049.json rename to tests/data/devices/tz3210-ru41azca-ts0049-0x00000040.json diff --git a/tests/data/devices/tz3210-sb8x2xci-ts0001.json b/tests/data/devices/tz3210-sb8x2xci-ts0001-0x00000047.json similarity index 100% rename from tests/data/devices/tz3210-sb8x2xci-ts0001.json rename to tests/data/devices/tz3210-sb8x2xci-ts0001-0x00000047.json diff --git a/tests/data/devices/tz3210-tgvtvdoc-ts0207.json b/tests/data/devices/tz3210-tgvtvdoc-ts0207-0x00000043.json similarity index 100% rename from tests/data/devices/tz3210-tgvtvdoc-ts0207.json rename to tests/data/devices/tz3210-tgvtvdoc-ts0207-0x00000043.json diff --git a/tests/data/devices/tz3210-u1dreag7-ts0502b.json b/tests/data/devices/tz3210-u1dreag7-ts0502b-0x00000065.json similarity index 100% rename from tests/data/devices/tz3210-u1dreag7-ts0502b.json rename to tests/data/devices/tz3210-u1dreag7-ts0502b-0x00000065.json diff --git a/tests/data/devices/tz3210-ue9kyjnj-ts0502b.json b/tests/data/devices/tz3210-ue9kyjnj-ts0502b-0x00000059.json similarity index 100% rename from tests/data/devices/tz3210-ue9kyjnj-ts0502b.json rename to tests/data/devices/tz3210-ue9kyjnj-ts0502b-0x00000059.json diff --git a/tests/data/devices/tz3210-wuhzzfqg-ts0202.json b/tests/data/devices/tz3210-wuhzzfqg-ts0202-0x000000a1.json similarity index 100% rename from tests/data/devices/tz3210-wuhzzfqg-ts0202.json rename to tests/data/devices/tz3210-wuhzzfqg-ts0202-0x000000a1.json diff --git a/tests/data/devices/tz3210-zdrhqmo0-ts0502b.json b/tests/data/devices/tz3210-zdrhqmo0-ts0502b-0x00000064.json similarity index 100% rename from tests/data/devices/tz3210-zdrhqmo0-ts0502b.json rename to tests/data/devices/tz3210-zdrhqmo0-ts0502b-0x00000064.json diff --git a/tests/data/devices/tz3218-7fiyo3kv-ts000f.json b/tests/data/devices/tz3218-7fiyo3kv-ts000f-0x00000051.json similarity index 100% rename from tests/data/devices/tz3218-7fiyo3kv-ts000f.json rename to tests/data/devices/tz3218-7fiyo3kv-ts000f-0x00000051.json diff --git a/tests/data/devices/tz3218-t9ynfz4x-ts0225.json b/tests/data/devices/tz3218-t9ynfz4x-ts0225-0x00000045.json similarity index 100% rename from tests/data/devices/tz3218-t9ynfz4x-ts0225.json rename to tests/data/devices/tz3218-t9ynfz4x-ts0225-0x00000045.json diff --git a/tests/data/devices/tz3218-ya5d6wth-ts000f.json b/tests/data/devices/tz3218-ya5d6wth-ts000f-0x00000064.json similarity index 100% rename from tests/data/devices/tz3218-ya5d6wth-ts000f.json rename to tests/data/devices/tz3218-ya5d6wth-ts000f-0x00000064.json diff --git a/tests/data/devices/tz3290-7v1k4vufotpowp9z-ts1201-0x00000043.json b/tests/data/devices/tz3290-7v1k4vufotpowp9z-ts1201-0x00000043.json new file mode 100644 index 000000000..2b9c868b9 --- /dev/null +++ b/tests/data/devices/tz3290-7v1k4vufotpowp9z-ts1201-0x00000043.json @@ -0,0 +1,345 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:3e:18:f5:53", + "nwk": "0x7420", + "manufacturer": "_TZ3290_7v1k4vufotpowp9z", + "model": "TS1201", + "friendly_manufacturer": "_TZ3290_7v1k4vufotpowp9z", + "friendly_model": "TS1201", + "name": "_TZ3290_7v1k4vufotpowp9z TS1201", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts1201:ZosungIRBlaster_ZS06", + "exposes_features": [], + "manufacturer_code": 4098, + "power_source": "Mains", + "lqi": 232, + "rssi": -42, + "last_seen": "2025-10-05T15:34:41.193436+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "undefined_0xf000", + "id": 61440 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZ3290_7v1k4vufotpowp9z" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS1201" + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 1 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xe004", + "endpoint_attribute": "zosung_ircontrol", + "attributes": [] + }, + { + "cluster_id": "0xed00", + "endpoint_attribute": "zosung_irtransmit", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 67 + } + ] + } + ] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "PROXY_BASIC", + "id": 97 + }, + "in_clusters": [], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZ3290_7v1k4vufotpowp9z", + "model": "TS1201", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0xf000", + "input_clusters": [ + "0x0000", + "0xed00", + "0xe004", + "0x0004", + "0x0003", + "0x0006", + "0x0005" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0061", + "input_clusters": [], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3e:18:f5:53-1-3", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "IdentifyButton", + "translation_key": null, + "translation_placeholders": null, + "device_class": "identify", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3e:18:f5:53", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3e:18:f5:53-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3e:18:f5:53", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 232 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3e:18:f5:53-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3e:18:f5:53", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -42 + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3e:18:f5:53-1-6", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "Switch", + "translation_key": "switch", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:3e:18:f5:53", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 1, + "available": true + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3e:18:f5:53-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3e:18:f5:53", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000043", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tz3290-ot6ewjvmejq5ekhl-ts1201.json b/tests/data/devices/tz3290-ot6ewjvmejq5ekhl-ts1201-0x00000043.json similarity index 100% rename from tests/data/devices/tz3290-ot6ewjvmejq5ekhl-ts1201.json rename to tests/data/devices/tz3290-ot6ewjvmejq5ekhl-ts1201-0x00000043.json diff --git a/tests/data/devices/tz6210-duv6fhwt-ts0601.json b/tests/data/devices/tz6210-duv6fhwt-ts0601-0x00000042.json similarity index 100% rename from tests/data/devices/tz6210-duv6fhwt-ts0601.json rename to tests/data/devices/tz6210-duv6fhwt-ts0601-0x00000042.json diff --git a/tests/data/devices/tzb210-417ikxay-ts0505b.json b/tests/data/devices/tzb210-417ikxay-ts0505b-0x00000040.json similarity index 100% rename from tests/data/devices/tzb210-417ikxay-ts0505b.json rename to tests/data/devices/tzb210-417ikxay-ts0505b-0x00000040.json diff --git a/tests/data/devices/tzb210-lmqquxus-ts0502b.json b/tests/data/devices/tzb210-lmqquxus-ts0502b-0x00000040.json similarity index 100% rename from tests/data/devices/tzb210-lmqquxus-ts0502b.json rename to tests/data/devices/tzb210-lmqquxus-ts0502b-0x00000040.json diff --git a/tests/data/devices/tzb210-rawkvnnm-ts0502b.json b/tests/data/devices/tzb210-rawkvnnm-ts0502b-0x00000040.json similarity index 100% rename from tests/data/devices/tzb210-rawkvnnm-ts0502b.json rename to tests/data/devices/tzb210-rawkvnnm-ts0502b-0x00000040.json diff --git a/tests/data/devices/tze200-2se8efxh-ts0601.json b/tests/data/devices/tze200-2se8efxh-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-2se8efxh-ts0601.json rename to tests/data/devices/tze200-2se8efxh-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-3t91nb6k-ts0601.json b/tests/data/devices/tze200-3t91nb6k-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-3t91nb6k-ts0601.json rename to tests/data/devices/tze200-3t91nb6k-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-3towulqd-ts0601.json b/tests/data/devices/tze200-3towulqd-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-3towulqd-ts0601.json rename to tests/data/devices/tze200-3towulqd-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-4utwozi2-ts0601.json b/tests/data/devices/tze200-4utwozi2-ts0601-0x00000043.json similarity index 100% rename from tests/data/devices/tze200-4utwozi2-ts0601.json rename to tests/data/devices/tze200-4utwozi2-ts0601-0x00000043.json diff --git a/tests/data/devices/tze200-4vobcgd3-ts0601-0x00000053.json b/tests/data/devices/tze200-4vobcgd3-ts0601-0x00000053.json new file mode 100644 index 000000000..253c5d46c --- /dev/null +++ b/tests/data/devices/tze200-4vobcgd3-ts0601-0x00000053.json @@ -0,0 +1,231 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:ae:51:f6:e4", + "nwk": "0xDAD2", + "manufacturer": "_TZE200_4vobcgd3", + "model": "TS0601", + "friendly_manufacturer": "_TZE200_4vobcgd3", + "friendly_model": "TS0601", + "name": "_TZE200_4vobcgd3 TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4098, + "power_source": "Mains", + "lqi": 132, + "rssi": -67, + "last_seen": "2026-06-03T16:10:58.710439+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE200_4vobcgd3" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": null, + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 83 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE200_4vobcgd3", + "model": "TS0601", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0000", + "0x0004", + "0x0005", + "0xef00" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:51:f6:e4-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:51:f6:e4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 132 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:51:f6:e4-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:51:f6:e4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -67 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:ae:51:f6:e4-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:ae:51:f6:e4", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000053", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze200-579lguh2-ts0601.json b/tests/data/devices/tze200-579lguh2-ts0601-0x00000044.json similarity index 100% rename from tests/data/devices/tze200-579lguh2-ts0601.json rename to tests/data/devices/tze200-579lguh2-ts0601-0x00000044.json diff --git a/tests/data/devices/tze200-7bztmfm1-ts0601.json b/tests/data/devices/tze200-7bztmfm1-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-7bztmfm1-ts0601.json rename to tests/data/devices/tze200-7bztmfm1-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-7iqgciln-ts0601.json b/tests/data/devices/tze200-7iqgciln-ts0601-0x00000041.json similarity index 100% rename from tests/data/devices/tze200-7iqgciln-ts0601.json rename to tests/data/devices/tze200-7iqgciln-ts0601-0x00000041.json diff --git a/tests/data/devices/tze200-7ytb3h8u-ts0601.json b/tests/data/devices/tze200-7ytb3h8u-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-7ytb3h8u-ts0601.json rename to tests/data/devices/tze200-7ytb3h8u-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-81isopgh-ts0601.json b/tests/data/devices/tze200-81isopgh-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-81isopgh-ts0601.json rename to tests/data/devices/tze200-81isopgh-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-8whfphjv-ts0601.json b/tests/data/devices/tze200-8whfphjv-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-8whfphjv-ts0601.json rename to tests/data/devices/tze200-8whfphjv-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-9caxna4s-ts0301.json b/tests/data/devices/tze200-9caxna4s-ts0301-0x00000049.json similarity index 100% rename from tests/data/devices/tze200-9caxna4s-ts0301.json rename to tests/data/devices/tze200-9caxna4s-ts0301-0x00000049.json diff --git a/tests/data/devices/tze200-9xfjixap-ts0601.json b/tests/data/devices/tze200-9xfjixap-ts0601-0x00000043.json similarity index 100% rename from tests/data/devices/tze200-9xfjixap-ts0601.json rename to tests/data/devices/tze200-9xfjixap-ts0601-0x00000043.json diff --git a/tests/data/devices/tze200-a7sghmms-ts0601-0x00000048.json b/tests/data/devices/tze200-a7sghmms-ts0601-0x00000048.json new file mode 100644 index 000000000..9333d4def --- /dev/null +++ b/tests/data/devices/tze200-a7sghmms-ts0601-0x00000048.json @@ -0,0 +1,710 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "nwk": "0x5C8B", + "manufacturer": "_TZE200_a7sghmms", + "model": "TS0601", + "friendly_manufacturer": "_TZE200_a7sghmms", + "friendly_model": "TS0601", + "name": "_TZE200_a7sghmms TS0601", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.builder:(_TZE200_a7sghmms / TS0601)", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": null, + "rssi": null, + "last_seen": "2025-07-05T08:46:21.109364+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 72 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE200_a7sghmms" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 180 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 4 + }, + { + "id": "0x0034", + "name": "battery_rated_voltage", + "zcl_type": "uint8", + "value": 15 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 3 + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0702", + "endpoint_attribute": "smartenergy_metering", + "attributes": [ + { + "id": "0x0000", + "name": "current_summ_delivered", + "zcl_type": "uint48", + "value": 0 + }, + { + "id": "0x0400", + "name": "instantaneous_demand", + "zcl_type": "int24", + "unsupported": true + }, + { + "id": "0x0306", + "name": "metering_device_type", + "zcl_type": "map8", + "value": 2 + }, + { + "id": "0x0300", + "name": "unit_of_measure", + "zcl_type": "enum8", + "value": 7 + } + ] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": "tuya_manufacturer", + "attributes": [ + { + "id": "0xef67", + "name": "irrigation_cycles", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0xef72", + "name": "irrigation_duration", + "zcl_type": "uint32", + "value": 6 + }, + { + "id": "0xef66", + "name": "irrigation_end_time", + "zcl_type": "string", + "value": "2025-07-05 09:33:23.709383+04:00" + }, + { + "id": "0xef69", + "name": "irrigation_interval", + "zcl_type": "uint32", + "value": 0 + }, + { + "id": "0xef01", + "name": "irrigation_mode", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0xef65", + "name": "irrigation_start_time", + "zcl_type": "string", + "value": "2025-07-05 09:33:17.905219+04:00" + }, + { + "id": "0xef68", + "name": "irrigation_target", + "zcl_type": "uint32", + "value": 0 + }, + { + "id": "0xef00", + "name": "mcu_version", + "zcl_type": "uint48", + "value": "1.0.15" + }, + { + "id": "0xef6b", + "name": "weather_delay", + "zcl_type": "enum8", + "value": 0 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 72 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE200_a7sghmms", + "model": "TS0601", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0004", + "0x0005", + "0x0006", + "0x0702", + "0xef00" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "number": [ + { + "info_object": { + "fallback_name": "Irrigation cycles", + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-irrigation_cycles", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "irrigation_cycles", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 100, + "native_min_value": 0, + "native_step": 1, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": "Irrigation interval", + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-irrigation_interval", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "irrigation_interval", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 43200, + "native_min_value": 0, + "native_step": 1, + "native_unit_of_measurement": "s" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": "Irrigation target", + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-irrigation_target", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "irrigation_target", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 43200, + "native_min_value": 0, + "native_step": 1, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 0 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": "Irrigation mode", + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-irrigation_mode", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "irrigation_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "GiexIrrigationMode", + "options": [ + "Duration", + "Capacity" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "Duration" + } + }, + { + "info_object": { + "fallback_name": "Weather delay", + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-weather_delay", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "weather_delay", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "GiexIrrigationWeatherDelay", + "options": [ + "NoDelay", + "TwentyFourHourDelay", + "FortyEightHourDelay", + "SeventyTwoHourDelay" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "NoDelay" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 90.0, + "battery_size": "AA", + "battery_quantity": 4 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-1794-summation_delivered", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SmartEnergySummation", + "translation_key": "summation_delivered", + "translation_placeholders": null, + "device_class": "volume", + "state_class": "total_increasing", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 3, + "unit": "L" + }, + "state": { + "class_name": "SmartEnergySummation", + "available": true, + "state": 0.0, + "device_type": "Water Metering", + "zcl_unit_of_measurement": 7 + }, + "extra_state_attributes": [ + "device_type", + "status", + "zcl_unit_of_measurement" + ] + }, + { + "info_object": { + "fallback_name": "Irrigation duration", + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-irrigation_duration", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Sensor", + "translation_key": "irrigation_duration", + "translation_placeholders": null, + "device_class": "duration", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "s" + }, + "state": { + "class_name": "Sensor", + "available": true, + "state": 6 + } + }, + { + "info_object": { + "fallback_name": "Irrigation end time", + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-irrigation_end_time", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Sensor", + "translation_key": "irrigation_end_time", + "translation_placeholders": null, + "device_class": "timestamp", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "Sensor", + "available": true, + "state": "2025-07-05 09:33:23.709383+04:00" + } + }, + { + "info_object": { + "fallback_name": "Irrigation start time", + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-irrigation_start_time", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Sensor", + "translation_key": "irrigation_start_time", + "translation_placeholders": null, + "device_class": "timestamp", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "Sensor", + "available": true, + "state": "2025-07-05 09:33:17.905219+04:00" + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "Switch", + "translation_key": "switch", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 0, + "available": true + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:b5:0f:0b:2f-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b5:0f:0b:2f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000048", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze200-a7sghmms-ts0601.json b/tests/data/devices/tze200-a7sghmms-ts0601.json index 9333d4def..b500b5e6e 100644 --- a/tests/data/devices/tze200-a7sghmms-ts0601.json +++ b/tests/data/devices/tze200-a7sghmms-ts0601.json @@ -1,7 +1,7 @@ { "version": 2, "ieee": "ab:cd:ef:12:b5:0f:0b:2f", - "nwk": "0x5C8B", + "nwk": "0xABD5", "manufacturer": "_TZE200_a7sghmms", "model": "TS0601", "friendly_manufacturer": "_TZE200_a7sghmms", @@ -12,9 +12,9 @@ "exposes_features": [], "manufacturer_code": 4417, "power_source": "Battery or Unknown", - "lqi": null, + "lqi": 183, "rssi": null, - "last_seen": "2025-07-05T08:46:21.109364+00:00", + "last_seen": "2025-08-13T14:43:05.969342+00:00", "available": true, "device_type": "EndDevice", "active_coordinator": false, @@ -45,12 +45,6 @@ "cluster_id": "0x0000", "endpoint_attribute": "basic", "attributes": [ - { - "id": "0x0001", - "name": "app_version", - "zcl_type": "uint8", - "value": 72 - }, { "id": "0x0004", "name": "manufacturer", @@ -69,12 +63,6 @@ "cluster_id": "0x0001", "endpoint_attribute": "power", "attributes": [ - { - "id": "0x0021", - "name": "battery_percentage_remaining", - "zcl_type": "uint8", - "value": 180 - }, { "id": "0x0033", "name": "battery_quantity", @@ -113,7 +101,7 @@ "id": "0x0000", "name": "on_off", "zcl_type": "bool", - "value": 0 + "value": false } ] }, @@ -121,12 +109,6 @@ "cluster_id": "0x0702", "endpoint_attribute": "smartenergy_metering", "attributes": [ - { - "id": "0x0000", - "name": "current_summ_delivered", - "zcl_type": "uint48", - "value": 0 - }, { "id": "0x0400", "name": "instantaneous_demand", @@ -150,62 +132,7 @@ { "cluster_id": "0xef00", "endpoint_attribute": "tuya_manufacturer", - "attributes": [ - { - "id": "0xef67", - "name": "irrigation_cycles", - "zcl_type": "uint8", - "value": 0 - }, - { - "id": "0xef72", - "name": "irrigation_duration", - "zcl_type": "uint32", - "value": 6 - }, - { - "id": "0xef66", - "name": "irrigation_end_time", - "zcl_type": "string", - "value": "2025-07-05 09:33:23.709383+04:00" - }, - { - "id": "0xef69", - "name": "irrigation_interval", - "zcl_type": "uint32", - "value": 0 - }, - { - "id": "0xef01", - "name": "irrigation_mode", - "zcl_type": "bool", - "value": 0 - }, - { - "id": "0xef65", - "name": "irrigation_start_time", - "zcl_type": "string", - "value": "2025-07-05 09:33:17.905219+04:00" - }, - { - "id": "0xef68", - "name": "irrigation_target", - "zcl_type": "uint32", - "value": 0 - }, - { - "id": "0xef00", - "name": "mcu_version", - "zcl_type": "uint48", - "value": "1.0.15" - }, - { - "id": "0xef6b", - "name": "weather_delay", - "zcl_type": "enum8", - "value": 0 - } - ] + "attributes": [] } ], "out_clusters": [ @@ -217,14 +144,7 @@ { "cluster_id": "0x0019", "endpoint_attribute": "ota", - "attributes": [ - { - "id": "0x0002", - "name": "current_file_version", - "zcl_type": "uint32", - "value": 72 - } - ] + "attributes": [] } ] } @@ -297,7 +217,7 @@ "state": { "class_name": "NumberConfigurationEntity", "available": true, - "state": 0 + "state": null } }, { @@ -328,7 +248,7 @@ "state": { "class_name": "NumberConfigurationEntity", "available": true, - "state": 0 + "state": null } }, { @@ -359,7 +279,7 @@ "state": { "class_name": "NumberConfigurationEntity", "available": true, - "state": 0 + "state": null } } ], @@ -392,7 +312,7 @@ "state": { "class_name": "ZCLEnumSelectEntity", "available": true, - "state": "Duration" + "state": null } }, { @@ -425,7 +345,7 @@ "state": { "class_name": "ZCLEnumSelectEntity", "available": true, - "state": "NoDelay" + "state": null } } ], @@ -455,7 +375,7 @@ "state": { "class_name": "LQISensor", "available": true, - "state": null + "state": 183 } }, { @@ -511,7 +431,7 @@ "state": { "class_name": "Battery", "available": true, - "state": 90.0, + "state": null, "battery_size": "AA", "battery_quantity": 4 }, @@ -546,7 +466,7 @@ "state": { "class_name": "SmartEnergySummation", "available": true, - "state": 0.0, + "state": null, "device_type": "Water Metering", "zcl_unit_of_measurement": 7 }, @@ -581,7 +501,7 @@ "state": { "class_name": "Sensor", "available": true, - "state": 6 + "state": null } }, { @@ -609,7 +529,7 @@ "state": { "class_name": "Sensor", "available": true, - "state": "2025-07-05 09:33:23.709383+04:00" + "state": null } }, { @@ -637,7 +557,7 @@ "state": { "class_name": "Sensor", "available": true, - "state": "2025-07-05 09:33:17.905219+04:00" + "state": null } } ], @@ -664,7 +584,7 @@ }, "state": { "class_name": "Switch", - "state": 0, + "state": false, "available": true } } @@ -694,7 +614,7 @@ "state": { "class_name": "FirmwareUpdateEntity", "available": true, - "installed_version": "0x00000048", + "installed_version": null, "in_progress": false, "update_percentage": null, "latest_version": null, diff --git a/tests/data/devices/tze200-abatw3kj-ts0601.json b/tests/data/devices/tze200-abatw3kj-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-abatw3kj-ts0601.json rename to tests/data/devices/tze200-abatw3kj-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-b6wax7g0-ts0601.json b/tests/data/devices/tze200-b6wax7g0-ts0601-0x00000043.json similarity index 100% rename from tests/data/devices/tze200-b6wax7g0-ts0601.json rename to tests/data/devices/tze200-b6wax7g0-ts0601-0x00000043.json diff --git a/tests/data/devices/tze200-bkkmqmyo-ts0601.json b/tests/data/devices/tze200-bkkmqmyo-ts0601-0x00000041.json similarity index 100% rename from tests/data/devices/tze200-bkkmqmyo-ts0601.json rename to tests/data/devices/tze200-bkkmqmyo-ts0601-0x00000041.json diff --git a/tests/data/devices/tze200-c88teujp-ts0601.json b/tests/data/devices/tze200-c88teujp-ts0601-0x00000055.json similarity index 100% rename from tests/data/devices/tze200-c88teujp-ts0601.json rename to tests/data/devices/tze200-c88teujp-ts0601-0x00000055.json diff --git a/tests/data/devices/tze200-cirvgep4-ts0601.json b/tests/data/devices/tze200-cirvgep4-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-cirvgep4-ts0601.json rename to tests/data/devices/tze200-cirvgep4-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-g9a3awaj-ts0601.json b/tests/data/devices/tze200-g9a3awaj-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-g9a3awaj-ts0601.json rename to tests/data/devices/tze200-g9a3awaj-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-gjldowol-ts0601.json b/tests/data/devices/tze200-gjldowol-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze200-gjldowol-ts0601.json rename to tests/data/devices/tze200-gjldowol-ts0601-0x00000050.json diff --git a/tests/data/devices/tze200-guvc7pdy-ts0601.json b/tests/data/devices/tze200-guvc7pdy-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-guvc7pdy-ts0601.json rename to tests/data/devices/tze200-guvc7pdy-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-hhrtiq0x-ts0601.json b/tests/data/devices/tze200-hhrtiq0x-ts0601-0x00000055.json similarity index 100% rename from tests/data/devices/tze200-hhrtiq0x-ts0601.json rename to tests/data/devices/tze200-hhrtiq0x-ts0601-0x00000055.json diff --git a/tests/data/devices/tze200-hr0tdd47-ts0601.json b/tests/data/devices/tze200-hr0tdd47-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-hr0tdd47-ts0601.json rename to tests/data/devices/tze200-hr0tdd47-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-js3mgbjb-ts0601.json b/tests/data/devices/tze200-js3mgbjb-ts0601-0x00000044.json similarity index 100% rename from tests/data/devices/tze200-js3mgbjb-ts0601.json rename to tests/data/devices/tze200-js3mgbjb-ts0601-0x00000044.json diff --git a/tests/data/devices/tze200-jwsjbxjs-ts0601.json b/tests/data/devices/tze200-jwsjbxjs-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-jwsjbxjs-ts0601.json rename to tests/data/devices/tze200-jwsjbxjs-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-locansqn-ts0601.json b/tests/data/devices/tze200-locansqn-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-locansqn-ts0601.json rename to tests/data/devices/tze200-locansqn-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-mgxy2d9f-ts0601.json b/tests/data/devices/tze200-mgxy2d9f-ts0601-0x00000043.json similarity index 100% rename from tests/data/devices/tze200-mgxy2d9f-ts0601.json rename to tests/data/devices/tze200-mgxy2d9f-ts0601-0x00000043.json diff --git a/tests/data/devices/tze200-moycceze-ts0601.json b/tests/data/devices/tze200-moycceze-ts0601-0x00000043.json similarity index 100% rename from tests/data/devices/tze200-moycceze-ts0601.json rename to tests/data/devices/tze200-moycceze-ts0601-0x00000043.json diff --git a/tests/data/devices/tze200-mudxchsu-ts0601.json b/tests/data/devices/tze200-mudxchsu-ts0601-0x00000045.json similarity index 100% rename from tests/data/devices/tze200-mudxchsu-ts0601.json rename to tests/data/devices/tze200-mudxchsu-ts0601-0x00000045.json diff --git a/tests/data/devices/tze200-myd45weu-ts0601.json b/tests/data/devices/tze200-myd45weu-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-myd45weu-ts0601.json rename to tests/data/devices/tze200-myd45weu-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-nklqjk62-ts0601-0x00000046.json b/tests/data/devices/tze200-nklqjk62-ts0601-0x00000046.json new file mode 100644 index 000000000..86b3fdfd4 --- /dev/null +++ b/tests/data/devices/tze200-nklqjk62-ts0601-0x00000046.json @@ -0,0 +1,297 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:34:58:0b:f7", + "nwk": "0x8022", + "manufacturer": "_TZE200_nklqjk62", + "model": "TS0601", + "friendly_manufacturer": "_TZE200_nklqjk62", + "friendly_model": "TS0601", + "name": "_TZE200_nklqjk62 TS0601", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts0601_garage:TuyaGarageSwitchTO", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Mains", + "lqi": 116, + "rssi": -82, + "last_seen": "2026-06-11T10:21:25.755876+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "ON_OFF_LIGHT", + "id": 256 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 70 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE200_nklqjk62" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": "tuya_manufacturer_garage", + "attributes": [ + { + "id": "0xef0b", + "name": "dp_11", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0xef0c", + "name": "dp_12", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0xef02", + "name": "dp_2", + "zcl_type": "uint32", + "value": 0 + }, + { + "id": "0xef04", + "name": "dp_4", + "zcl_type": "uint32", + "value": 10 + }, + { + "id": "0xef05", + "name": "dp_5", + "zcl_type": "uint32", + "value": 3600 + }, + { + "id": "0xef00", + "name": "mcu_version", + "zcl_type": "uint48", + "value": "1.0.0" + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 70 + } + ] + } + ] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "PROXY_BASIC", + "id": 97 + }, + "in_clusters": [], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE200_nklqjk62", + "model": "TS0601", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0004", + "0x0005", + "0xef00", + "0x0000" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0061", + "input_clusters": [], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:58:0b:f7-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:58:0b:f7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 116 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:58:0b:f7-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:58:0b:f7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -82 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:34:58:0b:f7-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:34:58:0b:f7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000046", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze200-nqaqq4cf-ts0601.json b/tests/data/devices/tze200-nqaqq4cf-ts0601-0x00000044.json similarity index 100% rename from tests/data/devices/tze200-nqaqq4cf-ts0601.json rename to tests/data/devices/tze200-nqaqq4cf-ts0601-0x00000044.json diff --git a/tests/data/devices/tze200-pl31aqf5-ts0601.json b/tests/data/devices/tze200-pl31aqf5-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-pl31aqf5-ts0601.json rename to tests/data/devices/tze200-pl31aqf5-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-qyflbnbj-ts0601.json b/tests/data/devices/tze200-qyflbnbj-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-qyflbnbj-ts0601.json rename to tests/data/devices/tze200-qyflbnbj-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-r32ctezx-ts0601.json b/tests/data/devices/tze200-r32ctezx-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-r32ctezx-ts0601.json rename to tests/data/devices/tze200-r32ctezx-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-r5ksy7qo-ts0601.json b/tests/data/devices/tze200-r5ksy7qo-ts0601-0x00000043.json similarity index 100% rename from tests/data/devices/tze200-r5ksy7qo-ts0601.json rename to tests/data/devices/tze200-r5ksy7qo-ts0601-0x00000043.json diff --git a/tests/data/devices/tze200-rmymn92d-ts0601.json b/tests/data/devices/tze200-rmymn92d-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-rmymn92d-ts0601.json rename to tests/data/devices/tze200-rmymn92d-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-sur6q7ko-ts0601.json b/tests/data/devices/tze200-sur6q7ko-ts0601-0x00000045.json similarity index 100% rename from tests/data/devices/tze200-sur6q7ko-ts0601.json rename to tests/data/devices/tze200-sur6q7ko-ts0601-0x00000045.json diff --git a/tests/data/devices/tze200-uf1qujxj-ts0601.json b/tests/data/devices/tze200-uf1qujxj-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-uf1qujxj-ts0601.json rename to tests/data/devices/tze200-uf1qujxj-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-vvmbj46n-ts0601.json b/tests/data/devices/tze200-vvmbj46n-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze200-vvmbj46n-ts0601.json rename to tests/data/devices/tze200-vvmbj46n-ts0601-0x00000048.json diff --git a/tests/data/devices/tze200-wdfurkoa-ts0601.json b/tests/data/devices/tze200-wdfurkoa-ts0601-0x00000041.json similarity index 100% rename from tests/data/devices/tze200-wdfurkoa-ts0601.json rename to tests/data/devices/tze200-wdfurkoa-ts0601-0x00000041.json diff --git a/tests/data/devices/tze200-wfxuhoea-ts0601.json b/tests/data/devices/tze200-wfxuhoea-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-wfxuhoea-ts0601.json rename to tests/data/devices/tze200-wfxuhoea-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-yia0p3tr-ts0601.json b/tests/data/devices/tze200-yia0p3tr-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze200-yia0p3tr-ts0601.json rename to tests/data/devices/tze200-yia0p3tr-ts0601-0x00000046.json diff --git a/tests/data/devices/tze200-yw7cahqs-ts0601.json b/tests/data/devices/tze200-yw7cahqs-ts0601-0x00000055.json similarity index 100% rename from tests/data/devices/tze200-yw7cahqs-ts0601.json rename to tests/data/devices/tze200-yw7cahqs-ts0601-0x00000055.json diff --git a/tests/data/devices/tze204-1v1dxkck-ts0601.json b/tests/data/devices/tze204-1v1dxkck-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-1v1dxkck-ts0601.json rename to tests/data/devices/tze204-1v1dxkck-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-1youk3hj-ts0601.json b/tests/data/devices/tze204-1youk3hj-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-1youk3hj-ts0601.json rename to tests/data/devices/tze204-1youk3hj-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-4fblxpma-ts0601.json b/tests/data/devices/tze204-4fblxpma-ts0601-0x00000049.json similarity index 100% rename from tests/data/devices/tze204-4fblxpma-ts0601.json rename to tests/data/devices/tze204-4fblxpma-ts0601-0x00000049.json diff --git a/tests/data/devices/tze204-58of2pfn-ts0601.json b/tests/data/devices/tze204-58of2pfn-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-58of2pfn-ts0601.json rename to tests/data/devices/tze204-58of2pfn-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-5slehgeo-ts0601.json b/tests/data/devices/tze204-5slehgeo-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-5slehgeo-ts0601.json rename to tests/data/devices/tze204-5slehgeo-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-81yrt3lo-ts0601.json b/tests/data/devices/tze204-81yrt3lo-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-81yrt3lo-ts0601.json rename to tests/data/devices/tze204-81yrt3lo-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-a2jcoyuk-ts0601.json b/tests/data/devices/tze204-a2jcoyuk-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-a2jcoyuk-ts0601.json rename to tests/data/devices/tze204-a2jcoyuk-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-ai4rqhky-ts0601.json b/tests/data/devices/tze204-ai4rqhky-ts0601-0x00000049.json similarity index 100% rename from tests/data/devices/tze204-ai4rqhky-ts0601.json rename to tests/data/devices/tze204-ai4rqhky-ts0601-0x00000049.json diff --git a/tests/data/devices/tze204-aoclfnxz-ts0601.json b/tests/data/devices/tze204-aoclfnxz-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-aoclfnxz-ts0601.json rename to tests/data/devices/tze204-aoclfnxz-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-b8vxct9l-ts0601-0x0000004a.json b/tests/data/devices/tze204-b8vxct9l-ts0601-0x0000004a.json new file mode 100644 index 000000000..d77a380a6 --- /dev/null +++ b/tests/data/devices/tze204-b8vxct9l-ts0601-0x0000004a.json @@ -0,0 +1,266 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:af:fa:60:54", + "nwk": "0xD20F", + "manufacturer": "_TZE204_b8vxct9l", + "model": "TS0601", + "friendly_manufacturer": "_TZE204_b8vxct9l", + "friendly_model": "TS0601", + "name": "_TZE204_b8vxct9l TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Mains", + "lqi": 255, + "rssi": -52, + "last_seen": "2026-06-09T17:24:38.725043+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 74 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE204_b8vxct9l" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": null, + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 74 + }, + { + "id": "0x0005", + "name": "downloaded_zigbee_stack_version", + "zcl_type": "uint16", + "value": 65535 + } + ] + } + ] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "PROXY_BASIC", + "id": 97 + }, + "in_clusters": [], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE204_b8vxct9l", + "model": "TS0601", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0004", + "0x0005", + "0xef00", + "0x0000" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0061", + "input_clusters": [], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:af:fa:60:54-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:af:fa:60:54", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 255 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:af:fa:60:54-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:af:fa:60:54", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -52 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:af:fa:60:54-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:af:fa:60:54", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0000004a", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze204-c2fmom5z-ts0601.json b/tests/data/devices/tze204-c2fmom5z-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-c2fmom5z-ts0601.json rename to tests/data/devices/tze204-c2fmom5z-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-cirvgep4-ts0601.json b/tests/data/devices/tze204-cirvgep4-ts0601-0x00000049.json similarity index 100% rename from tests/data/devices/tze204-cirvgep4-ts0601.json rename to tests/data/devices/tze204-cirvgep4-ts0601-0x00000049.json diff --git a/tests/data/devices/tze204-d6i25bwg-ts0601.json b/tests/data/devices/tze204-d6i25bwg-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-d6i25bwg-ts0601.json rename to tests/data/devices/tze204-d6i25bwg-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-dwcarsat-ts0601.json b/tests/data/devices/tze204-dwcarsat-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-dwcarsat-ts0601.json rename to tests/data/devices/tze204-dwcarsat-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-eekpf0ft-ts0601.json b/tests/data/devices/tze204-eekpf0ft-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-eekpf0ft-ts0601.json rename to tests/data/devices/tze204-eekpf0ft-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-ex3rcdha-ts0601.json b/tests/data/devices/tze204-ex3rcdha-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-ex3rcdha-ts0601.json rename to tests/data/devices/tze204-ex3rcdha-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-fhvdgeuh-ts0601.json b/tests/data/devices/tze204-fhvdgeuh-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-fhvdgeuh-ts0601.json rename to tests/data/devices/tze204-fhvdgeuh-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-goecjd1t-ts0601.json b/tests/data/devices/tze204-goecjd1t-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-goecjd1t-ts0601.json rename to tests/data/devices/tze204-goecjd1t-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-gops3slb-ts0601.json b/tests/data/devices/tze204-gops3slb-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-gops3slb-ts0601.json rename to tests/data/devices/tze204-gops3slb-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-guvc7pdy-ts0601.json b/tests/data/devices/tze204-guvc7pdy-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-guvc7pdy-ts0601.json rename to tests/data/devices/tze204-guvc7pdy-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-iaeejhvf-ts0601.json b/tests/data/devices/tze204-iaeejhvf-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-iaeejhvf-ts0601.json rename to tests/data/devices/tze204-iaeejhvf-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-jrcfsaa3-ts0601.json b/tests/data/devices/tze204-jrcfsaa3-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-jrcfsaa3-ts0601.json rename to tests/data/devices/tze204-jrcfsaa3-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-lb0fsvba-ts0601.json b/tests/data/devices/tze204-lb0fsvba-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-lb0fsvba-ts0601.json rename to tests/data/devices/tze204-lb0fsvba-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-lbbg34rj-ts0601.json b/tests/data/devices/tze204-lbbg34rj-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-lbbg34rj-ts0601.json rename to tests/data/devices/tze204-lbbg34rj-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-lpedvtvr-ts0601.json b/tests/data/devices/tze204-lpedvtvr-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-lpedvtvr-ts0601.json rename to tests/data/devices/tze204-lpedvtvr-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-lsanae15-ts0601.json b/tests/data/devices/tze204-lsanae15-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-lsanae15-ts0601.json rename to tests/data/devices/tze204-lsanae15-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-ltwbm23f-ts0601.json b/tests/data/devices/tze204-ltwbm23f-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-ltwbm23f-ts0601.json rename to tests/data/devices/tze204-ltwbm23f-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-ltwbm23f-ts0601-0x0000004e.json b/tests/data/devices/tze204-ltwbm23f-ts0601-0x0000004e.json new file mode 100644 index 000000000..b8405dd5f --- /dev/null +++ b/tests/data/devices/tze204-ltwbm23f-ts0601-0x0000004e.json @@ -0,0 +1,1054 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:1b:1e:95:0a", + "nwk": "0x15E9", + "manufacturer": "_TZE204_ltwbm23f", + "model": "TS0601", + "friendly_manufacturer": "_TZE204_ltwbm23f", + "friendly_model": "TS0601", + "name": "_TZE204_ltwbm23f TS0601", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.builder:(_TZE204_qyr2m29i / TS0601)", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": 152, + "rssi": -62, + "last_seen": "2026-02-17T11:27:58.816885+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 78 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE204_ltwbm23f" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 200 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 2 + }, + { + "id": "0x0034", + "name": "battery_rated_voltage", + "zcl_type": "uint8", + "value": 15 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 3 + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0201", + "endpoint_attribute": "thermostat", + "attributes": [ + { + "id": "0x0004", + "name": "abs_max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3000 + }, + { + "id": "0x0003", + "name": "abs_min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 500 + }, + { + "id": "0x001b", + "name": "ctrl_sequence_of_oper", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x0000", + "name": "local_temperature", + "zcl_type": "int16", + "value": 2220 + }, + { + "id": "0x0010", + "name": "local_temperature_calibration", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0016", + "name": "max_heat_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0015", + "name": "min_heat_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0012", + "name": "occupied_heating_setpoint", + "zcl_type": "int16", + "value": 2100 + }, + { + "id": "0x0008", + "name": "pi_heating_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0029", + "name": "running_state", + "zcl_type": "map16", + "value": 0 + }, + { + "id": "0x0030", + "name": "setpoint_change_source", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0032", + "name": "setpoint_change_source_timestamp", + "zcl_type": "UTC", + "unsupported": true + }, + { + "id": "0x001c", + "name": "system_mode", + "zcl_type": "enum8", + "value": 4 + } + ] + }, + { + "cluster_id": "0xed00", + "endpoint_attribute": null, + "attributes": [] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": "tuya_manufacturer", + "attributes": [ + { + "id": "0xef07", + "name": "child_lock", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0xef77", + "name": "comfort_temperature", + "zcl_type": "uint16", + "value": 210 + }, + { + "id": "0xef6f", + "name": "display_brightness", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0xef71", + "name": "display_orientation", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0xef78", + "name": "eco_temperature", + "zcl_type": "uint16", + "value": 200 + }, + { + "id": "0xef79", + "name": "holiday_temperature", + "zcl_type": "uint16", + "value": 150 + }, + { + "id": "0xef7f", + "name": "hysteresis_mode", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0xef2f", + "name": "local_temperature_calibration", + "zcl_type": "int32", + "value": -24 + }, + { + "id": "0xef09", + "name": "max_temperature", + "zcl_type": "uint16", + "value": 300 + }, + { + "id": "0xef00", + "name": "mcu_version", + "zcl_type": "uint48", + "value": "1.0.7" + }, + { + "id": "0xef0a", + "name": "min_temperature", + "zcl_type": "uint16", + "value": 50 + }, + { + "id": "0xef6e", + "name": "motor_thrust", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0xef02", + "name": "preset_mode", + "zcl_type": "uint16", + "value": 3 + }, + { + "id": "0xef72", + "name": "valve_position", + "zcl_type": "int16", + "value": 0 + }, + { + "id": "0xef0e", + "name": "window_detection", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0xef0f", + "name": "window_open", + "zcl_type": "bool", + "value": 0 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 78 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE204_ltwbm23f", + "model": "TS0601", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0004", + "0x0005", + "0x0201", + "0xed00", + "0xef00" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": "Window open", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-window_open", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinarySensor", + "translation_key": null, + "translation_placeholders": null, + "device_class": "window", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "window_open" + }, + "state": { + "class_name": "BinarySensor", + "available": true, + "state": false + } + } + ], + "climate": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-513", + "migrate_unique_ids": [], + "platform": "climate", + "class_name": "Thermostat", + "translation_key": "thermostat", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "max_temp": 30.0, + "min_temp": 5.0, + "supported_features": 385, + "fan_modes": null, + "preset_modes": [], + "hvac_modes": [ + "off", + "heat" + ] + }, + "state": { + "class_name": "Thermostat", + "available": true, + "current_temperature": 22.2, + "outdoor_temperature": null, + "target_temperature": 21.0, + "target_temperature_high": null, + "target_temperature_low": null, + "hvac_action": "idle", + "hvac_mode": "heat", + "preset_mode": "none", + "fan_mode": "auto", + "system_mode": "[4]/heat", + "occupancy": null, + "occupied_cooling_setpoint": null, + "occupied_heating_setpoint": 2100, + "pi_heating_demand": null, + "pi_cooling_demand": null, + "unoccupied_cooling_setpoint": null, + "unoccupied_heating_setpoint": null + }, + "extra_state_attributes": [ + "occupancy", + "occupied_cooling_setpoint", + "occupied_heating_setpoint", + "pi_cooling_demand", + "pi_heating_demand", + "system_mode", + "unoccupied_cooling_setpoint", + "unoccupied_heating_setpoint" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": "Comfort temperature", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-comfort_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "comfort_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 30, + "native_min_value": 5, + "native_step": 1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 21.0 + } + }, + { + "info_object": { + "fallback_name": "Eco temperature", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-eco_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "eco_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 30, + "native_min_value": 5, + "native_step": 1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 20.0 + } + }, + { + "info_object": { + "fallback_name": "Holiday temperature", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-holiday_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "holiday_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 30, + "native_min_value": 5, + "native_step": 1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 15.0 + } + }, + { + "info_object": { + "fallback_name": "Local temperature calibration", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-local_temperature_calibration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "local_temperature_calibration", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 6, + "native_min_value": -6, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": -2.4000000000000004 + } + }, + { + "info_object": { + "fallback_name": "Max temperature", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-max_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "max_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 35, + "native_min_value": 15, + "native_step": 1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 30.0 + } + }, + { + "info_object": { + "fallback_name": "Min temperature", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-min_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "min_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 15, + "native_min_value": 1, + "native_step": 1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": 5.0 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": "Display brightness", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-display_brightness", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "display_brightness", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaDisplayBrightness", + "options": [ + "High", + "Medium", + "Low" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "High" + } + }, + { + "info_object": { + "fallback_name": "Display orientation", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-display_orientation", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "display_orientation", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaDisplayOrientation", + "options": [ + "Up", + "Down" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "Up" + } + }, + { + "info_object": { + "fallback_name": "Hysteresis mode", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-hysteresis_mode", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "hysteresis_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaHysteresis", + "options": [ + "Comfort", + "Eco" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "Comfort" + } + }, + { + "info_object": { + "fallback_name": "Motor thrust", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-motor_thrust", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "motor_thrust", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaMotorThrust", + "options": [ + "Strong", + "Middle", + "Weak" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "Weak" + } + }, + { + "info_object": { + "fallback_name": "Preset mode", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-preset_mode", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "preset_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaPresetMode", + "options": [ + "Eco", + "Auto", + "Off", + "Heat" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "Heat" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 152 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -62 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 100.0, + "battery_size": "AA", + "battery_quantity": 2 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-513-hvac_action", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ThermostatHVACAction", + "translation_key": "hvac_action", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "ThermostatHVACAction", + "available": true, + "state": "idle" + } + }, + { + "info_object": { + "fallback_name": "Valve position", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-valve_position", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Sensor", + "translation_key": "valve_position", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "%" + }, + "state": { + "class_name": "Sensor", + "available": true, + "state": 0.0 + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": "Child lock", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-child_lock", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "child_lock", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "child_lock", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "Open window detection", + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-window_detection", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "window_detection", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "window_detection", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:1b:1e:95:0a-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:1b:1e:95:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0000004e", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze204-m64smti7-ts0601.json b/tests/data/devices/tze204-m64smti7-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-m64smti7-ts0601.json rename to tests/data/devices/tze204-m64smti7-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-m9dzckna-ts0601.json b/tests/data/devices/tze204-m9dzckna-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-m9dzckna-ts0601.json rename to tests/data/devices/tze204-m9dzckna-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-mtoaryre-ts0601.json b/tests/data/devices/tze204-mtoaryre-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-mtoaryre-ts0601.json rename to tests/data/devices/tze204-mtoaryre-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-mwomyz5n-ts0601.json b/tests/data/devices/tze204-mwomyz5n-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-mwomyz5n-ts0601.json rename to tests/data/devices/tze204-mwomyz5n-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-nbkshs6k-ts0601.json b/tests/data/devices/tze204-nbkshs6k-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-nbkshs6k-ts0601.json rename to tests/data/devices/tze204-nbkshs6k-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-nklqjk62-ts0601.json b/tests/data/devices/tze204-nklqjk62-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-nklqjk62-ts0601.json rename to tests/data/devices/tze204-nklqjk62-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-nlrfgpny-ts0601.json b/tests/data/devices/tze204-nlrfgpny-ts0601-0x00000049.json similarity index 100% rename from tests/data/devices/tze204-nlrfgpny-ts0601.json rename to tests/data/devices/tze204-nlrfgpny-ts0601-0x00000049.json diff --git a/tests/data/devices/tze204-nqqylykc-ts0601.json b/tests/data/devices/tze204-nqqylykc-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-nqqylykc-ts0601.json rename to tests/data/devices/tze204-nqqylykc-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-nvxorhcj-ts0601.json b/tests/data/devices/tze204-nvxorhcj-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-nvxorhcj-ts0601.json rename to tests/data/devices/tze204-nvxorhcj-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-ogx8u5z6-ts0601.json b/tests/data/devices/tze204-ogx8u5z6-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-ogx8u5z6-ts0601.json rename to tests/data/devices/tze204-ogx8u5z6-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-pcdmj88b-ts0601.json b/tests/data/devices/tze204-pcdmj88b-ts0601-0x00000049.json similarity index 100% rename from tests/data/devices/tze204-pcdmj88b-ts0601.json rename to tests/data/devices/tze204-pcdmj88b-ts0601-0x00000049.json diff --git a/tests/data/devices/tze204-pxbjch8m-ts0601.json b/tests/data/devices/tze204-pxbjch8m-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-pxbjch8m-ts0601.json rename to tests/data/devices/tze204-pxbjch8m-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-qasjif9e-ts0601.json b/tests/data/devices/tze204-qasjif9e-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-qasjif9e-ts0601.json rename to tests/data/devices/tze204-qasjif9e-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-qtnjuoae-ts0601.json b/tests/data/devices/tze204-qtnjuoae-ts0601-0x00000049.json similarity index 100% rename from tests/data/devices/tze204-qtnjuoae-ts0601.json rename to tests/data/devices/tze204-qtnjuoae-ts0601-0x00000049.json diff --git a/tests/data/devices/tze204-qvxrkeif-ts0601.json b/tests/data/devices/tze204-qvxrkeif-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-qvxrkeif-ts0601.json rename to tests/data/devices/tze204-qvxrkeif-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-qyr2m29i-ts0601.json b/tests/data/devices/tze204-qyr2m29i-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-qyr2m29i-ts0601.json rename to tests/data/devices/tze204-qyr2m29i-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-r32ctezx-ts0601.json b/tests/data/devices/tze204-r32ctezx-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-r32ctezx-ts0601.json rename to tests/data/devices/tze204-r32ctezx-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-rtrmfadk-ts0601-0x00000049.json b/tests/data/devices/tze204-rtrmfadk-ts0601-0x00000049.json new file mode 100644 index 000000000..e092f81ac --- /dev/null +++ b/tests/data/devices/tze204-rtrmfadk-ts0601-0x00000049.json @@ -0,0 +1,735 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:9f:cb:25:01", + "nwk": "0x85FF", + "manufacturer": "_TZE204_rtrmfadk", + "model": "TS0601", + "friendly_manufacturer": "_TZE204_rtrmfadk", + "friendly_model": "TS0601", + "name": "_TZE204_rtrmfadk TS0601", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.builder:(_TZE204_rtrmfadk / TS0601)", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": null, + "rssi": null, + "last_seen": "2025-10-28T18:05:41.066015+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 73 + }, + { + "id": "0x0012", + "name": "device_enabled", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0x0008", + "name": "generic_device_class", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0009", + "name": "generic_device_type", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE204_rtrmfadk" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + }, + { + "id": "0x0011", + "name": "physical_env", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0007", + "name": "power_source", + "zcl_type": "enum8", + "value": 3 + }, + { + "id": "0x000d", + "name": "serial_number", + "zcl_type": "string", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 2 + }, + { + "id": "0x0034", + "name": "battery_rated_voltage", + "zcl_type": "uint8", + "value": 15 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 3 + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0201", + "endpoint_attribute": "thermostat", + "attributes": [ + { + "id": "0x0004", + "name": "abs_max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3000 + }, + { + "id": "0x0003", + "name": "abs_min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 500 + }, + { + "id": "0x001b", + "name": "ctrl_sequence_of_oper", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x0010", + "name": "local_temperature_calibration", + "zcl_type": "int8", + "unsupported": true + }, + { + "id": "0x0016", + "name": "max_heat_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0015", + "name": "min_heat_setpoint_limit", + "zcl_type": "int16", + "unsupported": true + }, + { + "id": "0x0008", + "name": "pi_heating_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0030", + "name": "setpoint_change_source", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0032", + "name": "setpoint_change_source_timestamp", + "zcl_type": "UTC", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": "tuya_manufacturer", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 73 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE204_rtrmfadk", + "model": "TS0601", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0004", + "0x0005", + "0x0201", + "0xef00" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": "Error or battery low", + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-error_or_battery_low", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinarySensor", + "translation_key": "error_or_battery_low", + "translation_placeholders": null, + "device_class": "problem", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "error_or_battery_low" + }, + "state": { + "class_name": "BinarySensor", + "available": true, + "state": false + } + }, + { + "info_object": { + "fallback_name": "Window open", + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-window_open", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinarySensor", + "translation_key": null, + "translation_placeholders": null, + "device_class": "window", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "window_open" + }, + "state": { + "class_name": "BinarySensor", + "available": true, + "state": false + } + } + ], + "climate": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-513", + "migrate_unique_ids": [], + "platform": "climate", + "class_name": "Thermostat", + "translation_key": "thermostat", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "max_temp": 30.0, + "min_temp": 5.0, + "supported_features": 385, + "fan_modes": null, + "preset_modes": [], + "hvac_modes": [ + "off", + "heat" + ] + }, + "state": { + "class_name": "Thermostat", + "available": true, + "current_temperature": null, + "outdoor_temperature": null, + "target_temperature": null, + "target_temperature_high": null, + "target_temperature_low": null, + "hvac_action": null, + "hvac_mode": null, + "preset_mode": "none", + "fan_mode": "auto", + "system_mode": null, + "occupancy": null, + "occupied_cooling_setpoint": null, + "occupied_heating_setpoint": null, + "pi_heating_demand": null, + "pi_cooling_demand": null, + "unoccupied_cooling_setpoint": null, + "unoccupied_heating_setpoint": null + }, + "extra_state_attributes": [ + "occupancy", + "occupied_cooling_setpoint", + "occupied_heating_setpoint", + "pi_cooling_demand", + "pi_heating_demand", + "system_mode", + "unoccupied_cooling_setpoint", + "unoccupied_heating_setpoint" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": "Local temperature calibration", + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-local_temperature_calibration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "local_temperature_calibration", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 6, + "native_min_value": -6, + "native_step": 1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": "Max temperature", + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-max_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "max_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 35, + "native_min_value": 15, + "native_step": 1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": "Min temperature", + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-min_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "min_temperature", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 15, + "native_min_value": 1, + "native_step": 1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": "Eco mode", + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-eco_mode", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "eco_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaThermostatEcoMode", + "options": [ + "Comfort", + "Eco" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": null + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": null, + "battery_size": "AA", + "battery_quantity": 2 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-513-hvac_action", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ThermostatHVACAction", + "translation_key": "hvac_action", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "ThermostatHVACAction", + "available": true, + "state": null + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": "Child lock", + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-child_lock", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "child_lock", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "child_lock", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": "Open window detection", + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-window_detection", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "window_detection", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "window_detection", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9f:cb:25:01-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:9f:cb:25:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000049", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze204-rtrmfadk-ts0601.json b/tests/data/devices/tze204-rtrmfadk-ts0601.json index e092f81ac..59464f625 100644 --- a/tests/data/devices/tze204-rtrmfadk-ts0601.json +++ b/tests/data/devices/tze204-rtrmfadk-ts0601.json @@ -1,7 +1,7 @@ { "version": 2, "ieee": "ab:cd:ef:12:9f:cb:25:01", - "nwk": "0x85FF", + "nwk": "0x963E", "manufacturer": "_TZE204_rtrmfadk", "model": "TS0601", "friendly_manufacturer": "_TZE204_rtrmfadk", @@ -14,7 +14,7 @@ "power_source": "Battery or Unknown", "lqi": null, "rssi": null, - "last_seen": "2025-10-28T18:05:41.066015+00:00", + "last_seen": "2026-04-05T10:27:05.841550+00:00", "available": true, "device_type": "EndDevice", "active_coordinator": false, @@ -51,24 +51,6 @@ "zcl_type": "uint8", "value": 73 }, - { - "id": "0x0012", - "name": "device_enabled", - "zcl_type": "bool", - "unsupported": true - }, - { - "id": "0x0008", - "name": "generic_device_class", - "zcl_type": "enum8", - "unsupported": true - }, - { - "id": "0x0009", - "name": "generic_device_type", - "zcl_type": "enum8", - "unsupported": true - }, { "id": "0x0004", "name": "manufacturer", @@ -80,24 +62,6 @@ "name": "model", "zcl_type": "string", "value": "TS0601" - }, - { - "id": "0x0011", - "name": "physical_env", - "zcl_type": "enum8", - "unsupported": true - }, - { - "id": "0x0007", - "name": "power_source", - "zcl_type": "enum8", - "value": 3 - }, - { - "id": "0x000d", - "name": "serial_number", - "zcl_type": "string", - "unsupported": true } ] }, @@ -105,6 +69,12 @@ "cluster_id": "0x0001", "endpoint_attribute": "power", "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 194 + }, { "id": "0x0033", "name": "battery_quantity", @@ -157,6 +127,12 @@ "zcl_type": "enum8", "value": 2 }, + { + "id": "0x0000", + "name": "local_temperature", + "zcl_type": "int16", + "value": 1680 + }, { "id": "0x0010", "name": "local_temperature_calibration", @@ -175,12 +151,24 @@ "zcl_type": "int16", "unsupported": true }, + { + "id": "0x0012", + "name": "occupied_heating_setpoint", + "zcl_type": "int16", + "value": 1200 + }, { "id": "0x0008", "name": "pi_heating_demand", "zcl_type": "uint8", "unsupported": true }, + { + "id": "0x0029", + "name": "running_state", + "zcl_type": "map16", + "value": 0 + }, { "id": "0x0030", "name": "setpoint_change_source", @@ -192,13 +180,74 @@ "name": "setpoint_change_source_timestamp", "zcl_type": "UTC", "unsupported": true + }, + { + "id": "0x001c", + "name": "system_mode", + "zcl_type": "enum8", + "value": 4 } ] }, { "cluster_id": "0xef00", "endpoint_attribute": "tuya_manufacturer", - "attributes": [] + "attributes": [ + { + "id": "0xef0c", + "name": "child_lock", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0xef72", + "name": "eco_mode", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0xef0e", + "name": "error_or_battery_low", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0xef65", + "name": "local_temperature_calibration", + "zcl_type": "int32", + "value": -10 + }, + { + "id": "0xef10", + "name": "max_temperature", + "zcl_type": "uint16", + "value": 300 + }, + { + "id": "0xef00", + "name": "mcu_version", + "zcl_type": "uint48", + "value": "1.0.3" + }, + { + "id": "0xef0f", + "name": "min_temperature", + "zcl_type": "uint16", + "value": 50 + }, + { + "id": "0xef08", + "name": "window_detection", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0xef07", + "name": "window_open", + "zcl_type": "bool", + "value": 0 + } + ] } ], "out_clusters": [ @@ -210,14 +259,7 @@ { "cluster_id": "0x0019", "endpoint_attribute": "ota", - "attributes": [ - { - "id": "0x0002", - "name": "current_file_version", - "zcl_type": "uint32", - "value": 73 - } - ] + "attributes": [] } ] } @@ -349,19 +391,19 @@ "state": { "class_name": "Thermostat", "available": true, - "current_temperature": null, + "current_temperature": 16.8, "outdoor_temperature": null, - "target_temperature": null, + "target_temperature": 12.0, "target_temperature_high": null, "target_temperature_low": null, - "hvac_action": null, - "hvac_mode": null, + "hvac_action": "idle", + "hvac_mode": "heat", "preset_mode": "none", "fan_mode": "auto", - "system_mode": null, + "system_mode": "[4]/heat", "occupancy": null, "occupied_cooling_setpoint": null, - "occupied_heating_setpoint": null, + "occupied_heating_setpoint": 1200, "pi_heating_demand": null, "pi_cooling_demand": null, "unoccupied_cooling_setpoint": null, @@ -408,7 +450,7 @@ "state": { "class_name": "NumberConfigurationEntity", "available": true, - "state": null + "state": -10 } }, { @@ -439,7 +481,7 @@ "state": { "class_name": "NumberConfigurationEntity", "available": true, - "state": null + "state": 30.0 } }, { @@ -470,7 +512,7 @@ "state": { "class_name": "NumberConfigurationEntity", "available": true, - "state": null + "state": 5.0 } } ], @@ -503,7 +545,7 @@ "state": { "class_name": "ZCLEnumSelectEntity", "available": true, - "state": null + "state": "Eco" } } ], @@ -589,7 +631,7 @@ "state": { "class_name": "Battery", "available": true, - "state": null, + "state": 97.0, "battery_size": "AA", "battery_quantity": 2 }, @@ -624,7 +666,7 @@ "state": { "class_name": "ThermostatHVACAction", "available": true, - "state": null + "state": "idle" } } ], @@ -719,7 +761,7 @@ "state": { "class_name": "FirmwareUpdateEntity", "available": true, - "installed_version": "0x00000049", + "installed_version": null, "in_progress": false, "update_percentage": null, "latest_version": null, diff --git a/tests/data/devices/tze204-tagezcph-ts0601.json b/tests/data/devices/tze204-tagezcph-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-tagezcph-ts0601.json rename to tests/data/devices/tze204-tagezcph-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-tdhnhhiy-ts0601.json b/tests/data/devices/tze204-tdhnhhiy-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-tdhnhhiy-ts0601.json rename to tests/data/devices/tze204-tdhnhhiy-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-uxllnywp-ts0601.json b/tests/data/devices/tze204-uxllnywp-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-uxllnywp-ts0601.json rename to tests/data/devices/tze204-uxllnywp-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-vjpaih9f-ts0601.json b/tests/data/devices/tze204-vjpaih9f-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-vjpaih9f-ts0601.json rename to tests/data/devices/tze204-vjpaih9f-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-w1wwxoja-ts0601.json b/tests/data/devices/tze204-w1wwxoja-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-w1wwxoja-ts0601.json rename to tests/data/devices/tze204-w1wwxoja-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-wbhaespm-ts0601.json b/tests/data/devices/tze204-wbhaespm-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-wbhaespm-ts0601.json rename to tests/data/devices/tze204-wbhaespm-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-x8fp01wi-ts0601.json b/tests/data/devices/tze204-x8fp01wi-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-x8fp01wi-ts0601.json rename to tests/data/devices/tze204-x8fp01wi-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-x9usygq1-ts0601.json b/tests/data/devices/tze204-x9usygq1-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-x9usygq1-ts0601.json rename to tests/data/devices/tze204-x9usygq1-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-xalsoe3m-ts0601.json b/tests/data/devices/tze204-xalsoe3m-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-xalsoe3m-ts0601.json rename to tests/data/devices/tze204-xalsoe3m-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-xlppj4f5-ts0601.json b/tests/data/devices/tze204-xlppj4f5-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-xlppj4f5-ts0601.json rename to tests/data/devices/tze204-xlppj4f5-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-xnbkhhdr-ts0601.json b/tests/data/devices/tze204-xnbkhhdr-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-xnbkhhdr-ts0601.json rename to tests/data/devices/tze204-xnbkhhdr-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-xu4a5rhj-ts0601.json b/tests/data/devices/tze204-xu4a5rhj-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-xu4a5rhj-ts0601.json rename to tests/data/devices/tze204-xu4a5rhj-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-ya4ft0w4-ts0601.json b/tests/data/devices/tze204-ya4ft0w4-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-ya4ft0w4-ts0601.json rename to tests/data/devices/tze204-ya4ft0w4-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-yvx5lh6k-ts0601.json b/tests/data/devices/tze204-yvx5lh6k-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-yvx5lh6k-ts0601.json rename to tests/data/devices/tze204-yvx5lh6k-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze204-ztqnh5cg-ts0601.json b/tests/data/devices/tze204-ztqnh5cg-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze204-ztqnh5cg-ts0601.json rename to tests/data/devices/tze204-ztqnh5cg-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze20c-xbexmf8h-ts130f.json b/tests/data/devices/tze20c-xbexmf8h-ts130f-0x00000040.json similarity index 100% rename from tests/data/devices/tze20c-xbexmf8h-ts130f.json rename to tests/data/devices/tze20c-xbexmf8h-ts130f-0x00000040.json diff --git a/tests/data/devices/tze20c-zka46xbw-ts0601.json b/tests/data/devices/tze20c-zka46xbw-ts0601-0x00000051.json similarity index 100% rename from tests/data/devices/tze20c-zka46xbw-ts0601.json rename to tests/data/devices/tze20c-zka46xbw-ts0601-0x00000051.json diff --git a/tests/data/devices/tze284-2gi1hy8s-ts0601.json b/tests/data/devices/tze284-2gi1hy8s-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze284-2gi1hy8s-ts0601.json rename to tests/data/devices/tze284-2gi1hy8s-ts0601-0x00000050.json diff --git a/tests/data/devices/tze284-3mzb0sdz-ts0601.json b/tests/data/devices/tze284-3mzb0sdz-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze284-3mzb0sdz-ts0601.json rename to tests/data/devices/tze284-3mzb0sdz-ts0601-0x00000050.json diff --git a/tests/data/devices/tze284-432zhuwe-ts0601.json b/tests/data/devices/tze284-432zhuwe-ts0601.json new file mode 100644 index 000000000..3911c7364 --- /dev/null +++ b/tests/data/devices/tze284-432zhuwe-ts0601.json @@ -0,0 +1,237 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:b2:e7:24:a7", + "nwk": "0x9550", + "manufacturer": "_TZE284_432zhuwe", + "model": "TS0601", + "friendly_manufacturer": "_TZE284_432zhuwe", + "friendly_model": "TS0601", + "name": "_TZE284_432zhuwe TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4098, + "power_source": "Mains", + "lqi": 136, + "rssi": -77, + "last_seen": "2026-06-04T17:53:27.141838+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE284_432zhuwe" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0xed00", + "endpoint_attribute": null, + "attributes": [] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": null, + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "unsupported": true + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE284_432zhuwe", + "model": "TS0601", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0000", + "0x0004", + "0x0005", + "0xef00", + "0xed00" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:b2:e7:24:a7-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b2:e7:24:a7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 136 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:b2:e7:24:a7-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b2:e7:24:a7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -77 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:b2:e7:24:a7-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:b2:e7:24:a7", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": null, + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze284-6hrnp30w-ts0601.json b/tests/data/devices/tze284-6hrnp30w-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze284-6hrnp30w-ts0601.json rename to tests/data/devices/tze284-6hrnp30w-ts0601-0x00000050.json diff --git a/tests/data/devices/tze284-6uyu20xu-ts0601.json b/tests/data/devices/tze284-6uyu20xu-ts0601.json new file mode 100644 index 000000000..7d2b3366f --- /dev/null +++ b/tests/data/devices/tze284-6uyu20xu-ts0601.json @@ -0,0 +1,243 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:3d:91:16:91", + "nwk": "0xD934", + "manufacturer": "_TZE284_6uyu20xu", + "model": "TS0601", + "friendly_manufacturer": "_TZE284_6uyu20xu", + "friendly_model": "TS0601", + "name": "_TZE284_6uyu20xu TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4098, + "power_source": "Mains", + "lqi": 196, + "rssi": -51, + "last_seen": "2026-05-27T07:50:49.568409+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 74 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE284_6uyu20xu" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0xed00", + "endpoint_attribute": null, + "attributes": [] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": null, + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "unsupported": true + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE284_6uyu20xu", + "model": "TS0601", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4098, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 82, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 82, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0000", + "0x0004", + "0x0005", + "0xef00", + "0xed00" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3d:91:16:91-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3d:91:16:91", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 196 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3d:91:16:91-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3d:91:16:91", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -51 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:3d:91:16:91-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:3d:91:16:91", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": null, + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze284-6ycgarab-ts0601.json b/tests/data/devices/tze284-6ycgarab-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze284-6ycgarab-ts0601.json rename to tests/data/devices/tze284-6ycgarab-ts0601-0x00000050.json diff --git a/tests/data/devices/tze284-78ioiaml-ts0601.json b/tests/data/devices/tze284-78ioiaml-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze284-78ioiaml-ts0601.json rename to tests/data/devices/tze284-78ioiaml-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze284-7gy9mqca-ts0601.json b/tests/data/devices/tze284-7gy9mqca-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-7gy9mqca-ts0601.json rename to tests/data/devices/tze284-7gy9mqca-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-7zazvlyn-ts0601.json b/tests/data/devices/tze284-7zazvlyn-ts0601-0x00000045.json similarity index 100% rename from tests/data/devices/tze284-7zazvlyn-ts0601.json rename to tests/data/devices/tze284-7zazvlyn-ts0601-0x00000045.json diff --git a/tests/data/devices/tze284-81yrt3lo-ts0601.json b/tests/data/devices/tze284-81yrt3lo-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-81yrt3lo-ts0601.json rename to tests/data/devices/tze284-81yrt3lo-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-8b9zpaav-ts0601.json b/tests/data/devices/tze284-8b9zpaav-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-8b9zpaav-ts0601.json rename to tests/data/devices/tze284-8b9zpaav-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-8se38w3c-ts0601.json b/tests/data/devices/tze284-8se38w3c-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-8se38w3c-ts0601.json rename to tests/data/devices/tze284-8se38w3c-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-a2xewxoo-ts0601.json b/tests/data/devices/tze284-a2xewxoo-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-a2xewxoo-ts0601.json rename to tests/data/devices/tze284-a2xewxoo-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-aao3yzhs-ts0601-0x0000004d.json b/tests/data/devices/tze284-aao3yzhs-ts0601-0x0000004d.json new file mode 100644 index 000000000..aff0fe946 --- /dev/null +++ b/tests/data/devices/tze284-aao3yzhs-ts0601-0x0000004d.json @@ -0,0 +1,398 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:53:b5:37:5e", + "nwk": "0xF715", + "manufacturer": "_TZE284_aao3yzhs", + "model": "TS0601", + "friendly_manufacturer": "_TZE284_aao3yzhs", + "friendly_model": "TS0601", + "name": "_TZE284_aao3yzhs TS0601", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.builder:(_TZE284_aao3yzhs / TS0601)", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": 220, + "rssi": -45, + "last_seen": "2025-11-25T09:44:15.636790+00:00", + "available": true, + "device_type": "EndDevice", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "EndDevice", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 77 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE284_aao3yzhs" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0033", + "name": "battery_quantity", + "zcl_type": "uint8", + "value": 2 + }, + { + "id": "0x0034", + "name": "battery_rated_voltage", + "zcl_type": "uint8", + "value": 15 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 3 + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 820 + } + ] + }, + { + "cluster_id": "0x0408", + "endpoint_attribute": "soil_moisture", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 10000 + } + ] + }, + { + "cluster_id": "0xed00", + "endpoint_attribute": null, + "attributes": [] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": "tuya_manufacturer", + "attributes": [ + { + "id": "0xef00", + "name": "mcu_version", + "zcl_type": "uint48", + "value": "1.3.6" + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 77 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE284_aao3yzhs", + "model": "TS0601", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 128, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0004", + "0x0005", + "0x0402", + "0x0408", + "0xed00", + "0xef00" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:53:b5:37:5e-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:53:b5:37:5e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 220 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:53:b5:37:5e-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:53:b5:37:5e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -45 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:53:b5:37:5e-1-1", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Battery", + "translation_key": null, + "translation_placeholders": null, + "device_class": "battery", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:53:b5:37:5e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 0.0, + "battery_size": "AA", + "battery_quantity": 2 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:53:b5:37:5e-1-1026", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "Temperature", + "translation_key": null, + "translation_placeholders": null, + "device_class": "temperature", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:53:b5:37:5e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 8.2 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:53:b5:37:5e-1-1032", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SoilMoisture", + "translation_key": "soil_moisture", + "translation_placeholders": null, + "device_class": "moisture", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:53:b5:37:5e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "%" + }, + "state": { + "class_name": "SoilMoisture", + "available": true, + "state": 100.0 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:53:b5:37:5e-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:53:b5:37:5e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0000004d", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze284-c6wv4xyo-ts0601.json b/tests/data/devices/tze284-c6wv4xyo-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-c6wv4xyo-ts0601.json rename to tests/data/devices/tze284-c6wv4xyo-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-cf4b5ktf-ts0601-0x0000004e.json b/tests/data/devices/tze284-cf4b5ktf-ts0601-0x0000004e.json new file mode 100644 index 000000000..396ff04ce --- /dev/null +++ b/tests/data/devices/tze284-cf4b5ktf-ts0601-0x0000004e.json @@ -0,0 +1,266 @@ +{ + "version": 2, + "ieee": "ab:cd:ef:12:2e:63:a1:c0", + "nwk": "0xA413", + "manufacturer": "_TZE284_cf4b5ktf", + "model": "TS0601", + "friendly_manufacturer": "_TZE284_cf4b5ktf", + "friendly_model": "TS0601", + "name": "_TZE284_cf4b5ktf TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Mains", + "lqi": 132, + "rssi": -67, + "last_seen": "2026-06-23T17:38:39.625589+00:00", + "available": true, + "device_type": "Router", + "active_coordinator": false, + "node_descriptor": { + "logical_type": "Router", + "complex_descriptor_available": false, + "user_descriptor_available": false, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "SMART_PLUG", + "id": 81 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 78 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE284_cf4b5ktf" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0601" + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0xed00", + "endpoint_attribute": null, + "attributes": [] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": null, + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x000a", + "endpoint_attribute": "time", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 78 + } + ] + } + ] + }, + "242": { + "profile_id": 41440, + "device_type": { + "name": "PROXY_BASIC", + "id": 97 + }, + "in_clusters": [], + "out_clusters": [ + { + "cluster_id": "0x0021", + "endpoint_attribute": "green_power", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE284_cf4b5ktf", + "model": "TS0601", + "node_desc": { + "logical_type": 1, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 142, + "manufacturer_code": 4417, + "maximum_buffer_size": 66, + "maximum_incoming_transfer_size": 66, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 66, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0004", + "0x0005", + "0xef00", + "0x0000", + "0xed00" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + }, + "242": { + "profile_id": "0xa1e0", + "device_type": "0x0061", + "input_clusters": [], + "output_clusters": [ + "0x0021" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:2e:63:a1:c0-1-0-lqi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "LQISensor", + "translation_key": "lqi", + "translation_placeholders": null, + "device_class": null, + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:2e:63:a1:c0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 132 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:2e:63:a1:c0-1-0-rssi", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "RSSISensor", + "translation_key": "rssi", + "translation_placeholders": null, + "device_class": "signal_strength", + "state_class": "measurement", + "entity_category": "diagnostic", + "entity_registry_enabled_default": false, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:2e:63:a1:c0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -67 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:2e:63:a1:c0-1-25-firmware_update", + "migrate_unique_ids": [], + "platform": "update", + "class_name": "FirmwareUpdateEntity", + "translation_key": null, + "translation_placeholders": null, + "device_class": "firmware", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "device_ieee": "ab:cd:ef:12:2e:63:a1:c0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0000004e", + "in_progress": false, + "update_percentage": null, + "latest_version": null, + "release_summary": null, + "release_notes": null, + "release_url": null + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/tze284-dmckrsxg-ts0601.json b/tests/data/devices/tze284-dmckrsxg-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-dmckrsxg-ts0601.json rename to tests/data/devices/tze284-dmckrsxg-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-f5efvtbv-ts0601.json b/tests/data/devices/tze284-f5efvtbv-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-f5efvtbv-ts0601.json rename to tests/data/devices/tze284-f5efvtbv-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-g2e6cpnw-ts0601.json b/tests/data/devices/tze284-g2e6cpnw-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-g2e6cpnw-ts0601.json rename to tests/data/devices/tze284-g2e6cpnw-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-hodyryli-ts0601.json b/tests/data/devices/tze284-hodyryli-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze284-hodyryli-ts0601.json rename to tests/data/devices/tze284-hodyryli-ts0601-0x00000050.json diff --git a/tests/data/devices/tze284-iadro9bf-ts0601.json b/tests/data/devices/tze284-iadro9bf-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-iadro9bf-ts0601.json rename to tests/data/devices/tze284-iadro9bf-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-idvyees9-ts0601.json b/tests/data/devices/tze284-idvyees9-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-idvyees9-ts0601.json rename to tests/data/devices/tze284-idvyees9-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-kyyu8rbj-ts0601.json b/tests/data/devices/tze284-kyyu8rbj-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-kyyu8rbj-ts0601.json rename to tests/data/devices/tze284-kyyu8rbj-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-l8xiyymq-ts0601.json b/tests/data/devices/tze284-l8xiyymq-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze284-l8xiyymq-ts0601.json rename to tests/data/devices/tze284-l8xiyymq-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze284-lq0ffndf-ts0601.json b/tests/data/devices/tze284-lq0ffndf-ts0601-0x00000046.json similarity index 100% rename from tests/data/devices/tze284-lq0ffndf-ts0601.json rename to tests/data/devices/tze284-lq0ffndf-ts0601-0x00000046.json diff --git a/tests/data/devices/tze284-ltwbm23f-ts0601.json b/tests/data/devices/tze284-ltwbm23f-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-ltwbm23f-ts0601.json rename to tests/data/devices/tze284-ltwbm23f-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-myd45weu-ts0601.json b/tests/data/devices/tze284-myd45weu-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-myd45weu-ts0601.json rename to tests/data/devices/tze284-myd45weu-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-nklqjk62-ts0601.json b/tests/data/devices/tze284-nklqjk62-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-nklqjk62-ts0601.json rename to tests/data/devices/tze284-nklqjk62-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-nnhwcvbk-ts0601.json b/tests/data/devices/tze284-nnhwcvbk-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-nnhwcvbk-ts0601.json rename to tests/data/devices/tze284-nnhwcvbk-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-o3x45p96-ts0601.json b/tests/data/devices/tze284-o3x45p96-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-o3x45p96-ts0601.json rename to tests/data/devices/tze284-o3x45p96-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-o9ofysmo-ts0601.json b/tests/data/devices/tze284-o9ofysmo-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze284-o9ofysmo-ts0601.json rename to tests/data/devices/tze284-o9ofysmo-ts0601-0x00000050.json diff --git a/tests/data/devices/tze284-ogx8u5z6-ts0601.json b/tests/data/devices/tze284-ogx8u5z6-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-ogx8u5z6-ts0601.json rename to tests/data/devices/tze284-ogx8u5z6-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-oitavov2-ts0601.json b/tests/data/devices/tze284-oitavov2-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze284-oitavov2-ts0601.json rename to tests/data/devices/tze284-oitavov2-ts0601-0x00000050.json diff --git a/tests/data/devices/tze284-pcdmj88b-ts0601.json b/tests/data/devices/tze284-pcdmj88b-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-pcdmj88b-ts0601.json rename to tests/data/devices/tze284-pcdmj88b-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-qyflbnbj-ts0601.json b/tests/data/devices/tze284-qyflbnbj-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-qyflbnbj-ts0601.json rename to tests/data/devices/tze284-qyflbnbj-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-rjxqso4a-ts0601.json b/tests/data/devices/tze284-rjxqso4a-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-rjxqso4a-ts0601.json rename to tests/data/devices/tze284-rjxqso4a-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-rlytpmij-ts0601.json b/tests/data/devices/tze284-rlytpmij-ts0601-0x00000051.json similarity index 100% rename from tests/data/devices/tze284-rlytpmij-ts0601.json rename to tests/data/devices/tze284-rlytpmij-ts0601-0x00000051.json diff --git a/tests/data/devices/tze284-rvnbnvw8-ts0601.json b/tests/data/devices/tze284-rvnbnvw8-ts0601-0x0000004e.json similarity index 100% rename from tests/data/devices/tze284-rvnbnvw8-ts0601.json rename to tests/data/devices/tze284-rvnbnvw8-ts0601-0x0000004e.json diff --git a/tests/data/devices/tze284-sgabhwa6-ts0601.json b/tests/data/devices/tze284-sgabhwa6-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-sgabhwa6-ts0601.json rename to tests/data/devices/tze284-sgabhwa6-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-upagmta9-ts0601.json b/tests/data/devices/tze284-upagmta9-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-upagmta9-ts0601.json rename to tests/data/devices/tze284-upagmta9-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-vawy74yh-ts0601.json b/tests/data/devices/tze284-vawy74yh-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-vawy74yh-ts0601.json rename to tests/data/devices/tze284-vawy74yh-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-vuwtqx0t-ts0601.json b/tests/data/devices/tze284-vuwtqx0t-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze284-vuwtqx0t-ts0601.json rename to tests/data/devices/tze284-vuwtqx0t-ts0601-0x00000050.json diff --git a/tests/data/devices/tze284-wtikaxzs-ts0601.json b/tests/data/devices/tze284-wtikaxzs-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-wtikaxzs-ts0601.json rename to tests/data/devices/tze284-wtikaxzs-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-xnbkhhdr-ts0601.json b/tests/data/devices/tze284-xnbkhhdr-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-xnbkhhdr-ts0601.json rename to tests/data/devices/tze284-xnbkhhdr-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-zjhoqbrd-ts0601.json b/tests/data/devices/tze284-zjhoqbrd-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-zjhoqbrd-ts0601.json rename to tests/data/devices/tze284-zjhoqbrd-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze284-zm8zpwas-ts0601.json b/tests/data/devices/tze284-zm8zpwas-ts0601-0x00000050.json similarity index 100% rename from tests/data/devices/tze284-zm8zpwas-ts0601.json rename to tests/data/devices/tze284-zm8zpwas-ts0601-0x00000050.json diff --git a/tests/data/devices/tze284-znvwzxkq-ts0601.json b/tests/data/devices/tze284-znvwzxkq-ts0601-0x0000004a.json similarity index 100% rename from tests/data/devices/tze284-znvwzxkq-ts0601.json rename to tests/data/devices/tze284-znvwzxkq-ts0601-0x0000004a.json diff --git a/tests/data/devices/tze284-zp8xakad-ts0601.json b/tests/data/devices/tze284-zp8xakad-ts0601-0x0000004d.json similarity index 100% rename from tests/data/devices/tze284-zp8xakad-ts0601.json rename to tests/data/devices/tze284-zp8xakad-ts0601-0x0000004d.json diff --git a/tests/data/devices/tze28c1000000-alh14edn-ts0601.json b/tests/data/devices/tze28c1000000-alh14edn-ts0601-0x00000048.json similarity index 100% rename from tests/data/devices/tze28c1000000-alh14edn-ts0601.json rename to tests/data/devices/tze28c1000000-alh14edn-ts0601-0x00000048.json diff --git a/tests/data/devices/tze608-c75zqghm-ts0603.json b/tests/data/devices/tze608-c75zqghm-ts0603-0x00000040.json similarity index 100% rename from tests/data/devices/tze608-c75zqghm-ts0603.json rename to tests/data/devices/tze608-c75zqghm-ts0603-0x00000040.json diff --git a/tests/data/devices/ubisys-s1-5501.json b/tests/data/devices/ubisys-s1-5501-0x02600460.json similarity index 100% rename from tests/data/devices/ubisys-s1-5501.json rename to tests/data/devices/ubisys-s1-5501-0x02600460.json diff --git a/tests/data/devices/universal-electronics-inc-urc4460bc0-x-r.json b/tests/data/devices/universal-electronics-inc-urc4460bc0-x-r-0x20160921.json similarity index 100% rename from tests/data/devices/universal-electronics-inc-urc4460bc0-x-r.json rename to tests/data/devices/universal-electronics-inc-urc4460bc0-x-r-0x20160921.json diff --git a/tests/data/devices/xiaoyan-terncy-sd01.json b/tests/data/devices/xiaoyan-terncy-sd01-0x0000001a.json similarity index 100% rename from tests/data/devices/xiaoyan-terncy-sd01.json rename to tests/data/devices/xiaoyan-terncy-sd01-0x0000001a.json diff --git a/tests/data/devices/yale-yrd256-tsdb.json b/tests/data/devices/yale-yrd256-tsdb-0x0105002b.json similarity index 100% rename from tests/data/devices/yale-yrd256-tsdb.json rename to tests/data/devices/yale-yrd256-tsdb-0x0105002b.json diff --git a/tests/data/devices/yooksmart-d10110.json b/tests/data/devices/yooksmart-d10110-0x12046780.json similarity index 100% rename from tests/data/devices/yooksmart-d10110.json rename to tests/data/devices/yooksmart-d10110-0x12046780.json diff --git a/tests/data/devices/zemismart-spm02-3z3.json b/tests/data/devices/zemismart-spm02-3z3-0x0000000e.json similarity index 100% rename from tests/data/devices/zemismart-spm02-3z3.json rename to tests/data/devices/zemismart-spm02-3z3-0x0000000e.json diff --git a/tests/data/devices/zen-within-zen-01.json b/tests/data/devices/zen-within-zen-01-0x0000021f.json similarity index 100% rename from tests/data/devices/zen-within-zen-01.json rename to tests/data/devices/zen-within-zen-01-0x0000021f.json diff --git a/tests/test_alarm_control_panel.py b/tests/test_alarm_control_panel.py index 4443ffc3c..5192d4460 100644 --- a/tests/test_alarm_control_panel.py +++ b/tests/test_alarm_control_panel.py @@ -29,7 +29,7 @@ async def test_alarm_control_panel( """Test zhaws alarm control panel platform.""" zigpy_device: ZigpyDevice = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/frient-a-s-kepzb-110.json", + "tests/data/devices/frient-a-s-kepzb-110-0x00020005.json", ) zha_device: Device = await join_zigpy_device(zha_gateway, zigpy_device) cluster: security.IasAce = zigpy_device.endpoints[44].out_clusters[ diff --git a/tests/test_device.py b/tests/test_device.py index 9946d978d..8c9703555 100644 --- a/tests/test_device.py +++ b/tests/test_device.py @@ -795,7 +795,7 @@ async def test_device_firmware_version_syncing(zha_gateway: Gateway) -> None: """Test device firmware version syncing.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/philips-sml001.json", + "tests/data/devices/philips-sml001-0x42006bb7.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -846,7 +846,7 @@ async def test_quirks_v2_device_renaming(zha_gateway: Gateway) -> None: zigpy_dev = registry.resolve( await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/centralite-3405-l.json", + "tests/data/devices/centralite-3405-l-0x10025310.json", ) ) @@ -861,7 +861,7 @@ async def test_quirks_v2_device_alerts(zha_gateway: Gateway) -> None: # Normal device, no alerts zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-opal-1000lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-opal-1000lm-0x23094631.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) assert not zha_device.device_alerts @@ -878,7 +878,7 @@ async def test_quirks_v2_device_alerts(zha_gateway: Gateway) -> None: zigpy_dev = registry.resolve( await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/centralite-3405-l.json", + "tests/data/devices/centralite-3405-l-0x10025310.json", ) ) @@ -893,13 +893,13 @@ async def test_quirks_v2_device_alerts(zha_gateway: Gateway) -> None: [ # Light bulb ( - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", Platform.LIGHT, Light, ), # Night light with a bulb and a motion sensor ( - "tests/data/devices/third-reality-inc-3rsnl02043z.json", + "tests/data/devices/third-reality-inc-3rsnl02043z-0x0000003c.json", Platform.LIGHT, Light, ), @@ -911,7 +911,7 @@ async def test_quirks_v2_device_alerts(zha_gateway: Gateway) -> None: ), # Smart plug with energy monitoring ( - "tests/data/devices/innr-sp-234.json", + "tests/data/devices/innr-sp-234-0x31016610.json", Platform.SWITCH, Switch, ), @@ -967,7 +967,7 @@ async def test_quirks_v2_primary_entity(zha_gateway: Gateway) -> None: zigpy_dev = registry.resolve( await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/centralite-3405-l.json", + "tests/data/devices/centralite-3405-l-0x10025310.json", ) ) @@ -996,7 +996,7 @@ async def test_quirks_v2_prevent_default_entities(zha_gateway: Gateway) -> None: zigpy_dev = registry.resolve( await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/centralite-3405-l.json", + "tests/data/devices/centralite-3405-l-0x10025310.json", ) ) @@ -1068,7 +1068,7 @@ def filter_func(entity) -> bool: zigpy_dev = registry.resolve( await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/centralite-3405-l.json", + "tests/data/devices/centralite-3405-l-0x10025310.json", ) ) @@ -1123,7 +1123,7 @@ async def test_quirks_v2_translation_placeholders(zha_gateway: Gateway) -> None: zigpy_dev = registry.resolve( await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/centralite-3405-l.json", + "tests/data/devices/centralite-3405-l-0x10025310.json", ) ) @@ -1154,7 +1154,7 @@ async def test_quirks_v2_exposed_features(zha_gateway: Gateway) -> None: zigpy_dev = registry.resolve( await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/centralite-3405-l.json", + "tests/data/devices/centralite-3405-l-0x10025310.json", ) ) @@ -1262,7 +1262,7 @@ async def test_unquirked_client_cluster_events(zha_gateway: Gateway) -> None: zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/innr-rc-250.json", + "tests/data/devices/innr-rc-250-0x21086500.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1392,7 +1392,7 @@ async def test_somrig_events(zha_gateway: Gateway) -> None: zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-somrig-shortcut-button.json", + "tests/data/devices/ikea-of-sweden-somrig-shortcut-button-0x01000021.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1439,7 +1439,7 @@ async def test_symfonisk_events( zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-symfonisk-sound-remote-gen2.json", + "tests/data/devices/ikea-of-sweden-symfonisk-sound-remote-gen2-0x00010012.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1486,7 +1486,7 @@ async def test_device_on_remove_callback_failure( """Test that device.on_remove continues when callback fails.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/philips-sml001.json", + "tests/data/devices/philips-sml001-0x43007401.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1507,7 +1507,7 @@ async def test_device_on_remove_platform_entity_failure( """Test that device.on_remove continues when platform entity removal fails.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/philips-sml001.json", + "tests/data/devices/philips-sml001-0x43007401.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1528,7 +1528,7 @@ async def test_device_on_remove_pending_entity_failure( """Test that device.on_remove continues when pending entity removal fails.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/philips-sml001.json", + "tests/data/devices/philips-sml001-0x43007401.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1552,7 +1552,7 @@ async def test_initial_entity_discovery_does_not_emit_events( """Test that first device initialization does not emit entity events.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1577,7 +1577,7 @@ async def test_reinitialize_emits_events_for_new_entities( """Test that re-initializing a device emits events for new entities.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1604,7 +1604,7 @@ async def test_reinitialize_after_on_remove_emits_events( """Test that re-init after on_remove (all entities cleared) still emits events.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) entity_count = len(zha_device.platform_entities) @@ -1626,7 +1626,7 @@ async def test_remove_entity_no_event(zha_gateway: Gateway) -> None: """Test that _remove_entity with emit_event=False does not emit.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1643,7 +1643,7 @@ async def test_entity_recomputation(zha_gateway: Gateway) -> None: """Test entity recomputation.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1704,7 +1704,7 @@ async def test_add_entity_duplicate(zha_gateway: Gateway) -> None: """Test that adding a duplicate entity raises an error.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1718,7 +1718,7 @@ async def test_remove_entity_nonexistent(zha_gateway: Gateway) -> None: """Test that removing a nonexistent entity raises an error.""" zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) diff --git a/tests/test_discover.py b/tests/test_discover.py index 4bb89f653..edd36fb19 100644 --- a/tests/test_discover.py +++ b/tests/test_discover.py @@ -107,7 +107,10 @@ async def test_device_override( async def test_device_override_entities(zha_gateway: Gateway) -> None: """Test device discovery entity changes.""" device_data_text = await asyncio.get_running_loop().run_in_executor( - None, pathlib.Path("tests/data/devices/tz3000-tqlv4ug4-ts0001.json").read_text + None, + pathlib.Path( + "tests/data/devices/tz3000-tqlv4ug4-ts0001-0x00000048.json" + ).read_text, ) device_data = json.loads(device_data_text) @@ -153,7 +156,7 @@ async def test_device_override_picks_highest_priority( # entity should be created, not duplicates from collecting all priority levels. zigpy_device = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/philips-lct014.json", + "tests/data/devices/philips-lct014-0x01001a02.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_device) @@ -915,7 +918,7 @@ async def test_get_diagnostics_json_repeated_calls(zha_gateway: Gateway) -> None """Test that calling get_diagnostics_json twice produces the same result.""" zigpy_device = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/jasco-products-45856.json", + "tests/data/devices/jasco-products-45856-0x00000006.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_device) @@ -932,7 +935,7 @@ async def test_diagnostics_includes_ota_last_query_cmd(zha_gateway: Gateway) -> """Test that diagnostics includes last_query_cmd for OTA clusters.""" zigpy_device = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) ota_cluster = zigpy_device.endpoints[1].out_clusters[Ota.cluster_id] @@ -964,7 +967,7 @@ async def test_diagnostics_omits_ota_last_query_cmd_when_none( """Test that diagnostics omits last_query_cmd when it is None.""" zigpy_device = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_device) @@ -983,7 +986,7 @@ async def test_entityless_cluster_binds_via_virtual_entity( """Manufacturer clusters that don't produce entities are still bound.""" zigpy_device = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/signify-netherlands-b-v-rwl022.json", + "tests/data/devices/signify-netherlands-b-v-rwl022-0x02004d27.json", ) # The Philips remote cluster (0xFC00) has no HA entity but `PhilipsRemoteBind` diff --git a/tests/test_gateway.py b/tests/test_gateway.py index c86b73448..17792ba40 100644 --- a/tests/test_gateway.py +++ b/tests/test_gateway.py @@ -1232,7 +1232,7 @@ async def test_gateway_shutdown_group_on_remove_failure( """Test that gateway shutdown continues when group.on_remove fails.""" zigpy_dev_1 = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zha_device_1 = await join_zigpy_device(zha_gateway, zigpy_dev_1) @@ -1259,11 +1259,11 @@ async def test_group_on_remove_entity_failure( """Test that group.on_remove continues when group entity removal fails.""" zigpy_dev_1 = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-gu10-ws-400lm-0x23095631.json", ) zigpy_dev_2 = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-opal-1000lm.json", + "tests/data/devices/ikea-of-sweden-tradfri-bulb-e26-opal-1000lm-0x23094631.json", ) zha_device_1 = await join_zigpy_device(zha_gateway, zigpy_dev_1) zha_device_2 = await join_zigpy_device(zha_gateway, zigpy_dev_2) diff --git a/tests/test_inovelli.py.bak b/tests/test_inovelli.py.bak deleted file mode 100644 index 2e8399ffc..000000000 --- a/tests/test_inovelli.py.bak +++ /dev/null @@ -1,164 +0,0 @@ -"""Test Inovelli cluster handler.""" - -from unittest.mock import AsyncMock, patch - -import pytest -from zhaquirks.inovelli.types import AllLEDEffectType - -from tests.common import join_zigpy_device, zigpy_device_from_json -from zha.application.gateway import Gateway -from zha.zigbee.cluster_handlers.const import CLUSTER_HANDLER_INOVELLI - - -async def test_inovelli_all_led_effect_with_string_effect_type( - zha_gateway: Gateway, -) -> None: - """Test that issue_all_led_effect accepts string effect types. - - Regression test for https://github.com/home-assistant/core/issues/159053 - """ - zigpy_dev = await zigpy_device_from_json( - zha_gateway.application_controller, - "tests/data/devices/inovelli-vzm31-sn.json", - ) - zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) - - # Get the Inovelli cluster handler - inovelli_cluster_handler = None - for endpoint in zha_device.endpoints.values(): - for ch in endpoint.all_cluster_handlers.values(): - if ch.name == CLUSTER_HANDLER_INOVELLI: - inovelli_cluster_handler = ch - break - - assert inovelli_cluster_handler is not None - - # Mock at the endpoint level to capture the serialized frame - with patch.object( - inovelli_cluster_handler.cluster.endpoint, - "request", - new_callable=AsyncMock, - ) as mock_request: - # Pass effect_type as a string (like the UI does) - # This should NOT raise ValueError - await inovelli_cluster_handler.issue_all_led_effect( - effect_type="Fast_Falling", - color=200, - level=100, - duration=3, - ) - - # Verify the request was made - assert len(mock_request.mock_calls) == 1 - - # The serialized frame data should contain the correct byte value - # Frame format: [frame_control, mfr_code_lo, mfr_code_hi, seq, cmd_id, effect, color, level, duration] - frame_data = mock_request.mock_calls[0].kwargs["data"] - assert frame_data[5] == 0x0B # Fast_Falling = 11 - assert frame_data[6] == 200 # color - assert frame_data[7] == 100 # level - assert frame_data[8] == 3 # duration - - -async def test_inovelli_individual_led_effect_with_string_effect_type( - zha_gateway: Gateway, -) -> None: - """Test that issue_individual_led_effect accepts string effect types. - - Regression test for https://github.com/home-assistant/core/issues/159053 - """ - zigpy_dev = await zigpy_device_from_json( - zha_gateway.application_controller, - "tests/data/devices/inovelli-vzm31-sn.json", - ) - zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) - - # Get the Inovelli cluster handler - inovelli_cluster_handler = None - for endpoint in zha_device.endpoints.values(): - for ch in endpoint.all_cluster_handlers.values(): - if ch.name == CLUSTER_HANDLER_INOVELLI: - inovelli_cluster_handler = ch - break - - assert inovelli_cluster_handler is not None - - # Mock at the endpoint level to capture the serialized frame - with patch.object( - inovelli_cluster_handler.cluster.endpoint, - "request", - new_callable=AsyncMock, - ) as mock_request: - # Pass effect_type as a string (like the UI does) - # This should NOT raise ValueError - await inovelli_cluster_handler.issue_individual_led_effect( - led_number=1, - effect_type="Solid", - color=200, - level=100, - duration=3, - ) - - # Verify the request was made - assert len(mock_request.mock_calls) == 1 - - # The serialized frame data should contain the correct byte values - # Frame format: [frame_control, mfr_code_lo, mfr_code_hi, seq, cmd_id, led_num, effect, color, level, duration] - frame_data = mock_request.mock_calls[0].kwargs["data"] - assert frame_data[5] == 1 # led_number - assert frame_data[6] == 0x01 # Solid = 1 - assert frame_data[7] == 200 # color - assert frame_data[8] == 100 # level - assert frame_data[9] == 3 # duration - - -@pytest.mark.parametrize( - ("effect_type", "expected_value"), - [ - (AllLEDEffectType.Fast_Falling, 11), # Enum value - (11, 11), # Integer value - ("Fast_Falling", 11), # String value - ], -) -async def test_inovelli_all_led_effect_accepts_various_types( - zha_gateway: Gateway, - effect_type: AllLEDEffectType | int | str, - expected_value: int, -) -> None: - """Test that issue_all_led_effect accepts enum, int, and string effect types.""" - zigpy_dev = await zigpy_device_from_json( - zha_gateway.application_controller, - "tests/data/devices/inovelli-vzm31-sn.json", - ) - zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) - - # Get the Inovelli cluster handler - inovelli_cluster_handler = None - for endpoint in zha_device.endpoints.values(): - for ch in endpoint.all_cluster_handlers.values(): - if ch.name == CLUSTER_HANDLER_INOVELLI: - inovelli_cluster_handler = ch - break - - assert inovelli_cluster_handler is not None - - # Mock at the endpoint level to capture the serialized frame - with patch.object( - inovelli_cluster_handler.cluster.endpoint, - "request", - new_callable=AsyncMock, - ) as mock_request: - # Should not raise ValueError for any of these types - await inovelli_cluster_handler.issue_all_led_effect( - effect_type=effect_type, - color=200, - level=100, - duration=3, - ) - - # Verify the request was made - assert len(mock_request.mock_calls) == 1 - - # All types should result in the same byte value in the serialized frame - frame_data = mock_request.mock_calls[0].kwargs["data"] - assert frame_data[5] == expected_value diff --git a/tests/test_select.py b/tests/test_select.py index e141f50b3..9e732f244 100644 --- a/tests/test_select.py +++ b/tests/test_select.py @@ -285,7 +285,7 @@ async def test_bega_color_temperature_channel_select(zha_gateway: Gateway) -> No """Test BEGA color temperature channel select entity.""" zigpy_device = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/bega-gantenbrink-leuchten-kg-smart-dimmable-light.json", + "tests/data/devices/bega-gantenbrink-leuchten-kg-smart-dimmable-light-0x00990be9.json", ) cluster = zigpy_device.endpoints[1].in_clusters[general.LevelControl.cluster_id] @@ -351,7 +351,7 @@ async def test_bega_color_temperature_channel_select_unsupported( """Test BEGA select entity is not created when a color temp is 0xFFFF.""" zigpy_device = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/bega-gantenbrink-leuchten-kg-smart-dimmable-light.json", + "tests/data/devices/bega-gantenbrink-leuchten-kg-smart-dimmable-light-0x00990be9.json", ) cluster = zigpy_device.endpoints[1].in_clusters[general.LevelControl.cluster_id] diff --git a/tests/test_sensor.py b/tests/test_sensor.py index 892c74d87..1759f2edd 100644 --- a/tests/test_sensor.py +++ b/tests/test_sensor.py @@ -1937,7 +1937,7 @@ async def test_ignore_non_value(zha_gateway: Gateway) -> None: zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/third-reality-inc-3rsm0147z.json", + "tests/data/devices/third-reality-inc-3rsm0147z-0x0000001f.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -1968,7 +1968,7 @@ async def test_ignore_non_value_quirks_v2(zha_gateway: Gateway) -> None: zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/frient-a-s-aqszb-110.json", + "tests/data/devices/frient-a-s-aqszb-110-0x00040001.json", ) assert isinstance(zigpy_dev, CustomZigpyDevice) @@ -1990,7 +1990,7 @@ async def test_ignore_nan_value(zha_gateway: Gateway) -> None: zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/frient-a-s-scazb-141.json", + "tests/data/devices/frient-a-s-scazb-141-0x00010803.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) @@ -2074,7 +2074,7 @@ async def test_enum_sensor(zha_gateway: Gateway) -> None: registry = DeviceRegistry() zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/centralite-3405-l.json", + "tests/data/devices/centralite-3405-l-0x10025310.json", ) zigpy_dev.endpoints[1].power.update_attribute( @@ -2119,7 +2119,7 @@ async def test_em_poller_runs_independently_of_entity_enabled_state( zigpy_dev = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/ubisys-s1-5501.json", + "tests/data/devices/ubisys-s1-5501-0x02600460.json", ) zha_device = await join_zigpy_device(zha_gateway, zigpy_dev) diff --git a/tests/test_switch.py b/tests/test_switch.py index 9c746eb60..a468c2015 100644 --- a/tests/test_switch.py +++ b/tests/test_switch.py @@ -853,7 +853,7 @@ async def test_binary_output_cluster(zha_gateway: Gateway) -> None: zigpy_device = await zigpy_device_from_json( zha_gateway.application_controller, - "tests/data/devices/espressif-zigbeebinaryoutputdevice.json", + "tests/data/devices/espressif-zigbeebinaryanalogdevice.json", ) cluster = zigpy_device.endpoints[1].binary_output zha_device = await join_zigpy_device(zha_gateway, zigpy_device) diff --git a/tools/import_diagnostics.py b/tools/import_diagnostics.py index f701602aa..a1197b990 100644 --- a/tools/import_diagnostics.py +++ b/tools/import_diagnostics.py @@ -213,29 +213,38 @@ def zigpy_device_from_legacy_diagnostics( # noqa: C901 if patch_cluster: patch_cluster_for_testing(real_cluster) + for attr_id, attr in cluster["attributes"].items(): if ( attr.get("value") is None or attr_id in cluster["unsupported_attributes"] ): continue - real_cluster._attr_cache[int(attr_id, 16)] = parse_legacy_value( - attr["value"] - ) - real_cluster.PLUGGED_ATTR_READS[int(attr_id, 16)] = parse_legacy_value( - attr["value"] - ) + + attr_id_int = int(attr_id, 16) + parsed = parse_legacy_value(attr["value"]) + + if attr_id_int in real_cluster.attributes: + real_cluster._attr_cache[attr_id_int] = parsed + else: + _LOGGER.warning( + "Setting legacy value for unknown attribute %s on server cluster %s: %r", + attr_id, + cluster_id, + parsed, + ) + real_cluster._attr_cache.set_legacy_value(attr_id_int, parsed) + + real_cluster.PLUGGED_ATTR_READS[attr_id_int] = parsed + for unsupported_attr in cluster["unsupported_attributes"]: if isinstance(unsupported_attr, str) and unsupported_attr.startswith( "0x" ): attrid = int(unsupported_attr, 16) - real_cluster.add_unsupported_attribute(attrid) if attrid in real_cluster.attributes: - real_cluster.add_unsupported_attribute( - real_cluster.attributes[attrid].name - ) - else: + real_cluster.add_unsupported_attribute(attrid) + elif unsupported_attr in real_cluster.attributes_by_name: real_cluster.add_unsupported_attribute(unsupported_attr) for cluster_id, cluster in ep["out_clusters"].items(): @@ -254,29 +263,38 @@ def zigpy_device_from_legacy_diagnostics( # noqa: C901 if patch_cluster: patch_cluster_for_testing(real_cluster) + for attr_id, attr in cluster["attributes"].items(): if ( attr.get("value") is None or attr_id in cluster["unsupported_attributes"] ): continue - real_cluster._attr_cache[int(attr_id, 16)] = parse_legacy_value( - attr["value"] - ) - real_cluster.PLUGGED_ATTR_READS[int(attr_id, 16)] = parse_legacy_value( - attr["value"] - ) + + attr_id_int = int(attr_id, 16) + parsed = parse_legacy_value(attr["value"]) + + if attr_id_int in real_cluster.attributes: + real_cluster._attr_cache[attr_id_int] = parsed + else: + _LOGGER.warning( + "Setting legacy value for unknown attribute %s on client cluster %s: %r", + attr_id, + cluster_id, + parsed, + ) + real_cluster._attr_cache.set_legacy_value(attr_id_int, parsed) + + real_cluster.PLUGGED_ATTR_READS[attr_id_int] = parsed + for unsupported_attr in cluster["unsupported_attributes"]: if isinstance(unsupported_attr, str) and unsupported_attr.startswith( "0x" ): attrid = int(unsupported_attr, 16) - real_cluster.add_unsupported_attribute(attrid) if attrid in real_cluster.attributes: - real_cluster.add_unsupported_attribute( - real_cluster.attributes[attrid].name - ) - else: + real_cluster.add_unsupported_attribute(attrid) + elif unsupported_attr in real_cluster.attributes_by_name: real_cluster.add_unsupported_attribute(unsupported_attr) if device.model is None and device.manufacturer is None: @@ -299,6 +317,10 @@ def zigpy_device_from_diagnostics( if "version" not in zha_data: return zigpy_device_from_legacy_diagnostics(app, data, patch_cluster) + # Some diagnostics are hand-redacted (e.g. nwk "0xREDACTED"), fake a NWK instead + if "REDACTED" in zha_data["nwk"]: + zha_data["nwk"] = "0x1234" + # Home Assistant diagnostics contain redacted IEEE info, fake an IEEE instead if "REDACTED" in zha_data["ieee"]: zha_data["ieee"] = str( @@ -340,31 +362,35 @@ async def main(paths: list[str]): _LOGGER.debug("Skipping, not valid JSON") continue - if "home_assistant" not in data: - _LOGGER.debug("Skipping, missing 'home_assistant' key") - continue - - zigpy_device = zigpy_device_from_diagnostics( - zha_gateway.application_controller, data - ) + if "version" in data and "node_descriptor" in data and "endpoints" in data: + # Directly parse the diagnostics JSON + zigpy_device = zigpy_device_from_device_data( + app=zha_gateway.application_controller, + device_data=data, + ) + else: + # Otherwise, try to import one of the many legacy ZHA formats + if "home_assistant" not in data: + _LOGGER.debug("Skipping, missing 'home_assistant' key") + continue - if zigpy_device is None: - _LOGGER.debug("Skipping, diagnostics are not valid") - continue + # There is currently just one known "bad" device: a DIY device that + # copies the model and manufacturer strings from an unrelated device. We + # skip it. + ha_data = data["home_assistant"].get("data", {}) + if ( + ha_data.get("last_seen") == "2026-03-04T18:21:39.038488+00:00" + ) and (ha_data.get("model") == "J1 (5502)"): + _LOGGER.debug("Skipping known-bad DIY device") + continue - output_path = ( - REPO_ROOT - / "tests" - / "data" - / "devices" - / ( - slugify(f"{zigpy_device.manufacturer}-{zigpy_device.model}") - + ".json" + zigpy_device = zigpy_device_from_diagnostics( + zha_gateway.application_controller, data ) - ) - if output_path.is_file(): - continue + if zigpy_device is None: + _LOGGER.debug("Skipping, diagnostics are not valid") + continue with patch("zigpy.zcl.Cluster._update_attribute"): zha_device = await join_zigpy_device(zha_gateway, zigpy_device) @@ -373,7 +399,6 @@ async def main(paths: list[str]): # First, try to join the device initial_json = zha_device.get_diagnostics_json() - await zha_gateway.async_remove_device(zha_device) await zha_device.on_remove() del zha_gateway.devices[zha_device.ieee] @@ -390,12 +415,31 @@ async def main(paths: list[str]): await zha_gateway.async_block_till_done(wait_background_tasks=True) rejoined_json = rejoined_zha_device.get_diagnostics_json() + fw_version = rejoined_zha_device.firmware_version + + await rejoined_zha_device.on_remove() + del zha_gateway.devices[rejoined_zha_device.ieee] + if initial_json != rejoined_json: _LOGGER.warning( "Rejoined device %s does not match original diagnostics JSON, quirk has modified the device signature", path, ) continue + suffix = f"-{fw_version}" if fw_version is not None else "" + output_path = ( + REPO_ROOT + / "tests" + / "data" + / "devices" + / ( + slugify(f"{zigpy_device.manufacturer}-{zigpy_device.model}{suffix}") + + ".json" + ) + ) + + if output_path.is_file(): + continue _LOGGER.info("Importing %s as %s", path, output_path.name) new_json = json.dumps(initial_json, indent=2, cls=ZhaJsonEncoder) diff --git a/tools/regenerate_diagnostics.py b/tools/regenerate_diagnostics.py index 6aa07b7ce..86857926b 100644 --- a/tools/regenerate_diagnostics.py +++ b/tools/regenerate_diagnostics.py @@ -63,6 +63,7 @@ async def main(files: list[str] | None = None) -> None: device_json.write_text(new_json) await zha_device.on_remove() + del zha_gateway.devices[zha_device.ieee] if __name__ == "__main__":