diff --git a/src/python_testing/spec_parsing_support.py b/src/python_testing/spec_parsing_support.py
index bc36049de54cd5..c2819960146ed3 100644
--- a/src/python_testing/spec_parsing_support.py
+++ b/src/python_testing/spec_parsing_support.py
@@ -130,7 +130,8 @@ class CommandType(Enum):
0x042F: 'RNCONC',
0x0071: 'HEPAFREMON',
0x0072: 'ACFREMON',
- 0x0405: 'RH'}
+ 0x0405: 'RH',
+ 0x001C: 'PWM'}
class ClusterParser:
diff --git a/src/python_testing/test_testing/example_pics_xml_basic_info.xml b/src/python_testing/test_testing/example_pics_xml_basic_info.xml
index 96f1a34f3e9557..3d488c3ae90ace 100644
--- a/src/python_testing/test_testing/example_pics_xml_basic_info.xml
+++ b/src/python_testing/test_testing/example_pics_xml_basic_info.xml
@@ -22,6 +22,14 @@ Draft
O
true
+
+
+ LVL.S
+ Does the device implement the Level Control Cluster as a server?
+ 9.1. Role - index.html[pdf]
+ O
+ true
+
diff --git a/src/python_testing/test_testing/test_IDM_10_4.py b/src/python_testing/test_testing/test_IDM_10_4.py
index ccf713450e2348..8634e94129b86a 100644
--- a/src/python_testing/test_testing/test_IDM_10_4.py
+++ b/src/python_testing/test_testing/test_IDM_10_4.py
@@ -38,40 +38,48 @@
def create_read(include_reachable: bool = False, include_max_paths: bool = False, include_vendor_id: bool = True) -> Attribute.AsyncReadTransaction.ReadResponse:
# Attribute read here is set to match the example_pics_xml_basic_info.xml in this directory
bi = Clusters.BasicInformation.Attributes
- attrs = {bi.DataModelRevision: 1,
- bi.VendorName: 'testVendor',
- bi.ProductName: 'testProduct',
- bi.ProductID: 0x8000,
- bi.NodeLabel: 'label',
- bi.Location: 'XX',
- bi.HardwareVersion: 1,
- bi.HardwareVersionString: 'one',
- bi.SoftwareVersion: 2,
- bi.SoftwareVersionString: 'two',
- bi.ManufacturingDate: 'today',
- bi.PartNumber: 'three',
- bi.ProductURL: 'example.com',
- bi.ProductLabel: 'myProduct',
- bi.SerialNumber: 'ABCD1234',
- bi.LocalConfigDisabled: False,
- bi.UniqueID: 'Hashy-McHashface'}
+ lvl = Clusters.LevelControl.Attributes
+ attrs_bi = {bi.DataModelRevision: 1,
+ bi.VendorName: 'testVendor',
+ bi.ProductName: 'testProduct',
+ bi.ProductID: 0x8000,
+ bi.NodeLabel: 'label',
+ bi.Location: 'XX',
+ bi.HardwareVersion: 1,
+ bi.HardwareVersionString: 'one',
+ bi.SoftwareVersion: 2,
+ bi.SoftwareVersionString: 'two',
+ bi.ManufacturingDate: 'today',
+ bi.PartNumber: 'three',
+ bi.ProductURL: 'example.com',
+ bi.ProductLabel: 'myProduct',
+ bi.SerialNumber: 'ABCD1234',
+ bi.LocalConfigDisabled: False,
+ bi.UniqueID: 'Hashy-McHashface'}
if include_reachable:
- attrs[bi.Reachable] = True
+ attrs_bi[bi.Reachable] = True
if include_max_paths:
- attrs[bi.MaxPathsPerInvoke] = 2
+ attrs_bi[bi.MaxPathsPerInvoke] = 2
if include_vendor_id:
- attrs[bi.VendorID] = 0xFFF1
+ attrs_bi[bi.VendorID] = 0xFFF1
- attrs[bi.AttributeList] = [a.attribute_id for a in attrs.keys()]
- attrs[bi.AcceptedCommandList] = []
- attrs[bi.GeneratedCommandList] = []
- attrs[bi.FeatureMap] = 0
+ attrs_bi[bi.AttributeList] = [a.attribute_id for a in attrs_bi.keys()]
+ attrs_bi[bi.AcceptedCommandList] = []
+ attrs_bi[bi.GeneratedCommandList] = []
+ attrs_bi[bi.FeatureMap] = 0
+
+ attrs_lvl = {}
+ attrs_lvl[lvl.AttributeList] = []
+ attrs_lvl[lvl.AcceptedCommandList] = []
+ attrs_lvl[lvl.GeneratedCommandList] = []
+ attrs_lvl[lvl.FeatureMap] = 0
resp = Attribute.AsyncReadTransaction.ReadResponse({}, [], {})
- resp.attributes = {0: {Clusters.BasicInformation: attrs}}
+ resp.attributes = {0: {Clusters.BasicInformation: attrs_bi, Clusters.LevelControl: attrs_lvl}}
- tlv_attrs = {a.attribute_id: value for a, value in attrs.items()}
- resp.tlvAttributes = {0: {Clusters.BasicInformation.id: tlv_attrs}}
+ tlv_attrs_bi = {a.attribute_id: value for a, value in attrs_bi.items()}
+ tlv_attrs_lvl = {a.attribute_id: value for a, value in attrs_lvl.items()}
+ resp.tlvAttributes = {0: {Clusters.BasicInformation.id: tlv_attrs_bi, Clusters.LevelControl.id: tlv_attrs_lvl}}
return resp