From 1c02f19d9a23a1f758f3759b73b907bf2654a4cf Mon Sep 17 00:00:00 2001 From: Arturo Date: Wed, 8 Feb 2023 16:41:04 -0600 Subject: [PATCH] Fix matter color temperature light (#87677) * Adds tests for each matter light type and fixes small issue with color temperature lights not being detected properly * Removes commented out code * Changed matter light tests to pytest.mark.parametrize to reduce duplicate code --- homeassistant/components/matter/light.py | 1 + .../nodes/color-temperature-light.json | 2110 +++++++++++++++++ tests/components/matter/test_light.py | 351 +-- 3 files changed, 2320 insertions(+), 142 deletions(-) create mode 100644 tests/components/matter/fixtures/nodes/color-temperature-light.json diff --git a/homeassistant/components/matter/light.py b/homeassistant/components/matter/light.py index 93d20a2de88..5761d571259 100644 --- a/homeassistant/components/matter/light.py +++ b/homeassistant/components/matter/light.py @@ -421,6 +421,7 @@ DEVICE_ENTITY: dict[ subscribe_attributes=( clusters.OnOff.Attributes.OnOff, clusters.LevelControl.Attributes.CurrentLevel, + clusters.ColorControl.Attributes.ColorMode, clusters.ColorControl.Attributes.ColorTemperatureMireds, ), ), diff --git a/tests/components/matter/fixtures/nodes/color-temperature-light.json b/tests/components/matter/fixtures/nodes/color-temperature-light.json new file mode 100644 index 00000000000..c0a5a0d1d26 --- /dev/null +++ b/tests/components/matter/fixtures/nodes/color-temperature-light.json @@ -0,0 +1,2110 @@ +{ + "node_id": 1, + "date_commissioned": "2023-01-31T03:59:47.454727", + "last_interview": "2023-01-31T03:59:47.454728", + "interview_version": 1, + "attributes": { + "0/29/0": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.DeviceTypeList", + "attribute_name": "DeviceTypeList", + "value": [ + { + "type": 22, + "revision": 1 + } + ] + }, + "0/29/1": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ServerList", + "attribute_name": "ServerList", + "value": [29, 31, 40, 48, 49, 51, 60, 62, 63] + }, + "0/29/2": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClientList", + "attribute_name": "ClientList", + "value": [] + }, + "0/29/3": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.PartsList", + "attribute_name": "PartsList", + "value": [1, 2, 3, 4, 5, 6, 7] + }, + "0/29/65532": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 0 + }, + "0/29/65533": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "0/29/65528": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "0/29/65529": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [] + }, + "0/29/65531": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533] + }, + "0/31/0": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.Acl", + "attribute_name": "Acl", + "value": [ + { + "privilege": 5, + "authMode": 2, + "subjects": [112233], + "targets": null, + "fabricIndex": 52 + } + ] + }, + "0/31/1": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.Extension", + "attribute_name": "Extension", + "value": [] + }, + "0/31/2": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.SubjectsPerAccessControlEntry", + "attribute_name": "SubjectsPerAccessControlEntry", + "value": 4 + }, + "0/31/3": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.TargetsPerAccessControlEntry", + "attribute_name": "TargetsPerAccessControlEntry", + "value": 3 + }, + "0/31/4": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 4, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.AccessControlEntriesPerFabric", + "attribute_name": "AccessControlEntriesPerFabric", + "value": 3 + }, + "0/31/65532": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 0 + }, + "0/31/65533": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "0/31/65528": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "0/31/65529": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [] + }, + "0/31/65531": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 31, + "cluster_type": "chip.clusters.Objects.AccessControl", + "cluster_name": "AccessControl", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.AccessControl.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 2, 3, 4, 65528, 65529, 65531, 65532, 65533] + }, + "0/40/0": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.DataModelRevision", + "attribute_name": "DataModelRevision", + "value": 1 + }, + "0/40/1": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.VendorName", + "attribute_name": "VendorName", + "value": "Signify" + }, + "0/40/2": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.VendorID", + "attribute_name": "VendorID", + "value": 4107 + }, + "0/40/3": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.ProductName", + "attribute_name": "ProductName", + "value": "Mock Extended Color Light" + }, + "0/40/4": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 4, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.ProductID", + "attribute_name": "ProductID", + "value": 2 + }, + "0/40/5": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 5, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.NodeLabel", + "attribute_name": "NodeLabel", + "value": "Mock Color Temperature Light" + }, + "0/40/6": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 6, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.Location", + "attribute_name": "Location", + "value": "**REDACTED**" + }, + "0/40/7": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 7, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.HardwareVersion", + "attribute_name": "HardwareVersion", + "value": 1 + }, + "0/40/8": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 8, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.HardwareVersionString", + "attribute_name": "HardwareVersionString", + "value": "1" + }, + "0/40/9": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 9, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.SoftwareVersion", + "attribute_name": "SoftwareVersion", + "value": 65536 + }, + "0/40/10": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 10, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.SoftwareVersionString", + "attribute_name": "SoftwareVersionString", + "value": "1.0.0" + }, + "0/40/17": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 17, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.Reachable", + "attribute_name": "Reachable", + "value": true + }, + "0/40/18": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 18, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.UniqueID", + "attribute_name": "UniqueID", + "value": "mock-color-temperature-light" + }, + "0/40/19": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 19, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.CapabilityMinima", + "attribute_name": "CapabilityMinima", + "value": { + "caseSessionsPerFabric": 3, + "subscriptionsPerFabric": 65535 + } + }, + "0/40/65532": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 0 + }, + "0/40/65533": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "0/40/65528": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "0/40/65529": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [] + }, + "0/40/65531": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 40, + "cluster_type": "chip.clusters.Objects.BasicInformation", + "cluster_name": "BasicInformation", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.BasicInformation.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17, 18, 19, 65528, 65529, 65531, + 65532, 65533 + ] + }, + "0/48/0": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.Breadcrumb", + "attribute_name": "Breadcrumb", + "value": 0 + }, + "0/48/1": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.BasicCommissioningInfo", + "attribute_name": "BasicCommissioningInfo", + "value": { + "failSafeExpiryLengthSeconds": 60, + "maxCumulativeFailsafeSeconds": 900 + } + }, + "0/48/2": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.RegulatoryConfig", + "attribute_name": "RegulatoryConfig", + "value": 2 + }, + "0/48/3": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.LocationCapability", + "attribute_name": "LocationCapability", + "value": 2 + }, + "0/48/4": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 4, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.SupportsConcurrentConnection", + "attribute_name": "SupportsConcurrentConnection", + "value": true + }, + "0/48/65532": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 0 + }, + "0/48/65533": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "0/48/65528": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [1, 3, 5] + }, + "0/48/65529": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0, 2, 4] + }, + "0/48/65531": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 48, + "cluster_type": "chip.clusters.Objects.GeneralCommissioning", + "cluster_name": "GeneralCommissioning", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.GeneralCommissioning.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 2, 3, 4, 65528, 65529, 65531, 65532, 65533] + }, + "0/49/0": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.MaxNetworks", + "attribute_name": "MaxNetworks", + "value": 1 + }, + "0/49/1": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.Networks", + "attribute_name": "Networks", + "value": [ + { + "networkID": "ZXRoMA==", + "connected": true + } + ] + }, + "0/49/4": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 4, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.InterfaceEnabled", + "attribute_name": "InterfaceEnabled", + "value": true + }, + "0/49/5": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 5, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus", + "attribute_name": "LastNetworkingStatus", + "value": null + }, + "0/49/6": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 6, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkID", + "attribute_name": "LastNetworkID", + "value": null + }, + "0/49/7": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 7, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.LastConnectErrorValue", + "attribute_name": "LastConnectErrorValue", + "value": null + }, + "0/49/65532": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 4 + }, + "0/49/65533": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "0/49/65528": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "0/49/65529": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [] + }, + "0/49/65531": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 49, + "cluster_type": "chip.clusters.Objects.NetworkCommissioning", + "cluster_name": "NetworkCommissioning", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.NetworkCommissioning.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 4, 5, 6, 7, 65528, 65529, 65531, 65532, 65533] + }, + "0/51/0": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.NetworkInterfaces", + "attribute_name": "NetworkInterfaces", + "value": [ + { + "name": "eth1", + "isOperational": true, + "offPremiseServicesReachableIPv4": null, + "offPremiseServicesReachableIPv6": null, + "hardwareAddress": "ABeILIy4", + "IPv4Addresses": ["CjwBuw=="], + "IPv6Addresses": [ + "/VqgxiAxQiYCF4j//iyMuA==", + "IAEEcLs7AAYCF4j//iyMuA==", + "/oAAAAAAAAACF4j//iyMuA==" + ], + "type": 0 + }, + { + "name": "eth0", + "isOperational": false, + "offPremiseServicesReachableIPv4": null, + "offPremiseServicesReachableIPv6": null, + "hardwareAddress": "AAN/ESDO", + "IPv4Addresses": [], + "IPv6Addresses": [], + "type": 2 + }, + { + "name": "lo", + "isOperational": true, + "offPremiseServicesReachableIPv4": null, + "offPremiseServicesReachableIPv6": null, + "hardwareAddress": "AAAAAAAA", + "IPv4Addresses": ["fwAAAQ=="], + "IPv6Addresses": ["AAAAAAAAAAAAAAAAAAAAAQ=="], + "type": 0 + } + ] + }, + "0/51/1": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.RebootCount", + "attribute_name": "RebootCount", + "value": 4 + }, + "0/51/2": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.UpTime", + "attribute_name": "UpTime", + "value": 834681 + }, + "0/51/3": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.TotalOperationalHours", + "attribute_name": "TotalOperationalHours", + "value": 231 + }, + "0/51/4": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 4, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.BootReasons", + "attribute_name": "BootReasons", + "value": 0 + }, + "0/51/5": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 5, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.ActiveHardwareFaults", + "attribute_name": "ActiveHardwareFaults", + "value": [] + }, + "0/51/6": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 6, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.ActiveRadioFaults", + "attribute_name": "ActiveRadioFaults", + "value": [] + }, + "0/51/7": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 7, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.ActiveNetworkFaults", + "attribute_name": "ActiveNetworkFaults", + "value": [] + }, + "0/51/8": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 8, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.TestEventTriggersEnabled", + "attribute_name": "TestEventTriggersEnabled", + "value": false + }, + "0/51/65532": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 0 + }, + "0/51/65533": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "0/51/65528": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "0/51/65529": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0] + }, + "0/51/65531": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 51, + "cluster_type": "chip.clusters.Objects.GeneralDiagnostics", + "cluster_name": "GeneralDiagnostics", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.GeneralDiagnostics.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 2, 3, 4, 5, 6, 7, 8, 65528, 65529, 65531, 65532, 65533] + }, + "0/60/0": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 60, + "cluster_type": "chip.clusters.Objects.AdministratorCommissioning", + "cluster_name": "AdministratorCommissioning", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.AdministratorCommissioning.Attributes.WindowStatus", + "attribute_name": "WindowStatus", + "value": 0 + }, + "0/60/1": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 60, + "cluster_type": "chip.clusters.Objects.AdministratorCommissioning", + "cluster_name": "AdministratorCommissioning", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.AdministratorCommissioning.Attributes.AdminFabricIndex", + "attribute_name": "AdminFabricIndex", + "value": null + }, + "0/60/2": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 60, + "cluster_type": "chip.clusters.Objects.AdministratorCommissioning", + "cluster_name": "AdministratorCommissioning", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.AdministratorCommissioning.Attributes.AdminVendorId", + "attribute_name": "AdminVendorId", + "value": null + }, + "0/60/65532": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 60, + "cluster_type": "chip.clusters.Objects.AdministratorCommissioning", + "cluster_name": "AdministratorCommissioning", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.AdministratorCommissioning.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 0 + }, + "0/60/65533": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 60, + "cluster_type": "chip.clusters.Objects.AdministratorCommissioning", + "cluster_name": "AdministratorCommissioning", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.AdministratorCommissioning.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "0/60/65528": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 60, + "cluster_type": "chip.clusters.Objects.AdministratorCommissioning", + "cluster_name": "AdministratorCommissioning", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.AdministratorCommissioning.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "0/60/65529": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 60, + "cluster_type": "chip.clusters.Objects.AdministratorCommissioning", + "cluster_name": "AdministratorCommissioning", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.AdministratorCommissioning.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0, 1, 2] + }, + "0/60/65531": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 60, + "cluster_type": "chip.clusters.Objects.AdministratorCommissioning", + "cluster_name": "AdministratorCommissioning", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.AdministratorCommissioning.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 2, 65528, 65529, 65531, 65532, 65533] + }, + "0/62/0": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.NOCs", + "attribute_name": "NOCs", + "value": [ + { + "noc": "FTABAQEkAgE3AyQTAhgmBIAigScmBYAlTTo3BiQVASQRARgkBwEkCAEwCUEEYGMAhVV+Adasucgyi++1D7eyBIfHs9xLKJPVJqJdMAqt0S8lQs+6v/NAyAVXsN8jdGlNgZQENRnfqC2gXv3COzcKNQEoARgkAgE2AwQCBAEYMAQUTK/GvAzp9yCT0ihFRaEyW8KuO0IwBRQ5RmCO0h/Cd/uv6Pe62ZSLBzXOtBgwC0CaO1hqAR9PQJUkSx4MQyHEDQND/3j7m6EPRImPCA53dKI7e4w7xZEQEW95oMhuUobdy3WbMcggAMTX46ninwqUGA==", + "icac": "FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQTAhgkBwEkCAEwCUEEqboEMvSYpJHvrznp5AQ1fHW0AVUrTajBHZ/2uba7+FTyPb+fqgf6K1zbuMqTxTOA/FwjzAL7hQTwG+HNnmLwNTcKNQEpARgkAmAwBBQ5RmCO0h/Cd/uv6Pe62ZSLBzXOtDAFFG02YRl97W++GsAiEiBzIhO0hzA6GDALQBl+ZyFbSXu3oXVJGBjtDcpwOCRC30OaVjDhUT7NbohDLaKuwxMhAgE+uHtSLKRZPGlQGSzYdnDGj/dWolGE+n4Y", + "fabricIndex": 52 + } + ] + }, + "0/62/1": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.Fabrics", + "attribute_name": "Fabrics", + "value": [ + { + "rootPublicKey": "BOI8+YJvCUh78+5WD4aHD7t1HQJS3WMrCEknk6n+5HXP2VRMB3SvK6+EEa8rR6UkHnCryIREeOmS0XYozzHjTQg=", + "vendorId": 65521, + "fabricId": 1, + "nodeId": 1, + "label": "", + "fabricIndex": 52 + } + ] + }, + "0/62/2": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.SupportedFabrics", + "attribute_name": "SupportedFabrics", + "value": 16 + }, + "0/62/3": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.CommissionedFabrics", + "attribute_name": "CommissionedFabrics", + "value": 4 + }, + "0/62/4": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 4, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.TrustedRootCertificates", + "attribute_name": "TrustedRootCertificates", + "value": [ + "FTABAQAkAgE3AycUF+1s7yUxl34kFQEYJgRAwC8rJgXA8xAtNwYnFBftbO8lMZd+JBUBGCQHASQIATAJQQRVFfH8a8Q6Ao7WLf+UWfO6Qs7yilIhKqD59s89ORO1UFw4ge7hwKMSFn8ixUw/SolOQBSsCF4L0mSEatBpsDFnNwo1ASkBGCQCYDAEFPrNGEmgHq6sOVn/hmBwy/Vue7r0MAUU+s0YSaAerqw5Wf+GYHDL9W57uvQYMAtAZthavHRZnzQlRYALrcnL/6oo5LlVEot5CBGjqdoD/j6tvJcsTbqGqtv2H5GL4DC5KRNAE5ZmyqaQDMp3hZMrMxg=", + "FTABAQAkAgE3AycUfHqQXNhPx0gkFQIYJgRtwC8rJgXt8xAtNwYnFHx6kFzYT8dIJBUCGCQHASQIATAJQQQNBDXlacZCe3oZcAfbwCvm06XcQzAC287XzRvF/RLV/fkpY0xOgTn6WYEYvThhqRF2B1WApMsQ59+WAo0X9igONwo1ASkBGCQCYDAEFEabr60b38Ymu5LyDvqUx3o0SI7xMAUURpuvrRvfxia7kvIO+pTHejRIjvEYMAtAhtqVBW7tg1C0F3w0a3mQ5uirN8UFAqgTYDh45HoqZv+NuAkF3tUI8bcIZZ/QxLu5C6GcK7KYlT3peRpNIyBCOBg=", + "FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQUARgkBwEkCAEwCUEE4jz5gm8JSHvz7lYPhocPu3UdAlLdYysISSeTqf7kdc/ZVEwHdK8rr4QRrytHpSQecKvIhER46ZLRdijPMeNNCDcKNQEpARgkAmAwBBRtNmEZfe1vvhrAIhIgcyITtIcwOjAFFG02YRl97W++GsAiEiBzIhO0hzA6GDALQPowt7QmngLyiuBmOVcu/kv3QR/+HhfRPxN5W8E811lBhPX4qEpvsBdEzJS0SpiQh+Fql+ARHzUGuIKP6SqjCnMY", + "FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQUARgkBwEkCAEwCUEEOXNb0qzX1XBSquJ+bK0cuBsQl9aY/aBJ5njrCywf1qBz9W+54CQc4Lz5FtNzAhV7B6C3NppGozNUiSoAsL55ATcKNQEpARgkAmAwBBSWJBXzLVqg+IBcPntxiV91YIS0yDAFFJYkFfMtWqD4gFw+e3GJX3VghLTIGDALQIx8UTwGL2Ios2ym0C36ZrBPU7x7dw9zxCMKiuiDeEtdqcrKE7W/aaQ8/Mg2jszd7mqe/qq5y3yq3V6a8tQjrD0Y" + ] + }, + "0/62/5": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 5, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.CurrentFabricIndex", + "attribute_name": "CurrentFabricIndex", + "value": 52 + }, + "0/62/65532": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 0 + }, + "0/62/65533": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "0/62/65528": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [1, 3, 5, 8] + }, + "0/62/65529": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0, 2, 4, 6, 7, 9, 10, 11] + }, + "0/62/65531": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 62, + "cluster_type": "chip.clusters.Objects.OperationalCredentials", + "cluster_name": "OperationalCredentials", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.OperationalCredentials.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 2, 3, 4, 5, 65528, 65529, 65531, 65532, 65533] + }, + "0/63/0": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 63, + "cluster_type": "chip.clusters.Objects.GroupKeyManagement", + "cluster_name": "GroupKeyManagement", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.GroupKeyManagement.Attributes.GroupKeyMap", + "attribute_name": "GroupKeyMap", + "value": [] + }, + "0/63/1": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 63, + "cluster_type": "chip.clusters.Objects.GroupKeyManagement", + "cluster_name": "GroupKeyManagement", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.GroupKeyManagement.Attributes.GroupTable", + "attribute_name": "GroupTable", + "value": [] + }, + "0/63/2": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 63, + "cluster_type": "chip.clusters.Objects.GroupKeyManagement", + "cluster_name": "GroupKeyManagement", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.GroupKeyManagement.Attributes.MaxGroupsPerFabric", + "attribute_name": "MaxGroupsPerFabric", + "value": 3 + }, + "0/63/3": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 63, + "cluster_type": "chip.clusters.Objects.GroupKeyManagement", + "cluster_name": "GroupKeyManagement", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.GroupKeyManagement.Attributes.MaxGroupKeysPerFabric", + "attribute_name": "MaxGroupKeysPerFabric", + "value": 3 + }, + "0/63/65533": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 63, + "cluster_type": "chip.clusters.Objects.GroupKeyManagement", + "cluster_name": "GroupKeyManagement", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.GroupKeyManagement.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "0/63/65528": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 63, + "cluster_type": "chip.clusters.Objects.GroupKeyManagement", + "cluster_name": "GroupKeyManagement", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.GroupKeyManagement.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [2, 5] + }, + "0/63/65529": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 63, + "cluster_type": "chip.clusters.Objects.GroupKeyManagement", + "cluster_name": "GroupKeyManagement", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.GroupKeyManagement.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0, 1, 3, 4] + }, + "0/63/65531": { + "node_id": 1, + "endpoint": 0, + "cluster_id": 63, + "cluster_type": "chip.clusters.Objects.GroupKeyManagement", + "cluster_name": "GroupKeyManagement", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.GroupKeyManagement.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 2, 3, 65528, 65529, 65531, 65533] + }, + "1/6/0": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.OnOff", + "attribute_name": "OnOff", + "value": true + }, + "1/6/16384": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 16384, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.GlobalSceneControl", + "attribute_name": "GlobalSceneControl", + "value": true + }, + "1/6/16385": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 16385, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.OnTime", + "attribute_name": "OnTime", + "value": 0 + }, + "1/6/16386": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 16386, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.OffWaitTime", + "attribute_name": "OffWaitTime", + "value": 0 + }, + "1/6/16387": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 16387, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.StartUpOnOff", + "attribute_name": "StartUpOnOff", + "value": null + }, + "1/6/65532": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 1 + }, + "1/6/65533": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 4 + }, + "1/6/65528": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "1/6/65529": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0, 1, 2, 64, 65, 66] + }, + "1/6/65531": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 6, + "cluster_type": "chip.clusters.Objects.OnOff", + "cluster_name": "OnOff", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.OnOff.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [ + 0, 16384, 16385, 16386, 16387, 65528, 65529, 65531, 65532, 65533 + ] + }, + "1/29/0": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.DeviceTypeList", + "attribute_name": "DeviceTypeList", + "value": [ + { + "type": 268, + "revision": 1 + } + ] + }, + "1/29/1": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ServerList", + "attribute_name": "ServerList", + "value": [6, 29, 57, 768, 8, 80, 3, 4] + }, + "1/29/2": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClientList", + "attribute_name": "ClientList", + "value": [] + }, + "1/29/3": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.PartsList", + "attribute_name": "PartsList", + "value": [] + }, + "1/29/65533": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "1/29/65528": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "1/29/65529": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [] + }, + "1/29/65531": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 29, + "cluster_type": "chip.clusters.Objects.Descriptor", + "cluster_name": "Descriptor", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 2, 3, 65528, 65529, 65531, 65533] + }, + "1/768/0": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.CurrentHue", + "attribute_name": "CurrentHue", + "value": 36 + }, + "1/768/3": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.CurrentX", + "attribute_name": "CurrentX", + "value": 26515 + }, + "1/768/4": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 4, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.CurrentY", + "attribute_name": "CurrentY", + "value": 25657 + }, + "1/768/7": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 7, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorTemperatureMireds", + "attribute_name": "ColorTemperatureMireds", + "value": 284 + }, + "1/768/1": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.CurrentSaturation", + "attribute_name": "CurrentSaturation", + "value": 51 + }, + "1/768/16384": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16384, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.EnhancedCurrentHue", + "attribute_name": "EnhancedCurrentHue", + "value": 9305 + }, + "1/768/8": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 8, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorMode", + "attribute_name": "ColorMode", + "value": 0 + }, + "1/768/15": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 15, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.Options", + "attribute_name": "Options", + "value": 0 + }, + "1/768/16385": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16385, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.EnhancedColorMode", + "attribute_name": "EnhancedColorMode", + "value": 0 + }, + "1/768/16386": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16386, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorLoopActive", + "attribute_name": "ColorLoopActive", + "value": { + "TLVValue": null, + "Reason": null + } + }, + "1/768/16387": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16387, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorLoopDirection", + "attribute_name": "ColorLoopDirection", + "value": { + "TLVValue": null, + "Reason": null + } + }, + "1/768/16388": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16388, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorLoopTime", + "attribute_name": "ColorLoopTime", + "value": { + "TLVValue": null, + "Reason": null + } + }, + "1/768/16389": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16389, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorLoopStartEnhancedHue", + "attribute_name": "ColorLoopStartEnhancedHue", + "value": { + "TLVValue": null, + "Reason": null + } + }, + "1/768/16390": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16390, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorLoopStoredEnhancedHue", + "attribute_name": "ColorLoopStoredEnhancedHue", + "value": { + "TLVValue": null, + "Reason": null + } + }, + "1/768/16394": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16394, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorCapabilities", + "attribute_name": "ColorCapabilities", + "value": 25 + }, + "1/768/16": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.NumberOfPrimaries", + "attribute_name": "NumberOfPrimaries", + "value": { + "TLVValue": null, + "Reason": null + } + }, + "1/768/16395": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16395, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorTempPhysicalMinMireds", + "attribute_name": "ColorTempPhysicalMinMireds", + "value": 153 + }, + "1/768/16396": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16396, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ColorTempPhysicalMaxMireds", + "attribute_name": "ColorTempPhysicalMaxMireds", + "value": 500 + }, + "1/768/16397": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16397, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.CoupleColorTempToLevelMinMireds", + "attribute_name": "CoupleColorTempToLevelMinMireds", + "value": 250 + }, + "1/768/16400": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 16400, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.StartUpColorTemperatureMireds", + "attribute_name": "StartUpColorTemperatureMireds", + "value": 65535 + }, + "1/768/2": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.RemainingTime", + "attribute_name": "RemainingTime", + "value": 0 + }, + "1/768/65532": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 16 + }, + "1/768/65533": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 5 + }, + "1/768/65528": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "1/768/65529": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 71, 75, 76] + }, + "1/768/65531": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 768, + "cluster_type": "chip.clusters.Objects.ColorControl", + "cluster_name": "ColorControl", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.ColorControl.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [ + 0, 3, 4, 7, 1, 16384, 8, 15, 16385, 16386, 16387, 16388, 16389, 16390, + 16394, 16, 16395, 16396, 16397, 16400, 2, 65528, 65529, 65531, 65532, + 65533 + ] + }, + "1/8/0": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.CurrentLevel", + "attribute_name": "CurrentLevel", + "value": 128 + }, + "1/8/2": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.MinLevel", + "attribute_name": "MinLevel", + "value": 1 + }, + "1/8/3": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.MaxLevel", + "attribute_name": "MaxLevel", + "value": 254 + }, + "1/8/1": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.RemainingTime", + "attribute_name": "RemainingTime", + "value": 0 + }, + "1/8/17": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 17, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.OnLevel", + "attribute_name": "OnLevel", + "value": null + }, + "1/8/15": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 15, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.Options", + "attribute_name": "Options", + "value": 0 + }, + "1/8/16384": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 16384, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.StartUpCurrentLevel", + "attribute_name": "StartUpCurrentLevel", + "value": 1 + }, + "1/8/65532": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 3 + }, + "1/8/65533": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 5 + }, + "1/8/65528": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "1/8/65529": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0, 1, 2, 3, 4, 5, 6, 7] + }, + "1/8/65531": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 8, + "cluster_type": "chip.clusters.Objects.LevelControl", + "cluster_name": "LevelControl", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.LevelControl.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 2, 3, 1, 17, 15, 16384, 65528, 65529, 65531, 65532, 65533] + }, + "1/80/0": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.Description", + "attribute_name": "Description", + "value": "Lighting" + }, + "1/80/1": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.StandardNamespace", + "attribute_name": "StandardNamespace", + "value": 0 + }, + "1/80/2": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 2, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.SupportedModes", + "attribute_name": "SupportedModes", + "value": [ + { + "label": "Dark", + "mode": 0, + "semanticTags": [] + }, + { + "label": "Medium", + "mode": 1, + "semanticTags": [] + }, + { + "label": "Light", + "mode": 2, + "semanticTags": [] + } + ] + }, + "1/80/3": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 3, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.CurrentMode", + "attribute_name": "CurrentMode", + "value": 0 + }, + "1/80/5": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 5, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.OnMode", + "attribute_name": "OnMode", + "value": 0 + }, + "1/80/65532": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 1 + }, + "1/80/65533": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 1 + }, + "1/80/65528": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "1/80/65529": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0] + }, + "1/80/65531": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 80, + "cluster_type": "chip.clusters.Objects.ModeSelect", + "cluster_name": "ModeSelect", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.ModeSelect.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 2, 3, 5, 65528, 65529, 65531, 65532, 65533] + }, + "1/3/0": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 3, + "cluster_type": "chip.clusters.Objects.Identify", + "cluster_name": "Identify", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.Identify.Attributes.IdentifyTime", + "attribute_name": "IdentifyTime", + "value": 0 + }, + "1/3/1": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 3, + "cluster_type": "chip.clusters.Objects.Identify", + "cluster_name": "Identify", + "attribute_id": 1, + "attribute_type": "chip.clusters.Objects.Identify.Attributes.IdentifyType", + "attribute_name": "IdentifyType", + "value": 1 + }, + "1/3/65532": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 3, + "cluster_type": "chip.clusters.Objects.Identify", + "cluster_name": "Identify", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.Identify.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 0 + }, + "1/3/65533": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 3, + "cluster_type": "chip.clusters.Objects.Identify", + "cluster_name": "Identify", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.Identify.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 4 + }, + "1/3/65528": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 3, + "cluster_type": "chip.clusters.Objects.Identify", + "cluster_name": "Identify", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.Identify.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [] + }, + "1/3/65529": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 3, + "cluster_type": "chip.clusters.Objects.Identify", + "cluster_name": "Identify", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.Identify.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0, 64] + }, + "1/3/65531": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 3, + "cluster_type": "chip.clusters.Objects.Identify", + "cluster_name": "Identify", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.Identify.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 1, 65528, 65529, 65531, 65532, 65533] + }, + "1/4/0": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 4, + "cluster_type": "chip.clusters.Objects.Groups", + "cluster_name": "Groups", + "attribute_id": 0, + "attribute_type": "chip.clusters.Objects.Groups.Attributes.NameSupport", + "attribute_name": "NameSupport", + "value": 0 + }, + "1/4/65532": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 4, + "cluster_type": "chip.clusters.Objects.Groups", + "cluster_name": "Groups", + "attribute_id": 65532, + "attribute_type": "chip.clusters.Objects.Groups.Attributes.FeatureMap", + "attribute_name": "FeatureMap", + "value": 0 + }, + "1/4/65533": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 4, + "cluster_type": "chip.clusters.Objects.Groups", + "cluster_name": "Groups", + "attribute_id": 65533, + "attribute_type": "chip.clusters.Objects.Groups.Attributes.ClusterRevision", + "attribute_name": "ClusterRevision", + "value": 4 + }, + "1/4/65528": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 4, + "cluster_type": "chip.clusters.Objects.Groups", + "cluster_name": "Groups", + "attribute_id": 65528, + "attribute_type": "chip.clusters.Objects.Groups.Attributes.GeneratedCommandList", + "attribute_name": "GeneratedCommandList", + "value": [0, 1, 2, 3] + }, + "1/4/65529": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 4, + "cluster_type": "chip.clusters.Objects.Groups", + "cluster_name": "Groups", + "attribute_id": 65529, + "attribute_type": "chip.clusters.Objects.Groups.Attributes.AcceptedCommandList", + "attribute_name": "AcceptedCommandList", + "value": [0, 5, 2, 4, 3, 1] + }, + "1/4/65531": { + "node_id": 1, + "endpoint": 1, + "cluster_id": 4, + "cluster_type": "chip.clusters.Objects.Groups", + "cluster_name": "Groups", + "attribute_id": 65531, + "attribute_type": "chip.clusters.Objects.Groups.Attributes.AttributeList", + "attribute_name": "AttributeList", + "value": [0, 65528, 65529, 65531, 65532, 65533] + } + }, + "endpoints": [0, 1], + "root_device_type_instance": null, + "aggregator_device_type_instance": null, + "device_type_instances": [null], + "node_devices": [null], + "_type": "matter_server.common.models.node.MatterNode" +} diff --git a/tests/components/matter/test_light.py b/tests/components/matter/test_light.py index 1a55bf770cb..17448777e37 100644 --- a/tests/components/matter/test_light.py +++ b/tests/components/matter/test_light.py @@ -2,9 +2,9 @@ from unittest.mock import MagicMock, call from chip.clusters import Objects as clusters -from matter_server.common.models.node import MatterNode import pytest +from homeassistant.components.light import ColorMode from homeassistant.core import HomeAssistant from .common import ( @@ -14,29 +14,69 @@ from .common import ( ) -@pytest.fixture(name="light_node") -async def light_node_fixture( - hass: HomeAssistant, matter_client: MagicMock -) -> MatterNode: - """Fixture for a light node.""" - return await setup_integration_with_node_fixture( - hass, "extended-color-light", matter_client - ) - - -async def test_turn_on( +@pytest.mark.parametrize( + "fixture, entity_id", + [ + ("extended-color-light", "light.mock_extended_color_light"), + ("color-temperature-light", "light.mock_color_temperature_light"), + ("dimmable-light", "light.mock_dimmable_light"), + ("onoff-light", "light.mock_onoff_light"), + ], +) +async def test_on_off_light( hass: HomeAssistant, matter_client: MagicMock, - light_node: MatterNode, + fixture: str, + entity_id: str, ) -> None: - """Test turning on a light.""" + """Test an on/off light.""" - # OnOff test + light_node = await setup_integration_with_node_fixture( + hass, + fixture, + matter_client, + ) + + # Test that the light is off + set_node_attribute(light_node, 1, 6, 0, False) + await trigger_subscription_callback(hass, matter_client) + + state = hass.states.get(entity_id) + assert state is not None + assert state.state == "off" + + # Test that the light is on + set_node_attribute(light_node, 1, 6, 0, True) + await trigger_subscription_callback(hass, matter_client) + + state = hass.states.get(entity_id) + assert state is not None + assert state.state == "on" + + # Turn the light off + await hass.services.async_call( + "light", + "turn_off", + { + "entity_id": entity_id, + }, + blocking=True, + ) + + assert matter_client.send_device_command.call_count == 1 + assert matter_client.send_device_command.call_args == call( + node_id=light_node.node_id, + endpoint=1, + command=clusters.OnOff.Commands.Off(), + ) + matter_client.send_device_command.reset_mock() + + # Turn the light on await hass.services.async_call( "light", "turn_on", { - "entity_id": "light.mock_extended_color_light", + "entity_id": entity_id, }, blocking=True, ) @@ -49,12 +89,44 @@ async def test_turn_on( ) matter_client.send_device_command.reset_mock() - # Brightness test + +@pytest.mark.parametrize( + "fixture, entity_id", + [ + ("extended-color-light", "light.mock_extended_color_light"), + ("color-temperature-light", "light.mock_color_temperature_light"), + ("dimmable-light", "light.mock_dimmable_light"), + ], +) +async def test_dimmable_light( + hass: HomeAssistant, + matter_client: MagicMock, + fixture: str, + entity_id: str, +) -> None: + """Test a dimmable light.""" + + light_node = await setup_integration_with_node_fixture( + hass, + fixture, + matter_client, + ) + + # Test that the light brightness is 50 (out of 254) + set_node_attribute(light_node, 1, 8, 0, 50) + await trigger_subscription_callback(hass, matter_client) + + state = hass.states.get(entity_id) + assert state is not None + assert state.state == "on" + assert state.attributes["brightness"] == 49 + + # Change brightness await hass.services.async_call( "light", "turn_on", { - "entity_id": "light.mock_extended_color_light", + "entity_id": entity_id, "brightness": 128, }, blocking=True, @@ -71,77 +143,46 @@ async def test_turn_on( ) matter_client.send_device_command.reset_mock() - # HS Color test + +@pytest.mark.parametrize( + "fixture, entity_id", + [ + ("extended-color-light", "light.mock_extended_color_light"), + ("color-temperature-light", "light.mock_color_temperature_light"), + ], +) +async def test_color_temperature_light( + hass: HomeAssistant, + matter_client: MagicMock, + fixture: str, + entity_id: str, +) -> None: + """Test a color temperature light.""" + + light_node = await setup_integration_with_node_fixture( + hass, + fixture, + matter_client, + ) + + # Test that the light color temperature is 3000 (out of 50000) + set_node_attribute(light_node, 1, 768, 8, 2) + set_node_attribute(light_node, 1, 768, 7, 3000) + await trigger_subscription_callback(hass, matter_client) + + state = hass.states.get(entity_id) + assert state is not None + assert state.state == "on" + assert state.attributes["color_mode"] == ColorMode.COLOR_TEMP + assert state.attributes["color_temp"] == 3003 + + # Change color temperature await hass.services.async_call( "light", "turn_on", { - "entity_id": "light.mock_extended_color_light", - "hs_color": [0, 0], - }, - blocking=True, - ) - - assert matter_client.send_device_command.call_count == 2 - matter_client.send_device_command.assert_has_calls( - [ - call( - node_id=light_node.node_id, - endpoint=1, - command=clusters.ColorControl.Commands.MoveToHueAndSaturation( - hue=0, - saturation=0, - transitionTime=0, - ), - ), - call( - node_id=light_node.node_id, - endpoint=1, - command=clusters.OnOff.Commands.On(), - ), - ] - ) - matter_client.send_device_command.reset_mock() - - # XY Color test - await hass.services.async_call( - "light", - "turn_on", - { - "entity_id": "light.mock_extended_color_light", - "xy_color": [0.5, 0.5], - }, - blocking=True, - ) - - assert matter_client.send_device_command.call_count == 2 - matter_client.send_device_command.assert_has_calls( - [ - call( - node_id=light_node.node_id, - endpoint=1, - command=clusters.ColorControl.Commands.MoveToColor( - colorX=(0.5 * 65536), - colorY=(0.5 * 65536), - transitionTime=0, - ), - ), - call( - node_id=light_node.node_id, - endpoint=1, - command=clusters.OnOff.Commands.On(), - ), - ] - ) - matter_client.send_device_command.reset_mock() - - # Color Temperature test - await hass.services.async_call( - "light", - "turn_on", - { - "entity_id": "light.mock_extended_color_light", - "color_temp": 300, + "entity_id": entity_id, + "color_temp": 3000, }, blocking=True, ) @@ -153,7 +194,7 @@ async def test_turn_on( node_id=light_node.node_id, endpoint=1, command=clusters.ColorControl.Commands.MoveToColorTemperature( - colorTemperature=300, + colorTemperature=3003, transitionTime=0, ), ), @@ -166,81 +207,107 @@ async def test_turn_on( ) matter_client.send_device_command.reset_mock() - state = hass.states.get("light.mock_extended_color_light") - assert state - assert state.state == "on" - # HS Color Test - set_node_attribute(light_node, 1, 768, 8, 0) - set_node_attribute(light_node, 1, 768, 1, 50) - set_node_attribute(light_node, 1, 768, 0, 100) - await trigger_subscription_callback(hass, matter_client) +@pytest.mark.parametrize( + "fixture, entity_id", + [ + ("extended-color-light", "light.mock_extended_color_light"), + ], +) +async def test_extended_color_light( + hass: HomeAssistant, + matter_client: MagicMock, + fixture: str, + entity_id: str, +) -> None: + """Test an extended color light.""" - state = hass.states.get("light.mock_extended_color_light") - assert state - assert state.attributes["color_mode"] == "hs" - assert state.attributes["hs_color"] == (141.732, 19.685) + light_node = await setup_integration_with_node_fixture( + hass, + fixture, + matter_client, + ) - # XY Color Test + # Test that the XY color changes set_node_attribute(light_node, 1, 768, 8, 1) set_node_attribute(light_node, 1, 768, 3, 50) set_node_attribute(light_node, 1, 768, 4, 100) await trigger_subscription_callback(hass, matter_client) - state = hass.states.get("light.mock_extended_color_light") - assert state - assert state.attributes["color_mode"] == "xy" + state = hass.states.get(entity_id) + assert state is not None + assert state.state == "on" + assert state.attributes["color_mode"] == ColorMode.XY assert state.attributes["xy_color"] == (0.0007630, 0.001526) - # Color Temperature Test - set_node_attribute(light_node, 1, 768, 8, 2) - set_node_attribute(light_node, 1, 768, 7, 100) + # Test that the HS color changes + set_node_attribute(light_node, 1, 768, 8, 0) + set_node_attribute(light_node, 1, 768, 1, 50) + set_node_attribute(light_node, 1, 768, 0, 100) await trigger_subscription_callback(hass, matter_client) - state = hass.states.get("light.mock_extended_color_light") - assert state - assert state.attributes["color_mode"] == "color_temp" - assert state.attributes["color_temp"] == 100 - - # Brightness state test - set_node_attribute(light_node, 1, 8, 0, 50) - await trigger_subscription_callback(hass, matter_client) - - state = hass.states.get("light.mock_extended_color_light") - assert state - assert state.attributes["brightness"] == 49 - - # Off state test - set_node_attribute(light_node, 1, 6, 0, False) - await trigger_subscription_callback(hass, matter_client) - - state = hass.states.get("light.mock_extended_color_light") - assert state - assert state.state == "off" - - -async def test_turn_off( - hass: HomeAssistant, - matter_client: MagicMock, - light_node: MatterNode, -) -> None: - """Test turning off a light.""" - state = hass.states.get("light.mock_extended_color_light") - assert state + state = hass.states.get(entity_id) + assert state is not None assert state.state == "on" + assert state.attributes["color_mode"] == ColorMode.HS + assert state.attributes["hs_color"] == (141.732, 19.685) + # Turn the light on with XY color await hass.services.async_call( "light", - "turn_off", + "turn_on", { - "entity_id": "light.mock_extended_color_light", + "entity_id": entity_id, + "xy_color": (0.5, 0.5), }, blocking=True, ) - assert matter_client.send_device_command.call_count == 1 - assert matter_client.send_device_command.call_args == call( - node_id=light_node.node_id, - endpoint=1, - command=clusters.OnOff.Commands.Off(), + assert matter_client.send_device_command.call_count == 2 + matter_client.send_device_command.assert_has_calls( + [ + call( + node_id=light_node.node_id, + endpoint=1, + command=clusters.ColorControl.Commands.MoveToColor( + colorX=0.5 * 65536, colorY=0.5 * 65536, transitionTime=0 + ), + ), + call( + node_id=light_node.node_id, + endpoint=1, + command=clusters.OnOff.Commands.On(), + ), + ] ) + matter_client.send_device_command.reset_mock() + + # Turn the light on with HS color + await hass.services.async_call( + "light", + "turn_on", + { + "entity_id": entity_id, + "hs_color": (0, 0), + }, + blocking=True, + ) + + assert matter_client.send_device_command.call_count == 2 + matter_client.send_device_command.assert_has_calls( + [ + call( + node_id=light_node.node_id, + endpoint=1, + command=clusters.ColorControl.Commands.MoveToHueAndSaturation( + hue=0, saturation=0, transitionTime=0 + ), + ), + call( + node_id=light_node.node_id, + endpoint=1, + command=clusters.OnOff.Commands.On(), + ), + ] + ) + matter_client.send_device_command.reset_mock()