From 5e0e2d1fbd6ad213a537fbec8eebc5daf3b7d0d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 06:11:54 +0000 Subject: [PATCH 1/2] Bump zha-quirks from 0.0.157 to 1.0.0 Bumps [zha-quirks](https://github.com/zigpy/zha-device-handlers) from 0.0.157 to 1.0.0. - [Release notes](https://github.com/zigpy/zha-device-handlers/releases) - [Commits](https://github.com/zigpy/zha-device-handlers/compare/0.0.157...1.0.0) --- updated-dependencies: - dependency-name: zha-quirks dependency-version: 1.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3bb7ee4fa..df353636b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ dependencies = [ "zigpy-deconz==0.25.5", "zigpy-xbee==0.21.1", "zigpy-zigate==0.13.4", - "zha-quirks==0.0.157", + "zha-quirks==1.0.0", "pyserial==3.5", "pyserial-asyncio-fast", ] From b8a8f1c238bba66f26030c5bd0bf1dd30f76a026 Mon Sep 17 00:00:00 2001 From: TheJulianJES Date: Wed, 25 Feb 2026 07:13:49 +0100 Subject: [PATCH 2/2] Regenerate diagnostics --- tests/data/devices/frient-a-s-moszb-140.json | 116 +++++++-- tests/data/devices/frient-a-s-moszb-153.json | 169 +++++++++++-- ...ikea-of-sweden-somrig-shortcut-button.json | 10 - tests/data/devices/inovelli-vzm30-sn.json | 2 +- tests/data/devices/inovelli-vzm31-sn.json | 6 +- tests/data/devices/inovelli-vzm35-sn.json | 2 +- .../signify-netherlands-b-v-lcx004.json | 12 +- tests/data/devices/sonoff-trvzb.json | 230 +++++++++++++++++- tests/data/devices/ubisys-s1-5501.json | 132 +++++++++- 9 files changed, 619 insertions(+), 60 deletions(-) diff --git a/tests/data/devices/frient-a-s-moszb-140.json b/tests/data/devices/frient-a-s-moszb-140.json index ae2b3a867..aec5850bd 100644 --- a/tests/data/devices/frient-a-s-moszb-140.json +++ b/tests/data/devices/frient-a-s-moszb-140.json @@ -480,6 +480,49 @@ }, "zha_lib_entities": { "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "ab:cd:ef:12:a5:49:dd:25-34-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": 34, + "cluster": { + "id": 1030, + "name": "Occupancy Sensing", + "type": "server" + }, + "id": "34:0x0406", + "unique_id": "ab:cd:ef:12:a5:49:dd:25:34:0x0406", + "status": "INITIALIZED", + "value_attribute": "occupancy" + } + ], + "device_ieee": "ab:cd:ef:12:a5:49:dd:25", + "endpoint_id": 34, + "available": true, + "group_id": null, + "attribute_name": "occupancy" + }, + "state": { + "class_name": "Occupancy", + "available": true, + "state": true + } + }, { "info_object": { "fallback_name": null, @@ -522,13 +565,56 @@ "available": true, "state": true } + }, + { + "info_object": { + "fallback_name": "Tamper", + "unique_id": "ab:cd:ef:12:a5:49:dd:25-35-tamper", + "migrate_unique_ids": [], + "platform": "binary_sensor", + "class_name": "BinarySensor", + "translation_key": null, + "translation_placeholders": null, + "device_class": "tamper", + "state_class": null, + "entity_category": "diagnostic", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "IASZoneClusterHandler", + "generic_id": "cluster_handler_0x0500", + "endpoint_id": 35, + "cluster": { + "id": 1280, + "name": "IAS Zone", + "type": "server" + }, + "id": "35:0x0500", + "unique_id": "ab:cd:ef:12:a5:49:dd:25:35:0x0500", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:a5:49:dd:25", + "endpoint_id": 35, + "available": true, + "group_id": null, + "attribute_name": "zone_status" + }, + "state": { + "class_name": "BinarySensor", + "available": true, + "state": true + } } ], "button": [ { "info_object": { "fallback_name": null, - "unique_id": "ab:cd:ef:12:a5:49:dd:25-35-3", + "unique_id": "ab:cd:ef:12:a5:49:dd:25-34-3", "migrate_unique_ids": [], "platform": "button", "class_name": "IdentifyButton", @@ -544,20 +630,20 @@ { "class_name": "IdentifyClusterHandler", "generic_id": "cluster_handler_0x0003", - "endpoint_id": 35, + "endpoint_id": 34, "cluster": { "id": 3, "name": "Identify", "type": "server" }, - "id": "35:0x0003", - "unique_id": "ab:cd:ef:12:a5:49:dd:25:35:0x0003", + "id": "34:0x0003", + "unique_id": "ab:cd:ef:12:a5:49:dd:25:34:0x0003", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "ab:cd:ef:12:a5:49:dd:25", - "endpoint_id": 35, + "endpoint_id": 34, "available": true, "group_id": null, "command": "identify", @@ -576,7 +662,7 @@ { "info_object": { "fallback_name": null, - "unique_id": "ab:cd:ef:12:a5:49:dd:25-35-0-lqi", + "unique_id": "ab:cd:ef:12:a5:49:dd:25-34-0-lqi", "migrate_unique_ids": [], "platform": "sensor", "class_name": "LQISensor", @@ -592,20 +678,20 @@ { "class_name": "BasicClusterHandler", "generic_id": "cluster_handler_0x0000", - "endpoint_id": 35, + "endpoint_id": 34, "cluster": { "id": 0, "name": "Basic", "type": "server" }, - "id": "35:0x0000", - "unique_id": "ab:cd:ef:12:a5:49:dd:25:35:0x0000", + "id": "34:0x0000", + "unique_id": "ab:cd:ef:12:a5:49:dd:25:34:0x0000", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "ab:cd:ef:12:a5:49:dd:25", - "endpoint_id": 35, + "endpoint_id": 34, "available": true, "group_id": null, "suggested_display_precision": null, @@ -620,7 +706,7 @@ { "info_object": { "fallback_name": null, - "unique_id": "ab:cd:ef:12:a5:49:dd:25-35-0-rssi", + "unique_id": "ab:cd:ef:12:a5:49:dd:25-34-0-rssi", "migrate_unique_ids": [], "platform": "sensor", "class_name": "RSSISensor", @@ -636,20 +722,20 @@ { "class_name": "BasicClusterHandler", "generic_id": "cluster_handler_0x0000", - "endpoint_id": 35, + "endpoint_id": 34, "cluster": { "id": 0, "name": "Basic", "type": "server" }, - "id": "35:0x0000", - "unique_id": "ab:cd:ef:12:a5:49:dd:25:35:0x0000", + "id": "34:0x0000", + "unique_id": "ab:cd:ef:12:a5:49:dd:25:34:0x0000", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "ab:cd:ef:12:a5:49:dd:25", - "endpoint_id": 35, + "endpoint_id": 34, "available": true, "group_id": null, "suggested_display_precision": null, diff --git a/tests/data/devices/frient-a-s-moszb-153.json b/tests/data/devices/frient-a-s-moszb-153.json index 68445c59b..b9a06b7b7 100644 --- a/tests/data/devices/frient-a-s-moszb-153.json +++ b/tests/data/devices/frient-a-s-moszb-153.json @@ -533,6 +533,49 @@ }, "zha_lib_entities": { "binary_sensor": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "00:15:bc:00:1a:10:8a:e5-34-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": 34, + "cluster": { + "id": 1030, + "name": "Occupancy Sensing", + "type": "server" + }, + "id": "34:0x0406", + "unique_id": "00:15:bc:00:1a:10:8a:e5:34:0x0406", + "status": "INITIALIZED", + "value_attribute": "occupancy" + } + ], + "device_ieee": "00:15:bc:00:1a:10:8a:e5", + "endpoint_id": 34, + "available": true, + "group_id": null, + "attribute_name": "occupancy" + }, + "state": { + "class_name": "Occupancy", + "available": true, + "state": false + } + }, { "info_object": { "fallback_name": null, @@ -581,7 +624,7 @@ { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:1a:10:8a:e5-35-3", + "unique_id": "00:15:bc:00:1a:10:8a:e5-34-3", "migrate_unique_ids": [], "platform": "button", "class_name": "IdentifyButton", @@ -597,20 +640,20 @@ { "class_name": "IdentifyClusterHandler", "generic_id": "cluster_handler_0x0003", - "endpoint_id": 35, + "endpoint_id": 34, "cluster": { "id": 3, "name": "Identify", "type": "server" }, - "id": "35:0x0003", - "unique_id": "00:15:bc:00:1a:10:8a:e5:35:0x0003", + "id": "34:0x0003", + "unique_id": "00:15:bc:00:1a:10:8a:e5:34:0x0003", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "00:15:bc:00:1a:10:8a:e5", - "endpoint_id": 35, + "endpoint_id": 34, "available": true, "group_id": null, "command": "identify", @@ -625,11 +668,107 @@ } } ], + "number": [ + { + "info_object": { + "fallback_name": null, + "unique_id": "00:15:bc:00:1a:10:8a:e5-34-1030-pir_o_to_u_delay", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "PIROccupiedToUnoccupiedDelayConfigurationEntity", + "translation_key": "pir_o_to_u_delay", + "translation_placeholders": null, + "device_class": "duration", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "OccupancySensingClusterHandler", + "generic_id": "cluster_handler_0x0406", + "endpoint_id": 34, + "cluster": { + "id": 1030, + "name": "Occupancy Sensing", + "type": "server" + }, + "id": "34:0x0406", + "unique_id": "00:15:bc:00:1a:10:8a:e5:34:0x0406", + "status": "INITIALIZED", + "value_attribute": "occupancy" + } + ], + "device_ieee": "00:15:bc:00:1a:10:8a:e5", + "endpoint_id": 34, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 65535, + "native_min_value": 0, + "native_step": 1.0, + "native_unit_of_measurement": "s" + }, + "state": { + "class_name": "PIROccupiedToUnoccupiedDelayConfigurationEntity", + "available": true, + "state": 240 + } + }, + { + "info_object": { + "fallback_name": "Sensitivity level", + "unique_id": "00:15:bc:00:1a:10:8a:e5-35-current_zone_sensitivity_level", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "sensitivity_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": "IASZoneClusterHandler", + "generic_id": "cluster_handler_0x0500", + "endpoint_id": 35, + "cluster": { + "id": 1280, + "name": "IAS Zone", + "type": "server" + }, + "id": "35:0x0500", + "unique_id": "00:15:bc:00:1a:10:8a:e5:35:0x0500", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "00:15:bc:00:1a:10:8a:e5", + "endpoint_id": 35, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 4, + "native_min_value": 1, + "native_step": 1, + "native_unit_of_measurement": null + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + } + ], "sensor": [ { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:1a:10:8a:e5-35-0-lqi", + "unique_id": "00:15:bc:00:1a:10:8a:e5-34-0-lqi", "migrate_unique_ids": [], "platform": "sensor", "class_name": "LQISensor", @@ -645,20 +784,20 @@ { "class_name": "BasicClusterHandler", "generic_id": "cluster_handler_0x0000", - "endpoint_id": 35, + "endpoint_id": 34, "cluster": { "id": 0, "name": "Basic", "type": "server" }, - "id": "35:0x0000", - "unique_id": "00:15:bc:00:1a:10:8a:e5:35:0x0000", + "id": "34:0x0000", + "unique_id": "00:15:bc:00:1a:10:8a:e5:34:0x0000", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "00:15:bc:00:1a:10:8a:e5", - "endpoint_id": 35, + "endpoint_id": 34, "available": true, "group_id": null, "suggested_display_precision": null, @@ -673,7 +812,7 @@ { "info_object": { "fallback_name": null, - "unique_id": "00:15:bc:00:1a:10:8a:e5-35-0-rssi", + "unique_id": "00:15:bc:00:1a:10:8a:e5-34-0-rssi", "migrate_unique_ids": [], "platform": "sensor", "class_name": "RSSISensor", @@ -689,20 +828,20 @@ { "class_name": "BasicClusterHandler", "generic_id": "cluster_handler_0x0000", - "endpoint_id": 35, + "endpoint_id": 34, "cluster": { "id": 0, "name": "Basic", "type": "server" }, - "id": "35:0x0000", - "unique_id": "00:15:bc:00:1a:10:8a:e5:35:0x0000", + "id": "34:0x0000", + "unique_id": "00:15:bc:00:1a:10:8a:e5:34:0x0000", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "00:15:bc:00:1a:10:8a:e5", - "endpoint_id": 35, + "endpoint_id": 34, "available": true, "group_id": null, "suggested_display_precision": null, diff --git a/tests/data/devices/ikea-of-sweden-somrig-shortcut-button.json b/tests/data/devices/ikea-of-sweden-somrig-shortcut-button.json index 038260421..2b7d59b07 100644 --- a/tests/data/devices/ikea-of-sweden-somrig-shortcut-button.json +++ b/tests/data/devices/ikea-of-sweden-somrig-shortcut-button.json @@ -87,11 +87,6 @@ "endpoint_attribute": "identify", "attributes": [] }, - { - "cluster_id": "0x0004", - "endpoint_attribute": "groups", - "attributes": [] - }, { "cluster_id": "0x0020", "endpoint_attribute": "poll_control", @@ -182,11 +177,6 @@ "endpoint_attribute": "identify", "attributes": [] }, - { - "cluster_id": "0x0004", - "endpoint_attribute": "groups", - "attributes": [] - }, { "cluster_id": "0xfc80", "endpoint_attribute": null, diff --git a/tests/data/devices/inovelli-vzm30-sn.json b/tests/data/devices/inovelli-vzm30-sn.json index a4f999700..54b579756 100644 --- a/tests/data/devices/inovelli-vzm30-sn.json +++ b/tests/data/devices/inovelli-vzm30-sn.json @@ -470,7 +470,7 @@ { "id": "0x0020", "name": "internal_temp_monitor", - "zcl_type": "uint8", + "zcl_type": "int8", "value": 31 }, { diff --git a/tests/data/devices/inovelli-vzm31-sn.json b/tests/data/devices/inovelli-vzm31-sn.json index 3f60d82f7..b07798571 100644 --- a/tests/data/devices/inovelli-vzm31-sn.json +++ b/tests/data/devices/inovelli-vzm31-sn.json @@ -590,7 +590,7 @@ { "id": "0x0020", "name": "internal_temp_monitor", - "zcl_type": "uint8", + "zcl_type": "int8", "value": 39 }, { @@ -680,13 +680,13 @@ { "id": "0x0013", "name": "periodic_power_and_energy_reports", - "zcl_type": "uint8", + "zcl_type": "uint16", "value": 3600 }, { "id": "0x0015", "name": "power_type", - "zcl_type": "uint8", + "zcl_type": "bool", "value": 1 }, { diff --git a/tests/data/devices/inovelli-vzm35-sn.json b/tests/data/devices/inovelli-vzm35-sn.json index 3885bce10..4ddbcd24f 100644 --- a/tests/data/devices/inovelli-vzm35-sn.json +++ b/tests/data/devices/inovelli-vzm35-sn.json @@ -320,7 +320,7 @@ { "id": "0x0015", "name": "power_type", - "zcl_type": "uint8", + "zcl_type": "bool", "value": 0 }, { diff --git a/tests/data/devices/signify-netherlands-b-v-lcx004.json b/tests/data/devices/signify-netherlands-b-v-lcx004.json index b7198ecef..efe82b55c 100644 --- a/tests/data/devices/signify-netherlands-b-v-lcx004.json +++ b/tests/data/devices/signify-netherlands-b-v-lcx004.json @@ -4,11 +4,11 @@ "nwk": "0xAD32", "manufacturer": "Signify Netherlands B.V.", "model": "LCX004", - "friendly_manufacturer": "Signify Netherlands B.V.", - "friendly_model": "LCX004", - "name": "Signify Netherlands B.V. LCX004", - "quirk_applied": false, - "quirk_class": "zigpy.device.Device", + "friendly_manufacturer": "Philips", + "friendly_model": "Hue Gradient lightstrip", + "name": "Philips Hue Gradient lightstrip", + "quirk_applied": true, + "quirk_class": "zigpy.quirks.v2.CustomDeviceV2", "exposes_features": [], "manufacturer_code": 4107, "power_source": "Mains", @@ -230,7 +230,7 @@ }, { "cluster_id": "0xfc03", - "endpoint_attribute": "manufacturer_specific", + "endpoint_attribute": "philips_hue_light_cluster", "attributes": [] } ], diff --git a/tests/data/devices/sonoff-trvzb.json b/tests/data/devices/sonoff-trvzb.json index 51ccc1ec0..470b35f3b 100644 --- a/tests/data/devices/sonoff-trvzb.json +++ b/tests/data/devices/sonoff-trvzb.json @@ -417,6 +417,92 @@ "class_name": "IdentifyButton", "available": true } + }, + { + "info_object": { + "fallback_name": "Boost mode", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-boost_mode", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "WriteAttributeButton", + "translation_key": "boost_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "SonoffPresenceSenorClusterHandler", + "generic_id": "cluster_handler_0xfc11", + "endpoint_id": 1, + "cluster": { + "id": 64529, + "name": "CustomSonoffCluster", + "type": "server" + }, + "id": "1:0xfc11", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f:1:0xfc11", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "temporary_mode", + "attribute_value": 0 + }, + "state": { + "class_name": "WriteAttributeButton", + "available": true + } + }, + { + "info_object": { + "fallback_name": "Timer mode", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-timer_mode", + "migrate_unique_ids": [], + "platform": "button", + "class_name": "WriteAttributeButton", + "translation_key": "timer_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "SonoffPresenceSenorClusterHandler", + "generic_id": "cluster_handler_0xfc11", + "endpoint_id": 1, + "cluster": { + "id": 64529, + "name": "CustomSonoffCluster", + "type": "server" + }, + "id": "1:0xfc11", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f:1:0xfc11", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "temporary_mode", + "attribute_value": 1 + }, + "state": { + "class_name": "WriteAttributeButton", + "available": true + } } ], "climate": [ @@ -696,7 +782,7 @@ "class_name": "NumberConfigurationEntity", "translation_key": "frost_protection_temperature", "translation_placeholders": null, - "device_class": null, + "device_class": "temperature", "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, @@ -781,6 +867,100 @@ "state": null } }, + { + "info_object": { + "fallback_name": "Temporary mode duration", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-temporary_mode_duration", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "temporary_mode_duration", + "translation_placeholders": null, + "device_class": "duration", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "SonoffPresenceSenorClusterHandler", + "generic_id": "cluster_handler_0xfc11", + "endpoint_id": 1, + "cluster": { + "id": 64529, + "name": "CustomSonoffCluster", + "type": "server" + }, + "id": "1:0xfc11", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f:1:0xfc11", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 1440, + "native_min_value": 0, + "native_step": 1, + "native_unit_of_measurement": "min" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + }, + { + "info_object": { + "fallback_name": "Timer mode target temperature", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-timer_mode_target_temperature", + "migrate_unique_ids": [], + "platform": "number", + "class_name": "NumberConfigurationEntity", + "translation_key": "timer_mode_target_temperature", + "translation_placeholders": null, + "device_class": "temperature", + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "SonoffPresenceSenorClusterHandler", + "generic_id": "cluster_handler_0xfc11", + "endpoint_id": 1, + "cluster": { + "id": 64529, + "name": "CustomSonoffCluster", + "type": "server" + }, + "id": "1:0xfc11", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f:1:0xfc11", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "mode": "auto", + "native_max_value": 35.0, + "native_min_value": 4.0, + "native_step": 0.5, + "native_unit_of_measurement": "\u00b0C" + }, + "state": { + "class_name": "NumberConfigurationEntity", + "available": true, + "state": null + } + }, { "info_object": { "fallback_name": "Valve closing degree", @@ -1289,6 +1469,54 @@ "state": false, "inverted": false } + }, + { + "info_object": { + "fallback_name": "Adaptive mode", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f-1-smart_temperature_control", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "adaptive_mode", + "translation_placeholders": null, + "device_class": null, + "state_class": null, + "entity_category": "config", + "entity_registry_enabled_default": true, + "enabled": true, + "primary": false, + "cluster_handlers": [ + { + "class_name": "SonoffPresenceSenorClusterHandler", + "generic_id": "cluster_handler_0xfc11", + "endpoint_id": 1, + "cluster": { + "id": 64529, + "name": "CustomSonoffCluster", + "type": "server" + }, + "id": "1:0xfc11", + "unique_id": "ab:cd:ef:12:4d:04:9a:8f:1:0xfc11", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:4d:04:9a:8f", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "smart_temperature_control", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 2 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } } ], "update": [ diff --git a/tests/data/devices/ubisys-s1-5501.json b/tests/data/devices/ubisys-s1-5501.json index b24a8bae9..3826053e9 100644 --- a/tests/data/devices/ubisys-s1-5501.json +++ b/tests/data/devices/ubisys-s1-5501.json @@ -7,9 +7,11 @@ "friendly_manufacturer": "ubisys", "friendly_model": "S1 (5501)", "name": "ubisys S1 (5501)", - "quirk_applied": false, - "quirk_class": "zigpy.device.Device", - "exposes_features": [], + "quirk_applied": true, + "quirk_class": "zigpy.quirks.v2.CustomDeviceV2", + "exposes_features": [ + "se_poll_summation" + ], "manufacturer_code": 4338, "power_source": "Mains", "lqi": 188, @@ -91,6 +93,24 @@ "value": 255 } ] + }, + { + "cluster_id": "0xfbff", + "endpoint_attribute": "ubisys_input_config", + "attributes": [ + { + "id": "0x0001", + "name": "detached", + "zcl_type": "bool", + "value": 0 + }, + { + "id": "0x0000", + "name": "input_mode", + "zcl_type": "enum8", + "value": 0 + } + ] } ], "out_clusters": [] @@ -268,7 +288,7 @@ "id": "0x0603", "name": "ac_current_divisor", "zcl_type": "uint16", - "unsupported": true + "value": 1000 }, { "id": "0x0602", @@ -553,7 +573,7 @@ }, { "cluster_id": "0xfc00", - "endpoint_attribute": "manufacturer_specific", + "endpoint_attribute": "ubisys_cluster", "attributes": [] } ], @@ -778,6 +798,54 @@ "available": true, "state": "PreviousValue" } + }, + { + "info_object": { + "fallback_name": "Input mode", + "unique_id": "ab:cd:ef:12:e4:d6:5c:c2-1-input_mode", + "migrate_unique_ids": [], + "platform": "select", + "class_name": "ZCLEnumSelectEntity", + "translation_key": "input_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": "ClusterHandler", + "generic_id": "cluster_handler_0xfbff", + "endpoint_id": 1, + "cluster": { + "id": 64511, + "name": "Ubisys Input Configuration", + "type": "server" + }, + "id": "1:0xfbff", + "unique_id": "ab:cd:ef:12:e4:d6:5c:c2:1:0xfbff", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e4:d6:5c:c2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "enum": "InputMode", + "options": [ + "Toggle", + "Toggle switch", + "On off switch" + ] + }, + "state": { + "class_name": "ZCLEnumSelectEntity", + "available": true, + "state": "Toggle" + } } ], "sensor": [ @@ -1034,7 +1102,7 @@ "device_class": "power", "state_class": "measurement", "entity_category": null, - "entity_registry_enabled_default": true, + "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ @@ -1257,7 +1325,7 @@ "state": { "class_name": "ElectricalMeasurementRMSCurrent", "available": true, - "state": 4.0, + "state": 0.004, "measurement_type": "ACTIVE_MEASUREMENT, REACTIVE_MEASUREMENT, APPARENT_MEASUREMENT, PHASE_A_MEASUREMENT" }, "extra_state_attributes": [ @@ -1326,7 +1394,7 @@ "device_class": "power", "state_class": "measurement", "entity_category": null, - "entity_registry_enabled_default": true, + "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ @@ -1406,6 +1474,54 @@ "state": 1, "available": true } + }, + { + "info_object": { + "fallback_name": "Detached mode", + "unique_id": "ab:cd:ef:12:e4:d6:5c:c2-1-detached", + "migrate_unique_ids": [], + "platform": "switch", + "class_name": "ConfigurableAttributeSwitch", + "translation_key": "detached", + "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": "ClusterHandler", + "generic_id": "cluster_handler_0xfbff", + "endpoint_id": 1, + "cluster": { + "id": 64511, + "name": "Ubisys Input Configuration", + "type": "server" + }, + "id": "1:0xfbff", + "unique_id": "ab:cd:ef:12:e4:d6:5c:c2:1:0xfbff", + "status": "INITIALIZED", + "value_attribute": null + } + ], + "device_ieee": "ab:cd:ef:12:e4:d6:5c:c2", + "endpoint_id": 1, + "available": true, + "group_id": null, + "attribute_name": "detached", + "invert_attribute_name": null, + "force_inverted": false, + "off_value": 0, + "on_value": 1 + }, + "state": { + "class_name": "ConfigurableAttributeSwitch", + "available": true, + "state": false, + "inverted": false + } } ], "update": [