diff --git a/tests/data/devices/ewelink-ck-tlsr8656-ss5-01-7000.json b/tests/data/devices/ewelink-ck-tlsr8656-ss5-01-7000.json new file mode 100644 index 000000000..ac1832c40 --- /dev/null +++ b/tests/data/devices/ewelink-ck-tlsr8656-ss5-01-7000.json @@ -0,0 +1,415 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:40:82:43:82", + "nwk": "0xF9A2", + "manufacturer": "eWeLink", + "model": "CK-TLSR8656-SS5-01(7000)", + "friendly_manufacturer": "eWeLink", + "friendly_model": "CK-TLSR8656-SS5-01(7000)", + "name": "eWeLink CK-TLSR8656-SS5-01(7000)", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4742, + "power_source": "Battery or Unknown", + "lqi": 196, + "rssi": -51, + "last_seen": "2026-01-02T04:15:40.024886+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": 74, + "maximum_incoming_transfer_size": 404, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 404, + "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": "CK-TLSR8656-SS5-01(7000)" + } + ] + }, + { + "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": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0020", + "endpoint_attribute": "poll_control", + "attributes": [ + { + "id": "0x0003", + "name": "fast_poll_timeout", + "zcl_type": "uint16", + "value": 120 + } + ] + } + ], + "out_clusters": [ + { + "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": 4354 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "eWeLink", + "model": "CK-TLSR8656-SS5-01(7000)", + "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": 74, + "maximum_incoming_transfer_size": 404, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 404, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0000", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0004", + "0x0020" + ], + "output_clusters": [ + "0x0006", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:40:82:43:82-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:40:82:43:82:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:40:82:43:82", + "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:40:82:43:82-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:40:82:43:82:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:40:82:43:82", + "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:40:82:43:82-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:40:82:43:82:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:40:82:43:82", + "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:40:82:43:82-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, + "cluster_handlers": [ + { + "class_name": "PowerConfigurationClusterHandler", + "generic_id": "cluster_handler_0x0001", + "endpoint_id": 1, + "cluster": { + "id": 1, + "name": "Power Configuration", + "type": "server" + }, + "id": "1:0x0001", + "unique_id": "ab:cd:ef:12:40:82:43:82:1:0x0001", + "status": "INITIALIZED", + "value_attribute": "battery_voltage" + } + ], + "device_ieee": "ab:cd:ef:12:40:82:43:82", + "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:40:82:43:82-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:40:82:43:82:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:40:82:43:82", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00001102", + "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/handshake-finland-agge-zigbee-smart-rotary-dimmer.json b/tests/data/devices/handshake-finland-agge-zigbee-smart-rotary-dimmer.json new file mode 100644 index 000000000..1c92c926f --- /dev/null +++ b/tests/data/devices/handshake-finland-agge-zigbee-smart-rotary-dimmer.json @@ -0,0 +1,562 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:45:62:b6:0e", + "nwk": "0x5A2D", + "manufacturer": "Handshake Finland", + "model": "AGGE Zigbee smart rotary dimmer", + "friendly_manufacturer": "Handshake Finland", + "friendly_model": "AGGE Zigbee smart rotary dimmer", + "name": "Handshake Finland AGGE Zigbee smart rotary dimmer", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4714, + "power_source": "Mains", + "lqi": 136, + "rssi": -66, + "last_seen": "2026-01-05T13:55:46.239143+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": 4714, + "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": "DIMMABLE_LIGHT", + "id": 257 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Handshake Finland" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "AGGE Zigbee smart rotary dimmer" + }, + { + "id": "0x4000", + "name": "sw_build_id", + "zcl_type": "string", + "value": "3.09" + } + ] + }, + { + "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", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [ + { + "id": "0x0000", + "name": "current_level", + "zcl_type": "uint8", + "value": 137 + }, + { + "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": 229 + }, + { + "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", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0b05", + "endpoint_attribute": "diagnostic", + "attributes": [] + }, + { + "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": 2 + } + ] + } + ] + }, + "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": "Handshake Finland", + "model": "AGGE Zigbee smart rotary dimmer", + "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": 4714, + "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": "0x0101", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x0b05", + "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:45:62:b6: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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:45:62:b6:0e:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:45:62:b6:0e", + "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:45:62:b6:0e-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:45:62:b6:0e:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + }, + { + "class_name": "LevelControlClusterHandler", + "generic_id": "cluster_handler_0x0008", + "endpoint_id": 1, + "cluster": { + "id": 8, + "name": "Level control", + "type": "server" + }, + "id": "1:0x0008", + "unique_id": "ab:cd:ef:12:45:62:b6:0e:1:0x0008", + "status": "INITIALIZED", + "value_attribute": "current_level" + } + ], + "device_ieee": "ab:cd:ef:12:45:62:b6:0e", + "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": 137, + "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:45:62:b6:0e-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, + "cluster_handlers": [ + { + "class_name": "LevelControlClusterHandler", + "generic_id": "cluster_handler_0x0008", + "endpoint_id": 1, + "cluster": { + "id": 8, + "name": "Level control", + "type": "server" + }, + "id": "1:0x0008", + "unique_id": "ab:cd:ef:12:45:62:b6:0e:1:0x0008", + "status": "INITIALIZED", + "value_attribute": "current_level" + } + ], + "device_ieee": "ab:cd:ef:12:45:62:b6:0e", + "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": 229 + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:45:62:b6: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:45:62:b6:0e:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:45:62:b6:0e", + "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:45:62:b6: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:45:62:b6:0e:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:45:62:b6:0e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -66 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:45:62:b6: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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:45:62:b6:0e:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:45:62:b6:0e", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000002", + "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-starkvind-air-purifier-table.json b/tests/data/devices/ikea-of-sweden-starkvind-air-purifier-table.json new file mode 100644 index 000000000..8da7f706a --- /dev/null +++ b/tests/data/devices/ikea-of-sweden-starkvind-air-purifier-table.json @@ -0,0 +1,886 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:e0:99:45:a5", + "nwk": "0x80D4", + "manufacturer": "IKEA of Sweden", + "model": "STARKVIND Air purifier table", + "friendly_manufacturer": "IKEA of Sweden", + "friendly_model": "STARKVIND Air purifier table", + "name": "IKEA of Sweden STARKVIND Air purifier table", + "quirk_applied": true, + "quirk_class": "zhaquirks.ikea.starkvind.IkeaSTARKVIND_v2", + "exposes_features": [], + "manufacturer_code": 4476, + "power_source": "Mains", + "lqi": 204, + "rssi": -60, + "last_seen": "2026-01-07T06:44:26.797148+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": 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": "COMBINED_INTERFACE", + "id": 7 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 17 + }, + { + "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": "IKEA of Sweden" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "STARKVIND Air purifier table" + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x042a", + "endpoint_attribute": "pm25", + "attributes": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0002", + "name": "max_measured_value", + "zcl_type": "single", + "unsupported": true + }, + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "single", + "value": 0 + }, + { + "id": "0x0001", + "name": "min_measured_value", + "zcl_type": "single", + "unsupported": true + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0003", + "name": "tolerance", + "zcl_type": "single", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xfc57", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + }, + { + "cluster_id": "0xfc7c", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + }, + { + "cluster_id": "0xfc7d", + "endpoint_attribute": "ikea_airpurifier", + "attributes": [ + { + "id": "0x0004", + "name": "air_quality_25pm", + "zcl_type": "uint16", + "value": 65535 + }, + { + "id": "0x0005", + "name": "child_lock", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x0008", + "name": "device_run_time", + "zcl_type": "uint32", + "value": 59343 + }, + { + "id": "0x0003", + "name": "disable_led", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x0006", + "name": "fan_mode", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0007", + "name": "fan_speed", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0002", + "name": "filter_life_time", + "zcl_type": "uint32", + "value": 259200 + }, + { + "id": "0x0000", + "name": "filter_run_time", + "zcl_type": "uint32", + "value": 59343 + }, + { + "id": "0x0001", + "name": "replace_filter", + "zcl_type": "uint8", + "value": 0 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 69633 + }, + { + "id": "0x0003", + "name": "current_zigbee_stack_version", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0004", + "name": "downloaded_file_version", + "zcl_type": "uint32", + "unsupported": true + }, + { + "id": "0x0005", + "name": "downloaded_zigbee_stack_version", + "zcl_type": "uint16", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0400", + "endpoint_attribute": "illuminance", + "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": "IKEA of Sweden", + "model": "STARKVIND Air purifier table", + "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": 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": "0x0007", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0202", + "0xfc57", + "0xfc7c", + "0xfc7d" + ], + "output_clusters": [ + "0x0019", + "0x0400", + "0x042a" + ] + }, + "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:e0:99:45:a5-1-64637-replace_filter", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "ReplaceFilter", + "translation_key": "replace_filter", + "translation_placeholders": null, + "device_class": "problem", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "IkeaAirPurifierClusterHandler", + "generic_id": "cluster_handler_0xfc7d", + "endpoint_id": 1, + "cluster": { + "id": 64637, + "name": "Ikea Airpurifier", + "type": "server" + }, + "id": "1:0xfc7d", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0xfc7d", + "status": "INITIALIZED", + "value_attribute": "filter_run_time" + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "replace_filter" + }, + "state": { + "class_name": "ReplaceFilter", + "available": true, + "state": false + } + } + ], + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "command": "identify", + "args": [ + 5 + ], + "kwargs": {} + }, + "state": { + "class_name": "IdentifyButton", + "available": true + } + } + ], + "fan": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-1-64637", + "migrate_unique_ids": [], + "platform": "fan", + "class_name": "IkeaFan", + "translation_key": "fan", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "cluster_handlers": [ + { + "class_name": "IkeaAirPurifierClusterHandler", + "generic_id": "cluster_handler_0xfc7d", + "endpoint_id": 1, + "cluster": { + "id": 64637, + "name": "Ikea Airpurifier", + "type": "server" + }, + "id": "1:0xfc7d", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0xfc7d", + "status": "INITIALIZED", + "value_attribute": "filter_run_time" + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "preset_modes": [ + "auto" + ], + "supported_features": 57, + "speed_count": 10, + "speed_list": [ + "off", + "low", + "medium", + "high", + "auto" + ] + }, + "state": { + "class_name": "IkeaFan", + "available": true, + "preset_mode": null, + "percentage": 0, + "is_on": false, + "speed": "off" + } + } + ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-1-64637-filter_life_time", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "FilterLifeTime", + "translation_key": "filter_life_time", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "IkeaAirPurifierClusterHandler", + "generic_id": "cluster_handler_0xfc7d", + "endpoint_id": 1, + "cluster": { + "id": 64637, + "name": "Ikea Airpurifier", + "type": "server" + }, + "id": "1:0xfc7d", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0xfc7d", + "status": "INITIALIZED", + "value_attribute": "filter_run_time" + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 4294967295, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": "min" + }, + "state": { + "class_name": "FilterLifeTime", + "available": true, + "state": 259200 + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "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:e0:99:45:a5-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -60 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-1-1066", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "PM25", + "translation_key": null, + "translation_placeholders": null, + "device_class": "pm25", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "PM25ClusterHandler", + "generic_id": "cluster_handler_0x042a", + "endpoint_id": 1, + "cluster": { + "id": 1066, + "name": "PM2.5", + "type": "server" + }, + "id": "1:0x042a", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0x042a", + "status": "INITIALIZED", + "value_attribute": "measured_value" + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b5g/m\u00b3" + }, + "state": { + "class_name": "PM25", + "available": true, + "state": 0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-1-64637-device_run_time", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "IkeaDeviceRunTime", + "translation_key": "device_run_time", + "translation_placeholders": null, + "device_class": "duration", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "IkeaAirPurifierClusterHandler", + "generic_id": "cluster_handler_0xfc7d", + "endpoint_id": 1, + "cluster": { + "id": 64637, + "name": "Ikea Airpurifier", + "type": "server" + }, + "id": "1:0xfc7d", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0xfc7d", + "status": "INITIALIZED", + "value_attribute": "filter_run_time" + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "min" + }, + "state": { + "class_name": "IkeaDeviceRunTime", + "available": true, + "state": 59343 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-1-64637-filter_run_time", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "IkeaFilterRunTime", + "translation_key": "filter_run_time", + "translation_placeholders": null, + "device_class": "duration", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "IkeaAirPurifierClusterHandler", + "generic_id": "cluster_handler_0xfc7d", + "endpoint_id": 1, + "cluster": { + "id": 64637, + "name": "Ikea Airpurifier", + "type": "server" + }, + "id": "1:0xfc7d", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0xfc7d", + "status": "INITIALIZED", + "value_attribute": "filter_run_time" + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "min" + }, + "state": { + "class_name": "IkeaFilterRunTime", + "available": true, + "state": 59343 + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-1-64637-child_lock", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ChildLock", + "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, + "cluster_handlers": [ + { + "class_name": "IkeaAirPurifierClusterHandler", + "generic_id": "cluster_handler_0xfc7d", + "endpoint_id": 1, + "cluster": { + "id": 64637, + "name": "Ikea Airpurifier", + "type": "server" + }, + "id": "1:0xfc7d", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0xfc7d", + "status": "INITIALIZED", + "value_attribute": "filter_run_time" + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "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": "ChildLock", + "available": true, + "state": false, + "inverted": false + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-1-64637-disable_led", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "DisableLed", + "translation_key": "disable_led", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "IkeaAirPurifierClusterHandler", + "generic_id": "cluster_handler_0xfc7d", + "endpoint_id": 1, + "cluster": { + "id": 64637, + "name": "Ikea Airpurifier", + "type": "server" + }, + "id": "1:0xfc7d", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0xfc7d", + "status": "INITIALIZED", + "value_attribute": "filter_run_time" + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "disable_led", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "DisableLed", + "available": true, + "state": false, + "inverted": false + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:99:45:a5-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:e0:99:45:a5:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e0:99:45:a5", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00011001", + "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/occam-temp-sensor-v1-2-jan-19-2026.json b/tests/data/devices/occam-temp-sensor-v1-2-jan-19-2026.json new file mode 100644 index 000000000..9efb80421 --- /dev/null +++ b/tests/data/devices/occam-temp-sensor-v1-2-jan-19-2026.json @@ -0,0 +1,446 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:e0:3f:81:7c", + "nwk": "0x7B1C", + "manufacturer": "Occam", + "model": "Temp Sensor V1.2 Jan 19 2026", + "friendly_manufacturer": "Occam", + "friendly_model": "Temp Sensor V1.2 Jan 19 2026", + "name": "Occam Temp Sensor V1.2 Jan 19 2026", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4660, + "power_source": "Battery or Unknown", + "lqi": 148, + "rssi": -63, + "last_seen": "2026-02-04T23:37:25.166992+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": 136, + "manufacturer_code": 4660, + "maximum_buffer_size": 108, + "maximum_incoming_transfer_size": 1613, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1613, + "descriptor_capability_field": 0 + }, + "endpoints": { + "10": { + "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": "Occam" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "Temp Sensor V1.2 Jan 19 2026" + } + ] + }, + { + "cluster_id": "0x0001", + "endpoint_attribute": "power", + "attributes": [ + { + "id": "0x0021", + "name": "battery_percentage_remaining", + "zcl_type": "uint8", + "value": 186 + }, + { + "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": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": -1824 + } + ] + }, + { + "cluster_id": "0x0405", + "endpoint_attribute": "humidity", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 5 + } + ] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "Occam", + "model": "Temp Sensor V1.2 Jan 19 2026", + "node_desc": { + "logical_type": 2, + "complex_descriptor_available": 0, + "user_descriptor_available": 0, + "reserved": 0, + "aps_flags": 0, + "frequency_band": 8, + "mac_capability_flags": 136, + "manufacturer_code": 4660, + "maximum_buffer_size": 108, + "maximum_incoming_transfer_size": 1613, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1613, + "descriptor_capability_field": 0 + }, + "endpoints": { + "10": { + "profile_id": "0x0104", + "device_type": "0x0302", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0402", + "0x0405" + ], + "output_clusters": [ + "0x0003" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:3f:81:7c-10-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 10, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "10:0x0003", + "unique_id": "ab:cd:ef:12:e0:3f:81:7c:10:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e0:3f:81:7c", + "endpoint_id": 10, + "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:e0:3f:81:7c-10-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 10, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "10:0x0000", + "unique_id": "ab:cd:ef:12:e0:3f:81:7c:10:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e0:3f:81:7c", + "endpoint_id": 10, + "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:e0:3f:81:7c-10-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 10, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "10:0x0000", + "unique_id": "ab:cd:ef:12:e0:3f:81:7c:10:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e0:3f:81:7c", + "endpoint_id": 10, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -63 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:3f:81:7c-10-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, + "cluster_handlers": [ + { + "class_name": "PowerConfigurationClusterHandler", + "generic_id": "cluster_handler_0x0001", + "endpoint_id": 10, + "cluster": { + "id": 1, + "name": "Power Configuration", + "type": "server" + }, + "id": "10:0x0001", + "unique_id": "ab:cd:ef:12:e0:3f:81:7c:10:0x0001", + "status": "INITIALIZED", + "value_attribute": "battery_voltage" + } + ], + "device_ieee": "ab:cd:ef:12:e0:3f:81:7c", + "endpoint_id": 10, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 93.0, + "battery_voltage": 25.5 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:3f:81:7c-10-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, + "cluster_handlers": [ + { + "class_name": "TemperatureMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0402", + "endpoint_id": 10, + "cluster": { + "id": 1026, + "name": "Temperature Measurement", + "type": "server" + }, + "id": "10:0x0402", + "unique_id": "ab:cd:ef:12:e0:3f:81:7c:10:0x0402", + "status": "INITIALIZED", + "value_attribute": "measured_value" + } + ], + "device_ieee": "ab:cd:ef:12:e0:3f:81:7c", + "endpoint_id": 10, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": -18.24 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e0:3f:81:7c-10-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, + "cluster_handlers": [ + { + "class_name": "RelativeHumidityClusterHandler", + "generic_id": "cluster_handler_0x0405", + "endpoint_id": 10, + "cluster": { + "id": 1029, + "name": "Relative Humidity Measurement", + "type": "server" + }, + "id": "10:0x0405", + "unique_id": "ab:cd:ef:12:e0:3f:81:7c:10:0x0405", + "status": "INITIALIZED", + "value_attribute": "measured_value" + } + ], + "device_ieee": "ab:cd:ef:12:e0:3f:81:7c", + "endpoint_id": 10, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "%" + }, + "state": { + "class_name": "Humidity", + "available": true, + "state": 0.05 + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/philips-915005988601.json b/tests/data/devices/philips-915005988601.json new file mode 100644 index 000000000..6e1c6c73d --- /dev/null +++ b/tests/data/devices/philips-915005988601.json @@ -0,0 +1,766 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:72:72:fa:b6", + "nwk": "0x7C85", + "manufacturer": "Philips", + "model": "915005988601", + "friendly_manufacturer": "Philips", + "friendly_model": "915005988601", + "name": "Philips 915005988601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Mains", + "lqi": 216, + "rssi": -57, + "last_seen": "2026-02-23T23:00:27.337333+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": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 128, + "descriptor_capability_field": 0 + }, + "endpoints": { + "11": { + "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": "Philips" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "915005988601" + } + ] + }, + { + "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", + "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": 254 + } + ] + }, + { + "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": 153 + }, + { + "id": "0x0007", + "name": "color_temperature", + "zcl_type": "uint16", + "value": 500 + }, + { + "id": "0x0000", + "name": "current_hue", + "zcl_type": "uint8", + "value": 23 + }, + { + "id": "0x0001", + "name": "current_saturation", + "zcl_type": "uint8", + "value": 244 + }, + { + "id": "0x0003", + "name": "current_x", + "zcl_type": "uint16", + "value": 36678 + }, + { + "id": "0x0004", + "name": "current_y", + "zcl_type": "uint16", + "value": 26266 + }, + { + "id": "0x000f", + "name": "options", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x4010", + "name": "start_up_color_temperature", + "zcl_type": "uint16", + "value": 366 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + }, + { + "cluster_id": "0xfc01", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + }, + { + "cluster_id": "0xfc03", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + }, + { + "cluster_id": "0xfc04", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + } + ], + "out_clusters": [ + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 16785408 + } + ] + } + ] + }, + "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": "Philips", + "model": "915005988601", + "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": 4107, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 128, + "descriptor_capability_field": 0 + }, + "endpoints": { + "11": { + "profile_id": "0x0104", + "device_type": "0x010d", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x1000", + "0xfc03", + "0x0300", + "0xfc01", + "0xfc04" + ], + "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:72:72:fa:b6-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 11, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "11:0x0003", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:72:72:fa:b6", + "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:72:72:fa:b6-11", + "migrate_unique_ids": [], + "platform": "light", + "class_name": "HueLight", + "translation_key": "light", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 11, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "11:0x0006", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + }, + { + "class_name": "LevelControlClusterHandler", + "generic_id": "cluster_handler_0x0008", + "endpoint_id": 11, + "cluster": { + "id": 8, + "name": "Level control", + "type": "server" + }, + "id": "11:0x0008", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0008", + "status": "INITIALIZED", + "value_attribute": "current_level" + }, + { + "class_name": "ColorClusterHandler", + "generic_id": "cluster_handler_0x0300", + "endpoint_id": 11, + "cluster": { + "id": 768, + "name": "Color Control", + "type": "server" + }, + "id": "11:0x0300", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0300", + "status": "INITIALIZED", + "value_attribute": "current_x" + } + ], + "device_ieee": "ab:cd:ef:12:72:72:fa:b6", + "endpoint_id": 11, + "available": true, + "group_id": null, + "effect_list": [ + "off", + "colorloop" + ], + "supported_features": 44, + "min_mireds": 153, + "max_mireds": 500 + }, + "state": { + "class_name": "HueLight", + "available": true, + "on": true, + "brightness": 254, + "xy_color": [ + 0.5596704051270314, + 0.40079346913862823 + ], + "color_temp": 500, + "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:72:72:fa:b6-11-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, + "cluster_handlers": [ + { + "class_name": "ColorClusterHandler", + "generic_id": "cluster_handler_0x0300", + "endpoint_id": 11, + "cluster": { + "id": 768, + "name": "Color Control", + "type": "server" + }, + "id": "11:0x0300", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0300", + "status": "INITIALIZED", + "value_attribute": "current_x" + } + ], + "device_ieee": "ab:cd:ef:12:72:72:fa:b6", + "endpoint_id": 11, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 500, + "native_min_value": 153, + "native_step": 1.0, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "StartUpColorTemperatureConfigurationEntity", + "available": true, + "state": 366 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:72:72:fa:b6-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, + "cluster_handlers": [ + { + "class_name": "LevelControlClusterHandler", + "generic_id": "cluster_handler_0x0008", + "endpoint_id": 11, + "cluster": { + "id": 8, + "name": "Level control", + "type": "server" + }, + "id": "11:0x0008", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0008", + "status": "INITIALIZED", + "value_attribute": "current_level" + } + ], + "device_ieee": "ab:cd:ef:12:72:72:fa:b6", + "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": 254 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:72:72:fa:b6-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 11, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "11:0x0006", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:72:72:fa:b6", + "endpoint_id": 11, + "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:72:72:fa:b6-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 11, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "11:0x0000", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:72:72:fa:b6", + "endpoint_id": 11, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 216 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:72:72:fa:b6-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 11, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "11:0x0000", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:72:72:fa:b6", + "endpoint_id": 11, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -57 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:72:72:fa:b6-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 11, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "11:0x0019_client", + "unique_id": "ab:cd:ef:12:72:72:fa:b6:11:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:72:72:fa:b6", + "endpoint_id": 11, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x01002000", + "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.json new file mode 100644 index 000000000..7cd20b59d --- /dev/null +++ b/tests/data/devices/philips-rwl021.json @@ -0,0 +1,535 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:5e:0b:f1:3f", + "nwk": "0x3CF9", + "manufacturer": "Philips", + "model": "RWL021", + "friendly_manufacturer": "Philips", + "friendly_model": "RWL021", + "name": "Philips RWL021", + "quirk_applied": true, + "quirk_class": "zhaquirks.philips.rwlfirstgen.PhilipsRWLFirstGen", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Battery or Unknown", + "lqi": 116, + "rssi": -71, + "last_seen": "2026-02-11T17:52:35.509976+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": "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": "RWL021" + } + ] + } + ], + "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": [] + } + ] + }, + "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": 30 + }, + { + "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": 24 + } + ] + }, + { + "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": 1124102917 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Philips", + "model": "RWL021", + "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": { + "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:5e:0b:f1:3f-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, + "cluster_handlers": [ + { + "class_name": "BinaryInputClusterHandler", + "generic_id": "cluster_handler_0x000f", + "endpoint_id": 2, + "cluster": { + "id": 15, + "name": "Binary Input (Basic)", + "type": "server" + }, + "id": "2:0x000f", + "unique_id": "ab:cd:ef:12:5e:0b:f1:3f:2:0x000f", + "status": "INITIALIZED", + "value_attribute": "present_value" + } + ], + "device_ieee": "ab:cd:ef:12:5e:0b:f1:3f", + "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:5e:0b:f1:3f-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 2, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "2:0x0003", + "unique_id": "ab:cd:ef:12:5e:0b:f1:3f:2:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:5e:0b:f1:3f", + "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:5e:0b:f1:3f-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:5e:0b:f1:3f:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:5e:0b:f1:3f", + "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:5e:0b:f1:3f-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:5e:0b:f1:3f:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:5e:0b:f1:3f", + "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:5e:0b:f1:3f-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, + "cluster_handlers": [ + { + "class_name": "PowerConfigurationClusterHandler", + "generic_id": "cluster_handler_0x0001", + "endpoint_id": 2, + "cluster": { + "id": 1, + "name": "Power Configuration", + "type": "server" + }, + "id": "2:0x0001", + "unique_id": "ab:cd:ef:12:5e:0b:f1:3f:2:0x0001", + "status": "INITIALIZED", + "value_attribute": "battery_voltage" + } + ], + "device_ieee": "ab:cd:ef:12:5e:0b:f1:3f", + "endpoint_id": 2, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 15.0, + "battery_voltage": 2.4 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:5e:0b:f1:3f-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 2, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "2:0x0019_client", + "unique_id": "ab:cd:ef:12:5e:0b:f1:3f:2:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:5e:0b:f1:3f", + "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/shelly-1pm.json b/tests/data/devices/shelly-1pm.json new file mode 100644 index 000000000..6e2f5ff58 --- /dev/null +++ b/tests/data/devices/shelly-1pm.json @@ -0,0 +1,1081 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "nwk": "0xE0AE", + "manufacturer": "Shelly", + "model": "1PM", + "friendly_manufacturer": "Shelly", + "friendly_model": "1PM", + "name": "Shelly 1PM", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 5264, + "power_source": "Mains", + "lqi": 58, + "rssi": null, + "last_seen": "2026-02-17T02:26:05.884678+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": 5264, + "maximum_buffer_size": 108, + "maximum_incoming_transfer_size": 1613, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1613, + "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", + "unsupported": true + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Shelly" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "1PM" + }, + { + "id": "0x000d", + "name": "serial_number", + "zcl_type": "string", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 4 + }, + { + "id": "0x0000", + "name": "identify_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "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", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0702", + "endpoint_attribute": "smartenergy_metering", + "attributes": [ + { + "id": "0x0000", + "name": "current_summ_delivered", + "zcl_type": "uint48", + "value": 1443000 + }, + { + "id": "0x0001", + "name": "current_summ_received", + "zcl_type": "uint48", + "value": 0 + }, + { + "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": 1000000 + }, + { + "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": 27 + }, + { + "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": 1000 + }, + { + "id": "0x0602", + "name": "ac_current_multiplier", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0300", + "name": "ac_frequency", + "zcl_type": "uint16", + "value": 6002 + }, + { + "id": "0x0401", + "name": "ac_frequency_divisor", + "zcl_type": "uint16", + "value": 100 + }, + { + "id": "0x0302", + "name": "ac_frequency_max", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0400", + "name": "ac_frequency_multiplier", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0605", + "name": "ac_power_divisor", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0604", + "name": "ac_power_multiplier", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0601", + "name": "ac_voltage_divisor", + "zcl_type": "uint16", + "value": 100 + }, + { + "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": "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", + "value": 1 + }, + { + "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": 12282 + }, + { + "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 + } + ] + } + ], + "out_clusters": [] + }, + "239": { + "profile_id": 49153, + "device_type": { + "name": "unknown", + "id": 8193 + }, + "in_clusters": [ + { + "cluster_id": "0xfc01", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + }, + { + "cluster_id": "0xfc02", + "endpoint_attribute": "manufacturer_specific", + "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": "Shelly", + "model": "1PM", + "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": 5264, + "maximum_buffer_size": 108, + "maximum_incoming_transfer_size": 1613, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1613, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0051", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0b04", + "0x0702" + ], + "output_clusters": [] + }, + "239": { + "profile_id": "0xc001", + "device_type": "0x2001", + "input_clusters": [ + "0xfc01", + "0xfc02" + ], + "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:e7:d6:bf:0a-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "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:e7:d6:bf: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "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:e7:d6:bf: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "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:e7:d6:bf:0a-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, + "cluster_handlers": [ + { + "class_name": "MeteringClusterHandler", + "generic_id": "cluster_handler_0x0702", + "endpoint_id": 1, + "cluster": { + "id": 1794, + "name": "Metering", + "type": "server" + }, + "id": "1:0x0702", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0702", + "status": "INITIALIZED", + "value_attribute": "instantaneous_demand" + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 3, + "unit": "kWh" + }, + "state": { + "class_name": "SmartEnergySummation", + "available": true, + "state": 1.443, + "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:e7:d6:bf:0a-1-1794-summation_received", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "SmartEnergySummationReceived", + "translation_key": "summation_received", + "translation_placeholders": null, + "device_class": "energy", + "state_class": "total_increasing", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "MeteringClusterHandler", + "generic_id": "cluster_handler_0x0702", + "endpoint_id": 1, + "cluster": { + "id": 1794, + "name": "Metering", + "type": "server" + }, + "id": "1:0x0702", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0702", + "status": "INITIALIZED", + "value_attribute": "instantaneous_demand" + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 3, + "unit": "kWh" + }, + "state": { + "class_name": "SmartEnergySummationReceived", + "available": true, + "state": 0.0, + "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:e7:d6:bf:0a-1-2820", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "PolledElectricalMeasurement", + "translation_key": null, + "translation_placeholders": null, + "device_class": "power", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "ElectricalMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0b04", + "endpoint_id": 1, + "cluster": { + "id": 2820, + "name": "Electrical Measurement", + "type": "server" + }, + "id": "1:0x0b04", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0b04", + "status": "INITIALIZED", + "value_attribute": "ac_voltage_multiplier" + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "W" + }, + "state": { + "class_name": "PolledElectricalMeasurement", + "available": true, + "state": 0.0, + "measurement_type": "ACTIVE_MEASUREMENT" + }, + "extra_state_attributes": [ + "active_power_max", + "measurement_type" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a-1-2820-ac_frequency", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "ElectricalMeasurementFrequency", + "translation_key": "ac_frequency", + "translation_placeholders": null, + "device_class": "frequency", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "ElectricalMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0b04", + "endpoint_id": 1, + "cluster": { + "id": 2820, + "name": "Electrical Measurement", + "type": "server" + }, + "id": "1:0x0b04", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0b04", + "status": "INITIALIZED", + "value_attribute": "ac_voltage_multiplier" + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "Hz" + }, + "state": { + "class_name": "ElectricalMeasurementFrequency", + "available": true, + "state": 60.02, + "measurement_type": "ACTIVE_MEASUREMENT" + }, + "extra_state_attributes": [ + "ac_frequency_max", + "measurement_type" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a-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, + "cluster_handlers": [ + { + "class_name": "ElectricalMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0b04", + "endpoint_id": 1, + "cluster": { + "id": 2820, + "name": "Electrical Measurement", + "type": "server" + }, + "id": "1:0x0b04", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0b04", + "status": "INITIALIZED", + "value_attribute": "ac_voltage_multiplier" + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "A" + }, + "state": { + "class_name": "ElectricalMeasurementRMSCurrent", + "available": true, + "state": 0.0, + "measurement_type": "ACTIVE_MEASUREMENT" + }, + "extra_state_attributes": [ + "measurement_type", + "rms_current_max" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a-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, + "cluster_handlers": [ + { + "class_name": "ElectricalMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0b04", + "endpoint_id": 1, + "cluster": { + "id": 2820, + "name": "Electrical Measurement", + "type": "server" + }, + "id": "1:0x0b04", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0b04", + "status": "INITIALIZED", + "value_attribute": "ac_voltage_multiplier" + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "V" + }, + "state": { + "class_name": "ElectricalMeasurementRMSVoltage", + "available": true, + "state": 122.82, + "measurement_type": "ACTIVE_MEASUREMENT" + }, + "extra_state_attributes": [ + "measurement_type", + "rms_voltage_max" + ] + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:e7:d6:bf:0a:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:e7:d6:bf:0a", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 0, + "available": true + } + } + ] + }, + "neighbors": [], + "routes": [] +} \ No newline at end of file diff --git a/tests/data/devices/shelly-2pm.json b/tests/data/devices/shelly-2pm.json new file mode 100644 index 000000000..8fb7c22b3 --- /dev/null +++ b/tests/data/devices/shelly-2pm.json @@ -0,0 +1,479 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:9c:bd:cb:14", + "nwk": "0xB908", + "manufacturer": "Shelly", + "model": "2PM", + "friendly_manufacturer": "Shelly", + "friendly_model": "2PM", + "name": "Shelly 2PM", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 5264, + "power_source": "Mains", + "lqi": 68, + "rssi": -83, + "last_seen": "2025-08-03T09:34:38.576104+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": 5264, + "maximum_buffer_size": 108, + "maximum_incoming_transfer_size": 1613, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1613, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": 260, + "device_type": { + "name": "WINDOW_COVERING_DEVICE", + "id": 514 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Shelly" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "2PM" + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0102", + "endpoint_attribute": "window_covering", + "attributes": [ + { + "id": "0x0015", + "name": "acceleration_time_lift", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0007", + "name": "config_status", + "zcl_type": "map8", + "value": 3 + }, + { + "id": "0x0003", + "name": "current_position_lift", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0008", + "name": "current_position_lift_percentage", + "zcl_type": "uint8", + "value": 50 + }, + { + "id": "0x0009", + "name": "current_position_tilt_percentage", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0011", + "name": "installed_closed_limit_lift", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0013", + "name": "installed_closed_limit_tilt", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0010", + "name": "installed_open_limit_lift", + "zcl_type": "uint16", + "value": 100 + }, + { + "id": "0x0012", + "name": "installed_open_limit_tilt", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0001", + "name": "physical_closed_limit_lift", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0017", + "name": "window_covering_mode", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0000", + "name": "window_covering_type", + "zcl_type": "enum8", + "value": 6 + } + ] + } + ], + "out_clusters": [] + }, + "239": { + "profile_id": 49153, + "device_type": { + "name": "unknown", + "id": 8193 + }, + "in_clusters": [ + { + "cluster_id": "0xfc01", + "endpoint_attribute": "manufacturer_specific", + "attributes": [] + }, + { + "cluster_id": "0xfc02", + "endpoint_attribute": "manufacturer_specific", + "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": "Shelly", + "model": "2PM", + "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": 5264, + "maximum_buffer_size": 108, + "maximum_incoming_transfer_size": 1613, + "server_mask": 11264, + "maximum_outgoing_transfer_size": 1613, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0202", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0102" + ], + "output_clusters": [] + }, + "239": { + "profile_id": "0xc001", + "device_type": "0x2001", + "input_clusters": [ + "0xfc01", + "0xfc02" + ], + "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:9c:bd:cb:14-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:9c:bd:cb:14:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:9c:bd:cb:14", + "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:9c:bd:cb:14-1-258", + "migrate_unique_ids": [], + "platform": "cover", + "class_name": "Cover", + "translation_key": "cover", + "translation_placeholders": null, + "device_class": "shutter", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "cluster_handlers": [ + { + "class_name": "WindowCoveringClusterHandler", + "generic_id": "cluster_handler_0x0102", + "endpoint_id": 1, + "cluster": { + "id": 258, + "name": "Window Covering", + "type": "server" + }, + "id": "1:0x0102", + "unique_id": "ab:cd:ef:12:9c:bd:cb:14:1:0x0102", + "status": "INITIALIZED", + "value_attribute": "current_position_lift_percentage" + } + ], + "device_ieee": "ab:cd:ef:12:9c:bd:cb:14", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Cover", + "available": true, + "current_position": null, + "current_tilt_position": null, + "state": null, + "is_opening": null, + "is_closing": null, + "is_closed": null + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9c:bd:cb: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:9c:bd:cb:14:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:9c:bd:cb:14", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 68 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9c:bd:cb: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:9c:bd:cb:14:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:9c:bd:cb:14", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -83 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:9c:bd:cb:14-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, + "cluster_handlers": [ + { + "class_name": "WindowCoveringClusterHandler", + "generic_id": "cluster_handler_0x0102", + "endpoint_id": 1, + "cluster": { + "id": 258, + "name": "Window Covering", + "type": "server" + }, + "id": "1:0x0102", + "unique_id": "ab:cd:ef:12:9c:bd:cb:14:1:0x0102", + "status": "INITIALIZED", + "value_attribute": "current_position_lift_percentage" + } + ], + "device_ieee": "ab:cd:ef:12:9c:bd:cb:14", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "WindowCoveringTypeSensor", + "available": true, + "state": "Shutter" + } + } + ] + }, + "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.json new file mode 100644 index 000000000..f3d8b1542 --- /dev/null +++ b/tests/data/devices/signify-netherlands-b-v-rdm005.json @@ -0,0 +1,451 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:e5:df:74:89", + "nwk": "0xC06A", + "manufacturer": "Signify Netherlands B.V.", + "model": "RDM005", + "friendly_manufacturer": "Signify Netherlands B.V.", + "friendly_model": "RDM005", + "name": "Signify Netherlands B.V. RDM005", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4107, + "power_source": "Battery or Unknown", + "lqi": 132, + "rssi": -67, + "last_seen": "2026-02-13T21:48:19.487718+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": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "RDM005" + } + ] + }, + { + "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": "manufacturer_specific", + "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": 33575681 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + } + ] + } + }, + "original_signature": { + "manufacturer": "Signify Netherlands B.V.", + "model": "RDM005", + "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:df:74:89-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:e5:df:74:89:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e5:df:74:89", + "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:df:74:89-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:e5:df:74:89:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e5:df:74:89", + "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:e5:df:74:89-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:e5:df:74:89:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e5:df:74:89", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -67 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e5:df:74:89-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, + "cluster_handlers": [ + { + "class_name": "PowerConfigurationClusterHandler", + "generic_id": "cluster_handler_0x0001", + "endpoint_id": 1, + "cluster": { + "id": 1, + "name": "Power Configuration", + "type": "server" + }, + "id": "1:0x0001", + "unique_id": "ab:cd:ef:12:e5:df:74:89:1:0x0001", + "status": "INITIALIZED", + "value_attribute": "battery_voltage" + } + ], + "device_ieee": "ab:cd:ef:12:e5:df:74:89", + "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:df:74:89-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:e5:df:74:89:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e5:df:74:89", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x02005301", + "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/sunricher-hk-dim.json b/tests/data/devices/sunricher-hk-dim.json new file mode 100644 index 000000000..e7b93e1a0 --- /dev/null +++ b/tests/data/devices/sunricher-hk-dim.json @@ -0,0 +1,1264 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:55:c3:5a:e0", + "nwk": "0x8333", + "manufacturer": "Sunricher", + "model": "HK-DIM", + "friendly_manufacturer": "Sunricher", + "friendly_model": "HK-DIM", + "name": "Sunricher HK-DIM", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4644, + "power_source": "Mains", + "lqi": 232, + "rssi": -53, + "last_seen": "2026-02-17T09:54:34.147167+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": 4644, + "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": "DIMMABLE_LIGHT", + "id": 257 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0006", + "name": "date_code", + "zcl_type": "string", + "value": "NULL" + }, + { + "id": "0x0008", + "name": "generic_device_class", + "zcl_type": "enum8", + "value": 40 + }, + { + "id": "0x0003", + "name": "hw_version", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "Sunricher" + }, + { + "id": "0x000c", + "name": "manufacturer_version_details", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "HK-DIM" + }, + { + "id": "0x000a", + "name": "product_code", + "zcl_type": "octstr", + "value": { + "__type": "", + "repr": "b'00'" + } + }, + { + "id": "0x000b", + "name": "product_url", + "zcl_type": "string", + "value": "NULL" + }, + { + "id": "0x000d", + "name": "serial_number", + "zcl_type": "string", + "unsupported": true + }, + { + "id": "0x0002", + "name": "stack_version", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x4000", + "name": "sw_build_id", + "zcl_type": "string", + "value": "2.5.3_r54" + }, + { + "id": "0x0000", + "name": "zcl_version", + "zcl_type": "uint8", + "value": 3 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [ + { + "id": "0x0000", + "name": "name_support", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0000", + "name": "count", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0002", + "name": "current_group", + "zcl_type": "uint16", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x4000", + "name": "global_scene_control", + "zcl_type": "bool", + "value": 1 + }, + { + "id": "0x4002", + "name": "off_wait_time", + "zcl_type": "uint16", + "value": 5 + }, + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4001", + "name": "on_time", + "zcl_type": "uint16", + "value": 900 + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + }, + { + "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": 70 + }, + { + "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": 70 + }, + { + "id": "0x0010", + "name": "on_off_transition_time", + "zcl_type": "uint16", + "value": 5 + }, + { + "id": "0x0012", + "name": "on_transition_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x4000", + "name": "start_up_current_level", + "zcl_type": "uint8", + "value": 115 + } + ] + }, + { + "cluster_id": "0x0b05", + "endpoint_attribute": "diagnostic", + "attributes": [ + { + "id": "0x0116", + "name": "aps_decrypt_failures", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0104", + "name": "mac_tx_ucast_retry", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x010e", + "name": "neighbor_removed", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0001", + "name": "persistent_memory_writes", + "zcl_type": "uint16", + "unsupported": true + } + ] + }, + { + "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": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0000", + "name": "count", + "zcl_type": "uint8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x4000", + "name": "global_scene_control", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0x4002", + "name": "off_wait_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x4001", + "name": "on_time", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0008", + "endpoint_attribute": "level", + "attributes": [] + }, + { + "cluster_id": "0x0019", + "endpoint_attribute": "ota", + "attributes": [ + { + "id": "0x0002", + "name": "current_file_version", + "zcl_type": "uint32", + "value": 54 + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "attributes": [] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "OCCUPANCY_SENSOR", + "id": 263 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0406", + "endpoint_attribute": "occupancy", + "attributes": [ + { + "id": "0xfffd", + "name": "cluster_revision", + "zcl_type": "uint16", + "value": 1 + }, + { + "id": "0x0000", + "name": "occupancy", + "zcl_type": "map8", + "value": 1 + }, + { + "id": "0x0001", + "name": "occupancy_sensor_type_bitmap", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x0030", + "name": "physical_contact_o_to_u_delay", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0031", + "name": "physical_contact_u_to_o_delay", + "zcl_type": "uint16", + "unsupported": true + }, + { + "id": "0x0032", + "name": "physical_contact_u_to_o_threshold", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0010", + "name": "pir_o_to_u_delay", + "zcl_type": "uint16", + "value": 150 + }, + { + "id": "0x0011", + "name": "pir_u_to_o_delay", + "zcl_type": "uint16", + "value": 150 + }, + { + "id": "0x0012", + "name": "pir_u_to_o_threshold", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x0020", + "name": "ultrasonic_o_to_u_delay", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0021", + "name": "ultrasonic_u_to_o_delay", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0022", + "name": "ultrasonic_u_to_o_threshold", + "zcl_type": "uint8", + "unsupported": true + } + ] + } + ], + "out_clusters": [] + }, + "3": { + "profile_id": 260, + "device_type": { + "name": "LIGHT_SENSOR", + "id": 262 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x4000", + "name": "sw_build_id", + "zcl_type": "string", + "value": "2.5.3_r54" + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0400", + "endpoint_attribute": "illuminance", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 25944 + }, + { + "id": "0xfffe", + "name": "reporting_status", + "zcl_type": "enum8", + "unsupported": true + } + ] + } + ], + "out_clusters": [] + }, + "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": "Sunricher", + "model": "HK-DIM", + "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": 4644, + "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": "0x0101", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x0b05", + "0x1000" + ], + "output_clusters": [ + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x0019", + "0x1000" + ] + }, + "2": { + "profile_id": "0x0104", + "device_type": "0x0107", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0406" + ], + "output_clusters": [] + }, + "3": { + "profile_id": "0x0104", + "device_type": "0x0106", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0400" + ], + "output_clusters": [] + }, + "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:55:c3:5a:e0-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, + "cluster_handlers": [ + { + "class_name": "OnOffClientClusterHandler", + "generic_id": "cluster_handler_0x0006_client", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "client" + }, + "id": "1:0x0006_client", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0006_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "on_off" + }, + "state": { + "class_name": "Opening", + "available": true, + "state": false + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:55:c3:5a:e0-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": false, + "cluster_handlers": [ + { + "class_name": "OccupancySensingClusterHandler", + "generic_id": "cluster_handler_0x0406", + "endpoint_id": 2, + "cluster": { + "id": 1030, + "name": "Occupancy Sensing", + "type": "server" + }, + "id": "2:0x0406", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:2:0x0406", + "status": "INITIALIZED", + "value_attribute": "occupancy" + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "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:55:c3:5a: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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "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:55:c3:5a:e0-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + }, + { + "class_name": "LevelControlClusterHandler", + "generic_id": "cluster_handler_0x0008", + "endpoint_id": 1, + "cluster": { + "id": 8, + "name": "Level control", + "type": "server" + }, + "id": "1:0x0008", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0008", + "status": "INITIALIZED", + "value_attribute": "current_level" + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "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": 70, + "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:55:c3:5a:e0-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, + "cluster_handlers": [ + { + "class_name": "LevelControlClusterHandler", + "generic_id": "cluster_handler_0x0008", + "endpoint_id": 1, + "cluster": { + "id": 8, + "name": "Level control", + "type": "server" + }, + "id": "1:0x0008", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0008", + "status": "INITIALIZED", + "value_attribute": "current_level" + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "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": 70 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:55:c3:5a:e0-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, + "cluster_handlers": [ + { + "class_name": "LevelControlClusterHandler", + "generic_id": "cluster_handler_0x0008", + "endpoint_id": 1, + "cluster": { + "id": 8, + "name": "Level control", + "type": "server" + }, + "id": "1:0x0008", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0008", + "status": "INITIALIZED", + "value_attribute": "current_level" + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "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": 5 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:55:c3:5a:e0-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, + "cluster_handlers": [ + { + "class_name": "LevelControlClusterHandler", + "generic_id": "cluster_handler_0x0008", + "endpoint_id": 1, + "cluster": { + "id": 8, + "name": "Level control", + "type": "server" + }, + "id": "1:0x0008", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0008", + "status": "INITIALIZED", + "value_attribute": "current_level" + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "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": 115 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:55:c3:5a:e0-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "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:55:c3:5a: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "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:55:c3:5a: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -53 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:55:c3:5a:e0-3-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, + "cluster_handlers": [ + { + "class_name": "IlluminanceMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0400", + "endpoint_id": 3, + "cluster": { + "id": 1024, + "name": "Illuminance Measurement", + "type": "server" + }, + "id": "3:0x0400", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:3:0x0400", + "status": "INITIALIZED", + "value_attribute": "measured_value" + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "endpoint_id": 3, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "lx" + }, + "state": { + "class_name": "Illuminance", + "available": true, + "state": 393 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:55:c3:5a: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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:55:c3:5a:e0:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:55:c3:5a:e0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000036", + "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-bgsigers-ts0201.json b/tests/data/devices/tz3000-bgsigers-ts0201.json new file mode 100644 index 000000000..c8b065015 --- /dev/null +++ b/tests/data/devices/tz3000-bgsigers-ts0201.json @@ -0,0 +1,516 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:54:ee:e3:19", + "nwk": "0x7FAD", + "manufacturer": "_TZ3000_bgsigers", + "model": "TS0201", + "friendly_manufacturer": "_TZ3000_bgsigers", + "friendly_model": "TS0201", + "name": "_TZ3000_bgsigers TS0201", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": 255, + "rssi": -33, + "last_seen": "2026-01-14T14:17:57.969793+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": "TEMPERATURE_SENSOR", + "id": 770 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZ3000_bgsigers" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0201" + } + ] + }, + { + "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": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 2820 + } + ] + }, + { + "cluster_id": "0x0405", + "endpoint_attribute": "humidity", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 3100 + } + ] + } + ], + "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": 64 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZ3000_bgsigers", + "model": "TS0201", + "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": "0x0302", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0402", + "0x0405" + ], + "output_clusters": [ + "0x0003", + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:54:ee:e3:19-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:54:ee:e3:19:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:54:ee:e3:19", + "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:54:ee:e3:19-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:54:ee:e3:19:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:54:ee:e3:19", + "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:54:ee:e3:19-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:54:ee:e3:19:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:54:ee:e3:19", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -33 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:54:ee:e3:19-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, + "cluster_handlers": [ + { + "class_name": "PowerConfigurationClusterHandler", + "generic_id": "cluster_handler_0x0001", + "endpoint_id": 1, + "cluster": { + "id": 1, + "name": "Power Configuration", + "type": "server" + }, + "id": "1:0x0001", + "unique_id": "ab:cd:ef:12:54:ee:e3:19:1:0x0001", + "status": "INITIALIZED", + "value_attribute": "battery_voltage" + } + ], + "device_ieee": "ab:cd:ef:12:54:ee:e3:19", + "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" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:54:ee:e3:19-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, + "cluster_handlers": [ + { + "class_name": "TemperatureMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0402", + "endpoint_id": 1, + "cluster": { + "id": 1026, + "name": "Temperature Measurement", + "type": "server" + }, + "id": "1:0x0402", + "unique_id": "ab:cd:ef:12:54:ee:e3:19:1:0x0402", + "status": "INITIALIZED", + "value_attribute": "measured_value" + } + ], + "device_ieee": "ab:cd:ef:12:54:ee:e3:19", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 28.2 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:54:ee:e3:19-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, + "cluster_handlers": [ + { + "class_name": "RelativeHumidityClusterHandler", + "generic_id": "cluster_handler_0x0405", + "endpoint_id": 1, + "cluster": { + "id": 1029, + "name": "Relative Humidity Measurement", + "type": "server" + }, + "id": "1:0x0405", + "unique_id": "ab:cd:ef:12:54:ee:e3:19:1:0x0405", + "status": "INITIALIZED", + "value_attribute": "measured_value" + } + ], + "device_ieee": "ab:cd:ef:12:54:ee:e3:19", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "%" + }, + "state": { + "class_name": "Humidity", + "available": true, + "state": 31.0 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:54:ee:e3:19-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:54:ee:e3:19:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:54:ee:e3:19", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000040", + "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-drc9tuqb-ts0001.json b/tests/data/devices/tz3000-drc9tuqb-ts0001.json new file mode 100644 index 000000000..54320d405 --- /dev/null +++ b/tests/data/devices/tz3000-drc9tuqb-ts0001.json @@ -0,0 +1,588 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:99:36:0a:01", + "nwk": "0xC3DA", + "manufacturer": "_TZ3000_drc9tuqb", + "model": "TS0001", + "friendly_manufacturer": "_TZ3000_drc9tuqb", + "friendly_model": "TS0001", + "name": "_TZ3000_drc9tuqb TS0001", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts000x.Switch_1G_GPP", + "exposes_features": [ + "tuya.plug_on_off_attributes" + ], + "manufacturer_code": 4098, + "power_source": "Mains", + "lqi": 204, + "rssi": -49, + "last_seen": "2026-02-06T07:33:40.538548+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": "ON_OFF_LIGHT", + "id": 256 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0001", + "name": "app_version", + "zcl_type": "uint8", + "value": 71 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZ3000_drc9tuqb" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0001" + }, + { + "id": "0x0007", + "name": "power_source", + "zcl_type": "enum8", + "value": 1 + }, + { + "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": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x8001", + "name": "backlight_mode", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x8000", + "name": "child_lock", + "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": 1 + }, + { + "id": "0x4001", + "name": "on_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x8002", + "name": "power_on_state", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xe000", + "endpoint_attribute": "tuya_manufacturer_specific_57344", + "attributes": [] + }, + { + "cluster_id": "0xe001", + "endpoint_attribute": "tuya_external_switch_type", + "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": 71 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZ3000_drc9tuqb", + "model": "TS0001", + "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": "0x0100", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0xe000", + "0xe001" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + }, + "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:99:36:0a:01-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:99:36:0a:01:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:99:36:0a:01", + "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:99:36:0a:01-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:99:36:0a:01:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:99:36:0a:01", + "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": true, + "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:99:36:0a:01-1-6-backlight_mode", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "TuyaBacklightModeSelectEntity", + "translation_key": "backlight_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:99:36:0a:01:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:99:36:0a:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaBacklightMode", + "options": [ + "Off", + "LightWhenOn", + "LightWhenOff" + ] + }, + "state": { + "class_name": "TuyaBacklightModeSelectEntity", + "available": true, + "state": "Off" + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:99:36:0a:01-1-6-power_on_state", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "TuyaPowerOnStateSelectEntity", + "translation_key": "power_on_state", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:99:36:0a:01:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:99:36:0a:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaPowerOnState", + "options": [ + "Off", + "On", + "LastState" + ] + }, + "state": { + "class_name": "TuyaPowerOnStateSelectEntity", + "available": true, + "state": "LastState" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:99:36:0a: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:99:36:0a:01:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:99:36:0a:01", + "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:99:36:0a: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:99:36:0a:01:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:99:36:0a:01", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -49 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:99:36:0a: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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:99:36:0a:01:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:99:36:0a:01", + "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-mw1pqqqt-ts0003.json b/tests/data/devices/tz3000-mw1pqqqt-ts0003.json new file mode 100644 index 000000000..ac17af1f2 --- /dev/null +++ b/tests/data/devices/tz3000-mw1pqqqt-ts0003.json @@ -0,0 +1,1371 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:2c:e2:6d:88", + "nwk": "0x56B5", + "manufacturer": "_TZ3000_mw1pqqqt", + "model": "TS0003", + "friendly_manufacturer": "_TZ3000_mw1pqqqt", + "friendly_model": "TS0003", + "name": "_TZ3000_mw1pqqqt TS0003", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts000x.Switch_3G_Metering", + "exposes_features": [ + "tuya.plug_on_off_attributes" + ], + "manufacturer_code": 4417, + "power_source": "Mains", + "lqi": 87, + "rssi": null, + "last_seen": "2026-02-10T08:56:36.698875+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": 74 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZ3000_mw1pqqqt" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0003" + }, + { + "id": "0x0007", + "name": "power_source", + "zcl_type": "enum8", + "value": 1 + }, + { + "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": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "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": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x8002", + "name": "power_on_state", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0702", + "endpoint_attribute": "smartenergy_metering", + "attributes": [ + { + "id": "0x0000", + "name": "current_summ_delivered", + "zcl_type": "uint48", + "value": 0 + }, + { + "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": 0 + }, + { + "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": 1000 + }, + { + "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", + "unsupported": true + }, + { + "id": "0x0604", + "name": "ac_power_multiplier", + "zcl_type": "uint16", + "unsupported": true + }, + { + "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", + "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": 0 + }, + { + "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": "0xe000", + "endpoint_attribute": "tuya_manufacturer_specific_57344", + "attributes": [] + }, + { + "cluster_id": "0xe001", + "endpoint_attribute": "tuya_external_switch_type", + "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 + } + ] + } + ] + }, + "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": [] + }, + { + "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": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x8002", + "name": "power_on_state", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "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": "0x8001", + "name": "backlight_mode", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x8000", + "name": "child_lock", + "zcl_type": "bool", + "unsupported": true + }, + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x8002", + "name": "power_on_state", + "zcl_type": "enum8", + "unsupported": true + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + } + ], + "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": "_TZ3000_mw1pqqqt", + "model": "TS0003", + "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": "0x0100", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0702", + "0x0b04", + "0xe000", + "0xe001" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + }, + "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": [] + }, + "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:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "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:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "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:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 2, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "2:0x0006", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:2:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "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:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 3, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "3:0x0006", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:3:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "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" + ] + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:2c:e2:6d:88-1-6-backlight_mode", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "TuyaBacklightModeSelectEntity", + "translation_key": "backlight_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaBacklightMode", + "options": [ + "Off", + "LightWhenOn", + "LightWhenOff" + ] + }, + "state": { + "class_name": "TuyaBacklightModeSelectEntity", + "available": true, + "state": "LightWhenOn" + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:2c:e2:6d:88-1-6-power_on_state", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "TuyaPowerOnStateSelectEntity", + "translation_key": "power_on_state", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaPowerOnState", + "options": [ + "Off", + "On", + "LastState" + ] + }, + "state": { + "class_name": "TuyaPowerOnStateSelectEntity", + "available": true, + "state": "LastState" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 87 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "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:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "MeteringClusterHandler", + "generic_id": "cluster_handler_0x0702", + "endpoint_id": 1, + "cluster": { + "id": 1794, + "name": "TuyaZBMeteringCluster", + "type": "server" + }, + "id": "1:0x0702", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0702", + "status": "INITIALIZED", + "value_attribute": "instantaneous_demand" + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 3, + "unit": "kWh" + }, + "state": { + "class_name": "SmartEnergySummation", + "available": true, + "state": 0.0, + "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:2c:e2:6d:88-1-2820", + "migrate_unique_ids": [], + "platform": "sensor", + "class_name": "PolledElectricalMeasurement", + "translation_key": null, + "translation_placeholders": null, + "device_class": "power", + "state_class": "measurement", + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "ElectricalMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0b04", + "endpoint_id": 1, + "cluster": { + "id": 2820, + "name": "Electrical Measurement", + "type": "server" + }, + "id": "1:0x0b04", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0b04", + "status": "INITIALIZED", + "value_attribute": "ac_voltage_multiplier" + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "W" + }, + "state": { + "class_name": "PolledElectricalMeasurement", + "available": true, + "state": 0.0 + }, + "extra_state_attributes": [ + "active_power_max", + "measurement_type" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "ElectricalMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0b04", + "endpoint_id": 1, + "cluster": { + "id": 2820, + "name": "Electrical Measurement", + "type": "server" + }, + "id": "1:0x0b04", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0b04", + "status": "INITIALIZED", + "value_attribute": "ac_voltage_multiplier" + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "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:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "ElectricalMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0b04", + "endpoint_id": 1, + "cluster": { + "id": 2820, + "name": "Electrical Measurement", + "type": "server" + }, + "id": "1:0x0b04", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0b04", + "status": "INITIALIZED", + "value_attribute": "ac_voltage_multiplier" + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 1, + "unit": "V" + }, + "state": { + "class_name": "ElectricalMeasurementRMSVoltage", + "available": true, + "state": 0.0 + }, + "extra_state_attributes": [ + "measurement_type", + "rms_voltage_max" + ] + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:2c:e2:6d:88-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:2c:e2:6d:88:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:2c:e2:6d:88", + "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/tz3000-p26flek3-ts0001.json b/tests/data/devices/tz3000-p26flek3-ts0001.json new file mode 100644 index 000000000..f6ff447a7 --- /dev/null +++ b/tests/data/devices/tz3000-p26flek3-ts0001.json @@ -0,0 +1,595 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:37:1f:21:53", + "nwk": "0x73BD", + "manufacturer": "_TZ3000_p26flek3", + "model": "TS0001", + "friendly_manufacturer": "_TZ3000_p26flek3", + "friendly_model": "TS0001", + "name": "_TZ3000_p26flek3 TS0001", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts000x.Switch_1G_GPP", + "exposes_features": [ + "tuya.plug_on_off_attributes" + ], + "manufacturer_code": 4417, + "power_source": "Mains", + "lqi": 212, + "rssi": -58, + "last_seen": "2026-02-06T07:17:18.759011+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": 83 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZ3000_p26flek3" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0001" + }, + { + "id": "0x0007", + "name": "power_source", + "zcl_type": "enum8", + "value": 1 + }, + { + "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": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x8001", + "name": "backlight_mode", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x8000", + "name": "child_lock", + "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": 1 + }, + { + "id": "0x4001", + "name": "on_time", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x8002", + "name": "power_on_state", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xe000", + "endpoint_attribute": "tuya_manufacturer_specific_57344", + "attributes": [] + }, + { + "cluster_id": "0xe001", + "endpoint_attribute": "tuya_external_switch_type", + "attributes": [ + { + "id": "0xd030", + "name": "external_switch_type", + "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": 83 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZ3000_p26flek3", + "model": "TS0001", + "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": "0x0100", + "input_clusters": [ + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0xe000", + "0xe001", + "0x0000" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + }, + "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:37:1f:21: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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:37:1f:21:53:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:37:1f:21:53", + "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:37:1f:21:53-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:37:1f:21:53:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:37:1f:21:53", + "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": true, + "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:37:1f:21:53-1-6-backlight_mode", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "TuyaBacklightModeSelectEntity", + "translation_key": "backlight_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:37:1f:21:53:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:37:1f:21:53", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaBacklightMode", + "options": [ + "Off", + "LightWhenOn", + "LightWhenOff" + ] + }, + "state": { + "class_name": "TuyaBacklightModeSelectEntity", + "available": true, + "state": "Off" + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:37:1f:21:53-1-6-power_on_state", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "TuyaPowerOnStateSelectEntity", + "translation_key": "power_on_state", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:37:1f:21:53:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:37:1f:21:53", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "TuyaPowerOnState", + "options": [ + "Off", + "On", + "LastState" + ] + }, + "state": { + "class_name": "TuyaPowerOnStateSelectEntity", + "available": true, + "state": "LastState" + } + } + ], + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:37:1f:21: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:37:1f:21:53:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:37:1f:21:53", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 212 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:37:1f:21: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:37:1f:21:53:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:37:1f:21:53", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -58 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:37:1f:21: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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:37:1f:21:53:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:37:1f:21:53", + "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/tz3002-zjuvw9zf-ts0726.json b/tests/data/devices/tz3002-zjuvw9zf-ts0726.json new file mode 100644 index 000000000..3ea756c7c --- /dev/null +++ b/tests/data/devices/tz3002-zjuvw9zf-ts0726.json @@ -0,0 +1,545 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:50:fa:6e:0f", + "nwk": "0xB0B2", + "manufacturer": "_TZ3002_zjuvw9zf", + "model": "TS0726", + "friendly_manufacturer": "_TZ3002_zjuvw9zf", + "friendly_model": "TS0726", + "name": "_TZ3002_zjuvw9zf TS0726", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Mains", + "lqi": 184, + "rssi": -54, + "last_seen": "2026-02-08T18:57:28.278143+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": "SCENE_SELECTOR", + "id": 4 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZ3002_zjuvw9zf" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0726" + } + ] + }, + { + "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": "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": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xe000", + "endpoint_attribute": null, + "attributes": [] + }, + { + "cluster_id": "0xe001", + "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": 85 + } + ] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "SCENE_SELECTOR", + "id": 4 + }, + "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": "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": "0x4003", + "name": "start_up_on_off", + "zcl_type": "enum8", + "unsupported": true + } + ] + }, + { + "cluster_id": "0xe001", + "endpoint_attribute": null, + "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": "_TZ3002_zjuvw9zf", + "model": "TS0726", + "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": "0x0004", + "input_clusters": [ + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0xe000", + "0xe001", + "0x0000" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + }, + "2": { + "profile_id": "0x0104", + "device_type": "0x0004", + "input_clusters": [ + "0x0004", + "0x0005", + "0x0006", + "0xe001" + ], + "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:50:fa:6e:0f-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:50:fa:6e:0f:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:50:fa:6e:0f", + "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:50:fa:6e:0f-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:50:fa:6e:0f:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:50:fa:6e:0f", + "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:50:fa:6e:0f-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:50:fa:6e:0f:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:50:fa:6e:0f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -54 + } + } + ], + "switch": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:50:fa:6e:0f-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:50:fa:6e:0f:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:50:fa:6e:0f", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 0, + "available": true + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:50:fa:6e:0f-2-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 2, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "2:0x0006", + "unique_id": "ab:cd:ef:12:50:fa:6e:0f:2:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:50:fa:6e:0f", + "endpoint_id": 2, + "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:50:fa:6e:0f-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:50:fa:6e:0f:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:50:fa:6e:0f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000055", + "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-klv2wul0-ts0505b.json b/tests/data/devices/tz3210-klv2wul0-ts0505b.json new file mode 100644 index 000000000..cd20ea023 --- /dev/null +++ b/tests/data/devices/tz3210-klv2wul0-ts0505b.json @@ -0,0 +1,599 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:22:27:e7:71", + "nwk": "0xC809", + "manufacturer": "_TZ3210_klv2wul0", + "model": "TS0505B", + "friendly_manufacturer": "_TZ3210_klv2wul0", + "friendly_model": "TS0505B", + "name": "_TZ3210_klv2wul0 TS0505B", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Mains", + "lqi": 225, + "rssi": null, + "last_seen": "2026-01-11T01:29:08.242178+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": "EXTENDED_COLOR_LIGHT", + "id": 269 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZ3210_klv2wul0" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS0505B" + } + ] + }, + { + "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": "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", + "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", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x0300", + "endpoint_attribute": "light_color", + "attributes": [ + { + "id": "0x400a", + "name": "color_capabilities", + "zcl_type": "map16", + "value": 25 + }, + { + "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": 500 + }, + { + "id": "0x400b", + "name": "color_temp_physical_min", + "zcl_type": "uint16", + "value": 153 + }, + { + "id": "0x0007", + "name": "color_temperature", + "zcl_type": "uint16", + "value": 500 + }, + { + "id": "0x0003", + "name": "current_x", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x0004", + "name": "current_y", + "zcl_type": "uint16", + "value": 0 + }, + { + "id": "0x000f", + "name": "options", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x4010", + "name": "start_up_color_temperature", + "zcl_type": "uint16", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x1000", + "endpoint_attribute": "lightlink", + "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": 101 + } + ] + } + ] + }, + "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": "_TZ3210_klv2wul0", + "model": "TS0505B", + "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": "0x010d", + "input_clusters": [ + "0x0000", + "0x0003", + "0x0004", + "0x0005", + "0x0006", + "0x0008", + "0x0300", + "0x1000", + "0xef00" + ], + "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:22:27:e7: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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:22:27:e7:71:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:22:27:e7:71", + "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:22:27:e7:71-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:22:27:e7:71:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + }, + { + "class_name": "LevelControlClusterHandler", + "generic_id": "cluster_handler_0x0008", + "endpoint_id": 1, + "cluster": { + "id": 8, + "name": "Level control", + "type": "server" + }, + "id": "1:0x0008", + "unique_id": "ab:cd:ef:12:22:27:e7:71:1:0x0008", + "status": "INITIALIZED", + "value_attribute": "current_level" + }, + { + "class_name": "ColorClusterHandler", + "generic_id": "cluster_handler_0x0300", + "endpoint_id": 1, + "cluster": { + "id": 768, + "name": "Color Control", + "type": "server" + }, + "id": "1:0x0300", + "unique_id": "ab:cd:ef:12:22:27:e7:71:1:0x0300", + "status": "INITIALIZED", + "value_attribute": "current_x" + } + ], + "device_ieee": "ab:cd:ef:12:22:27:e7:71", + "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": true, + "brightness": 254, + "xy_color": [ + 0.0, + 0.0 + ], + "color_temp": 500, + "effect_list": [ + "off" + ], + "effect": "off", + "supported_features": 40, + "color_mode": "color_temp", + "supported_color_modes": [ + "brightness", + "color_temp", + "onoff", + "xy" + ], + "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:22:27:e7: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:22:27:e7:71:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:22:27:e7:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 225 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:22:27:e7: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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:22:27:e7:71:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:22:27:e7:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:22:27:e7: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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:22:27:e7:71:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:22:27:e7:71", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000065", + "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-mudxchsu-ts0601.json b/tests/data/devices/tze200-mudxchsu-ts0601.json new file mode 100644 index 000000000..0d30863be --- /dev/null +++ b/tests/data/devices/tze200-mudxchsu-ts0601.json @@ -0,0 +1,1471 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:65:80:74:f3", + "nwk": "0xD56F", + "manufacturer": "_TZE200_mudxchsu", + "model": "TS0601", + "friendly_manufacturer": "_TZE200_mudxchsu", + "friendly_model": "TS0601", + "name": "_TZE200_mudxchsu TS0601", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts0601_trv.ZonnsmartTV01_ZG", + "exposes_features": [], + "manufacturer_code": 4098, + "power_source": "Battery or Unknown", + "lqi": null, + "rssi": null, + "last_seen": "2026-02-21T07:03:26.470800+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": 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": "THERMOSTAT", + "id": 769 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE200_mudxchsu" + }, + { + "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 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "unsupported": true + } + ] + }, + { + "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", + "unsupported": true + } + ] + }, + { + "cluster_id": "0x000d", + "endpoint_attribute": "analog_output", + "attributes": [ + { + "id": "0x0100", + "name": "application_type", + "zcl_type": "uint32", + "value": 9 + }, + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "value": "Temperature Offset" + }, + { + "id": "0x0075", + "name": "engineering_units", + "zcl_type": "enum16", + "value": 62 + }, + { + "id": "0x0041", + "name": "max_present_value", + "zcl_type": "single", + "value": 5 + }, + { + "id": "0x0045", + "name": "min_present_value", + "zcl_type": "single", + "value": -5 + }, + { + "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": 0.1 + } + ] + }, + { + "cluster_id": "0x000f", + "endpoint_attribute": "binary_input", + "attributes": [ + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "value": "Open Window Detected" + }, + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "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": "0x001d", + "name": "alarm_mask", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x001b", + "name": "ctrl_sequence_of_oper", + "zcl_type": "enum8", + "value": 2 + }, + { + "id": "0x0000", + "name": "local_temperature", + "zcl_type": "int16", + "value": 2060 + }, + { + "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": 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", + "unsupported": true + }, + { + "id": "0x0012", + "name": "occupied_heating_setpoint", + "zcl_type": "int16", + "value": 1500 + }, + { + "id": "0x4002", + "name": "operation_preset", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x0007", + "name": "pi_cooling_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0008", + "name": "pi_heating_demand", + "zcl_type": "uint8", + "unsupported": true + }, + { + "id": "0x0025", + "name": "programing_oper_mode", + "zcl_type": "map8", + "value": 0 + }, + { + "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", + "value": 1600 + } + ] + }, + { + "cluster_id": "0x0204", + "endpoint_attribute": "thermostat_ui", + "attributes": [ + { + "id": "0x0001", + "name": "keypad_lockout", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": "tuya_manufacturer", + "attributes": [ + { + "id": "0x0223", + "name": "battery", + "zcl_type": "uint32", + "value": 100 + }, + { + "id": "0x0265", + "name": "boost_duration_seconds", + "zcl_type": "uint32", + "value": 0 + }, + { + "id": "0x0128", + "name": "child_lock", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0268", + "name": "comfort_mode_temperature", + "zcl_type": "uint32", + "value": 170 + }, + { + "id": "0x0269", + "name": "eco_mode_temperature", + "zcl_type": "uint32", + "value": 160 + }, + { + "id": "0x052d", + "name": "fault_detected", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x010a", + "name": "frost_protection", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x016b", + "name": "heating_stop", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0220", + "name": "holiday_temperature", + "zcl_type": "uint32", + "value": 160 + }, + { + "id": "0x0402", + "name": "mode", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0473", + "name": "online", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0266", + "name": "opened_window_temperature", + "zcl_type": "uint32", + "value": 50 + }, + { + "id": "0x0210", + "name": "target_temperature", + "zcl_type": "uint32", + "value": 150 + }, + { + "id": "0x0218", + "name": "temperature", + "zcl_type": "uint32", + "value": 206 + }, + { + "id": "0x021b", + "name": "temperature_calibration", + "zcl_type": "int32", + "value": 0 + }, + { + "id": "0x041f", + "name": "week_format", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0108", + "name": "window_detection", + "zcl_type": "uint8", + "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": 69 + } + ] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "COMBINED_INTERFACE", + "id": 7 + }, + "in_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": "0x000d", + "endpoint_attribute": "analog_output", + "attributes": [ + { + "id": "0x0100", + "name": "application_type", + "zcl_type": "uint32", + "value": 0 + }, + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "value": "Opened Window Temperature" + }, + { + "id": "0x0075", + "name": "engineering_units", + "zcl_type": "enum16", + "value": 62 + }, + { + "id": "0x0041", + "name": "max_present_value", + "zcl_type": "single", + "value": 30.0 + }, + { + "id": "0x0045", + "name": "min_present_value", + "zcl_type": "single", + "value": 5.0 + }, + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "single", + "value": 5.0 + }, + { + "id": "0x0068", + "name": "relinquish_default", + "zcl_type": "single", + "unsupported": true + }, + { + "id": "0x006a", + "name": "resolution", + "zcl_type": "single", + "value": 0.5 + } + ] + } + ], + "out_clusters": [] + }, + "3": { + "profile_id": 260, + "device_type": { + "name": "COMBINED_INTERFACE", + "id": 7 + }, + "in_clusters": [ + { + "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 + } + ] + } + ], + "out_clusters": [] + } + }, + "original_signature": { + "manufacturer": "_TZE200_mudxchsu", + "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": 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": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": "Open Window Detected", + "unique_id": "ab:cd:ef:12:65:80:74:f3-1-15", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinaryInputWithDescription", + "translation_key": null, + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "BinaryInputClusterHandler", + "generic_id": "cluster_handler_0x000f", + "endpoint_id": 1, + "cluster": { + "id": 15, + "name": "Binary Input (Basic)", + "type": "server" + }, + "id": "1:0x000f", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x000f", + "status": "INITIALIZED", + "value_attribute": "present_value" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "present_value" + }, + "state": { + "class_name": "BinaryInputWithDescription", + "available": true, + "state": false + } + } + ], + "climate": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:80:74:f3-1", + "migrate_unique_ids": [], + "platform": "climate", + "class_name": "ZONNSMARTThermostat", + "translation_key": "thermostat", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 1, + "available": true, + "group_id": null, + "max_temp": 30.0, + "min_temp": 5.0, + "supported_features": 401, + "fan_modes": null, + "preset_modes": [ + "none", + "holiday", + "Schedule", + "frost protect" + ], + "hvac_modes": [ + "off", + "heat" + ] + }, + "state": { + "class_name": "ZONNSMARTThermostat", + "available": true, + "current_temperature": 20.6, + "outdoor_temperature": null, + "target_temperature": 15.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": 1500, + "pi_heating_demand": null, + "pi_cooling_demand": null, + "unoccupied_cooling_setpoint": null, + "unoccupied_heating_setpoint": 1600 + }, + "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": "Temperature Offset", + "unique_id": "ab:cd:ef:12:65:80:74:f3-1-13", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "AnalogOutputNumber", + "translation_key": null, + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "AnalogOutputClusterHandler", + "generic_id": "cluster_handler_0x000d", + "endpoint_id": 1, + "cluster": { + "id": 13, + "name": "ZONNSMARTTemperatureOffset", + "type": "server" + }, + "id": "1:0x000d", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x000d", + "status": "INITIALIZED", + "value_attribute": "present_value" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 5, + "native_min_value": -5, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "AnalogOutputNumber", + "available": true, + "state": 0.0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:80:74:f3-1-513-local_temperature_calibration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "ThermostatLocalTempCalibration", + "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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 2.5, + "native_min_value": -2.5, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "ThermostatLocalTempCalibration", + "available": true, + "state": 0.0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "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:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "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": "Opened Window Temperature", + "unique_id": "ab:cd:ef:12:65:80:74:f3-2-13", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "AnalogOutputNumber", + "translation_key": null, + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "AnalogOutputClusterHandler", + "generic_id": "cluster_handler_0x000d", + "endpoint_id": 2, + "cluster": { + "id": 13, + "name": "ZONNSMARTWindowOpenedTemp", + "type": "server" + }, + "id": "2:0x000d", + "unique_id": "ab:cd:ef:12:65:80:74:f3:2:0x000d", + "status": "INITIALIZED", + "value_attribute": "present_value" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 2, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 30.0, + "native_min_value": 5.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "AnalogOutputNumber", + "available": true, + "state": 5.0 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "UserInterfaceClusterHandler", + "generic_id": "cluster_handler_0x0204", + "endpoint_id": 1, + "cluster": { + "id": 516, + "name": "Thermostat User Interface Configuration", + "type": "server" + }, + "id": "1:0x0204", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0204", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 1, + "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:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "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:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "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:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "PowerConfigurationClusterHandler", + "generic_id": "cluster_handler_0x0001", + "endpoint_id": 1, + "cluster": { + "id": 1, + "name": "Power Configuration", + "type": "server" + }, + "id": "1:0x0001", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0001", + "status": "INITIALIZED", + "value_attribute": "battery_voltage" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "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:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "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:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "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:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 0, + "available": true + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:80:74:f3-2-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 2, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "2:0x0006", + "unique_id": "ab:cd:ef:12:65:80:74:f3:2:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 2, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 0, + "available": true + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:80:74:f3-3-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 3, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "3:0x0006", + "unique_id": "ab:cd:ef:12:65:80:74:f3:3:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 3, + "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:65:80:74:f3-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:65:80:74:f3:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:65:80:74:f3", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000045", + "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-r5ksy7qo-ts0601.json b/tests/data/devices/tze200-r5ksy7qo-ts0601.json new file mode 100644 index 000000000..8ae10ea78 --- /dev/null +++ b/tests/data/devices/tze200-r5ksy7qo-ts0601.json @@ -0,0 +1,266 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:67:e1:be:80", + "nwk": "0x2E17", + "manufacturer": "_TZE200_r5ksy7qo", + "model": "TS0601", + "friendly_manufacturer": "_TZE200_r5ksy7qo", + "friendly_model": "TS0601", + "name": "_TZE200_r5ksy7qo TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": 196, + "rssi": -51, + "last_seen": "2026-01-03T15:07:22.357898+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": [] + }, + { + "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": 67 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE200_r5ksy7qo", + "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", + "0x0004", + "0x0005", + "0xef00" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:67:e1:be:80-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:67:e1:be:80:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:67:e1:be:80", + "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:67:e1:be:80-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:67:e1:be:80:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:67:e1:be:80", + "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:67:e1:be:80-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:67:e1:be:80:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:67:e1:be:80", + "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/tze200-sur6q7ko-ts0601.json b/tests/data/devices/tze200-sur6q7ko-ts0601.json new file mode 100644 index 000000000..097a69e3f --- /dev/null +++ b/tests/data/devices/tze200-sur6q7ko-ts0601.json @@ -0,0 +1,1446 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:a2:68:cb:79", + "nwk": "0x2B0E", + "manufacturer": "_TZE200_sur6q7ko", + "model": "TS0601", + "friendly_manufacturer": "_TZE200_sur6q7ko", + "friendly_model": "TS0601", + "name": "_TZE200_sur6q7ko TS0601", + "quirk_applied": true, + "quirk_class": "zhaquirks.tuya.ts0601_trv.ZonnsmartTV01_ZG", + "exposes_features": [], + "manufacturer_code": 4098, + "power_source": "Battery or Unknown", + "lqi": 148, + "rssi": -63, + "last_seen": "2026-02-16T12:40:37.419252+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": 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": "THERMOSTAT", + "id": 769 + }, + "in_clusters": [ + { + "cluster_id": "0x0000", + "endpoint_attribute": "basic", + "attributes": [ + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE200_sur6q7ko" + }, + { + "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": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0x000d", + "endpoint_attribute": "analog_output", + "attributes": [ + { + "id": "0x0100", + "name": "application_type", + "zcl_type": "uint32", + "value": 9 + }, + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "value": "Temperature Offset" + }, + { + "id": "0x0075", + "name": "engineering_units", + "zcl_type": "enum16", + "value": 62 + }, + { + "id": "0x0041", + "name": "max_present_value", + "zcl_type": "single", + "value": 5 + }, + { + "id": "0x0045", + "name": "min_present_value", + "zcl_type": "single", + "value": -5 + }, + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "single", + "value": 1.4 + }, + { + "id": "0x006a", + "name": "resolution", + "zcl_type": "single", + "value": 0.1 + } + ] + }, + { + "cluster_id": "0x000f", + "endpoint_attribute": "binary_input", + "attributes": [ + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "value": "Open Window Detected" + }, + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "bool", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0201", + "endpoint_attribute": "thermostat", + "attributes": [ + { + "id": "0x001d", + "name": "alarm_mask", + "zcl_type": "map8", + "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": 140 + }, + { + "id": "0x0016", + "name": "max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3000 + }, + { + "id": "0x0015", + "name": "min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 500 + }, + { + "id": "0x0012", + "name": "occupied_heating_setpoint", + "zcl_type": "int16", + "value": 1500 + }, + { + "id": "0x4002", + "name": "operation_preset", + "zcl_type": "enum8", + "value": 1 + }, + { + "id": "0x0025", + "name": "programing_oper_mode", + "zcl_type": "map8", + "value": 0 + }, + { + "id": "0x001e", + "name": "running_mode", + "zcl_type": "enum8", + "value": 0 + }, + { + "id": "0x0029", + "name": "running_state", + "zcl_type": "map16", + "value": 0 + }, + { + "id": "0x001c", + "name": "system_mode", + "zcl_type": "enum8", + "value": 4 + }, + { + "id": "0x0014", + "name": "unoccupied_heating_setpoint", + "zcl_type": "int16", + "value": 1700 + } + ] + }, + { + "cluster_id": "0x0204", + "endpoint_attribute": "thermostat_ui", + "attributes": [ + { + "id": "0x0001", + "name": "keypad_lockout", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0xef00", + "endpoint_attribute": "tuya_manufacturer", + "attributes": [ + { + "id": "0x0223", + "name": "battery", + "zcl_type": "uint32", + "value": 100 + }, + { + "id": "0x0265", + "name": "boost_duration_seconds", + "zcl_type": "uint32", + "value": 0 + }, + { + "id": "0x0128", + "name": "child_lock", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0268", + "name": "comfort_mode_temperature", + "zcl_type": "uint32", + "value": 210 + }, + { + "id": "0x0269", + "name": "eco_mode_temperature", + "zcl_type": "uint32", + "value": 170 + }, + { + "id": "0x052d", + "name": "fault_detected", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x010a", + "name": "frost_protection", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x016b", + "name": "heating_stop", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0220", + "name": "holiday_temperature", + "zcl_type": "uint32", + "value": 170 + }, + { + "id": "0x0402", + "name": "mode", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0473", + "name": "online", + "zcl_type": "uint8", + "value": 1 + }, + { + "id": "0x0266", + "name": "opened_window_temperature", + "zcl_type": "uint32", + "value": 210 + }, + { + "id": "0x0210", + "name": "target_temperature", + "zcl_type": "uint32", + "value": 150 + }, + { + "id": "0x0218", + "name": "temperature", + "zcl_type": "uint32", + "value": 198 + }, + { + "id": "0x021b", + "name": "temperature_calibration", + "zcl_type": "int32", + "value": 14 + }, + { + "id": "0x041f", + "name": "week_format", + "zcl_type": "uint8", + "value": 0 + }, + { + "id": "0x0108", + "name": "window_detection", + "zcl_type": "uint8", + "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": 69 + } + ] + } + ] + }, + "2": { + "profile_id": 260, + "device_type": { + "name": "COMBINED_INTERFACE", + "id": 7 + }, + "in_clusters": [ + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 1 + } + ] + }, + { + "cluster_id": "0x000d", + "endpoint_attribute": "analog_output", + "attributes": [ + { + "id": "0x0100", + "name": "application_type", + "zcl_type": "uint32", + "value": 0 + }, + { + "id": "0x001c", + "name": "description", + "zcl_type": "string", + "value": "Opened Window Temperature" + }, + { + "id": "0x0075", + "name": "engineering_units", + "zcl_type": "enum16", + "value": 62 + }, + { + "id": "0x0041", + "name": "max_present_value", + "zcl_type": "single", + "value": 30.0 + }, + { + "id": "0x0045", + "name": "min_present_value", + "zcl_type": "single", + "value": 5.0 + }, + { + "id": "0x0055", + "name": "present_value", + "zcl_type": "single", + "value": 21.0 + }, + { + "id": "0x006a", + "name": "resolution", + "zcl_type": "single", + "value": 0.5 + } + ] + } + ], + "out_clusters": [] + }, + "3": { + "profile_id": 260, + "device_type": { + "name": "COMBINED_INTERFACE", + "id": 7 + }, + "in_clusters": [ + { + "cluster_id": "0x0006", + "endpoint_attribute": "on_off", + "attributes": [ + { + "id": "0x0000", + "name": "on_off", + "zcl_type": "bool", + "value": 1 + } + ] + } + ], + "out_clusters": [] + } + }, + "original_signature": { + "manufacturer": "_TZE200_sur6q7ko", + "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": 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": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": "Open Window Detected", + "unique_id": "ab:cd:ef:12:a2:68:cb:79-1-15", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinaryInputWithDescription", + "translation_key": null, + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "BinaryInputClusterHandler", + "generic_id": "cluster_handler_0x000f", + "endpoint_id": 1, + "cluster": { + "id": 15, + "name": "Binary Input (Basic)", + "type": "server" + }, + "id": "1:0x000f", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x000f", + "status": "INITIALIZED", + "value_attribute": "present_value" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "present_value" + }, + "state": { + "class_name": "BinaryInputWithDescription", + "available": true, + "state": false + } + } + ], + "climate": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "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": 15.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": 1500, + "pi_heating_demand": null, + "pi_cooling_demand": null, + "unoccupied_cooling_setpoint": null, + "unoccupied_heating_setpoint": 1700 + }, + "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": "Temperature Offset", + "unique_id": "ab:cd:ef:12:a2:68:cb:79-1-13", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "AnalogOutputNumber", + "translation_key": null, + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "AnalogOutputClusterHandler", + "generic_id": "cluster_handler_0x000d", + "endpoint_id": 1, + "cluster": { + "id": 13, + "name": "ZONNSMARTTemperatureOffset", + "type": "server" + }, + "id": "1:0x000d", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x000d", + "status": "INITIALIZED", + "value_attribute": "present_value" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 5, + "native_min_value": -5, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "AnalogOutputNumber", + "available": true, + "state": 1.4 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:68:cb:79-1-513-local_temperature_calibration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "ThermostatLocalTempCalibration", + "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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 2.5, + "native_min_value": -2.5, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "ThermostatLocalTempCalibration", + "available": true, + "state": 14.0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "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:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "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": "Opened Window Temperature", + "unique_id": "ab:cd:ef:12:a2:68:cb:79-2-13", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "AnalogOutputNumber", + "translation_key": null, + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "AnalogOutputClusterHandler", + "generic_id": "cluster_handler_0x000d", + "endpoint_id": 2, + "cluster": { + "id": 13, + "name": "ZONNSMARTWindowOpenedTemp", + "type": "server" + }, + "id": "2:0x000d", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:2:0x000d", + "status": "INITIALIZED", + "value_attribute": "present_value" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 2, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 30.0, + "native_min_value": 5.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "AnalogOutputNumber", + "available": true, + "state": 21.0 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "UserInterfaceClusterHandler", + "generic_id": "cluster_handler_0x0204", + "endpoint_id": 1, + "cluster": { + "id": 516, + "name": "Thermostat User Interface Configuration", + "type": "server" + }, + "id": "1:0x0204", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0204", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 1, + "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:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "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:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -63 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "PowerConfigurationClusterHandler", + "generic_id": "cluster_handler_0x0001", + "endpoint_id": 1, + "cluster": { + "id": 1, + "name": "Power Configuration", + "type": "server" + }, + "id": "1:0x0001", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0001", + "status": "INITIALIZED", + "value_attribute": "battery_voltage" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "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:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "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:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "PiHeatingDemand", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "SetpointChangeSource", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "ZONNSMARTThermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "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:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 1, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "1:0x0006", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 1, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 0, + "available": true + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:68:cb:79-2-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 2, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "2:0x0006", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:2:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 2, + "available": true, + "group_id": null + }, + "state": { + "class_name": "Switch", + "state": 1, + "available": true + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:68:cb:79-3-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, + "cluster_handlers": [ + { + "class_name": "OnOffClusterHandler", + "generic_id": "cluster_handler_0x0006", + "endpoint_id": 3, + "cluster": { + "id": 6, + "name": "On/Off", + "type": "server" + }, + "id": "3:0x0006", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:3:0x0006", + "status": "INITIALIZED", + "value_attribute": "on_off" + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 3, + "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:a2:68:cb:79-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:a2:68:cb:79:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:a2:68:cb:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000045", + "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-d6i25bwg-ts0601.json b/tests/data/devices/tze204-d6i25bwg-ts0601.json new file mode 100644 index 000000000..0b95be0ea --- /dev/null +++ b/tests/data/devices/tze204-d6i25bwg-ts0601.json @@ -0,0 +1,422 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:c0:3f:e3:79", + "nwk": "0xBF9B", + "manufacturer": "_TZE204_d6i25bwg", + "model": "TS0601", + "friendly_manufacturer": "_TZE204_d6i25bwg", + "friendly_model": "TS0601", + "name": "_TZE204_d6i25bwg TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Mains", + "lqi": 188, + "rssi": -53, + "last_seen": "2026-02-03T20:34:02.052304+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_d6i25bwg" + }, + { + "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": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 1990 + } + ] + }, + { + "cluster_id": "0x0405", + "endpoint_attribute": "humidity", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "uint16", + "value": 4400 + } + ] + }, + { + "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 + } + ] + } + ] + }, + "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_d6i25bwg", + "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": [ + "0x0000", + "0x0004", + "0x0005", + "0x0402", + "0x0405", + "0xef00" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + }, + "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:c0:3f:e3:79-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:c0:3f:e3:79:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:c0:3f:e3:79", + "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:c0:3f:e3:79-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:c0:3f:e3:79:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:c0:3f:e3:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -53 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c0:3f:e3:79-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, + "cluster_handlers": [ + { + "class_name": "TemperatureMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0402", + "endpoint_id": 1, + "cluster": { + "id": 1026, + "name": "Temperature Measurement", + "type": "server" + }, + "id": "1:0x0402", + "unique_id": "ab:cd:ef:12:c0:3f:e3:79:1:0x0402", + "status": "INITIALIZED", + "value_attribute": "measured_value" + } + ], + "device_ieee": "ab:cd:ef:12:c0:3f:e3:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 19.9 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c0:3f:e3:79-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, + "cluster_handlers": [ + { + "class_name": "RelativeHumidityClusterHandler", + "generic_id": "cluster_handler_0x0405", + "endpoint_id": 1, + "cluster": { + "id": 1029, + "name": "Relative Humidity Measurement", + "type": "server" + }, + "id": "1:0x0405", + "unique_id": "ab:cd:ef:12:c0:3f:e3:79:1:0x0405", + "status": "INITIALIZED", + "value_attribute": "measured_value" + } + ], + "device_ieee": "ab:cd:ef:12:c0:3f:e3:79", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "%" + }, + "state": { + "class_name": "Humidity", + "available": true, + "state": 44.0 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c0:3f:e3:79-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:c0:3f:e3:79:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:c0:3f:e3:79", + "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/tze20c-xbexmf8h-ts130f.json b/tests/data/devices/tze20c-xbexmf8h-ts130f.json new file mode 100644 index 000000000..a433ff467 --- /dev/null +++ b/tests/data/devices/tze20c-xbexmf8h-ts130f.json @@ -0,0 +1,308 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:a2:5a:99:e9", + "nwk": "0x87A1", + "manufacturer": "_TZE20C_xbexmf8h", + "model": "TS130F", + "friendly_manufacturer": "_TZE20C_xbexmf8h", + "friendly_model": "TS130F", + "name": "_TZE20C_xbexmf8h TS130F", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Mains", + "lqi": 200, + "rssi": -61, + "last_seen": "2026-01-02T12:26:36.445252+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": 74, + "maximum_incoming_transfer_size": 80, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 80, + "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": "_TZE20C_xbexmf8h" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "TS130F" + } + ] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "attributes": [] + }, + { + "cluster_id": "0xeb00", + "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": 64 + } + ] + } + ] + }, + "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": "_TZE20C_xbexmf8h", + "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": 4417, + "maximum_buffer_size": 74, + "maximum_incoming_transfer_size": 80, + "server_mask": 10752, + "maximum_outgoing_transfer_size": 80, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0301", + "input_clusters": [ + "0x0000", + "0x0004", + "0x0005", + "0xeb00", + "0xef00" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + }, + "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:a2:5a:99:e9-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:a2:5a:99:e9:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:a2:5a:99:e9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 200 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:5a:99:e9-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:a2:5a:99:e9:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:a2:5a:99:e9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -61 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a2:5a:99:e9-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:a2:5a:99:e9:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:a2:5a:99:e9", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x00000040", + "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-3mzb0sdz-ts0601.json b/tests/data/devices/tze284-3mzb0sdz-ts0601.json new file mode 100644 index 000000000..bd1dc6b66 --- /dev/null +++ b/tests/data/devices/tze284-3mzb0sdz-ts0601.json @@ -0,0 +1,291 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:70:52:10:a0", + "nwk": "0xF696", + "manufacturer": "_TZE284_3mzb0sdz", + "model": "TS0601", + "friendly_manufacturer": "_TZE284_3mzb0sdz", + "friendly_model": "TS0601", + "name": "_TZE284_3mzb0sdz TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": 255, + "rssi": -47, + "last_seen": "2026-02-19T22:05:28.888688+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": 80 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE284_3mzb0sdz" + }, + { + "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": 80 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE284_3mzb0sdz", + "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": [ + "0x0004", + "0x0005", + "0xef00", + "0x0000", + "0xed00" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:70:52:10:a0-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:70:52:10:a0:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:70:52:10:a0", + "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:70:52:10:a0-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:70:52:10:a0:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:70:52:10:a0", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -47 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:70:52:10:a0-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:70:52:10:a0:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:70:52:10:a0", + "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/tze284-6fopvb6v-ts0601.json b/tests/data/devices/tze284-6fopvb6v-ts0601.json new file mode 100644 index 000000000..e5de31f1b --- /dev/null +++ b/tests/data/devices/tze284-6fopvb6v-ts0601.json @@ -0,0 +1,291 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:c0:9e:79:27", + "nwk": "0xD970", + "manufacturer": "_TZE284_6fopvb6v", + "model": "TS0601", + "friendly_manufacturer": "_TZE284_6fopvb6v", + "friendly_model": "TS0601", + "name": "_TZE284_6fopvb6v TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4098, + "power_source": "Mains", + "lqi": 159, + "rssi": -74, + "last_seen": "2026-02-19T18:00:46.740993+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_6fopvb6v" + }, + { + "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_6fopvb6v", + "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:c0:9e:79:27-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:c0:9e:79:27:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:c0:9e:79:27", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 159 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c0:9e:79:27-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:c0:9e:79:27:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:c0:9e:79:27", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -74 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c0:9e:79:27-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:c0:9e:79:27:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:c0:9e:79:27", + "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.json new file mode 100644 index 000000000..56eb3a059 --- /dev/null +++ b/tests/data/devices/tze284-6ycgarab-ts0601.json @@ -0,0 +1,291 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:f3:29:76:29", + "nwk": "0x9289", + "manufacturer": "_TZE284_6ycgarab", + "model": "TS0601", + "friendly_manufacturer": "_TZE284_6ycgarab", + "friendly_model": "TS0601", + "name": "_TZE284_6ycgarab TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": 87, + "rssi": null, + "last_seen": "2026-01-09T11:35:26.636395+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": 80 + }, + { + "id": "0x0004", + "name": "manufacturer", + "zcl_type": "string", + "value": "_TZE284_6ycgarab" + }, + { + "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": 80 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE284_6ycgarab", + "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", + "0x0004", + "0x0005", + "0xed00", + "0xef00" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:f3:29:76:29-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:f3:29:76:29:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:f3:29:76:29", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 87 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:f3:29:76:29-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:f3:29:76:29:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:f3:29:76:29", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:f3:29:76:29-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:f3:29:76:29:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:f3:29:76:29", + "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/tze284-78ioiaml-ts0601.json b/tests/data/devices/tze284-78ioiaml-ts0601.json new file mode 100644 index 000000000..ac144ff61 --- /dev/null +++ b/tests/data/devices/tze284-78ioiaml-ts0601.json @@ -0,0 +1,291 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:50:51:3e:41", + "nwk": "0x96A0", + "manufacturer": "_TZE284_78ioiaml", + "model": "TS0601", + "friendly_manufacturer": "_TZE284_78ioiaml", + "friendly_model": "TS0601", + "name": "_TZE284_78ioiaml TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4098, + "power_source": "Mains", + "lqi": 117, + "rssi": null, + "last_seen": "2026-02-02T19:31:14.694810+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_78ioiaml" + }, + { + "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": 74 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE284_78ioiaml", + "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", + "0xed00", + "0xef00" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:50:51:3e:41-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:50:51:3e:41:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:50:51:3e:41", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "LQISensor", + "available": true, + "state": 117 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:50:51:3e:41-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:50:51:3e:41:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:50:51:3e:41", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:50:51:3e:41-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:50:51:3e:41:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:50:51:3e:41", + "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/tze284-8se38w3c-ts0601.json b/tests/data/devices/tze284-8se38w3c-ts0601.json new file mode 100644 index 000000000..47817cd6e --- /dev/null +++ b/tests/data/devices/tze284-8se38w3c-ts0601.json @@ -0,0 +1,291 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:c3:0d:b8:1a", + "nwk": "0x435A", + "manufacturer": "_TZE284_8se38w3c", + "model": "TS0601", + "friendly_manufacturer": "_TZE284_8se38w3c", + "friendly_model": "TS0601", + "name": "_TZE284_8se38w3c TS0601", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4417, + "power_source": "Battery or Unknown", + "lqi": null, + "rssi": null, + "last_seen": "2026-02-13T11:31:56.160842+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_8se38w3c" + }, + { + "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": 77 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "_TZE284_8se38w3c", + "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": [ + "0x0004", + "0x0005", + "0xef00", + "0x0000", + "0xed00" + ], + "output_clusters": [ + "0x0019", + "0x000a" + ] + } + } + }, + "zha_lib_entities": { + "sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c3:0d:b8:1a-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:c3:0d:b8:1a:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:c3:0d:b8:1a", + "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:c3:0d:b8:1a-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:c3:0d:b8:1a:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:c3:0d:b8:1a", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": null + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:c3:0d:b8:1a-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:c3:0d:b8:1a:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:c3:0d:b8:1a", + "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/universal-electronics-inc-urc4460bc0-x-r.json b/tests/data/devices/universal-electronics-inc-urc4460bc0-x-r.json new file mode 100644 index 000000000..3fc82ccf4 --- /dev/null +++ b/tests/data/devices/universal-electronics-inc-urc4460bc0-x-r.json @@ -0,0 +1,553 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:65:4f:d8:da", + "nwk": "0x9980", + "manufacturer": "Universal Electronics Inc", + "model": "URC4460BC0-X-R", + "friendly_manufacturer": "Universal Electronics Inc", + "friendly_model": "URC4460BC0-X-R", + "name": "Universal Electronics Inc URC4460BC0-X-R", + "quirk_applied": true, + "quirk_class": "zhaquirks.universalelectronics.contact_sensor.ContactSensor", + "exposes_features": [], + "manufacturer_code": 4335, + "power_source": "Battery or Unknown", + "lqi": 232, + "rssi": -42, + "last_seen": "2026-02-06T01:46:05.820029+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": 4335, + "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": "Universal Electronics Inc" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "URC4460BC0-X-R" + } + ] + }, + { + "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", + "value": 1 + }, + { + "id": "0x0031", + "name": "battery_size", + "zcl_type": "enum8", + "value": 255 + }, + { + "id": "0x0020", + "name": "battery_voltage", + "zcl_type": "uint8", + "value": 25 + } + ] + }, + { + "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": "0x0402", + "endpoint_attribute": "temperature", + "attributes": [ + { + "id": "0x0000", + "name": "measured_value", + "zcl_type": "int16", + "value": 1300 + } + ] + }, + { + "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": 32 + }, + { + "id": "0x0001", + "name": "zone_type", + "zcl_type": "enum16", + "value": 21 + } + ] + }, + { + "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": 538315041 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Universal Electronics Inc", + "model": "URC4460BC0-X-R", + "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": 4335, + "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" + ] + } + } + }, + "zha_lib_entities": { + "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:4f:d8:da-1-1280", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "IASZone", + "translation_key": null, + "translation_placeholders": null, + "device_class": "opening", + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "cluster_handlers": [ + { + "class_name": "IASZoneClusterHandler", + "generic_id": "cluster_handler_0x0500", + "endpoint_id": 1, + "cluster": { + "id": 1280, + "name": "IAS Zone", + "type": "server" + }, + "id": "1:0x0500", + "unique_id": "ab:cd:ef:12:65:4f:d8:da:1:0x0500", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:65:4f:d8:da", + "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:65:4f:d8:da-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:65:4f:d8:da:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:65:4f:d8:da", + "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:65:4f:d8:da-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:65:4f:d8:da:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:65:4f:d8:da", + "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:65:4f:d8:da-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:65:4f:d8:da:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:65:4f:d8:da", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "dBm" + }, + "state": { + "class_name": "RSSISensor", + "available": true, + "state": -42 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:4f:d8:da-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, + "cluster_handlers": [ + { + "class_name": "PowerConfigurationClusterHandler", + "generic_id": "cluster_handler_0x0001", + "endpoint_id": 1, + "cluster": { + "id": 1, + "name": "Power Configuration", + "type": "server" + }, + "id": "1:0x0001", + "unique_id": "ab:cd:ef:12:65:4f:d8:da:1:0x0001", + "status": "INITIALIZED", + "value_attribute": "battery_voltage" + } + ], + "device_ieee": "ab:cd:ef:12:65:4f:d8:da", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": 0, + "unit": "%" + }, + "state": { + "class_name": "Battery", + "available": true, + "state": 44.5, + "battery_size": "Unknown", + "battery_quantity": 1, + "battery_voltage": 2.5 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:4f:d8:da-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, + "cluster_handlers": [ + { + "class_name": "TemperatureMeasurementClusterHandler", + "generic_id": "cluster_handler_0x0402", + "endpoint_id": 1, + "cluster": { + "id": 1026, + "name": "Temperature Measurement", + "type": "server" + }, + "id": "1:0x0402", + "unique_id": "ab:cd:ef:12:65:4f:d8:da:1:0x0402", + "status": "INITIALIZED", + "value_attribute": "measured_value" + } + ], + "device_ieee": "ab:cd:ef:12:65:4f:d8:da", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": "\u00b0C" + }, + "state": { + "class_name": "Temperature", + "available": true, + "state": 13.0 + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:65:4f:d8:da-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:65:4f:d8:da:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:65:4f:d8:da", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x20160921", + "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/zen-within-zen-01.json b/tests/data/devices/zen-within-zen-01.json new file mode 100644 index 000000000..347a53076 --- /dev/null +++ b/tests/data/devices/zen-within-zen-01.json @@ -0,0 +1,987 @@ +{ + "version": 1, + "ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "nwk": "0x93EA", + "manufacturer": "Zen Within", + "model": "Zen-01", + "friendly_manufacturer": "Zen Within", + "friendly_model": "Zen-01", + "name": "Zen Within Zen-01", + "quirk_applied": false, + "quirk_class": "zigpy.device.Device", + "exposes_features": [], + "manufacturer_code": 4440, + "power_source": "Battery or Unknown", + "lqi": 255, + "rssi": null, + "last_seen": "2026-01-10T21:53:52.256873+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": 4440, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 0, + "maximum_outgoing_transfer_size": 128, + "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": "Zen Within" + }, + { + "id": "0x0005", + "name": "model", + "zcl_type": "string", + "value": "Zen-01" + } + ] + }, + { + "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": 60 + } + ] + }, + { + "cluster_id": "0x0003", + "endpoint_attribute": "identify", + "attributes": [] + }, + { + "cluster_id": "0x0004", + "endpoint_attribute": "groups", + "attributes": [] + }, + { + "cluster_id": "0x0005", + "endpoint_attribute": "scenes", + "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", + "value": 3730 + }, + { + "id": "0x0004", + "name": "abs_max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3730 + }, + { + "id": "0x0005", + "name": "abs_min_cool_setpoint_limit", + "zcl_type": "int16", + "value": 400 + }, + { + "id": "0x0003", + "name": "abs_min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 400 + }, + { + "id": "0x001b", + "name": "ctrl_sequence_of_oper", + "zcl_type": "enum8", + "value": 4 + }, + { + "id": "0x0000", + "name": "local_temperature", + "zcl_type": "int16", + "value": 2170 + }, + { + "id": "0x0010", + "name": "local_temperature_calibration", + "zcl_type": "int8", + "value": 0 + }, + { + "id": "0x0018", + "name": "max_cool_setpoint_limit", + "zcl_type": "int16", + "value": 3730 + }, + { + "id": "0x0016", + "name": "max_heat_setpoint_limit", + "zcl_type": "int16", + "value": 3730 + }, + { + "id": "0x0017", + "name": "min_cool_setpoint_limit", + "zcl_type": "int16", + "value": 400 + }, + { + "id": "0x0015", + "name": "min_heat_setpoint_limit", + "zcl_type": "int16", + "value": 400 + }, + { + "id": "0x0002", + "name": "occupancy", + "zcl_type": "map8", + "unsupported": true + }, + { + "id": "0x0011", + "name": "occupied_cooling_setpoint", + "zcl_type": "int16", + "value": 2350 + }, + { + "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", + "value": 4 + }, + { + "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": "0x0202", + "endpoint_attribute": "fan", + "attributes": [ + { + "id": "0x0000", + "name": "fan_mode", + "zcl_type": "enum8", + "value": 5 + }, + { + "id": "0x0001", + "name": "fan_mode_sequence", + "zcl_type": "enum8", + "value": 4 + } + ] + }, + { + "cluster_id": "0x0204", + "endpoint_attribute": "thermostat_ui", + "attributes": [ + { + "id": "0x0001", + "name": "keypad_lockout", + "zcl_type": "enum8", + "value": 0 + } + ] + }, + { + "cluster_id": "0x0b05", + "endpoint_attribute": "diagnostic", + "attributes": [] + }, + { + "cluster_id": "0xfe11", + "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": 543 + } + ] + } + ] + } + }, + "original_signature": { + "manufacturer": "Zen Within", + "model": "Zen-01", + "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": 4440, + "maximum_buffer_size": 82, + "maximum_incoming_transfer_size": 128, + "server_mask": 0, + "maximum_outgoing_transfer_size": 128, + "descriptor_capability_field": 0 + }, + "endpoints": { + "1": { + "profile_id": "0x0104", + "device_type": "0x0301", + "input_clusters": [ + "0x0000", + "0x0001", + "0x0003", + "0x0004", + "0x0005", + "0x0020", + "0x0201", + "0x0202", + "0x0204", + "0x0b05", + "0xfe11" + ], + "output_clusters": [ + "0x000a", + "0x0019" + ] + } + } + }, + "zha_lib_entities": { + "button": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "IdentifyClusterHandler", + "generic_id": "cluster_handler_0x0003", + "endpoint_id": 1, + "cluster": { + "id": 3, + "name": "Identify", + "type": "server" + }, + "id": "1:0x0003", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0003", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "endpoint_id": 1, + "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:e9:5a:2c:fd-1", + "migrate_unique_ids": [], + "platform": "climate", + "class_name": "ZenWithinThermostat", + "translation_key": "thermostat", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": null, + "entity_registry_enabled_default": true, + "enabled": true, + "primary": true, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "Thermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + }, + { + "class_name": "FanClusterHandler", + "generic_id": "cluster_handler_0x0202", + "endpoint_id": 1, + "cluster": { + "id": 514, + "name": "Fan Control", + "type": "server" + }, + "id": "1:0x0202", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0202", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "endpoint_id": 1, + "available": true, + "group_id": null, + "max_temp": 37.3, + "min_temp": 4.0, + "supported_features": 395, + "fan_modes": [ + "auto", + "on" + ], + "preset_modes": [], + "hvac_modes": [ + "off", + "heat_cool", + "cool", + "heat" + ] + }, + "state": { + "class_name": "ZenWithinThermostat", + "available": true, + "current_temperature": 21.7, + "outdoor_temperature": null, + "target_temperature": 17.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": 2350, + "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" + ] + } + ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd-1-513-local_temperature_calibration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "ThermostatLocalTempCalibration", + "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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "Thermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 2.5, + "native_min_value": -2.5, + "native_step": 0.1, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "ThermostatLocalTempCalibration", + "available": true, + "state": 0.0 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "Thermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 37.300000000000004, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "MaxHeatSetpointLimit", + "available": true, + "state": 37.300000000000004 + } + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "Thermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "box", + "native_max_value": 37.300000000000004, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "MinHeatSetpointLimit", + "available": true, + "state": 4.0 + } + } + ], + "select": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "UserInterfaceClusterHandler", + "generic_id": "cluster_handler_0x0204", + "endpoint_id": 1, + "cluster": { + "id": 516, + "name": "Thermostat User Interface Configuration", + "type": "server" + }, + "id": "1:0x0204", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0204", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "endpoint_id": 1, + "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:e9:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "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:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "BasicClusterHandler", + "generic_id": "cluster_handler_0x0000", + "endpoint_id": 1, + "cluster": { + "id": 0, + "name": "Basic", + "type": "server" + }, + "id": "1:0x0000", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0000", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "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:e9:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "PowerConfigurationClusterHandler", + "generic_id": "cluster_handler_0x0001", + "endpoint_id": 1, + "cluster": { + "id": 1, + "name": "Power Configuration", + "type": "server" + }, + "id": "1:0x0001", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0001", + "status": "INITIALIZED", + "value_attribute": "battery_voltage" + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "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": 4, + "battery_voltage": 6.0 + }, + "extra_state_attributes": [ + "battery_quantity", + "battery_size", + "battery_voltage" + ] + }, + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "Thermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "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:e9:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "ThermostatClusterHandler", + "generic_id": "cluster_handler_0x0201", + "endpoint_id": 1, + "cluster": { + "id": 513, + "name": "Thermostat", + "type": "server" + }, + "id": "1:0x0201", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0201", + "status": "INITIALIZED", + "value_attribute": "local_temperature" + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "endpoint_id": 1, + "available": true, + "group_id": null, + "suggested_display_precision": null, + "unit": null + }, + "state": { + "class_name": "SetpointChangeSourceTimestamp", + "available": true, + "state": null + } + } + ], + "update": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd-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, + "cluster_handlers": [ + { + "class_name": "OtaClientClusterHandler", + "generic_id": "cluster_handler_0x0019_client", + "endpoint_id": 1, + "cluster": { + "id": 25, + "name": "Ota", + "type": "client" + }, + "id": "1:0x0019_client", + "unique_id": "ab:cd:ef:12:e9:5a:2c:fd:1:0x0019_CLIENT", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e9:5a:2c:fd", + "endpoint_id": 1, + "available": true, + "group_id": null, + "supported_features": 7 + }, + "state": { + "class_name": "FirmwareUpdateEntity", + "available": true, + "installed_version": "0x0000021f", + "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