From 53037693fc0008d5fb82f39b70f7cdc70e767063 Mon Sep 17 00:00:00 2001 From: Jerry Johns Date: Thu, 9 Dec 2021 12:34:48 -0800 Subject: [PATCH] Topographically Structured Attribute Data (#12575) * Topographically Structured Attribute Data The existing format for how attribute reports were returned to callers of DeviceController.ReadAttribute() made it quite challenging for them to consume it in an easy enough manner. Instead of providing them with an effectively raw stream of attribute data, this commit organizes and structures that data into a series of nested dictionaries that mirror the topography and composition of the data in a given Matter device: Endpoints that contain Clusters that in turn contain Attributes. The Python data structure equivalent represents these as nested dictionaries: Dict[EndpointId, Dict[ClusterType, Dict[AttributeType, AttributeValue]]] Tests: - Updated the existing ReadAttribute and Subscription tests to utilize this new format. - Added new ones. - Validated using the REPL * Reverted back to a lock based scheme due to the inability to post work on to the REPL's main event loop for backgrounded work * Lots of fixups to make events and attributes work on master --- src/controller/python/build-chip-wheel.py | 1 + src/controller/python/chip/ChipDeviceCtrl.py | 39 +- .../python/chip/clusters/Attribute.py | 425 +- .../python/chip/clusters/ClusterObjects.py | 50 +- .../python/chip/clusters/Objects.py | 3647 ++++++++++++++++- .../python/chip/clusters/attribute.cpp | 13 +- .../templates/python-cluster-Objects-py.zapt | 29 +- .../python/test/test_scripts/base.py | 11 +- .../test/test_scripts/cluster_objects.py | 97 +- 9 files changed, 4033 insertions(+), 279 deletions(-) diff --git a/src/controller/python/build-chip-wheel.py b/src/controller/python/build-chip-wheel.py index 3a4c5cc12efabb..59d3fb8b9ce07f 100644 --- a/src/controller/python/build-chip-wheel.py +++ b/src/controller/python/build-chip-wheel.py @@ -134,6 +134,7 @@ def finalize_options(self): 'rich', 'stringcase', 'pyyaml', + 'ipdb' ] if platform.system() == "Darwin": diff --git a/src/controller/python/chip/ChipDeviceCtrl.py b/src/controller/python/chip/ChipDeviceCtrl.py index b0fed9d9a99f04..a214eed01a355e 100644 --- a/src/controller/python/chip/ChipDeviceCtrl.py +++ b/src/controller/python/chip/ChipDeviceCtrl.py @@ -443,7 +443,7 @@ async def ReadAttribute(self, nodeid: int, attributes: typing.List[typing.Union[ typing.Tuple[int, typing.Type[ClusterObjects.Cluster]], # Concrete path typing.Tuple[int, typing.Type[ClusterObjects.ClusterAttributeDescriptor]] - ]], reportInterval: typing.Tuple[int, int] = None): + ]], returnClusterObject: bool = False, reportInterval: typing.Tuple[int, int] = None): ''' Read a list of attributes from a target node @@ -456,12 +456,15 @@ async def ReadAttribute(self, nodeid: int, attributes: typing.List[typing.Union[ Clusters.ClusterA: Endpoint = *, Cluster = specific, Attribute = * '*' or (): Endpoint = *, Cluster = *, Attribute = * - The cluster and attributes specified above are to be selected from the generated cluster objects. + The cluster and attributes specified above are to be selected from the generated cluster objects. - e.g. - ReadAttribute(1, [ 1 ] ) -- case 4 above. - ReadAttribute(1, [ Clusters.Basic ] ) -- case 5 above. - ReadAttribute(1, [ (1, Clusters.Basic.Attributes.Location ] ) -- case 1 above. + e.g. + ReadAttribute(1, [ 1 ] ) -- case 4 above. + ReadAttribute(1, [ Clusters.Basic ] ) -- case 5 above. + ReadAttribute(1, [ (1, Clusters.Basic.Attributes.Location ] ) -- case 1 above. + + returnClusterObject: This returns the data as consolidated cluster objects, with all attributes for a cluster inside + a single cluster-wide cluster object. reportInterval: A tuple of two int-s for (MinIntervalFloor, MaxIntervalCeiling). Used by establishing subscriptions. When not provided, a read request will be sent. @@ -480,7 +483,6 @@ async def ReadAttribute(self, nodeid: int, attributes: typing.List[typing.Union[ # Wildcard pass elif type(v) is not tuple: - print(type(v)) if type(v) is int: endpoint = v elif issubclass(v, ClusterObjects.Cluster): @@ -501,7 +503,7 @@ async def ReadAttribute(self, nodeid: int, attributes: typing.List[typing.Union[ attrs.append(ClusterAttribute.AttributePath( EndpointId=endpoint, Cluster=cluster, Attribute=attribute)) res = self._ChipStack.Call( - lambda: ClusterAttribute.ReadAttributes(future, eventLoop, device, self, attrs, ClusterAttribute.SubscriptionParameters(reportInterval[0], reportInterval[1]) if reportInterval else None)) + lambda: ClusterAttribute.ReadAttributes(future, eventLoop, device, self, attrs, returnClusterObject, ClusterAttribute.SubscriptionParameters(reportInterval[0], reportInterval[1]) if reportInterval else None)) if res != 0: raise self._ChipStack.ErrorToException(res) return await future @@ -512,11 +514,11 @@ async def ReadEvent(self, nodeid: int, events: typing.List[typing.Union[ # Wildcard endpoint, Cluster id present typing.Tuple[typing.Type[ClusterObjects.Cluster]], # Wildcard endpoint, Cluster + Event present - typing.Tuple[typing.Type[ClusterObjects.ClusterEventDescriptor]], + typing.Tuple[typing.Type[ClusterObjects.ClusterEvent]], # Wildcard event id typing.Tuple[int, typing.Type[ClusterObjects.Cluster]], # Concrete path - typing.Tuple[int, typing.Type[ClusterObjects.ClusterEventDescriptor]] + typing.Tuple[int, typing.Type[ClusterObjects.ClusterEvent]] ]], reportInterval: typing.Tuple[int, int] = None): ''' Read a list of events from a target node @@ -559,7 +561,7 @@ async def ReadEvent(self, nodeid: int, events: typing.List[typing.Union[ endpoint = v elif issubclass(v, ClusterObjects.Cluster): cluster = v - elif issubclass(v, ClusterObjects.ClusterEventDescriptor): + elif issubclass(v, ClusterObjects.ClusterEvent): event = v else: raise ValueError("Unsupported Event Path") @@ -568,7 +570,7 @@ async def ReadEvent(self, nodeid: int, events: typing.List[typing.Union[ endpoint = v[0] if issubclass(v[1], ClusterObjects.Cluster): cluster = v[1] - elif issubclass(v[1], ClusterAttribute.ClusterEventDescriptor): + elif issubclass(v[1], ClusterAttribute.ClusterEvent): event = v[1] else: raise ValueError("Unsupported Attribute Path") @@ -597,16 +599,19 @@ def ZCLSend(self, cluster, command, nodeid, endpoint, groupid, args, blocking=Fa def ZCLReadAttribute(self, cluster, attribute, nodeid, endpoint, groupid, blocking=True): req = None + clusterType = eval(f"GeneratedObjects.{cluster}") + try: - req = eval(f"GeneratedObjects.{cluster}.Attributes.{attribute}") + attributeType = eval( + f"GeneratedObjects.{cluster}.Attributes.{attribute}") except: raise UnknownAttribute(cluster, attribute) result = asyncio.run(self.ReadAttribute( - nodeid, [(endpoint, req)]))['Attributes'] + nodeid, [(endpoint, attributeType)])) path = ClusterAttribute.AttributePath( - EndpointId=endpoint, Attribute=req) - return im.AttributeReadResult(path=im.AttributePath(nodeId=nodeid, endpointId=path.EndpointId, clusterId=path.ClusterId, attributeId=path.AttributeId), status=0, value=result[path].Data.value) + EndpointId=endpoint, Attribute=attributeType) + return im.AttributeReadResult(path=im.AttributePath(nodeId=nodeid, endpointId=path.EndpointId, clusterId=path.ClusterId, attributeId=path.AttributeId), status=0, value=result[endpoint][clusterType][attributeType]) def ZCLWriteAttribute(self, cluster: str, attribute: str, nodeid, endpoint, groupid, value, blocking=True): req = None @@ -624,7 +629,7 @@ def ZCLSubscribeAttribute(self, cluster, attribute, nodeid, endpoint, minInterva req = eval(f"GeneratedObjects.{cluster}.Attributes.{attribute}") except: raise UnknownAttribute(cluster, attribute) - return asyncio.run(self.ReadAttribute(nodeid, [(endpoint, req)], reportInterval=(minInterval, maxInterval))) + return asyncio.run(self.ReadAttribute(nodeid, [(endpoint, req)], False, reportInterval=(minInterval, maxInterval))) def ZCLShutdownSubscription(self, subscriptionId: int): res = self._ChipStack.Call( diff --git a/src/controller/python/chip/clusters/Attribute.py b/src/controller/python/chip/clusters/Attribute.py index c16a390879de81..d0027228ab15d3 100644 --- a/src/controller/python/chip/clusters/Attribute.py +++ b/src/controller/python/chip/clusters/Attribute.py @@ -15,13 +15,17 @@ # limitations under the License. # +# Needed to use types in type hints before they are fully defined. +from __future__ import annotations + from asyncio.futures import Future import ctypes -from dataclasses import dataclass -from typing import Tuple, Type, Union, List, Any, Callable +from dataclasses import dataclass, field +from typing import Tuple, Type, Union, List, Any, Callable, Dict, Set from ctypes import CFUNCTYPE, c_char_p, c_size_t, c_void_p, c_uint64, c_uint32, c_uint16, c_uint8, py_object, c_uint64 +from rich.pretty import pprint -from .ClusterObjects import Cluster, ClusterAttributeDescriptor, ClusterEventDescriptor +from .ClusterObjects import Cluster, ClusterAttributeDescriptor, ClusterEvent import chip.exceptions import chip.interaction_model import chip.tlv @@ -78,6 +82,60 @@ def __hash__(self): return str(self).__hash__() +@dataclass +class TypedAttributePath: + ''' Encapsulates an attribute path that has strongly typed references to cluster and attribute + cluster object types. These types serve as keys into the attribute cache. + ''' + ClusterType: Cluster = None + AttributeType: ClusterAttributeDescriptor = None + AttributeName: str = None + Path: AttributePath = None + + def __init__(self, ClusterType: Cluster = None, AttributeType: ClusterAttributeDescriptor = None, + Path: AttributePath = None): + ''' Only one of either ClusterType and AttributeType OR Path may be provided. + ''' + + # + # First, let's populate ClusterType and AttributeType. If it's already provided, + # we can continue onwards to deriving the label. Otherwise, we'll need to + # walk the attribute index to find the right type information. + # + if (ClusterType is not None and AttributeType is not None): + self.ClusterType = ClusterType + self.AttributeType = AttributeType + else: + if (Path is None): + raise ValueError("Path should have a valid value") + + for cluster, attribute in _AttributeIndex: + attributeType = _AttributeIndex[(cluster, attribute)][0] + clusterType = _AttributeIndex[(cluster, attribute)][1] + + if (clusterType.id == Path.ClusterId and attributeType.attribute_id == Path.AttributeId): + self.ClusterType = clusterType + self.AttributeType = attributeType + break + + if (self.ClusterType is None or self.AttributeType is None): + raise Exception("Schema not found") + + # Next, let's figure out the label. + for field in self.ClusterType.descriptor.Fields: + if (field.Tag != self.AttributeType.attribute_id): + continue + + self.AttributeName = field.Label + + if (self.AttributeName is None): + raise Exception("Schema not found") + + self.Path = Path + self.ClusterId = self.ClusterType.id + self.AttributeId = self.AttributeType.attribute_id + + @dataclass class EventPath: EndpointId: int = None @@ -118,7 +176,7 @@ class AttributePathWithListIndex(AttributePath): @dataclass class EventHeader: EndpointId: int = None - Event: ClusterEventDescriptor = None + Event: ClusterEvent = None EventNumber: int = None Priority: EventPriority = None Timestamp: int = None @@ -160,7 +218,7 @@ class AttributeDescriptorWithEndpoint: @dataclass class EventDescriptorWithEndpoint: EndpointId: int - Event: ClusterEventDescriptor + Event: ClusterEvent @dataclass @@ -194,6 +252,7 @@ class EventReadResult(EventStatus): _AttributeIndex = {} _EventIndex = {} +_ClusterIndex = {} def _BuildAttributeIndex(): @@ -215,15 +274,16 @@ def _BuildAttributeIndex(): if (matched == []): continue - _AttributeIndex[str(AttributePath(ClusterId=attribute.cluster_id, AttributeId=attribute.attribute_id))] = eval( - 'chip.clusters.Objects.' + clusterName + '.Attributes.' + attributeName) + _AttributeIndex[(attribute.cluster_id, attribute.attribute_id)] = (eval( + 'chip.clusters.Objects.' + clusterName + '.Attributes.' + attributeName), obj) -def _on_update_noop(path: AttributePath, value: Any): +def _BuildClusterIndex(): + ''' Build internal cluster index for locating the corresponding cluster object by path in the future. ''' - Default OnUpdate callback, simplily does nothing. - ''' - pass + for clusterName, obj in inspect.getmembers(sys.modules['chip.clusters.Objects']): + if ('chip.clusters.Objects' in str(obj)) and inspect.isclass(obj): + _ClusterIndex[obj.id] = obj @dataclass @@ -232,37 +292,168 @@ class SubscriptionParameters: MaxReportIntervalCeilingSeconds: int +@dataclass +class AttributeCache: + ''' A cache that stores data & errors returned in read/subscribe reports, but organizes it topologically + in a collection of nested dictionaries. The organization follows the natural data model composition of + the device: endpoint, then cluster, then attribute. + + TLV data (or ValueDecodeFailure in the case of IM status codes) are stored for each attribute in + attributeTLVCache[endpoint][cluster][attribute]. + + Upon completion of data population, it can be retrieved in a more friendly cluster object format, + with two options available. In both options, data is in the dictionary is key'ed not by the raw numeric + cluster and attribute IDs, but instead by the cluster object descriptor types for each of those generated + cluster objects. + + E.g Clusters.TestCluster is the literal key for indexing the test cluster. + Clusters.TestCluster.Attributes.Int16u is the listeral key for indexing an attribute in the test cluster. + + This strongly typed keys permit a more natural and safer form of indexing. + ''' + returnClusterObject: bool = False + attributeTLVCache: Dict[int, Dict[int, Dict[int, bytes]]] = field( + default_factory=lambda: {}) + attributeCache: Dict[int, List[Cluster]] = field( + default_factory=lambda: {}) + + def UpdateTLV(self, path: AttributePath, data: Union[bytes, ValueDecodeFailure]): + ''' Store data in TLV since that makes it easiest to eventually convert to either the + cluster or attribute view representations (see below in UpdateCachedData). + ''' + if (path.EndpointId not in self.attributeTLVCache): + self.attributeTLVCache[path.EndpointId] = {} + + endpointCache = self.attributeTLVCache[path.EndpointId] + if (path.ClusterId not in endpointCache): + endpointCache[path.ClusterId] = {} + + clusterCache = endpointCache[path.ClusterId] + if (path.AttributeId not in clusterCache): + clusterCache[path.AttributeId] = None + + clusterCache[path.AttributeId] = data + + def UpdateCachedData(self): + ''' This converts the raw TLV data into a cluster object format. + + Two formats are available: + 1. Attribute-View (returnClusterObject=False): Dict[EndpointId, Dict[ClusterObjectType, Dict[AttributeObjectType, AttributeValue]]] + 2. Cluster-View (returnClusterObject=True): Dict[EndpointId, Dict[ClusterObjectType, ClusterValue]] + + In the attribute-view, only attributes that match the original path criteria are present in the dictionary. The attribute values can + either be the actual data for the attribute, or a ValueDecodeFailure in the case of non-success IM status codes, or other errors encountered during decode. + + In the cluster-view, a cluster object that corresponds to all attributes on a given cluster instance is returned, + regardless of the subset of attributes read. For attributes not returned in the report, defaults are used. If a cluster cannot be decoded, + instead of a cluster object value, a ValueDecodeFailure shall be present. + ''' + + tlvCache = self.attributeTLVCache + attributeCache = self.attributeCache + + for endpoint in tlvCache: + if (endpoint not in attributeCache): + attributeCache[endpoint] = {} + + endpointCache = attributeCache[endpoint] + + for cluster in tlvCache[endpoint]: + clusterType = _ClusterIndex[cluster] + if (clusterType is None): + raise Exception("Cannot find cluster in cluster index") + + if (clusterType not in endpointCache): + endpointCache[clusterType] = {} + + clusterCache = endpointCache[clusterType] + + if (self.returnClusterObject): + try: + # Since the TLV data is already organized by attribute tags, we can trivially convert to a cluster object representation. + endpointCache[clusterType] = clusterType.FromDict( + data=clusterType.descriptor.TagDictToLabelDict([], tlvCache[endpoint][cluster])) + except Exception as ex: + logging.error( + f"Error converting TLV to Cluster Object for path: Endpoint = {endpoint}, cluster = {str(clusterType)}") + logging.error(f"|-- Exception: {repr(ex)}") + decodedValue = ValueDecodeFailure( + tlvCache[endpoint][cluster], ex) + endpointCache[clusterType] = decodedValue + else: + for attribute in tlvCache[endpoint][cluster]: + value = tlvCache[endpoint][cluster][attribute] + + attributeType = _AttributeIndex[( + cluster, attribute)][0] + if (attributeType is None): + raise Exception( + "Cannot find attribute in attribute index") + + if (attributeType not in clusterCache): + clusterCache[attributeType] = {} + + if (type(value) is ValueDecodeFailure): + logging.error( + f"For path: Endpoint = {endpoint}, Attribute = {str(attributeType)}, got IM Error: {str(value.Reason)}") + clusterCache[attributeType] = value + else: + try: + decodedValue = attributeType.FromTagDictOrRawValue( + tlvCache[endpoint][cluster][attribute]) + except Exception as ex: + logging.error( + f"Error converting TLV to Cluster Object for path: Endpoint = {endpoint}, Attribute = {str(attributeType)}") + logging.error(f"|-- Exception: {repr(ex)}") + decodedValue = ValueDecodeFailure(value, ex) + + clusterCache[attributeType] = decodedValue + + class SubscriptionTransaction: def __init__(self, transaction: 'AsyncReadTransaction', subscriptionId, devCtrl): - self._on_update = _on_update_noop - self._read_transaction = transaction + self._onAttributeChangeCb = DefaultAttributeChangeCallback + self._onEventChangeCb = DefaultEventChangeCallback + self._readTransaction = transaction self._subscriptionId = subscriptionId self._devCtrl = devCtrl - def GetAttributeValue(self, path: Tuple[int, Type[ClusterAttributeDescriptor]]): + def GetAttributes(self): + ''' Returns the attribute value cache tracking the latest state on the publisher. ''' - Gets the attribute from cache, returns the value and the timestamp when it was updated last time. + return self._readTransaction._cache.attributeCache + + def GetAttribute(self, path: TypedAttributePath) -> Any: + ''' Returns a specific attribute given a TypedAttributePath. ''' - return self._read_transaction.GetAttributeValue(AttributePath(path[0], Attribute=path[1])) + data = self._readTransaction._cache.attributeCache - def GetAllAttributeValues(self): - return self._read_transaction.GetAllAttributeValues() + if (self._readTransaction._cache.returnClusterObject): + return eval(f'data[path.Path.EndpointId][path.ClusterType].{path.AttributeName}') + else: + return data[path.Path.EndpointId][path.ClusterType][path.AttributeType] - def GetAllEventValues(self): - return self._read_transaction.GetAllEventValues() + def GetEvents(self): + return self._readTransaction.GetAllEventValues() - def SetAttributeUpdateCallback(self, callback: Callable[[AttributePath, Any], None]): + def SetAttributeUpdateCallback(self, callback: Callable[[TypedAttributePath, SubscriptionTransaction], None]): ''' - Sets the callback function for the attribute value change event, accepts a Callable accpets an attribute path and its updated value. + Sets the callback function for the attribute value change event, accepts a Callable accepts an attribute path and the cached data. ''' - if callback is None: - self._on_update = _on_update_noop - else: - self._on_update = callback + if callback is not None: + self._onAttributeChangeCb = callback + + def SetEventUpdateCallback(self, callback: Callable[[EventReadResult, SubscriptionTransaction], None]): + if callback is not None: + self._onEventChangeCb = callback + + @property + def OnAttributeChangeCb(self) -> Callable[[TypedAttributePath, SubscriptionTransaction], None]: + return self._onAttributeChangeCb @property - def OnUpdate(self) -> Callable[[AttributePath, Any], None]: - return self._on_update + def OnEventChangeCb(self) -> Callable[[EventReadResult, SubscriptionTransaction], None]: + return self._onEventChangeCb def Shutdown(self): self._devCtrl.ZCLShutdownSubscription(self._subscriptionId) @@ -271,6 +462,23 @@ def __repr__(self): return f'' +def DefaultAttributeChangeCallback(path: TypedAttributePath, transaction: SubscriptionTransaction): + data = transaction.GetAttribute(path) + value = { + 'Endpoint': path.Path.EndpointId, + 'Attribute': path.AttributeType, + 'Value': data + } + + print("Attribute Changed:") + pprint(value, expand_all=True) + + +def DefaultEventChangeCallback(data: EventReadResult, transaction: SubscriptionTransaction): + print("Received Event:") + pprint(data, expand_all=True) + + def _BuildEventIndex(): ''' Build internal event index for locating the corresponding cluster object by path in the future. We do this because this operation will take a long time when there are lots of events, it takes about 300ms for a single query. @@ -286,34 +494,32 @@ def _BuildEventIndex(): # Only match on classes that extend the ClusterEventescriptor class matched = [ - value for value in base_classes if 'ClusterEventDescriptor' in str(value)] + value for value in base_classes if 'ClusterEvent' in str(value)] if (matched == []): continue - logging.error( - f"event iterate {event.cluster_id} and {event.event_id}") + _EventIndex[str(EventPath(ClusterId=event.cluster_id, EventId=event.event_id))] = eval( 'chip.clusters.Objects.' + clusterName + '.Events.' + eventName) +class TransactionType(Enum): + READ_EVENTS = 1 + READ_ATTRIBUTES = 2 + + class AsyncReadTransaction: - def __init__(self, future: Future, eventLoop, devCtrl): + def __init__(self, future: Future, eventLoop, devCtrl, transactionType: TransactionType, returnClusterObject: bool): self._event_loop = eventLoop self._future = future self._subscription_handler = None - self._res = {'Attributes': {}, 'Events': []} + self._events = [] self._devCtrl = devCtrl - # For subscriptions, the data comes from CHIP Thread, whild the value will be accessed from Python's thread, so a lock is required here. - self._resLock = threading.Lock() - - def GetAttributeValue(self, path: AttributePath): - with self._resLock: - return self._res['Attributes'].get(path) - - def GetAllAttributeValues(self): - return self._res['Attributes'] + self._transactionType = transactionType + self._cache = AttributeCache(returnClusterObject=returnClusterObject) + self._changedPathSet = set() def GetAllEventValues(self): - return self._res['Events'] + return self._events def _handleAttributeData(self, path: AttributePathWithListIndex, status: int, data: bytes): try: @@ -324,49 +530,20 @@ def _handleAttributeData(self, path: AttributePathWithListIndex, status: int, da pass if (imStatus != chip.interaction_model.Status.Success): - logging.error( - f"For path: Endpoint = {path.EndpointId}/Cluster = {path.ClusterId}/Attribute = {path.AttributeId}, got IM Error: {str(imStatus)}") - attributeValue = None + attributeValue = ValueDecodeFailure( + None, chip.interaction_model.InteractionModelError(imStatus)) else: - attributeType = _AttributeIndex.get(str(AttributePath( - ClusterId=path.ClusterId, AttributeId=path.AttributeId)), None) - attributeValue = None tlvData = chip.tlv.TLVReader(data).get().get("Any", {}) - if attributeType is None: - attributeValue = ValueDecodeFailure( - tlvData, LookupError("attribute schema not found")) - else: - try: - attributeValue = attributeType( - attributeType.FromTLV(data)) - except Exception as ex: - logging.error( - f"Error convering TLV to Cluster Object for path: Endpoint = {path.EndpointId}/Cluster = {path.ClusterId}/Attribute = {path.AttributeId}") - logging.error( - f"Failed Cluster Object: {str(attributeType)}") - logging.error(ex) - attributeValue = ValueDecodeFailure( - tlvData, ex) - - # If we're in debug mode, raise the exception so that we can better debug what's happening. - if (builtins.enableDebugMode): - raise - - with self._resLock: - self._res['Attributes'][path] = AttributeReadResult( - Path=path, Status=imStatus, Data=attributeValue) - if self._subscription_handler is not None: - self._subscription_handler.OnUpdate( - path, attributeType(attributeValue)) + attributeValue = tlvData + + self._cache.UpdateTLV(path, attributeValue) + self._changedPathSet.add(path) + except Exception as ex: logging.exception(ex) def handleAttributeData(self, path: AttributePath, status: int, data: bytes): - if self._subscription_handler is not None: - self._handleAttributeData(path, status, data) - else: - self._event_loop.call_soon_threadsafe( - self._handleAttributeData, path, status, data) + self._handleAttributeData(path, status, data) def _handleEventData(self, header: EventHeader, path: EventPath, data: bytes): try: @@ -377,21 +554,34 @@ def _handleEventData(self, header: EventHeader, path: EventPath, data: bytes): eventValue = ValueDecodeFailure( tlvData, LookupError("event schema not found")) else: - eventValue = tlvData - header.Event = eventType + try: + eventValue = eventType.FromTLV(data) + except Exception as ex: + logging.error( + f"Error convering TLV to Cluster Object for path: Endpoint = {path.EndpointId}/Cluster = {path.ClusterId}/Event = {path.EventId}") + logging.error( + f"Failed Cluster Object: {str(eventType)}") + logging.error(ex) + eventValue = ValueDecodeFailure( + tlvData, ex) + + # If we're in debug mode, raise the exception so that we can better debug what's happening. + if (builtins.enableDebugMode): + raise + + eventResult = EventReadResult( + Header=header, Data=eventValue, Status=chip.interaction_model.Status.Success) + self._events.append(eventResult) + + if (self._subscription_handler is not None): + self._subscription_handler.OnEventChangeCb( + eventResult, self._subscription_handler) - with self._resLock: - self._res['Events'].append(EventReadResult( - Header=header, Status=chip.interaction_model.Status.Success, Data=eventValue)) except Exception as ex: logging.exception(ex) def handleEventData(self, header: EventHeader, path: EventPath, data: bytes): - if self._subscription_handler is not None: - self._handleEventData(header, path, data) - else: - self._event_loop.call_soon_threadsafe( - self._handleEventData, header, path, data) + self._handleEventData(header, path, data) def _handleError(self, chipError: int): self._future.set_exception( @@ -412,13 +602,37 @@ def handleSubscriptionEstablished(self, subscriptionId): self._event_loop.call_soon_threadsafe( self._handleSubscriptionEstablished, subscriptionId) + def _handleReportBegin(self): + pass + + def _handleReportEnd(self): + self._cache.UpdateCachedData() + + if (self._subscription_handler is not None): + for change in self._changedPathSet: + self._subscription_handler.OnAttributeChangeCb( + TypedAttributePath(Path=change), self._subscription_handler) + + # Clear it out once we've notified of all changes in this transaction. + self._changedPathSet = set() + def _handleDone(self): if not self._future.done(): - self._future.set_result(self._res) + if (self._transactionType == TransactionType.READ_EVENTS): + self._future.set_result(self._events) + else: + self._future.set_result(self._cache.attributeCache) def handleDone(self): self._event_loop.call_soon_threadsafe(self._handleDone) + def handleReportBegin(self): + pass + + def handleReportEnd(self): + # self._event_loop.call_soon_threadsafe(self._handleReportEnd) + self._handleReportEnd() + class AsyncWriteTransaction: def __init__(self, future: Future, eventLoop): @@ -463,6 +677,10 @@ def handleDone(self): None, py_object, c_uint32) _OnReadDoneCallbackFunct = CFUNCTYPE( None, py_object) +_OnReportBeginCallbackFunct = CFUNCTYPE( + None, py_object) +_OnReportEndCallbackFunct = CFUNCTYPE( + None, py_object) @_OnReadAttributeDataCallbackFunct @@ -490,6 +708,16 @@ def _OnReadErrorCallback(closure, chiperror: int): closure.handleError(chiperror) +@_OnReportBeginCallbackFunct +def _OnReportBeginCallback(closure): + closure.handleReportBegin() + + +@_OnReportEndCallbackFunct +def _OnReportEndCallback(closure): + closure.handleReportEnd() + + @_OnReadDoneCallbackFunct def _OnReadDoneCallback(closure): closure.handleDone() @@ -546,9 +774,10 @@ def WriteAttributes(future: Future, eventLoop, device, attributes: List[Attribut return res -def ReadAttributes(future: Future, eventLoop, device, devCtrl, attributes: List[AttributePath], subscriptionParameters: SubscriptionParameters = None) -> int: +def ReadAttributes(future: Future, eventLoop, device, devCtrl, attributes: List[AttributePath], returnClusterObject: bool = True, subscriptionParameters: SubscriptionParameters = None) -> int: handle = chip.native.GetLibraryHandle() - transaction = AsyncReadTransaction(future, eventLoop, devCtrl) + transaction = AsyncReadTransaction( + future, eventLoop, devCtrl, TransactionType.READ_ATTRIBUTES, returnClusterObject) readargs = [] for attr in attributes: @@ -581,7 +810,8 @@ def ReadAttributes(future: Future, eventLoop, device, devCtrl, attributes: List[ def ReadEvents(future: Future, eventLoop, device, devCtrl, events: List[EventPath], subscriptionParameters: SubscriptionParameters = None) -> int: handle = chip.native.GetLibraryHandle() - transaction = AsyncReadTransaction(future, eventLoop, devCtrl) + transaction = AsyncReadTransaction( + future, eventLoop, devCtrl, TransactionType.READ_EVENTS, False) readargs = [] for attr in events: @@ -625,12 +855,15 @@ def Init(): _OnWriteResponseCallbackFunct, _OnWriteErrorCallbackFunct, _OnWriteDoneCallbackFunct]) handle.pychip_ReadClient_ReadAttributes.restype = c_uint32 setter.Set('pychip_ReadClient_InitCallbacks', None, [ - _OnReadAttributeDataCallbackFunct, _OnReadEventDataCallbackFunct, _OnSubscriptionEstablishedCallbackFunct, _OnReadErrorCallbackFunct, _OnReadDoneCallbackFunct]) + _OnReadAttributeDataCallbackFunct, _OnReadEventDataCallbackFunct, _OnSubscriptionEstablishedCallbackFunct, _OnReadErrorCallbackFunct, _OnReadDoneCallbackFunct, + _OnReportBeginCallbackFunct, _OnReportEndCallbackFunct]) handle.pychip_WriteClient_InitCallbacks( _OnWriteResponseCallback, _OnWriteErrorCallback, _OnWriteDoneCallback) handle.pychip_ReadClient_InitCallbacks( - _OnReadAttributeDataCallback, _OnReadEventDataCallback, _OnSubscriptionEstablishedCallback, _OnReadErrorCallback, _OnReadDoneCallback) + _OnReadAttributeDataCallback, _OnReadEventDataCallback, _OnSubscriptionEstablishedCallback, _OnReadErrorCallback, _OnReadDoneCallback, + _OnReportBeginCallback, _OnReportEndCallback) _BuildAttributeIndex() + _BuildClusterIndex() _BuildEventIndex() diff --git a/src/controller/python/chip/clusters/ClusterObjects.py b/src/controller/python/chip/clusters/ClusterObjects.py index 31542dc5a288bd..d1f46eace96e88 100644 --- a/src/controller/python/chip/clusters/ClusterObjects.py +++ b/src/controller/python/chip/clusters/ClusterObjects.py @@ -214,7 +214,7 @@ def command_id(self) -> int: raise NotImplementedError() -class Cluster: +class Cluster(ClusterObject): ''' This class does nothing, but a convenient class that generated clusters can inherit from. This gives the ability that the users can use issubclass(X, Cluster) to determine if the class represnents a Cluster. ''' @@ -277,32 +277,7 @@ def _cluster_object(cls) -> ClusterObject: bases=(ClusterObject,)) -class ClusterEventDescriptor: - ''' - The ClusterEventDescriptor is used for holding an event's metadata like its cluster id, event id and its type. - - Users should not initialize an object based on this class. Instead, users should pass the subclass objects to tell some methods what they want. - - The implementation of this functions is quite tricky, it will create a cluster object on-the-fly, and use it for actual encode / decode routine to save lines of code. - ''' - @classmethod - def ToTLV(cls, tag: Union[int, None], value): - writer = tlv.TLVWriter() - wrapped_value = cls._cluster_object(Value=value) - cls.event_type.PutFieldToTLV(tag, - asdict(wrapped_value)['Value'], writer, '') - return writer.encoding - - @classmethod - def FromTLV(cls, tlvBuffer: bytes): - obj_class = cls._cluster_object - return obj_class.FromDict(obj_class.descriptor.TagDictToLabelDict('', {0: tlv.TLVReader(tlvBuffer).get().get('Any', {})})).Value - - @classmethod - def FromTagDictOrRawValue(cls, val: Any): - obj_class = cls._cluster_object - return obj_class.FromDict(obj_class.descriptor.TagDictToLabelDict('', {0: val})).Value - +class ClusterEvent(ClusterObject): @ChipUtility.classproperty def cluster_id(self) -> int: raise NotImplementedError() @@ -310,24 +285,3 @@ def cluster_id(self) -> int: @ChipUtility.classproperty def event_id(self) -> int: raise NotImplementedError() - - @ChipUtility.classproperty - def event_type(cls) -> ClusterObjectFieldDescriptor: - raise NotImplementedError() - - @ChipUtility.classproperty - def _cluster_object(cls) -> ClusterObject: - return make_dataclass('InternalClass', - [ - ('Value', List[cls.event_type.Type] - if cls.event_type.IsArray else cls.event_type.Type, field(default=None)), - ('descriptor', ClassVar[ClusterObjectDescriptor], - field( - default=ClusterObjectDescriptor( - Fields=[ClusterObjectFieldDescriptor( - Label='Value', Tag=0, Type=cls.event_type.Type, IsArray=cls.event_type.IsArray)] - ) - ) - ) - ], - bases=(ClusterObject,)) diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py index 7e712cf09c89db..72f1c0ded7c1ae 100644 --- a/src/controller/python/chip/clusters/Objects.py +++ b/src/controller/python/chip/clusters/Objects.py @@ -29,13 +29,140 @@ from chip.tlv import uint -from .ClusterObjects import ClusterObject, ClusterObjectDescriptor, ClusterObjectFieldDescriptor, ClusterCommand, ClusterAttributeDescriptor, Cluster, ClusterEventDescriptor +from .ClusterObjects import ClusterObject, ClusterObjectDescriptor, ClusterObjectFieldDescriptor, ClusterCommand, ClusterAttributeDescriptor, Cluster, ClusterEvent from .Types import Nullable, NullValue @dataclass class PowerConfiguration(Cluster): id: typing.ClassVar[int] = 0x0001 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="mainsVoltage", Tag=0x00000000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="mainsFrequency", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="mainsAlarmMask", Tag=0x00000010, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="mainsVoltageMinThreshold", Tag=0x00000011, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="mainsVoltageMaxThreshold", Tag=0x00000012, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="mainsVoltageDwellTrip", Tag=0x00000013, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryVoltage", Tag=0x00000020, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryPercentageRemaining", Tag=0x00000021, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryManufacturer", Tag=0x00000030, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="batterySize", Tag=0x00000031, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryAhrRating", Tag=0x00000032, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryQuantity", Tag=0x00000033, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryRatedVoltage", Tag=0x00000034, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryAlarmMask", Tag=0x00000035, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryVoltageMinThreshold", Tag=0x00000036, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryVoltageThreshold1", Tag=0x00000037, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryVoltageThreshold2", Tag=0x00000038, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryVoltageThreshold3", Tag=0x00000039, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryPercentageMinThreshold", Tag=0x0000003A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryPercentageThreshold1", Tag=0x0000003B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryPercentageThreshold2", Tag=0x0000003C, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryPercentageThreshold3", Tag=0x0000003D, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryAlarmState", Tag=0x0000003E, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2Voltage", Tag=0x00000040, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2PercentageRemaining", Tag=0x00000041, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2Manufacturer", Tag=0x00000050, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="battery2Size", Tag=0x00000051, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2AhrRating", Tag=0x00000052, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2Quantity", Tag=0x00000053, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2RatedVoltage", Tag=0x00000054, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2AlarmMask", Tag=0x00000055, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2VoltageMinThreshold", Tag=0x00000056, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2VoltageThreshold1", Tag=0x00000057, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2VoltageThreshold2", Tag=0x00000058, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2VoltageThreshold3", Tag=0x00000059, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2PercentageMinThreshold", Tag=0x0000005A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2PercentageThreshold1", Tag=0x0000005B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2PercentageThreshold2", Tag=0x0000005C, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2PercentageThreshold3", Tag=0x0000005D, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery2AlarmState", Tag=0x0000005E, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3Voltage", Tag=0x00000060, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3PercentageRemaining", Tag=0x00000061, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3Manufacturer", Tag=0x00000070, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="battery3Size", Tag=0x00000071, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3AhrRating", Tag=0x00000072, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3Quantity", Tag=0x00000073, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3RatedVoltage", Tag=0x00000074, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3AlarmMask", Tag=0x00000075, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3VoltageMinThreshold", Tag=0x00000076, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3VoltageThreshold1", Tag=0x00000077, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3VoltageThreshold2", Tag=0x00000078, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3VoltageThreshold3", Tag=0x00000079, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3PercentageMinThreshold", Tag=0x0000007A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3PercentageThreshold1", Tag=0x0000007B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3PercentageThreshold2", Tag=0x0000007C, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3PercentageThreshold3", Tag=0x0000007D, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="battery3AlarmState", Tag=0x0000007E, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + mainsVoltage: 'typing.Optional[uint]' = None + mainsFrequency: 'typing.Optional[uint]' = None + mainsAlarmMask: 'typing.Optional[uint]' = None + mainsVoltageMinThreshold: 'typing.Optional[uint]' = None + mainsVoltageMaxThreshold: 'typing.Optional[uint]' = None + mainsVoltageDwellTrip: 'typing.Optional[uint]' = None + batteryVoltage: 'typing.Optional[uint]' = None + batteryPercentageRemaining: 'typing.Optional[uint]' = None + batteryManufacturer: 'typing.Optional[str]' = None + batterySize: 'typing.Optional[uint]' = None + batteryAhrRating: 'typing.Optional[uint]' = None + batteryQuantity: 'typing.Optional[uint]' = None + batteryRatedVoltage: 'typing.Optional[uint]' = None + batteryAlarmMask: 'typing.Optional[uint]' = None + batteryVoltageMinThreshold: 'typing.Optional[uint]' = None + batteryVoltageThreshold1: 'typing.Optional[uint]' = None + batteryVoltageThreshold2: 'typing.Optional[uint]' = None + batteryVoltageThreshold3: 'typing.Optional[uint]' = None + batteryPercentageMinThreshold: 'typing.Optional[uint]' = None + batteryPercentageThreshold1: 'typing.Optional[uint]' = None + batteryPercentageThreshold2: 'typing.Optional[uint]' = None + batteryPercentageThreshold3: 'typing.Optional[uint]' = None + batteryAlarmState: 'typing.Optional[uint]' = None + battery2Voltage: 'typing.Optional[uint]' = None + battery2PercentageRemaining: 'typing.Optional[uint]' = None + battery2Manufacturer: 'typing.Optional[str]' = None + battery2Size: 'typing.Optional[uint]' = None + battery2AhrRating: 'typing.Optional[uint]' = None + battery2Quantity: 'typing.Optional[uint]' = None + battery2RatedVoltage: 'typing.Optional[uint]' = None + battery2AlarmMask: 'typing.Optional[uint]' = None + battery2VoltageMinThreshold: 'typing.Optional[uint]' = None + battery2VoltageThreshold1: 'typing.Optional[uint]' = None + battery2VoltageThreshold2: 'typing.Optional[uint]' = None + battery2VoltageThreshold3: 'typing.Optional[uint]' = None + battery2PercentageMinThreshold: 'typing.Optional[uint]' = None + battery2PercentageThreshold1: 'typing.Optional[uint]' = None + battery2PercentageThreshold2: 'typing.Optional[uint]' = None + battery2PercentageThreshold3: 'typing.Optional[uint]' = None + battery2AlarmState: 'typing.Optional[uint]' = None + battery3Voltage: 'typing.Optional[uint]' = None + battery3PercentageRemaining: 'typing.Optional[uint]' = None + battery3Manufacturer: 'typing.Optional[str]' = None + battery3Size: 'typing.Optional[uint]' = None + battery3AhrRating: 'typing.Optional[uint]' = None + battery3Quantity: 'typing.Optional[uint]' = None + battery3RatedVoltage: 'typing.Optional[uint]' = None + battery3AlarmMask: 'typing.Optional[uint]' = None + battery3VoltageMinThreshold: 'typing.Optional[uint]' = None + battery3VoltageThreshold1: 'typing.Optional[uint]' = None + battery3VoltageThreshold2: 'typing.Optional[uint]' = None + battery3VoltageThreshold3: 'typing.Optional[uint]' = None + battery3PercentageMinThreshold: 'typing.Optional[uint]' = None + battery3PercentageThreshold1: 'typing.Optional[uint]' = None + battery3PercentageThreshold2: 'typing.Optional[uint]' = None + battery3PercentageThreshold3: 'typing.Optional[uint]' = None + battery3AlarmState: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -1006,6 +1133,37 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class DeviceTemperatureConfiguration(Cluster): id: typing.ClassVar[int] = 0x0002 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="currentTemperature", Tag=0x00000000, Type=int), + ClusterObjectFieldDescriptor(Label="minTempExperienced", Tag=0x00000001, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="maxTempExperienced", Tag=0x00000002, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="overTempTotalDwell", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="deviceTempAlarmMask", Tag=0x00000010, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lowTempThreshold", Tag=0x00000011, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="highTempThreshold", Tag=0x00000012, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="lowTempDwellTripPoint", Tag=0x00000013, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="highTempDwellTripPoint", Tag=0x00000014, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + currentTemperature: 'int' = None + minTempExperienced: 'typing.Optional[int]' = None + maxTempExperienced: 'typing.Optional[int]' = None + overTempTotalDwell: 'typing.Optional[uint]' = None + deviceTempAlarmMask: 'typing.Optional[uint]' = None + lowTempThreshold: 'typing.Optional[int]' = None + highTempThreshold: 'typing.Optional[int]' = None + lowTempDwellTripPoint: 'typing.Optional[uint]' = None + highTempDwellTripPoint: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -1208,6 +1366,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Identify(Cluster): id: typing.ClassVar[int] = 0x0003 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="identifyTime", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="identifyType", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + identifyTime: 'uint' = None + identifyType: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class IdentifyEffectIdentifier(IntEnum): kBlink = 0x00 @@ -1379,6 +1554,21 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Groups(Cluster): id: typing.ClassVar[int] = 0x0004 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="nameSupport", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + nameSupport: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -1616,6 +1806,31 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Scenes(Cluster): id: typing.ClassVar[int] = 0x0005 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="sceneCount", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="currentScene", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="currentGroup", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="sceneValid", Tag=0x00000003, Type=bool), + ClusterObjectFieldDescriptor(Label="nameSupport", Tag=0x00000004, Type=uint), + ClusterObjectFieldDescriptor(Label="lastConfiguredBy", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + sceneCount: 'uint' = None + currentScene: 'uint' = None + currentGroup: 'uint' = None + sceneValid: 'bool' = None + nameSupport: 'uint' = None + lastConfiguredBy: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Structs: @dataclass @@ -2159,6 +2374,29 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class OnOff(Cluster): id: typing.ClassVar[int] = 0x0006 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="onOff", Tag=0x00000000, Type=bool), + ClusterObjectFieldDescriptor(Label="globalSceneControl", Tag=0x00004000, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="onTime", Tag=0x00004001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="offWaitTime", Tag=0x00004002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="startUpOnOff", Tag=0x00004003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + onOff: 'bool' = None + globalSceneControl: 'typing.Optional[bool]' = None + onTime: 'typing.Optional[uint]' = None + offWaitTime: 'typing.Optional[uint]' = None + startUpOnOff: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class OnOffDelayedAllOffEffectVariant(IntEnum): kFadeToOffIn0p8Seconds = 0x00 @@ -2399,6 +2637,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class OnOffSwitchConfiguration(Cluster): id: typing.ClassVar[int] = 0x0007 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="switchType", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="switchActions", Tag=0x00000010, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + switchType: 'uint' = None + switchActions: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -2489,6 +2744,47 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class LevelControl(Cluster): id: typing.ClassVar[int] = 0x0008 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="currentLevel", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="remainingTime", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="minLevel", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="maxLevel", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="currentFrequency", Tag=0x00000004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="minFrequency", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="maxFrequency", Tag=0x00000006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="options", Tag=0x0000000F, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="onOffTransitionTime", Tag=0x00000010, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="onLevel", Tag=0x00000011, Type=typing.Union[None, Nullable, uint]), + ClusterObjectFieldDescriptor(Label="onTransitionTime", Tag=0x00000012, Type=typing.Union[None, Nullable, uint]), + ClusterObjectFieldDescriptor(Label="offTransitionTime", Tag=0x00000013, Type=typing.Union[None, Nullable, uint]), + ClusterObjectFieldDescriptor(Label="defaultMoveRate", Tag=0x00000014, Type=typing.Union[None, Nullable, uint]), + ClusterObjectFieldDescriptor(Label="startUpCurrentLevel", Tag=0x00004000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + currentLevel: 'uint' = None + remainingTime: 'typing.Optional[uint]' = None + minLevel: 'typing.Optional[uint]' = None + maxLevel: 'typing.Optional[uint]' = None + currentFrequency: 'typing.Optional[uint]' = None + minFrequency: 'typing.Optional[uint]' = None + maxFrequency: 'typing.Optional[uint]' = None + options: 'typing.Optional[uint]' = None + onOffTransitionTime: 'typing.Optional[uint]' = None + onLevel: 'typing.Union[None, Nullable, uint]' = None + onTransitionTime: 'typing.Union[None, Nullable, uint]' = None + offTransitionTime: 'typing.Union[None, Nullable, uint]' = None + defaultMoveRate: 'typing.Union[None, Nullable, uint]' = None + startUpCurrentLevel: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class MoveMode(IntEnum): kUp = 0x00 @@ -2929,6 +3225,21 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Alarms(Cluster): id: typing.ClassVar[int] = 0x0009 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="alarmCount", Tag=0x00000000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + alarmCount: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -3098,6 +3409,39 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Time(Cluster): id: typing.ClassVar[int] = 0x000A + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="time", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="timeStatus", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="timeZone", Tag=0x00000002, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dstStart", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dstEnd", Tag=0x00000004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dstShift", Tag=0x00000005, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="standardTime", Tag=0x00000006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="localTime", Tag=0x00000007, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lastSetTime", Tag=0x00000008, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="validUntilTime", Tag=0x00000009, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + time: 'uint' = None + timeStatus: 'uint' = None + timeZone: 'typing.Optional[int]' = None + dstStart: 'typing.Optional[uint]' = None + dstEnd: 'typing.Optional[uint]' = None + dstShift: 'typing.Optional[int]' = None + standardTime: 'typing.Optional[uint]' = None + localTime: 'typing.Optional[uint]' = None + lastSetTime: 'typing.Optional[uint]' = None + validUntilTime: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -3316,6 +3660,37 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class BinaryInputBasic(Cluster): id: typing.ClassVar[int] = 0x000F + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="activeText", Tag=0x00000004, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="description", Tag=0x0000001C, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="inactiveText", Tag=0x0000002E, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="outOfService", Tag=0x00000051, Type=bool), + ClusterObjectFieldDescriptor(Label="polarity", Tag=0x00000054, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="presentValue", Tag=0x00000055, Type=bool), + ClusterObjectFieldDescriptor(Label="reliability", Tag=0x00000067, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="statusFlags", Tag=0x0000006F, Type=uint), + ClusterObjectFieldDescriptor(Label="applicationType", Tag=0x00000100, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + activeText: 'typing.Optional[str]' = None + description: 'typing.Optional[str]' = None + inactiveText: 'typing.Optional[str]' = None + outOfService: 'bool' = None + polarity: 'typing.Optional[uint]' = None + presentValue: 'bool' = None + reliability: 'typing.Optional[uint]' = None + statusFlags: 'uint' = None + applicationType: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -3518,6 +3893,29 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class PowerProfile(Cluster): id: typing.ClassVar[int] = 0x001A + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="totalProfileNum", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="multipleScheduling", Tag=0x00000001, Type=bool), + ClusterObjectFieldDescriptor(Label="energyFormatting", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="energyRemote", Tag=0x00000003, Type=bool), + ClusterObjectFieldDescriptor(Label="scheduleMode", Tag=0x00000004, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + totalProfileNum: 'uint' = None + multipleScheduling: 'bool' = None + energyFormatting: 'uint' = None + energyRemote: 'bool' = None + scheduleMode: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Structs: @dataclass @@ -4081,6 +4479,25 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ApplianceControl(Cluster): id: typing.ClassVar[int] = 0x001B + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="startTime", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="finishTime", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="remainingTime", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + startTime: 'uint' = None + finishTime: 'uint' = None + remainingTime: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class ApplianceStatus(IntEnum): kOff = 0x01 @@ -4352,6 +4769,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class PulseWidthModulation(Cluster): id: typing.ClassVar[int] = 0x001C + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -4410,6 +4840,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Descriptor(Cluster): id: typing.ClassVar[int] = 0x001D + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="deviceList", Tag=0x00000000, Type=typing.List[Descriptor.Structs.DeviceType]), + ClusterObjectFieldDescriptor(Label="serverList", Tag=0x00000001, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="clientList", Tag=0x00000002, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="partsList", Tag=0x00000003, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + deviceList: 'typing.List[Descriptor.Structs.DeviceType]' = None + serverList: 'typing.List[uint]' = None + clientList: 'typing.List[uint]' = None + partsList: 'typing.List[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Structs: @dataclass @@ -4547,6 +4998,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Binding(Cluster): id: typing.ClassVar[int] = 0x001E + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -4648,6 +5112,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class AccessControl(Cluster): id: typing.ClassVar[int] = 0x001F + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="acl", Tag=0x00000000, Type=typing.List[AccessControl.Structs.AccessControlEntry]), + ClusterObjectFieldDescriptor(Label="extension", Tag=0x00000001, Type=typing.List[AccessControl.Structs.ExtensionEntry]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + acl: 'typing.List[AccessControl.Structs.AccessControlEntry]' = None + extension: 'typing.List[AccessControl.Structs.ExtensionEntry]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class AuthMode(IntEnum): kPase = 0x01 @@ -4800,6 +5281,33 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class PollControl(Cluster): id: typing.ClassVar[int] = 0x0020 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="checkInInterval", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="longPollInterval", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="shortPollInterval", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="fastPollTimeout", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="checkInIntervalMin", Tag=0x00000004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="longPollIntervalMin", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="fastPollTimeoutMax", Tag=0x00000006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + checkInInterval: 'uint' = None + longPollInterval: 'uint' = None + shortPollInterval: 'uint' = None + fastPollTimeout: 'uint' = None + checkInIntervalMin: 'typing.Optional[uint]' = None + longPollIntervalMin: 'typing.Optional[uint]' = None + fastPollTimeoutMax: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -5044,6 +5552,25 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class BridgedActions(Cluster): id: typing.ClassVar[int] = 0x0025 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="actionList", Tag=0x00000000, Type=typing.List[BridgedActions.Structs.ActionStruct]), + ClusterObjectFieldDescriptor(Label="endpointList", Tag=0x00000001, Type=typing.List[BridgedActions.Structs.EndpointListStruct]), + ClusterObjectFieldDescriptor(Label="setupUrl", Tag=0x00000002, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + actionList: 'typing.List[BridgedActions.Structs.ActionStruct]' = None + endpointList: 'typing.List[BridgedActions.Structs.EndpointListStruct]' = None + setupUrl: 'typing.Optional[str]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class ActionErrorEnum(IntEnum): kUnknown = 0x00 @@ -5427,7 +5954,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class StateChanged(ClusterEventDescriptor): + class StateChanged(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0025 @@ -5450,7 +5977,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: newState: 'BridgedActions.Enums.ActionStateEnum' = 0 @dataclass - class ActionFailed(ClusterEventDescriptor): + class ActionFailed(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0025 @@ -5479,6 +6006,57 @@ def descriptor(cls) -> ClusterObjectDescriptor: class Basic(Cluster): id: typing.ClassVar[int] = 0x0028 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="interactionModelVersion", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="vendorName", Tag=0x00000001, Type=str), + ClusterObjectFieldDescriptor(Label="vendorID", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="productName", Tag=0x00000003, Type=str), + ClusterObjectFieldDescriptor(Label="productID", Tag=0x00000004, Type=uint), + ClusterObjectFieldDescriptor(Label="nodeLabel", Tag=0x00000005, Type=str), + ClusterObjectFieldDescriptor(Label="location", Tag=0x00000006, Type=str), + ClusterObjectFieldDescriptor(Label="hardwareVersion", Tag=0x00000007, Type=uint), + ClusterObjectFieldDescriptor(Label="hardwareVersionString", Tag=0x00000008, Type=str), + ClusterObjectFieldDescriptor(Label="softwareVersion", Tag=0x00000009, Type=uint), + ClusterObjectFieldDescriptor(Label="softwareVersionString", Tag=0x0000000A, Type=str), + ClusterObjectFieldDescriptor(Label="manufacturingDate", Tag=0x0000000B, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="partNumber", Tag=0x0000000C, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="productURL", Tag=0x0000000D, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="productLabel", Tag=0x0000000E, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="serialNumber", Tag=0x0000000F, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="localConfigDisabled", Tag=0x00000010, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="reachable", Tag=0x00000011, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="uniqueID", Tag=0x00000012, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + interactionModelVersion: 'uint' = None + vendorName: 'str' = None + vendorID: 'uint' = None + productName: 'str' = None + productID: 'uint' = None + nodeLabel: 'str' = None + location: 'str' = None + hardwareVersion: 'uint' = None + hardwareVersionString: 'str' = None + softwareVersion: 'uint' = None + softwareVersionString: 'str' = None + manufacturingDate: 'typing.Optional[str]' = None + partNumber: 'typing.Optional[str]' = None + productURL: 'typing.Optional[str]' = None + productLabel: 'typing.Optional[str]' = None + serialNumber: 'typing.Optional[str]' = None + localConfigDisabled: 'typing.Optional[bool]' = None + reachable: 'typing.Optional[bool]' = None + uniqueID: 'typing.Optional[str]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -5852,7 +6430,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class StartUp(ClusterEventDescriptor): + class StartUp(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0028 @@ -5871,7 +6449,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: softwareVersion: 'uint' = 0 @dataclass - class ShutDown(ClusterEventDescriptor): + class ShutDown(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0028 @@ -5888,7 +6466,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class Leave(ClusterEventDescriptor): + class Leave(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0028 @@ -5905,7 +6483,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class ReachableChanged(ClusterEventDescriptor): + class ReachableChanged(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0028 @@ -5928,6 +6506,19 @@ def descriptor(cls) -> ClusterObjectDescriptor: class OtaSoftwareUpdateProvider(Cluster): id: typing.ClassVar[int] = 0x0029 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class OTAApplyUpdateAction(IntEnum): kProceed = 0x00 @@ -6113,6 +6704,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class OtaSoftwareUpdateRequestor(Cluster): id: typing.ClassVar[int] = 0x002A + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="defaultOtaProvider", Tag=0x00000001, Type=bytes), + ClusterObjectFieldDescriptor(Label="updatePossible", Tag=0x00000002, Type=bool), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + defaultOtaProvider: 'bytes' = None + updatePossible: 'bool' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class ChangeReasonEnum(IntEnum): kUnknown = 0x00 @@ -6246,7 +6854,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class StateTransition(ClusterEventDescriptor): + class StateTransition(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x002A @@ -6271,7 +6879,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: targetSoftwareVersion: 'uint' = 0 @dataclass - class VersionApplied(ClusterEventDescriptor): + class VersionApplied(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x002A @@ -6292,7 +6900,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: productID: 'uint' = 0 @dataclass - class DownloadError(ClusterEventDescriptor): + class DownloadError(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x002A @@ -6321,6 +6929,19 @@ def descriptor(cls) -> ClusterObjectDescriptor: class LocalizationConfiguration(Cluster): id: typing.ClassVar[int] = 0x002B + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -6379,6 +7000,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class LocalizationTimeFormat(Cluster): id: typing.ClassVar[int] = 0x002C + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -6437,6 +7071,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class LocalizationUnit(Cluster): id: typing.ClassVar[int] = 0x002D + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -6495,6 +7142,21 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class PowerSourceConfiguration(Cluster): id: typing.ClassVar[int] = 0x002E + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="sources", Tag=0x00000000, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + sources: 'typing.List[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -6569,6 +7231,81 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class PowerSource(Cluster): id: typing.ClassVar[int] = 0x002F + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="status", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="order", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="description", Tag=0x00000002, Type=str), + ClusterObjectFieldDescriptor(Label="wiredAssessedInputVoltage", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="wiredAssessedInputFrequency", Tag=0x00000004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="wiredCurrentType", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="wiredAssessedCurrent", Tag=0x00000006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="wiredNominalVoltage", Tag=0x00000007, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="wiredMaximumCurrent", Tag=0x00000008, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="wiredPresent", Tag=0x00000009, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="activeWiredFaults", Tag=0x0000000A, Type=typing.Optional[typing.List[uint]]), + ClusterObjectFieldDescriptor(Label="batteryVoltage", Tag=0x0000000B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryPercentRemaining", Tag=0x0000000C, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryTimeRemaining", Tag=0x0000000D, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryChargeLevel", Tag=0x0000000E, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryReplacementNeeded", Tag=0x0000000F, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="batteryReplaceability", Tag=0x00000010, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryPresent", Tag=0x00000011, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="activeBatteryFaults", Tag=0x00000012, Type=typing.Optional[typing.List[uint]]), + ClusterObjectFieldDescriptor(Label="batteryReplacementDescription", Tag=0x00000013, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="batteryCommonDesignation", Tag=0x00000014, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryANSIDesignation", Tag=0x00000015, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="batteryIECDesignation", Tag=0x00000016, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="batteryApprovedChemistry", Tag=0x00000017, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryCapacity", Tag=0x00000018, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryQuantity", Tag=0x00000019, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryChargeState", Tag=0x0000001A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryTimeToFullCharge", Tag=0x0000001B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="batteryFunctionalWhileCharging", Tag=0x0000001C, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="batteryChargingCurrent", Tag=0x0000001D, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="activeBatteryChargeFaults", Tag=0x0000001E, Type=typing.Optional[typing.List[uint]]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + status: 'uint' = None + order: 'uint' = None + description: 'str' = None + wiredAssessedInputVoltage: 'typing.Optional[uint]' = None + wiredAssessedInputFrequency: 'typing.Optional[uint]' = None + wiredCurrentType: 'typing.Optional[uint]' = None + wiredAssessedCurrent: 'typing.Optional[uint]' = None + wiredNominalVoltage: 'typing.Optional[uint]' = None + wiredMaximumCurrent: 'typing.Optional[uint]' = None + wiredPresent: 'typing.Optional[bool]' = None + activeWiredFaults: 'typing.Optional[typing.List[uint]]' = None + batteryVoltage: 'typing.Optional[uint]' = None + batteryPercentRemaining: 'typing.Optional[uint]' = None + batteryTimeRemaining: 'typing.Optional[uint]' = None + batteryChargeLevel: 'typing.Optional[uint]' = None + batteryReplacementNeeded: 'typing.Optional[bool]' = None + batteryReplaceability: 'typing.Optional[uint]' = None + batteryPresent: 'typing.Optional[bool]' = None + activeBatteryFaults: 'typing.Optional[typing.List[uint]]' = None + batteryReplacementDescription: 'typing.Optional[str]' = None + batteryCommonDesignation: 'typing.Optional[uint]' = None + batteryANSIDesignation: 'typing.Optional[str]' = None + batteryIECDesignation: 'typing.Optional[str]' = None + batteryApprovedChemistry: 'typing.Optional[uint]' = None + batteryCapacity: 'typing.Optional[uint]' = None + batteryQuantity: 'typing.Optional[uint]' = None + batteryChargeState: 'typing.Optional[uint]' = None + batteryTimeToFullCharge: 'typing.Optional[uint]' = None + batteryFunctionalWhileCharging: 'typing.Optional[bool]' = None + batteryChargingCurrent: 'typing.Optional[uint]' = None + activeBatteryChargeFaults: 'typing.Optional[typing.List[uint]]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -7123,6 +7860,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class GeneralCommissioning(Cluster): id: typing.ClassVar[int] = 0x0030 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="breadcrumb", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="basicCommissioningInfoList", Tag=0x00000001, Type=typing.List[GeneralCommissioning.Structs.BasicCommissioningInfoType]), + ClusterObjectFieldDescriptor(Label="regulatoryConfig", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="locationCapability", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + breadcrumb: 'uint' = None + basicCommissioningInfoList: 'typing.List[GeneralCommissioning.Structs.BasicCommissioningInfoType]' = None + regulatoryConfig: 'typing.Optional[uint]' = None + locationCapability: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class GeneralCommissioningError(IntEnum): kOk = 0x00 @@ -7375,6 +8133,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class NetworkCommissioning(Cluster): id: typing.ClassVar[int] = 0x0031 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class NetworkCommissioningError(IntEnum): kSuccess = 0x00 @@ -7785,6 +8556,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class DiagnosticLogs(Cluster): id: typing.ClassVar[int] = 0x0032 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class LogsIntent(IntEnum): kEndUserSupport = 0x00 @@ -7901,6 +8685,35 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class GeneralDiagnostics(Cluster): id: typing.ClassVar[int] = 0x0033 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="networkInterfaces", Tag=0x00000000, Type=typing.List[GeneralDiagnostics.Structs.NetworkInterfaceType]), + ClusterObjectFieldDescriptor(Label="rebootCount", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="upTime", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="totalOperationalHours", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="bootReasons", Tag=0x00000004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="activeHardwareFaults", Tag=0x00000005, Type=typing.Optional[typing.List[uint]]), + ClusterObjectFieldDescriptor(Label="activeRadioFaults", Tag=0x00000006, Type=typing.Optional[typing.List[uint]]), + ClusterObjectFieldDescriptor(Label="activeNetworkFaults", Tag=0x00000007, Type=typing.Optional[typing.List[uint]]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + networkInterfaces: 'typing.List[GeneralDiagnostics.Structs.NetworkInterfaceType]' = None + rebootCount: 'uint' = None + upTime: 'typing.Optional[uint]' = None + totalOperationalHours: 'typing.Optional[uint]' = None + bootReasons: 'typing.Optional[uint]' = None + activeHardwareFaults: 'typing.Optional[typing.List[uint]]' = None + activeRadioFaults: 'typing.Optional[typing.List[uint]]' = None + activeNetworkFaults: 'typing.Optional[typing.List[uint]]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class BootReasonType(IntEnum): kUnspecified = 0x00 @@ -8152,7 +8965,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class HardwareFaultChange(ClusterEventDescriptor): + class HardwareFaultChange(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0033 @@ -8165,15 +8978,15 @@ def event_id(cls) -> int: def descriptor(cls) -> ClusterObjectDescriptor: return ClusterObjectDescriptor( Fields = [ - ClusterObjectFieldDescriptor(Label="current", Tag=0, Type=typing.List[GeneralDiagnostics.Enums.HardwareFaultType], IsArray=True), - ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[GeneralDiagnostics.Enums.HardwareFaultType], IsArray=True), + ClusterObjectFieldDescriptor(Label="current", Tag=0, Type=typing.List[GeneralDiagnostics.Enums.HardwareFaultType]), + ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[GeneralDiagnostics.Enums.HardwareFaultType]), ]) - current: typing.List['typing.List[GeneralDiagnostics.Enums.HardwareFaultType]'] = field(default_factory=lambda: []) - previous: typing.List['typing.List[GeneralDiagnostics.Enums.HardwareFaultType]'] = field(default_factory=lambda: []) + current: 'typing.List[GeneralDiagnostics.Enums.HardwareFaultType]' = field(default_factory=lambda: []) + previous: 'typing.List[GeneralDiagnostics.Enums.HardwareFaultType]' = field(default_factory=lambda: []) @dataclass - class RadioFaultChange(ClusterEventDescriptor): + class RadioFaultChange(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0033 @@ -8186,15 +8999,15 @@ def event_id(cls) -> int: def descriptor(cls) -> ClusterObjectDescriptor: return ClusterObjectDescriptor( Fields = [ - ClusterObjectFieldDescriptor(Label="current", Tag=0, Type=typing.List[GeneralDiagnostics.Enums.RadioFaultType], IsArray=True), - ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[GeneralDiagnostics.Enums.RadioFaultType], IsArray=True), + ClusterObjectFieldDescriptor(Label="current", Tag=0, Type=typing.List[GeneralDiagnostics.Enums.RadioFaultType]), + ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[GeneralDiagnostics.Enums.RadioFaultType]), ]) - current: typing.List['typing.List[GeneralDiagnostics.Enums.RadioFaultType]'] = field(default_factory=lambda: []) - previous: typing.List['typing.List[GeneralDiagnostics.Enums.RadioFaultType]'] = field(default_factory=lambda: []) + current: 'typing.List[GeneralDiagnostics.Enums.RadioFaultType]' = field(default_factory=lambda: []) + previous: 'typing.List[GeneralDiagnostics.Enums.RadioFaultType]' = field(default_factory=lambda: []) @dataclass - class NetworkFaultChange(ClusterEventDescriptor): + class NetworkFaultChange(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0033 @@ -8207,15 +9020,15 @@ def event_id(cls) -> int: def descriptor(cls) -> ClusterObjectDescriptor: return ClusterObjectDescriptor( Fields = [ - ClusterObjectFieldDescriptor(Label="current", Tag=0, Type=typing.List[GeneralDiagnostics.Enums.NetworkFaultType], IsArray=True), - ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[GeneralDiagnostics.Enums.NetworkFaultType], IsArray=True), + ClusterObjectFieldDescriptor(Label="current", Tag=0, Type=typing.List[GeneralDiagnostics.Enums.NetworkFaultType]), + ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[GeneralDiagnostics.Enums.NetworkFaultType]), ]) - current: typing.List['typing.List[GeneralDiagnostics.Enums.NetworkFaultType]'] = field(default_factory=lambda: []) - previous: typing.List['typing.List[GeneralDiagnostics.Enums.NetworkFaultType]'] = field(default_factory=lambda: []) + current: 'typing.List[GeneralDiagnostics.Enums.NetworkFaultType]' = field(default_factory=lambda: []) + previous: 'typing.List[GeneralDiagnostics.Enums.NetworkFaultType]' = field(default_factory=lambda: []) @dataclass - class BootReason(ClusterEventDescriptor): + class BootReason(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0033 @@ -8238,6 +9051,27 @@ def descriptor(cls) -> ClusterObjectDescriptor: class SoftwareDiagnostics(Cluster): id: typing.ClassVar[int] = 0x0034 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="threadMetrics", Tag=0x00000000, Type=typing.Optional[typing.List[SoftwareDiagnostics.Structs.ThreadMetrics]]), + ClusterObjectFieldDescriptor(Label="currentHeapFree", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="currentHeapUsed", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="currentHeapHighWatermark", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + threadMetrics: 'typing.Optional[typing.List[SoftwareDiagnostics.Structs.ThreadMetrics]]' = None + currentHeapFree: 'typing.Optional[uint]' = None + currentHeapUsed: 'typing.Optional[uint]' = None + currentHeapHighWatermark: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Structs: @dataclass @@ -8407,7 +9241,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class SoftwareFault(ClusterEventDescriptor): + class SoftwareFault(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0034 @@ -8430,6 +9264,145 @@ def descriptor(cls) -> ClusterObjectDescriptor: class ThreadNetworkDiagnostics(Cluster): id: typing.ClassVar[int] = 0x0035 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="channel", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="routingRole", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="networkName", Tag=0x00000002, Type=bytes), + ClusterObjectFieldDescriptor(Label="panId", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="extendedPanId", Tag=0x00000004, Type=uint), + ClusterObjectFieldDescriptor(Label="meshLocalPrefix", Tag=0x00000005, Type=bytes), + ClusterObjectFieldDescriptor(Label="overrunCount", Tag=0x00000006, Type=uint), + ClusterObjectFieldDescriptor(Label="neighborTableList", Tag=0x00000007, Type=typing.List[ThreadNetworkDiagnostics.Structs.NeighborTable]), + ClusterObjectFieldDescriptor(Label="routeTableList", Tag=0x00000008, Type=typing.List[ThreadNetworkDiagnostics.Structs.RouteTable]), + ClusterObjectFieldDescriptor(Label="partitionId", Tag=0x00000009, Type=uint), + ClusterObjectFieldDescriptor(Label="weighting", Tag=0x0000000A, Type=uint), + ClusterObjectFieldDescriptor(Label="dataVersion", Tag=0x0000000B, Type=uint), + ClusterObjectFieldDescriptor(Label="stableDataVersion", Tag=0x0000000C, Type=uint), + ClusterObjectFieldDescriptor(Label="leaderRouterId", Tag=0x0000000D, Type=uint), + ClusterObjectFieldDescriptor(Label="detachedRoleCount", Tag=0x0000000E, Type=uint), + ClusterObjectFieldDescriptor(Label="childRoleCount", Tag=0x0000000F, Type=uint), + ClusterObjectFieldDescriptor(Label="routerRoleCount", Tag=0x00000010, Type=uint), + ClusterObjectFieldDescriptor(Label="leaderRoleCount", Tag=0x00000011, Type=uint), + ClusterObjectFieldDescriptor(Label="attachAttemptCount", Tag=0x00000012, Type=uint), + ClusterObjectFieldDescriptor(Label="partitionIdChangeCount", Tag=0x00000013, Type=uint), + ClusterObjectFieldDescriptor(Label="betterPartitionAttachAttemptCount", Tag=0x00000014, Type=uint), + ClusterObjectFieldDescriptor(Label="parentChangeCount", Tag=0x00000015, Type=uint), + ClusterObjectFieldDescriptor(Label="txTotalCount", Tag=0x00000016, Type=uint), + ClusterObjectFieldDescriptor(Label="txUnicastCount", Tag=0x00000017, Type=uint), + ClusterObjectFieldDescriptor(Label="txBroadcastCount", Tag=0x00000018, Type=uint), + ClusterObjectFieldDescriptor(Label="txAckRequestedCount", Tag=0x00000019, Type=uint), + ClusterObjectFieldDescriptor(Label="txAckedCount", Tag=0x0000001A, Type=uint), + ClusterObjectFieldDescriptor(Label="txNoAckRequestedCount", Tag=0x0000001B, Type=uint), + ClusterObjectFieldDescriptor(Label="txDataCount", Tag=0x0000001C, Type=uint), + ClusterObjectFieldDescriptor(Label="txDataPollCount", Tag=0x0000001D, Type=uint), + ClusterObjectFieldDescriptor(Label="txBeaconCount", Tag=0x0000001E, Type=uint), + ClusterObjectFieldDescriptor(Label="txBeaconRequestCount", Tag=0x0000001F, Type=uint), + ClusterObjectFieldDescriptor(Label="txOtherCount", Tag=0x00000020, Type=uint), + ClusterObjectFieldDescriptor(Label="txRetryCount", Tag=0x00000021, Type=uint), + ClusterObjectFieldDescriptor(Label="txDirectMaxRetryExpiryCount", Tag=0x00000022, Type=uint), + ClusterObjectFieldDescriptor(Label="txIndirectMaxRetryExpiryCount", Tag=0x00000023, Type=uint), + ClusterObjectFieldDescriptor(Label="txErrCcaCount", Tag=0x00000024, Type=uint), + ClusterObjectFieldDescriptor(Label="txErrAbortCount", Tag=0x00000025, Type=uint), + ClusterObjectFieldDescriptor(Label="txErrBusyChannelCount", Tag=0x00000026, Type=uint), + ClusterObjectFieldDescriptor(Label="rxTotalCount", Tag=0x00000027, Type=uint), + ClusterObjectFieldDescriptor(Label="rxUnicastCount", Tag=0x00000028, Type=uint), + ClusterObjectFieldDescriptor(Label="rxBroadcastCount", Tag=0x00000029, Type=uint), + ClusterObjectFieldDescriptor(Label="rxDataCount", Tag=0x0000002A, Type=uint), + ClusterObjectFieldDescriptor(Label="rxDataPollCount", Tag=0x0000002B, Type=uint), + ClusterObjectFieldDescriptor(Label="rxBeaconCount", Tag=0x0000002C, Type=uint), + ClusterObjectFieldDescriptor(Label="rxBeaconRequestCount", Tag=0x0000002D, Type=uint), + ClusterObjectFieldDescriptor(Label="rxOtherCount", Tag=0x0000002E, Type=uint), + ClusterObjectFieldDescriptor(Label="rxAddressFilteredCount", Tag=0x0000002F, Type=uint), + ClusterObjectFieldDescriptor(Label="rxDestAddrFilteredCount", Tag=0x00000030, Type=uint), + ClusterObjectFieldDescriptor(Label="rxDuplicatedCount", Tag=0x00000031, Type=uint), + ClusterObjectFieldDescriptor(Label="rxErrNoFrameCount", Tag=0x00000032, Type=uint), + ClusterObjectFieldDescriptor(Label="rxErrUnknownNeighborCount", Tag=0x00000033, Type=uint), + ClusterObjectFieldDescriptor(Label="rxErrInvalidSrcAddrCount", Tag=0x00000034, Type=uint), + ClusterObjectFieldDescriptor(Label="rxErrSecCount", Tag=0x00000035, Type=uint), + ClusterObjectFieldDescriptor(Label="rxErrFcsCount", Tag=0x00000036, Type=uint), + ClusterObjectFieldDescriptor(Label="rxErrOtherCount", Tag=0x00000037, Type=uint), + ClusterObjectFieldDescriptor(Label="activeTimestamp", Tag=0x00000038, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="pendingTimestamp", Tag=0x00000039, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="delay", Tag=0x0000003A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="securityPolicy", Tag=0x0000003B, Type=typing.List[ThreadNetworkDiagnostics.Structs.SecurityPolicy]), + ClusterObjectFieldDescriptor(Label="channelMask", Tag=0x0000003C, Type=bytes), + ClusterObjectFieldDescriptor(Label="operationalDatasetComponents", Tag=0x0000003D, Type=typing.List[ThreadNetworkDiagnostics.Structs.OperationalDatasetComponents]), + ClusterObjectFieldDescriptor(Label="activeNetworkFaultsList", Tag=0x0000003E, Type=typing.List[ThreadNetworkDiagnostics.Enums.NetworkFault]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + channel: 'uint' = None + routingRole: 'uint' = None + networkName: 'bytes' = None + panId: 'uint' = None + extendedPanId: 'uint' = None + meshLocalPrefix: 'bytes' = None + overrunCount: 'uint' = None + neighborTableList: 'typing.List[ThreadNetworkDiagnostics.Structs.NeighborTable]' = None + routeTableList: 'typing.List[ThreadNetworkDiagnostics.Structs.RouteTable]' = None + partitionId: 'uint' = None + weighting: 'uint' = None + dataVersion: 'uint' = None + stableDataVersion: 'uint' = None + leaderRouterId: 'uint' = None + detachedRoleCount: 'uint' = None + childRoleCount: 'uint' = None + routerRoleCount: 'uint' = None + leaderRoleCount: 'uint' = None + attachAttemptCount: 'uint' = None + partitionIdChangeCount: 'uint' = None + betterPartitionAttachAttemptCount: 'uint' = None + parentChangeCount: 'uint' = None + txTotalCount: 'uint' = None + txUnicastCount: 'uint' = None + txBroadcastCount: 'uint' = None + txAckRequestedCount: 'uint' = None + txAckedCount: 'uint' = None + txNoAckRequestedCount: 'uint' = None + txDataCount: 'uint' = None + txDataPollCount: 'uint' = None + txBeaconCount: 'uint' = None + txBeaconRequestCount: 'uint' = None + txOtherCount: 'uint' = None + txRetryCount: 'uint' = None + txDirectMaxRetryExpiryCount: 'uint' = None + txIndirectMaxRetryExpiryCount: 'uint' = None + txErrCcaCount: 'uint' = None + txErrAbortCount: 'uint' = None + txErrBusyChannelCount: 'uint' = None + rxTotalCount: 'uint' = None + rxUnicastCount: 'uint' = None + rxBroadcastCount: 'uint' = None + rxDataCount: 'uint' = None + rxDataPollCount: 'uint' = None + rxBeaconCount: 'uint' = None + rxBeaconRequestCount: 'uint' = None + rxOtherCount: 'uint' = None + rxAddressFilteredCount: 'uint' = None + rxDestAddrFilteredCount: 'uint' = None + rxDuplicatedCount: 'uint' = None + rxErrNoFrameCount: 'uint' = None + rxErrUnknownNeighborCount: 'uint' = None + rxErrInvalidSrcAddrCount: 'uint' = None + rxErrSecCount: 'uint' = None + rxErrFcsCount: 'uint' = None + rxErrOtherCount: 'uint' = None + activeTimestamp: 'typing.Optional[uint]' = None + pendingTimestamp: 'typing.Optional[uint]' = None + delay: 'typing.Optional[uint]' = None + securityPolicy: 'typing.List[ThreadNetworkDiagnostics.Structs.SecurityPolicy]' = None + channelMask: 'bytes' = None + operationalDatasetComponents: 'typing.List[ThreadNetworkDiagnostics.Structs.OperationalDatasetComponents]' = None + activeNetworkFaultsList: 'typing.List[ThreadNetworkDiagnostics.Enums.NetworkFault]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class NetworkFault(IntEnum): kUnspecified = 0x00 @@ -9641,7 +10614,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class ConnectionStatus(ClusterEventDescriptor): + class ConnectionStatus(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0035 @@ -9664,6 +10637,45 @@ def descriptor(cls) -> ClusterObjectDescriptor: class WiFiNetworkDiagnostics(Cluster): id: typing.ClassVar[int] = 0x0036 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="bssid", Tag=0x00000000, Type=bytes), + ClusterObjectFieldDescriptor(Label="securityType", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="wiFiVersion", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="channelNumber", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="rssi", Tag=0x00000004, Type=int), + ClusterObjectFieldDescriptor(Label="beaconLostCount", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="beaconRxCount", Tag=0x00000006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="packetMulticastRxCount", Tag=0x00000007, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="packetMulticastTxCount", Tag=0x00000008, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="packetUnicastRxCount", Tag=0x00000009, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="packetUnicastTxCount", Tag=0x0000000A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="currentMaxRate", Tag=0x0000000B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="overrunCount", Tag=0x0000000C, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + bssid: 'bytes' = None + securityType: 'uint' = None + wiFiVersion: 'uint' = None + channelNumber: 'uint' = None + rssi: 'int' = None + beaconLostCount: 'typing.Optional[uint]' = None + beaconRxCount: 'typing.Optional[uint]' = None + packetMulticastRxCount: 'typing.Optional[uint]' = None + packetMulticastTxCount: 'typing.Optional[uint]' = None + packetUnicastRxCount: 'typing.Optional[uint]' = None + packetUnicastTxCount: 'typing.Optional[uint]' = None + currentMaxRate: 'typing.Optional[uint]' = None + overrunCount: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class AssociationFailureCause(IntEnum): kUnknown = 0x00 @@ -9968,7 +10980,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class Disconnection(ClusterEventDescriptor): + class Disconnection(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0036 @@ -9987,7 +10999,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: reasonCode: 'uint' = 0 @dataclass - class AssociationFailure(ClusterEventDescriptor): + class AssociationFailure(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0036 @@ -10008,7 +11020,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: status: 'uint' = 0 @dataclass - class ConnectionStatus(ClusterEventDescriptor): + class ConnectionStatus(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0036 @@ -10031,6 +11043,37 @@ def descriptor(cls) -> ClusterObjectDescriptor: class EthernetNetworkDiagnostics(Cluster): id: typing.ClassVar[int] = 0x0037 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="PHYRate", Tag=0x00000000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="fullDuplex", Tag=0x00000001, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="packetRxCount", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="packetTxCount", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="txErrCount", Tag=0x00000004, Type=uint), + ClusterObjectFieldDescriptor(Label="collisionCount", Tag=0x00000005, Type=uint), + ClusterObjectFieldDescriptor(Label="overrunCount", Tag=0x00000006, Type=uint), + ClusterObjectFieldDescriptor(Label="carrierDetect", Tag=0x00000007, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="timeSinceReset", Tag=0x00000008, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + PHYRate: 'typing.Optional[uint]' = None + fullDuplex: 'typing.Optional[bool]' = None + packetRxCount: 'uint' = None + packetTxCount: 'uint' = None + txErrCount: 'uint' = None + collisionCount: 'uint' = None + overrunCount: 'uint' = None + carrierDetect: 'typing.Optional[bool]' = None + timeSinceReset: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class PHYRateType(IntEnum): k10m = 0x00 @@ -10260,6 +11303,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class TimeSynchronization(Cluster): id: typing.ClassVar[int] = 0x0038 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -10318,6 +11374,49 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class BridgedDeviceBasic(Cluster): id: typing.ClassVar[int] = 0x0039 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="vendorName", Tag=0x00000001, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="vendorID", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="productName", Tag=0x00000003, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="nodeLabel", Tag=0x00000005, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="hardwareVersion", Tag=0x00000007, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="hardwareVersionString", Tag=0x00000008, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="softwareVersion", Tag=0x00000009, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="softwareVersionString", Tag=0x0000000A, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="manufacturingDate", Tag=0x0000000B, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="partNumber", Tag=0x0000000C, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="productURL", Tag=0x0000000D, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="productLabel", Tag=0x0000000E, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="serialNumber", Tag=0x0000000F, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="reachable", Tag=0x00000011, Type=bool), + ClusterObjectFieldDescriptor(Label="uniqueID", Tag=0x00000012, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + vendorName: 'typing.Optional[str]' = None + vendorID: 'typing.Optional[uint]' = None + productName: 'typing.Optional[str]' = None + nodeLabel: 'typing.Optional[str]' = None + hardwareVersion: 'typing.Optional[uint]' = None + hardwareVersionString: 'typing.Optional[str]' = None + softwareVersion: 'typing.Optional[uint]' = None + softwareVersionString: 'typing.Optional[str]' = None + manufacturingDate: 'typing.Optional[str]' = None + partNumber: 'typing.Optional[str]' = None + productURL: 'typing.Optional[str]' = None + productLabel: 'typing.Optional[str]' = None + serialNumber: 'typing.Optional[str]' = None + reachable: 'bool' = None + uniqueID: 'typing.Optional[str]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -10669,6 +11768,25 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Switch(Cluster): id: typing.ClassVar[int] = 0x003B + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="numberOfPositions", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="currentPosition", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="multiPressMax", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + numberOfPositions: 'uint' = None + currentPosition: 'uint' = None + multiPressMax: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -10772,7 +11890,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class SwitchLatched(ClusterEventDescriptor): + class SwitchLatched(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x003B @@ -10791,7 +11909,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: newPosition: 'uint' = 0 @dataclass - class InitialPress(ClusterEventDescriptor): + class InitialPress(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x003B @@ -10810,7 +11928,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: newPosition: 'uint' = 0 @dataclass - class LongPress(ClusterEventDescriptor): + class LongPress(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x003B @@ -10829,7 +11947,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: newPosition: 'uint' = 0 @dataclass - class ShortRelease(ClusterEventDescriptor): + class ShortRelease(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x003B @@ -10848,7 +11966,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: previousPosition: 'uint' = 0 @dataclass - class LongRelease(ClusterEventDescriptor): + class LongRelease(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x003B @@ -10867,7 +11985,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: previousPosition: 'uint' = 0 @dataclass - class MultiPressOngoing(ClusterEventDescriptor): + class MultiPressOngoing(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x003B @@ -10888,7 +12006,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: currentNumberOfPressesCounted: 'uint' = 0 @dataclass - class MultiPressComplete(ClusterEventDescriptor): + class MultiPressComplete(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x003B @@ -10913,6 +12031,25 @@ def descriptor(cls) -> ClusterObjectDescriptor: class AdministratorCommissioning(Cluster): id: typing.ClassVar[int] = 0x003C + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="windowStatus", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="adminFabricIndex", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="adminVendorId", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + windowStatus: 'uint' = None + adminFabricIndex: 'uint' = None + adminVendorId: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class CommissioningWindowStatus(IntEnum): kWindowNotOpen = 0x00 @@ -11084,6 +12221,29 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class OperationalCredentials(Cluster): id: typing.ClassVar[int] = 0x003E + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="fabricsList", Tag=0x00000001, Type=typing.List[OperationalCredentials.Structs.FabricDescriptor]), + ClusterObjectFieldDescriptor(Label="supportedFabrics", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="commissionedFabrics", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="trustedRootCertificates", Tag=0x00000004, Type=typing.List[bytes]), + ClusterObjectFieldDescriptor(Label="currentFabricIndex", Tag=0x00000005, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + fabricsList: 'typing.List[OperationalCredentials.Structs.FabricDescriptor]' = None + supportedFabrics: 'uint' = None + commissionedFabrics: 'uint' = None + trustedRootCertificates: 'typing.List[bytes]' = None + currentFabricIndex: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class NodeOperationalCertStatus(IntEnum): kSuccess = 0x00 @@ -11485,6 +12645,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class GroupKeyManagement(Cluster): id: typing.ClassVar[int] = 0x003F + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="groups", Tag=0x00000000, Type=typing.List[GroupKeyManagement.Structs.GroupState]), + ClusterObjectFieldDescriptor(Label="groupKeys", Tag=0x00000001, Type=typing.List[GroupKeyManagement.Structs.GroupKey]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + groups: 'typing.List[GroupKeyManagement.Structs.GroupState]' = None + groupKeys: 'typing.List[GroupKeyManagement.Structs.GroupKey]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class GroupKeySecurityPolicy(IntEnum): kStandard = 0x00 @@ -11616,6 +12793,21 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class FixedLabel(Cluster): id: typing.ClassVar[int] = 0x0040 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="labelList", Tag=0x00000000, Type=typing.List[FixedLabel.Structs.LabelStruct]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + labelList: 'typing.List[FixedLabel.Structs.LabelStruct]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Structs: @dataclass @@ -11705,6 +12897,21 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class UserLabel(Cluster): id: typing.ClassVar[int] = 0x0041 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="labelList", Tag=0x00000000, Type=typing.List[UserLabel.Structs.LabelStruct]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + labelList: 'typing.List[UserLabel.Structs.LabelStruct]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Structs: @dataclass @@ -11794,6 +13001,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ProxyConfiguration(Cluster): id: typing.ClassVar[int] = 0x0042 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -11852,6 +13072,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ProxyDiscovery(Cluster): id: typing.ClassVar[int] = 0x0043 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -11910,6 +13143,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ProxyValid(Cluster): id: typing.ClassVar[int] = 0x0044 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -11968,6 +13214,21 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class BooleanState(Cluster): id: typing.ClassVar[int] = 0x0045 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="stateValue", Tag=0x00000000, Type=bool), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + stateValue: 'bool' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -12039,7 +13300,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class StateChange(ClusterEventDescriptor): + class StateChange(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0045 @@ -12062,6 +13323,29 @@ def descriptor(cls) -> ClusterObjectDescriptor: class ModeSelect(Cluster): id: typing.ClassVar[int] = 0x0050 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="currentMode", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="supportedModes", Tag=0x00000001, Type=typing.List[ModeSelect.Structs.ModeOptionStruct]), + ClusterObjectFieldDescriptor(Label="onMode", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="startUpMode", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="description", Tag=0x00000004, Type=str), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + currentMode: 'uint' = None + supportedModes: 'typing.List[ModeSelect.Structs.ModeOptionStruct]' = None + onMode: 'typing.Optional[uint]' = None + startUpMode: 'uint' = None + description: 'str' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Structs: @dataclass @@ -12246,6 +13530,29 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ShadeConfiguration(Cluster): id: typing.ClassVar[int] = 0x0100 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="physicalClosedLimit", Tag=0x00000000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="motorStepSize", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="status", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="closedLimit", Tag=0x00000010, Type=uint), + ClusterObjectFieldDescriptor(Label="mode", Tag=0x00000011, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + physicalClosedLimit: 'typing.Optional[uint]' = None + motorStepSize: 'typing.Optional[uint]' = None + status: 'uint' = None + closedLimit: 'uint' = None + mode: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -12384,6 +13691,109 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class DoorLock(Cluster): id: typing.ClassVar[int] = 0x0101 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="lockState", Tag=0x00000000, Type=typing.Union[Nullable, DoorLock.Enums.DlLockState]), + ClusterObjectFieldDescriptor(Label="lockType", Tag=0x00000001, Type=DoorLock.Enums.DlLockType), + ClusterObjectFieldDescriptor(Label="actuatorEnabled", Tag=0x00000002, Type=bool), + ClusterObjectFieldDescriptor(Label="doorState", Tag=0x00000003, Type=typing.Union[None, Nullable, DoorLock.Enums.DlDoorState]), + ClusterObjectFieldDescriptor(Label="doorOpenEvents", Tag=0x00000004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="doorClosedEvents", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="openPeriod", Tag=0x00000006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfLogRecordsSupported", Tag=0x00000010, Type=uint), + ClusterObjectFieldDescriptor(Label="numberOfTotalUsersSupported", Tag=0x00000011, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfPINUsersSupported", Tag=0x00000012, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfRFIDUsersSupported", Tag=0x00000013, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfWeekDaySchedulesSupportedPerUser", Tag=0x00000014, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfYearDaySchedulesSupportedPerUser", Tag=0x00000015, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfHolidaySchedulesSupported", Tag=0x00000016, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="maxPINCodeLength", Tag=0x00000017, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="minPINCodeLength", Tag=0x00000018, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="maxRFIDCodeLength", Tag=0x00000019, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="minRFIDCodeLength", Tag=0x0000001A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="credentialRulesSupport", Tag=0x0000001B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="enableLogging", Tag=0x00000020, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="language", Tag=0x00000021, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="LEDSettings", Tag=0x00000022, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="autoRelockTime", Tag=0x00000023, Type=uint), + ClusterObjectFieldDescriptor(Label="soundVolume", Tag=0x00000024, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="operatingMode", Tag=0x00000025, Type=DoorLock.Enums.DlOperatingMode), + ClusterObjectFieldDescriptor(Label="supportedOperatingModes", Tag=0x00000026, Type=uint), + ClusterObjectFieldDescriptor(Label="defaultConfigurationRegister", Tag=0x00000027, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="enableLocalProgramming", Tag=0x00000028, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="enableOneTouchLocking", Tag=0x00000029, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="enableInsideStatusLED", Tag=0x0000002A, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="enablePrivacyModeButton", Tag=0x0000002B, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="localProgrammingFeatures", Tag=0x0000002C, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="wrongCodeEntryLimit", Tag=0x00000030, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="userCodeTemporaryDisableTime", Tag=0x00000031, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="sendPINOverTheAir", Tag=0x00000032, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="requirePINforRemoteOperation", Tag=0x00000033, Type=typing.Optional[bool]), + ClusterObjectFieldDescriptor(Label="expiringUserTimeout", Tag=0x00000035, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="alarmMask", Tag=0x00000040, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="keypadOperationEventMask", Tag=0x00000041, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="remoteOperationEventMask", Tag=0x00000042, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="manualOperationEventMask", Tag=0x00000043, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="RFIDOperationEventMask", Tag=0x00000044, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="keypadProgrammingEventMask", Tag=0x00000045, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="remoteProgrammingEventMask", Tag=0x00000046, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="RFIDProgrammingEventMask", Tag=0x00000047, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + lockState: 'typing.Union[Nullable, DoorLock.Enums.DlLockState]' = None + lockType: 'DoorLock.Enums.DlLockType' = None + actuatorEnabled: 'bool' = None + doorState: 'typing.Union[None, Nullable, DoorLock.Enums.DlDoorState]' = None + doorOpenEvents: 'typing.Optional[uint]' = None + doorClosedEvents: 'typing.Optional[uint]' = None + openPeriod: 'typing.Optional[uint]' = None + numberOfLogRecordsSupported: 'uint' = None + numberOfTotalUsersSupported: 'typing.Optional[uint]' = None + numberOfPINUsersSupported: 'typing.Optional[uint]' = None + numberOfRFIDUsersSupported: 'typing.Optional[uint]' = None + numberOfWeekDaySchedulesSupportedPerUser: 'typing.Optional[uint]' = None + numberOfYearDaySchedulesSupportedPerUser: 'typing.Optional[uint]' = None + numberOfHolidaySchedulesSupported: 'typing.Optional[uint]' = None + maxPINCodeLength: 'typing.Optional[uint]' = None + minPINCodeLength: 'typing.Optional[uint]' = None + maxRFIDCodeLength: 'typing.Optional[uint]' = None + minRFIDCodeLength: 'typing.Optional[uint]' = None + credentialRulesSupport: 'typing.Optional[uint]' = None + enableLogging: 'typing.Optional[bool]' = None + language: 'typing.Optional[str]' = None + LEDSettings: 'typing.Optional[uint]' = None + autoRelockTime: 'uint' = None + soundVolume: 'typing.Optional[uint]' = None + operatingMode: 'DoorLock.Enums.DlOperatingMode' = None + supportedOperatingModes: 'uint' = None + defaultConfigurationRegister: 'typing.Optional[uint]' = None + enableLocalProgramming: 'typing.Optional[bool]' = None + enableOneTouchLocking: 'typing.Optional[bool]' = None + enableInsideStatusLED: 'typing.Optional[bool]' = None + enablePrivacyModeButton: 'typing.Optional[bool]' = None + localProgrammingFeatures: 'typing.Optional[uint]' = None + wrongCodeEntryLimit: 'typing.Optional[uint]' = None + userCodeTemporaryDisableTime: 'typing.Optional[uint]' = None + sendPINOverTheAir: 'typing.Optional[bool]' = None + requirePINforRemoteOperation: 'typing.Optional[bool]' = None + expiringUserTimeout: 'typing.Optional[uint]' = None + alarmMask: 'typing.Optional[uint]' = None + keypadOperationEventMask: 'typing.Optional[uint]' = None + remoteOperationEventMask: 'typing.Optional[uint]' = None + manualOperationEventMask: 'typing.Optional[uint]' = None + RFIDOperationEventMask: 'typing.Optional[uint]' = None + keypadProgrammingEventMask: 'typing.Optional[uint]' = None + remoteProgrammingEventMask: 'typing.Optional[uint]' = None + RFIDProgrammingEventMask: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class DlAlarmCode(IntEnum): kLockJammed = 0x00 @@ -14182,7 +15592,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class DoorLockAlarm(ClusterEventDescriptor): + class DoorLockAlarm(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0101 @@ -14201,7 +15611,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: alarmCode: 'DoorLock.Enums.DlAlarmCode' = 0 @dataclass - class DoorStateChange(ClusterEventDescriptor): + class DoorStateChange(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0101 @@ -14220,7 +15630,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: doorState: 'DoorLock.Enums.DlDoorState' = 0 @dataclass - class LockOperation(ClusterEventDescriptor): + class LockOperation(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0101 @@ -14238,7 +15648,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: ClusterObjectFieldDescriptor(Label="userIndex", Tag=2, Type=typing.Union[Nullable, uint]), ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=3, Type=typing.Union[Nullable, uint]), ClusterObjectFieldDescriptor(Label="sourceNode", Tag=4, Type=typing.Union[Nullable, uint]), - ClusterObjectFieldDescriptor(Label="credentials", Tag=5, Type=typing.Union[None, Nullable, typing.List[DoorLock.Structs.DlCredential]], IsArray=True), + ClusterObjectFieldDescriptor(Label="credentials", Tag=5, Type=typing.Union[None, Nullable, typing.List[DoorLock.Structs.DlCredential]]), ]) lockOperationType: 'DoorLock.Enums.DlLockOperationType' = 0 @@ -14246,10 +15656,10 @@ def descriptor(cls) -> ClusterObjectDescriptor: userIndex: 'typing.Union[Nullable, uint]' = NullValue fabricIndex: 'typing.Union[Nullable, uint]' = NullValue sourceNode: 'typing.Union[Nullable, uint]' = NullValue - credentials: typing.List['typing.Union[None, Nullable, typing.List[DoorLock.Structs.DlCredential]]'] = None + credentials: 'typing.Union[None, Nullable, typing.List[DoorLock.Structs.DlCredential]]' = None @dataclass - class LockOperationError(ClusterEventDescriptor): + class LockOperationError(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0101 @@ -14268,7 +15678,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: ClusterObjectFieldDescriptor(Label="userIndex", Tag=3, Type=typing.Union[Nullable, uint]), ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=4, Type=typing.Union[Nullable, uint]), ClusterObjectFieldDescriptor(Label="sourceNode", Tag=5, Type=typing.Union[Nullable, uint]), - ClusterObjectFieldDescriptor(Label="credentials", Tag=6, Type=typing.Union[None, Nullable, typing.List[DoorLock.Structs.DlCredential]], IsArray=True), + ClusterObjectFieldDescriptor(Label="credentials", Tag=6, Type=typing.Union[None, Nullable, typing.List[DoorLock.Structs.DlCredential]]), ]) lockOperationType: 'DoorLock.Enums.DlLockOperationType' = 0 @@ -14277,10 +15687,10 @@ def descriptor(cls) -> ClusterObjectDescriptor: userIndex: 'typing.Union[Nullable, uint]' = NullValue fabricIndex: 'typing.Union[Nullable, uint]' = NullValue sourceNode: 'typing.Union[Nullable, uint]' = NullValue - credentials: typing.List['typing.Union[None, Nullable, typing.List[DoorLock.Structs.DlCredential]]'] = None + credentials: 'typing.Union[None, Nullable, typing.List[DoorLock.Structs.DlCredential]]' = None @dataclass - class LockUserChange(ClusterEventDescriptor): + class LockUserChange(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0101 @@ -14315,6 +15725,73 @@ def descriptor(cls) -> ClusterObjectDescriptor: class WindowCovering(Cluster): id: typing.ClassVar[int] = 0x0102 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="type", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="physicalClosedLimitLift", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="physicalClosedLimitTilt", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="currentPositionLift", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="currentPositionTilt", Tag=0x00000004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfActuationsLift", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfActuationsTilt", Tag=0x00000006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="configStatus", Tag=0x00000007, Type=uint), + ClusterObjectFieldDescriptor(Label="currentPositionLiftPercentage", Tag=0x00000008, Type=uint), + ClusterObjectFieldDescriptor(Label="currentPositionTiltPercentage", Tag=0x00000009, Type=uint), + ClusterObjectFieldDescriptor(Label="operationalStatus", Tag=0x0000000A, Type=uint), + ClusterObjectFieldDescriptor(Label="targetPositionLiftPercent100ths", Tag=0x0000000B, Type=uint), + ClusterObjectFieldDescriptor(Label="targetPositionTiltPercent100ths", Tag=0x0000000C, Type=uint), + ClusterObjectFieldDescriptor(Label="endProductType", Tag=0x0000000D, Type=uint), + ClusterObjectFieldDescriptor(Label="currentPositionLiftPercent100ths", Tag=0x0000000E, Type=uint), + ClusterObjectFieldDescriptor(Label="currentPositionTiltPercent100ths", Tag=0x0000000F, Type=uint), + ClusterObjectFieldDescriptor(Label="installedOpenLimitLift", Tag=0x00000010, Type=uint), + ClusterObjectFieldDescriptor(Label="installedClosedLimitLift", Tag=0x00000011, Type=uint), + ClusterObjectFieldDescriptor(Label="installedOpenLimitTilt", Tag=0x00000012, Type=uint), + ClusterObjectFieldDescriptor(Label="installedClosedLimitTilt", Tag=0x00000013, Type=uint), + ClusterObjectFieldDescriptor(Label="velocityLift", Tag=0x00000014, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="accelerationTimeLift", Tag=0x00000015, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="decelerationTimeLift", Tag=0x00000016, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="mode", Tag=0x00000017, Type=uint), + ClusterObjectFieldDescriptor(Label="intermediateSetpointsLift", Tag=0x00000018, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="intermediateSetpointsTilt", Tag=0x00000019, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="safetyStatus", Tag=0x0000001A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + type: 'uint' = None + physicalClosedLimitLift: 'typing.Optional[uint]' = None + physicalClosedLimitTilt: 'typing.Optional[uint]' = None + currentPositionLift: 'typing.Optional[uint]' = None + currentPositionTilt: 'typing.Optional[uint]' = None + numberOfActuationsLift: 'typing.Optional[uint]' = None + numberOfActuationsTilt: 'typing.Optional[uint]' = None + configStatus: 'uint' = None + currentPositionLiftPercentage: 'uint' = None + currentPositionTiltPercentage: 'uint' = None + operationalStatus: 'uint' = None + targetPositionLiftPercent100ths: 'uint' = None + targetPositionTiltPercent100ths: 'uint' = None + endProductType: 'uint' = None + currentPositionLiftPercent100ths: 'uint' = None + currentPositionTiltPercent100ths: 'uint' = None + installedOpenLimitLift: 'uint' = None + installedClosedLimitLift: 'uint' = None + installedOpenLimitTilt: 'uint' = None + installedClosedLimitTilt: 'uint' = None + velocityLift: 'typing.Optional[uint]' = None + accelerationTimeLift: 'typing.Optional[uint]' = None + decelerationTimeLift: 'typing.Optional[uint]' = None + mode: 'uint' = None + intermediateSetpointsLift: 'typing.Optional[bytes]' = None + intermediateSetpointsTilt: 'typing.Optional[bytes]' = None + safetyStatus: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -14909,6 +16386,39 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class BarrierControl(Cluster): id: typing.ClassVar[int] = 0x0103 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="barrierMovingState", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="barrierSafetyStatus", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="barrierCapabilities", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="barrierOpenEvents", Tag=0x00000004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="barrierCloseEvents", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="barrierCommandOpenEvents", Tag=0x00000006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="barrierCommandCloseEvents", Tag=0x00000007, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="barrierOpenPeriod", Tag=0x00000008, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="barrierClosePeriod", Tag=0x00000009, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="barrierPosition", Tag=0x0000000A, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + barrierMovingState: 'uint' = None + barrierSafetyStatus: 'uint' = None + barrierCapabilities: 'uint' = None + barrierOpenEvents: 'typing.Optional[uint]' = None + barrierCloseEvents: 'typing.Optional[uint]' = None + barrierCommandOpenEvents: 'typing.Optional[uint]' = None + barrierCommandCloseEvents: 'typing.Optional[uint]' = None + barrierOpenPeriod: 'typing.Optional[uint]' = None + barrierClosePeriod: 'typing.Optional[uint]' = None + barrierPosition: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -15156,6 +16666,67 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class PumpConfigurationAndControl(Cluster): id: typing.ClassVar[int] = 0x0200 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="maxPressure", Tag=0x00000000, Type=int), + ClusterObjectFieldDescriptor(Label="maxSpeed", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="maxFlow", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="minConstPressure", Tag=0x00000003, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="maxConstPressure", Tag=0x00000004, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="minCompPressure", Tag=0x00000005, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="maxCompPressure", Tag=0x00000006, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="minConstSpeed", Tag=0x00000007, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="maxConstSpeed", Tag=0x00000008, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="minConstFlow", Tag=0x00000009, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="maxConstFlow", Tag=0x0000000A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="minConstTemp", Tag=0x0000000B, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="maxConstTemp", Tag=0x0000000C, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="pumpStatus", Tag=0x00000010, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="effectiveOperationMode", Tag=0x00000011, Type=uint), + ClusterObjectFieldDescriptor(Label="effectiveControlMode", Tag=0x00000012, Type=uint), + ClusterObjectFieldDescriptor(Label="capacity", Tag=0x00000013, Type=int), + ClusterObjectFieldDescriptor(Label="speed", Tag=0x00000014, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lifetimeRunningHours", Tag=0x00000015, Type=typing.Union[None, Nullable, uint]), + ClusterObjectFieldDescriptor(Label="power", Tag=0x00000016, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lifetimeEnergyConsumed", Tag=0x00000017, Type=typing.Union[None, Nullable, uint]), + ClusterObjectFieldDescriptor(Label="operationMode", Tag=0x00000020, Type=uint), + ClusterObjectFieldDescriptor(Label="controlMode", Tag=0x00000021, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="alarmMask", Tag=0x00000022, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + maxPressure: 'int' = None + maxSpeed: 'uint' = None + maxFlow: 'uint' = None + minConstPressure: 'typing.Optional[int]' = None + maxConstPressure: 'typing.Optional[int]' = None + minCompPressure: 'typing.Optional[int]' = None + maxCompPressure: 'typing.Optional[int]' = None + minConstSpeed: 'typing.Optional[uint]' = None + maxConstSpeed: 'typing.Optional[uint]' = None + minConstFlow: 'typing.Optional[uint]' = None + maxConstFlow: 'typing.Optional[uint]' = None + minConstTemp: 'typing.Optional[int]' = None + maxConstTemp: 'typing.Optional[int]' = None + pumpStatus: 'typing.Optional[uint]' = None + effectiveOperationMode: 'uint' = None + effectiveControlMode: 'uint' = None + capacity: 'int' = None + speed: 'typing.Optional[uint]' = None + lifetimeRunningHours: 'typing.Union[None, Nullable, uint]' = None + power: 'typing.Optional[uint]' = None + lifetimeEnergyConsumed: 'typing.Union[None, Nullable, uint]' = None + operationMode: 'uint' = None + controlMode: 'typing.Optional[uint]' = None + alarmMask: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class PumpControlMode(IntEnum): kConstantSpeed = 0x00 @@ -15610,7 +17181,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class SupplyVoltageLow(ClusterEventDescriptor): + class SupplyVoltageLow(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15627,7 +17198,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class SupplyVoltageHigh(ClusterEventDescriptor): + class SupplyVoltageHigh(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15644,7 +17215,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class PowerMissingPhase(ClusterEventDescriptor): + class PowerMissingPhase(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15661,7 +17232,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class SystemPressureLow(ClusterEventDescriptor): + class SystemPressureLow(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15678,7 +17249,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class SystemPressureHigh(ClusterEventDescriptor): + class SystemPressureHigh(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15695,7 +17266,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class DryRunning(ClusterEventDescriptor): + class DryRunning(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15712,7 +17283,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class MotorTemperatureHigh(ClusterEventDescriptor): + class MotorTemperatureHigh(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15729,7 +17300,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class PumpMotorFatalFailure(ClusterEventDescriptor): + class PumpMotorFatalFailure(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15746,7 +17317,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class ElectronicTemperatureHigh(ClusterEventDescriptor): + class ElectronicTemperatureHigh(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15763,7 +17334,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class PumpBlocked(ClusterEventDescriptor): + class PumpBlocked(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15780,7 +17351,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class SensorFailure(ClusterEventDescriptor): + class SensorFailure(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15797,7 +17368,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class ElectronicNonFatalFailure(ClusterEventDescriptor): + class ElectronicNonFatalFailure(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15814,7 +17385,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class ElectronicFatalFailure(ClusterEventDescriptor): + class ElectronicFatalFailure(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15831,7 +17402,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class GeneralFault(ClusterEventDescriptor): + class GeneralFault(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15848,7 +17419,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class Leakage(ClusterEventDescriptor): + class Leakage(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15865,7 +17436,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class AirDetection(ClusterEventDescriptor): + class AirDetection(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15882,7 +17453,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: @dataclass - class TurbineOperation(ClusterEventDescriptor): + class TurbineOperation(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x0200 @@ -15903,6 +17474,105 @@ def descriptor(cls) -> ClusterObjectDescriptor: class Thermostat(Cluster): id: typing.ClassVar[int] = 0x0201 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="localTemperature", Tag=0x00000000, Type=int), + ClusterObjectFieldDescriptor(Label="outdoorTemperature", Tag=0x00000001, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="occupancy", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="absMinHeatSetpointLimit", Tag=0x00000003, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="absMaxHeatSetpointLimit", Tag=0x00000004, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="absMinCoolSetpointLimit", Tag=0x00000005, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="absMaxCoolSetpointLimit", Tag=0x00000006, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="piCoolingDemand", Tag=0x00000007, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="piHeatingDemand", Tag=0x00000008, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="hvacSystemTypeConfiguration", Tag=0x00000009, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="localTemperatureCalibration", Tag=0x00000010, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="occupiedCoolingSetpoint", Tag=0x00000011, Type=int), + ClusterObjectFieldDescriptor(Label="occupiedHeatingSetpoint", Tag=0x00000012, Type=int), + ClusterObjectFieldDescriptor(Label="unoccupiedCoolingSetpoint", Tag=0x00000013, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="unoccupiedHeatingSetpoint", Tag=0x00000014, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="minHeatSetpointLimit", Tag=0x00000015, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="maxHeatSetpointLimit", Tag=0x00000016, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="minCoolSetpointLimit", Tag=0x00000017, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="maxCoolSetpointLimit", Tag=0x00000018, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="minSetpointDeadBand", Tag=0x00000019, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="remoteSensing", Tag=0x0000001A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="controlSequenceOfOperation", Tag=0x0000001B, Type=uint), + ClusterObjectFieldDescriptor(Label="systemMode", Tag=0x0000001C, Type=uint), + ClusterObjectFieldDescriptor(Label="alarmMask", Tag=0x0000001D, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="thermostatRunningMode", Tag=0x0000001E, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="startOfWeek", Tag=0x00000020, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfWeeklyTransitions", Tag=0x00000021, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="numberOfDailyTransitions", Tag=0x00000022, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="temperatureSetpointHold", Tag=0x00000023, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="temperatureSetpointHoldDuration", Tag=0x00000024, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="thermostatProgrammingOperationMode", Tag=0x00000025, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="hvacRelayState", Tag=0x00000029, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="setpointChangeSource", Tag=0x00000030, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="setpointChangeAmount", Tag=0x00000031, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="setpointChangeSourceTimestamp", Tag=0x00000032, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acType", Tag=0x00000040, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acCapacity", Tag=0x00000041, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acRefrigerantType", Tag=0x00000042, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acCompressor", Tag=0x00000043, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acErrorCode", Tag=0x00000044, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acLouverPosition", Tag=0x00000045, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acCoilTemperature", Tag=0x00000046, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="acCapacityFormat", Tag=0x00000047, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + localTemperature: 'int' = None + outdoorTemperature: 'typing.Optional[int]' = None + occupancy: 'typing.Optional[uint]' = None + absMinHeatSetpointLimit: 'typing.Optional[int]' = None + absMaxHeatSetpointLimit: 'typing.Optional[int]' = None + absMinCoolSetpointLimit: 'typing.Optional[int]' = None + absMaxCoolSetpointLimit: 'typing.Optional[int]' = None + piCoolingDemand: 'typing.Optional[uint]' = None + piHeatingDemand: 'typing.Optional[uint]' = None + hvacSystemTypeConfiguration: 'typing.Optional[uint]' = None + localTemperatureCalibration: 'typing.Optional[int]' = None + occupiedCoolingSetpoint: 'int' = None + occupiedHeatingSetpoint: 'int' = None + unoccupiedCoolingSetpoint: 'typing.Optional[int]' = None + unoccupiedHeatingSetpoint: 'typing.Optional[int]' = None + minHeatSetpointLimit: 'typing.Optional[int]' = None + maxHeatSetpointLimit: 'typing.Optional[int]' = None + minCoolSetpointLimit: 'typing.Optional[int]' = None + maxCoolSetpointLimit: 'typing.Optional[int]' = None + minSetpointDeadBand: 'typing.Optional[int]' = None + remoteSensing: 'typing.Optional[uint]' = None + controlSequenceOfOperation: 'uint' = None + systemMode: 'uint' = None + alarmMask: 'typing.Optional[uint]' = None + thermostatRunningMode: 'typing.Optional[uint]' = None + startOfWeek: 'typing.Optional[uint]' = None + numberOfWeeklyTransitions: 'typing.Optional[uint]' = None + numberOfDailyTransitions: 'typing.Optional[uint]' = None + temperatureSetpointHold: 'typing.Optional[uint]' = None + temperatureSetpointHoldDuration: 'typing.Optional[uint]' = None + thermostatProgrammingOperationMode: 'typing.Optional[uint]' = None + hvacRelayState: 'typing.Optional[uint]' = None + setpointChangeSource: 'typing.Optional[uint]' = None + setpointChangeAmount: 'typing.Optional[int]' = None + setpointChangeSourceTimestamp: 'typing.Optional[uint]' = None + acType: 'typing.Optional[uint]' = None + acCapacity: 'typing.Optional[uint]' = None + acRefrigerantType: 'typing.Optional[uint]' = None + acCompressor: 'typing.Optional[uint]' = None + acErrorCode: 'typing.Optional[uint]' = None + acLouverPosition: 'typing.Optional[uint]' = None + acCoilTemperature: 'typing.Optional[int]' = None + acCapacityFormat: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class SetpointAdjustMode(IntEnum): kHeatSetpoint = 0x00 @@ -16783,6 +18453,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class FanControl(Cluster): id: typing.ClassVar[int] = 0x0202 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="fanMode", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="fanModeSequence", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + fanMode: 'uint' = None + fanModeSequence: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -16873,6 +18560,35 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class DehumidificationControl(Cluster): id: typing.ClassVar[int] = 0x0203 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="relativeHumidity", Tag=0x00000000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dehumidificationCooling", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="rhDehumidificationSetpoint", Tag=0x00000010, Type=uint), + ClusterObjectFieldDescriptor(Label="relativeHumidityMode", Tag=0x00000011, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dehumidificationLockout", Tag=0x00000012, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dehumidificationHysteresis", Tag=0x00000013, Type=uint), + ClusterObjectFieldDescriptor(Label="dehumidificationMaxCool", Tag=0x00000014, Type=uint), + ClusterObjectFieldDescriptor(Label="relativeHumidityDisplay", Tag=0x00000015, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + relativeHumidity: 'typing.Optional[uint]' = None + dehumidificationCooling: 'uint' = None + rhDehumidificationSetpoint: 'uint' = None + relativeHumidityMode: 'typing.Optional[uint]' = None + dehumidificationLockout: 'typing.Optional[uint]' = None + dehumidificationHysteresis: 'uint' = None + dehumidificationMaxCool: 'uint' = None + relativeHumidityDisplay: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -17059,6 +18775,25 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ThermostatUserInterfaceConfiguration(Cluster): id: typing.ClassVar[int] = 0x0204 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="temperatureDisplayMode", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="keypadLockout", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="scheduleProgrammingVisibility", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + temperatureDisplayMode: 'uint' = None + keypadLockout: 'uint' = None + scheduleProgrammingVisibility: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -17165,6 +18900,123 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ColorControl(Cluster): id: typing.ClassVar[int] = 0x0300 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="currentHue", Tag=0x00000000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="currentSaturation", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="remainingTime", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="currentX", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="currentY", Tag=0x00000004, Type=uint), + ClusterObjectFieldDescriptor(Label="driftCompensation", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="compensationText", Tag=0x00000006, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="colorTemperature", Tag=0x00000007, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorMode", Tag=0x00000008, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorControlOptions", Tag=0x0000000F, Type=uint), + ClusterObjectFieldDescriptor(Label="numberOfPrimaries", Tag=0x00000010, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary1X", Tag=0x00000011, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary1Y", Tag=0x00000012, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary1Intensity", Tag=0x00000013, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary2X", Tag=0x00000015, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary2Y", Tag=0x00000016, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary2Intensity", Tag=0x00000017, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary3X", Tag=0x00000019, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary3Y", Tag=0x0000001A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary3Intensity", Tag=0x0000001B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary4X", Tag=0x00000020, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary4Y", Tag=0x00000021, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary4Intensity", Tag=0x00000022, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary5X", Tag=0x00000024, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary5Y", Tag=0x00000025, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary5Intensity", Tag=0x00000026, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary6X", Tag=0x00000028, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary6Y", Tag=0x00000029, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="primary6Intensity", Tag=0x0000002A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="whitePointX", Tag=0x00000030, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="whitePointY", Tag=0x00000031, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorPointRX", Tag=0x00000032, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorPointRY", Tag=0x00000033, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorPointRIntensity", Tag=0x00000034, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorPointGX", Tag=0x00000036, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorPointGY", Tag=0x00000037, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorPointGIntensity", Tag=0x00000038, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorPointBX", Tag=0x0000003A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorPointBY", Tag=0x0000003B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorPointBIntensity", Tag=0x0000003C, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="enhancedCurrentHue", Tag=0x00004000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="enhancedColorMode", Tag=0x00004001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorLoopActive", Tag=0x00004002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorLoopDirection", Tag=0x00004003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorLoopTime", Tag=0x00004004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorLoopStartEnhancedHue", Tag=0x00004005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorLoopStoredEnhancedHue", Tag=0x00004006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorCapabilities", Tag=0x0000400A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorTempPhysicalMin", Tag=0x0000400B, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="colorTempPhysicalMax", Tag=0x0000400C, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="coupleColorTempToLevelMinMireds", Tag=0x0000400D, Type=uint), + ClusterObjectFieldDescriptor(Label="startUpColorTemperatureMireds", Tag=0x00004010, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + currentHue: 'typing.Optional[uint]' = None + currentSaturation: 'typing.Optional[uint]' = None + remainingTime: 'typing.Optional[uint]' = None + currentX: 'uint' = None + currentY: 'uint' = None + driftCompensation: 'typing.Optional[uint]' = None + compensationText: 'typing.Optional[str]' = None + colorTemperature: 'typing.Optional[uint]' = None + colorMode: 'typing.Optional[uint]' = None + colorControlOptions: 'uint' = None + numberOfPrimaries: 'typing.Optional[uint]' = None + primary1X: 'typing.Optional[uint]' = None + primary1Y: 'typing.Optional[uint]' = None + primary1Intensity: 'typing.Optional[uint]' = None + primary2X: 'typing.Optional[uint]' = None + primary2Y: 'typing.Optional[uint]' = None + primary2Intensity: 'typing.Optional[uint]' = None + primary3X: 'typing.Optional[uint]' = None + primary3Y: 'typing.Optional[uint]' = None + primary3Intensity: 'typing.Optional[uint]' = None + primary4X: 'typing.Optional[uint]' = None + primary4Y: 'typing.Optional[uint]' = None + primary4Intensity: 'typing.Optional[uint]' = None + primary5X: 'typing.Optional[uint]' = None + primary5Y: 'typing.Optional[uint]' = None + primary5Intensity: 'typing.Optional[uint]' = None + primary6X: 'typing.Optional[uint]' = None + primary6Y: 'typing.Optional[uint]' = None + primary6Intensity: 'typing.Optional[uint]' = None + whitePointX: 'typing.Optional[uint]' = None + whitePointY: 'typing.Optional[uint]' = None + colorPointRX: 'typing.Optional[uint]' = None + colorPointRY: 'typing.Optional[uint]' = None + colorPointRIntensity: 'typing.Optional[uint]' = None + colorPointGX: 'typing.Optional[uint]' = None + colorPointGY: 'typing.Optional[uint]' = None + colorPointGIntensity: 'typing.Optional[uint]' = None + colorPointBX: 'typing.Optional[uint]' = None + colorPointBY: 'typing.Optional[uint]' = None + colorPointBIntensity: 'typing.Optional[uint]' = None + enhancedCurrentHue: 'typing.Optional[uint]' = None + enhancedColorMode: 'typing.Optional[uint]' = None + colorLoopActive: 'typing.Optional[uint]' = None + colorLoopDirection: 'typing.Optional[uint]' = None + colorLoopTime: 'typing.Optional[uint]' = None + colorLoopStartEnhancedHue: 'typing.Optional[uint]' = None + colorLoopStoredEnhancedHue: 'typing.Optional[uint]' = None + colorCapabilities: 'typing.Optional[uint]' = None + colorTempPhysicalMin: 'typing.Optional[uint]' = None + colorTempPhysicalMax: 'typing.Optional[uint]' = None + coupleColorTempToLevelMinMireds: 'uint' = None + startUpColorTemperatureMireds: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class ColorLoopAction(IntEnum): kDeactivate = 0x00 @@ -18524,6 +20376,51 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class BallastConfiguration(Cluster): id: typing.ClassVar[int] = 0x0301 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="physicalMinLevel", Tag=0x00000000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="physicalMaxLevel", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="ballastStatus", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="minLevel", Tag=0x00000010, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="maxLevel", Tag=0x00000011, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="powerOnLevel", Tag=0x00000012, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="powerOnFadeTime", Tag=0x00000013, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="intrinsicBallastFactor", Tag=0x00000014, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="ballastFactorAdjustment", Tag=0x00000015, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lampQuality", Tag=0x00000020, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lampType", Tag=0x00000030, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="lampManufacturer", Tag=0x00000031, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="lampRatedHours", Tag=0x00000032, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lampBurnHours", Tag=0x00000033, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lampAlarmMode", Tag=0x00000034, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lampBurnHoursTripPoint", Tag=0x00000035, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + physicalMinLevel: 'typing.Optional[uint]' = None + physicalMaxLevel: 'typing.Optional[uint]' = None + ballastStatus: 'uint' = None + minLevel: 'typing.Optional[uint]' = None + maxLevel: 'typing.Optional[uint]' = None + powerOnLevel: 'typing.Optional[uint]' = None + powerOnFadeTime: 'typing.Optional[uint]' = None + intrinsicBallastFactor: 'typing.Optional[uint]' = None + ballastFactorAdjustment: 'typing.Optional[uint]' = None + lampQuality: 'typing.Optional[uint]' = None + lampType: 'typing.Optional[str]' = None + lampManufacturer: 'typing.Optional[str]' = None + lampRatedHours: 'typing.Optional[uint]' = None + lampBurnHours: 'typing.Optional[uint]' = None + lampAlarmMode: 'typing.Optional[uint]' = None + lampBurnHoursTripPoint: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -18838,6 +20735,29 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class IlluminanceMeasurement(Cluster): id: typing.ClassVar[int] = 0x0400 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lightSensorType", Tag=0x00000004, Type=typing.Union[None, Nullable, uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'typing.Union[Nullable, uint]' = None + minMeasuredValue: 'typing.Union[Nullable, uint]' = None + maxMeasuredValue: 'typing.Union[Nullable, uint]' = None + tolerance: 'typing.Optional[uint]' = None + lightSensorType: 'typing.Union[None, Nullable, uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class LightSensorType(IntEnum): kPhotodiode = 0x00 @@ -18981,6 +20901,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class TemperatureMeasurement(Cluster): id: typing.ClassVar[int] = 0x0402 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=int), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=int), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=int), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'int' = None + minMeasuredValue: 'int' = None + maxMeasuredValue: 'int' = None + tolerance: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -19103,6 +21044,37 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class PressureMeasurement(Cluster): id: typing.ClassVar[int] = 0x0403 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=int), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=int), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=int), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="scaledValue", Tag=0x00000010, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="minScaledValue", Tag=0x00000011, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="maxScaledValue", Tag=0x00000012, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="scaledTolerance", Tag=0x00000013, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="scale", Tag=0x00000014, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'int' = None + minMeasuredValue: 'int' = None + maxMeasuredValue: 'int' = None + tolerance: 'typing.Optional[uint]' = None + scaledValue: 'typing.Optional[int]' = None + minScaledValue: 'typing.Optional[int]' = None + maxScaledValue: 'typing.Optional[int]' = None + scaledTolerance: 'typing.Optional[uint]' = None + scale: 'typing.Optional[int]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -19305,6 +21277,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class FlowMeasurement(Cluster): id: typing.ClassVar[int] = 0x0404 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=int), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=int), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=int), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'int' = None + minMeasuredValue: 'int' = None + maxMeasuredValue: 'int' = None + tolerance: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -19427,6 +21420,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class RelativeHumidityMeasurement(Cluster): id: typing.ClassVar[int] = 0x0405 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'uint' = None + minMeasuredValue: 'uint' = None + maxMeasuredValue: 'uint' = None + tolerance: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -19549,6 +21563,43 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class OccupancySensing(Cluster): id: typing.ClassVar[int] = 0x0406 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="occupancy", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="occupancySensorType", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="occupancySensorTypeBitmap", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="pirOccupiedToUnoccupiedDelay", Tag=0x00000010, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="pirUnoccupiedToOccupiedDelay", Tag=0x00000011, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="pirUnoccupiedToOccupiedThreshold", Tag=0x00000012, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="ultrasonicOccupiedToUnoccupiedDelay", Tag=0x00000020, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="ultrasonicUnoccupiedToOccupiedDelay", Tag=0x00000021, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="ultrasonicUnoccupiedToOccupiedThreshold", Tag=0x00000022, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="physicalContactOccupiedToUnoccupiedDelay", Tag=0x00000030, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="physicalContactUnoccupiedToOccupiedDelay", Tag=0x00000031, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="physicalContactUnoccupiedToOccupiedThreshold", Tag=0x00000032, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + occupancy: 'uint' = None + occupancySensorType: 'uint' = None + occupancySensorTypeBitmap: 'uint' = None + pirOccupiedToUnoccupiedDelay: 'typing.Optional[uint]' = None + pirUnoccupiedToOccupiedDelay: 'typing.Optional[uint]' = None + pirUnoccupiedToOccupiedThreshold: 'typing.Optional[uint]' = None + ultrasonicOccupiedToUnoccupiedDelay: 'typing.Optional[uint]' = None + ultrasonicUnoccupiedToOccupiedDelay: 'typing.Optional[uint]' = None + ultrasonicUnoccupiedToOccupiedThreshold: 'typing.Optional[uint]' = None + physicalContactOccupiedToUnoccupiedDelay: 'typing.Optional[uint]' = None + physicalContactUnoccupiedToOccupiedDelay: 'typing.Optional[uint]' = None + physicalContactUnoccupiedToOccupiedThreshold: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -19799,6 +21850,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class CarbonMonoxideConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x040C + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -19921,6 +21993,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class CarbonDioxideConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x040D + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -20043,6 +22136,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class EthyleneConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x040E + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -20165,6 +22279,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class EthyleneOxideConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x040F + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -20287,6 +22422,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class HydrogenConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0410 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -20409,6 +22565,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class HydrogenSulphideConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0411 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -20531,6 +22708,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class NitricOxideConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0412 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -20653,6 +22851,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class NitrogenDioxideConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0413 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -20775,6 +22994,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class OxygenConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0414 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -20897,6 +23137,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class OzoneConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0415 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -21019,6 +23280,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class SulfurDioxideConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0416 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -21141,6 +23423,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class DissolvedOxygenConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0417 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -21263,6 +23566,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class BromateConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0418 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -21385,6 +23709,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ChloraminesConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0419 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -21507,6 +23852,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ChlorineConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x041A + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -21629,6 +23995,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class FecalColiformAndEColiConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x041B + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -21751,6 +24138,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class FluorideConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x041C + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -21873,6 +24281,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class HaloaceticAcidsConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x041D + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -21995,6 +24424,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class TotalTrihalomethanesConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x041E + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -22117,6 +24567,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class TotalColiformBacteriaConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x041F + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -22239,6 +24710,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class TurbidityConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0420 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -22361,6 +24853,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class CopperConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0421 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -22483,6 +24996,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class LeadConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0422 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -22605,6 +25139,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ManganeseConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0423 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -22727,6 +25282,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class SulfateConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0424 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -22849,6 +25425,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class BromodichloromethaneConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0425 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -22971,6 +25568,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class BromoformConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0426 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -23093,6 +25711,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ChlorodibromomethaneConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0427 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -23215,6 +25854,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ChloroformConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0428 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -23337,6 +25997,27 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class SodiumConcentrationMeasurement(Cluster): id: typing.ClassVar[int] = 0x0429 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measuredValue", Tag=0x00000000, Type=float), + ClusterObjectFieldDescriptor(Label="minMeasuredValue", Tag=0x00000001, Type=float), + ClusterObjectFieldDescriptor(Label="maxMeasuredValue", Tag=0x00000002, Type=float), + ClusterObjectFieldDescriptor(Label="tolerance", Tag=0x00000003, Type=typing.Optional[float]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measuredValue: 'float' = None + minMeasuredValue: 'float' = None + maxMeasuredValue: 'float' = None + tolerance: 'typing.Optional[float]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -23459,6 +26140,33 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class IasZone(Cluster): id: typing.ClassVar[int] = 0x0500 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="zoneState", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="zoneType", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="zoneStatus", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="iasCieAddress", Tag=0x00000010, Type=uint), + ClusterObjectFieldDescriptor(Label="zoneId", Tag=0x00000011, Type=uint), + ClusterObjectFieldDescriptor(Label="numberOfZoneSensitivityLevelsSupported", Tag=0x00000012, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="currentZoneSensitivityLevel", Tag=0x00000013, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + zoneState: 'uint' = None + zoneType: 'uint' = None + zoneStatus: 'uint' = None + iasCieAddress: 'uint' = None + zoneId: 'uint' = None + numberOfZoneSensitivityLevelsSupported: 'typing.Optional[uint]' = None + currentZoneSensitivityLevel: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class IasEnrollResponseCode(IntEnum): kSuccess = 0x00 @@ -23766,6 +26474,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class IasAce(Cluster): id: typing.ClassVar[int] = 0x0501 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class IasAceAlarmStatus(IntEnum): kNoAlarm = 0x00 @@ -24257,6 +26978,21 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class IasWd(Cluster): id: typing.ClassVar[int] = 0x0502 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="maxDuration", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + maxDuration: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -24368,6 +27104,21 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class WakeOnLan(Cluster): id: typing.ClassVar[int] = 0x0503 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="wakeOnLanMacAddress", Tag=0x00000000, Type=str), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + wakeOnLanMacAddress: 'str' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -24442,6 +27193,25 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class TvChannel(Cluster): id: typing.ClassVar[int] = 0x0504 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="tvChannelList", Tag=0x00000000, Type=typing.List[TvChannel.Structs.TvChannelInfo]), + ClusterObjectFieldDescriptor(Label="tvChannelLineup", Tag=0x00000001, Type=bytes), + ClusterObjectFieldDescriptor(Label="currentTvChannel", Tag=0x00000002, Type=bytes), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + tvChannelList: 'typing.List[TvChannel.Structs.TvChannelInfo]' = None + tvChannelLineup: 'bytes' = None + currentTvChannel: 'bytes' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class TvChannelErrorType(IntEnum): kMultipleMatches = 0x00 @@ -24659,6 +27429,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class TargetNavigator(Cluster): id: typing.ClassVar[int] = 0x0505 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="targetNavigatorList", Tag=0x00000000, Type=typing.List[TargetNavigator.Structs.NavigateTargetTargetInfo]), + ClusterObjectFieldDescriptor(Label="currentNavigatorTarget", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + targetNavigatorList: 'typing.List[TargetNavigator.Structs.NavigateTargetTargetInfo]' = None + currentNavigatorTarget: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class NavigateTargetStatus(IntEnum): kSuccess = 0x00 @@ -24805,6 +27592,35 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class MediaPlayback(Cluster): id: typing.ClassVar[int] = 0x0506 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="playbackState", Tag=0x00000000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="startTime", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="duration", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="positionUpdatedAt", Tag=0x00000003, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="position", Tag=0x00000004, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="playbackSpeed", Tag=0x00000005, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="seekRangeEnd", Tag=0x00000006, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="seekRangeStart", Tag=0x00000007, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + playbackState: 'typing.Optional[uint]' = None + startTime: 'typing.Optional[uint]' = None + duration: 'typing.Optional[uint]' = None + positionUpdatedAt: 'typing.Optional[uint]' = None + position: 'typing.Optional[uint]' = None + playbackSpeed: 'typing.Optional[uint]' = None + seekRangeEnd: 'typing.Optional[uint]' = None + seekRangeStart: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class MediaPlaybackState(IntEnum): kPlaying = 0x00 @@ -25336,6 +28152,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class MediaInput(Cluster): id: typing.ClassVar[int] = 0x0507 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="mediaInputList", Tag=0x00000000, Type=typing.List[MediaInput.Structs.MediaInputInfo]), + ClusterObjectFieldDescriptor(Label="currentMediaInput", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + mediaInputList: 'typing.List[MediaInput.Structs.MediaInputInfo]' = None + currentMediaInput: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class MediaInputType(IntEnum): kInternal = 0x00 @@ -25519,6 +28352,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class LowPower(Cluster): id: typing.ClassVar[int] = 0x0508 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -25591,6 +28437,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class KeypadInput(Cluster): id: typing.ClassVar[int] = 0x0509 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class KeypadInputCecKeyCode(IntEnum): kSelect = 0x00 @@ -25774,6 +28633,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ContentLauncher(Cluster): id: typing.ClassVar[int] = 0x050A + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="acceptsHeaderList", Tag=0x00000000, Type=typing.List[bytes]), + ClusterObjectFieldDescriptor(Label="supportedStreamingTypes", Tag=0x00000001, Type=typing.List[ContentLauncher.Enums.ContentLaunchStreamingType]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + acceptsHeaderList: 'typing.List[bytes]' = None + supportedStreamingTypes: 'typing.List[ContentLauncher.Enums.ContentLaunchStreamingType]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class ContentLaunchMetricType(IntEnum): kPixels = 0x00 @@ -26041,6 +28917,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class AudioOutput(Cluster): id: typing.ClassVar[int] = 0x050B + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="audioOutputList", Tag=0x00000000, Type=typing.List[AudioOutput.Structs.AudioOutputInfo]), + ClusterObjectFieldDescriptor(Label="currentAudioOutput", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + audioOutputList: 'typing.List[AudioOutput.Structs.AudioOutputInfo]' = None + currentAudioOutput: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class AudioOutputType(IntEnum): kHdmi = 0x00 @@ -26190,6 +29083,25 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ApplicationLauncher(Cluster): id: typing.ClassVar[int] = 0x050C + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="applicationLauncherList", Tag=0x00000000, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="catalogVendorId", Tag=0x00000001, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="applicationId", Tag=0x00000002, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + applicationLauncherList: 'typing.List[uint]' = None + catalogVendorId: 'typing.Optional[uint]' = None + applicationId: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class ApplicationLauncherStatus(IntEnum): kSuccess = 0x00 @@ -26354,6 +29266,33 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ApplicationBasic(Cluster): id: typing.ClassVar[int] = 0x050D + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="vendorName", Tag=0x00000000, Type=str), + ClusterObjectFieldDescriptor(Label="vendorId", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="applicationName", Tag=0x00000002, Type=str), + ClusterObjectFieldDescriptor(Label="productId", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="applicationId", Tag=0x00000005, Type=str), + ClusterObjectFieldDescriptor(Label="catalogVendorId", Tag=0x00000006, Type=uint), + ClusterObjectFieldDescriptor(Label="applicationStatus", Tag=0x00000007, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + vendorName: 'str' = None + vendorId: 'uint' = None + applicationName: 'str' = None + productId: 'uint' = None + applicationId: 'str' = None + catalogVendorId: 'uint' = None + applicationStatus: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class ApplicationBasicStatus(IntEnum): kStopped = 0x00 @@ -26547,6 +29486,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class AccountLogin(Cluster): id: typing.ClassVar[int] = 0x050E + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -26653,6 +29605,175 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class TestCluster(Cluster): id: typing.ClassVar[int] = 0x050F + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="boolean", Tag=0x00000000, Type=bool), + ClusterObjectFieldDescriptor(Label="bitmap8", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="bitmap16", Tag=0x00000002, Type=uint), + ClusterObjectFieldDescriptor(Label="bitmap32", Tag=0x00000003, Type=uint), + ClusterObjectFieldDescriptor(Label="bitmap64", Tag=0x00000004, Type=uint), + ClusterObjectFieldDescriptor(Label="int8u", Tag=0x00000005, Type=uint), + ClusterObjectFieldDescriptor(Label="int16u", Tag=0x00000006, Type=uint), + ClusterObjectFieldDescriptor(Label="int24u", Tag=0x00000007, Type=uint), + ClusterObjectFieldDescriptor(Label="int32u", Tag=0x00000008, Type=uint), + ClusterObjectFieldDescriptor(Label="int40u", Tag=0x00000009, Type=uint), + ClusterObjectFieldDescriptor(Label="int48u", Tag=0x0000000A, Type=uint), + ClusterObjectFieldDescriptor(Label="int56u", Tag=0x0000000B, Type=uint), + ClusterObjectFieldDescriptor(Label="int64u", Tag=0x0000000C, Type=uint), + ClusterObjectFieldDescriptor(Label="int8s", Tag=0x0000000D, Type=int), + ClusterObjectFieldDescriptor(Label="int16s", Tag=0x0000000E, Type=int), + ClusterObjectFieldDescriptor(Label="int24s", Tag=0x0000000F, Type=int), + ClusterObjectFieldDescriptor(Label="int32s", Tag=0x00000010, Type=int), + ClusterObjectFieldDescriptor(Label="int40s", Tag=0x00000011, Type=int), + ClusterObjectFieldDescriptor(Label="int48s", Tag=0x00000012, Type=int), + ClusterObjectFieldDescriptor(Label="int56s", Tag=0x00000013, Type=int), + ClusterObjectFieldDescriptor(Label="int64s", Tag=0x00000014, Type=int), + ClusterObjectFieldDescriptor(Label="enum8", Tag=0x00000015, Type=uint), + ClusterObjectFieldDescriptor(Label="enum16", Tag=0x00000016, Type=uint), + ClusterObjectFieldDescriptor(Label="floatSingle", Tag=0x00000017, Type=float), + ClusterObjectFieldDescriptor(Label="floatDouble", Tag=0x00000018, Type=float), + ClusterObjectFieldDescriptor(Label="octetString", Tag=0x00000019, Type=bytes), + ClusterObjectFieldDescriptor(Label="listInt8u", Tag=0x0000001A, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="listOctetString", Tag=0x0000001B, Type=typing.List[bytes]), + ClusterObjectFieldDescriptor(Label="listStructOctetString", Tag=0x0000001C, Type=typing.List[TestCluster.Structs.TestListStructOctet]), + ClusterObjectFieldDescriptor(Label="longOctetString", Tag=0x0000001D, Type=bytes), + ClusterObjectFieldDescriptor(Label="charString", Tag=0x0000001E, Type=str), + ClusterObjectFieldDescriptor(Label="longCharString", Tag=0x0000001F, Type=str), + ClusterObjectFieldDescriptor(Label="epochUs", Tag=0x00000020, Type=uint), + ClusterObjectFieldDescriptor(Label="epochS", Tag=0x00000021, Type=uint), + ClusterObjectFieldDescriptor(Label="vendorId", Tag=0x00000022, Type=uint), + ClusterObjectFieldDescriptor(Label="listNullablesAndOptionalsStruct", Tag=0x00000023, Type=typing.List[TestCluster.Structs.NullablesAndOptionalsStruct]), + ClusterObjectFieldDescriptor(Label="enumAttr", Tag=0x00000024, Type=TestCluster.Enums.SimpleEnum), + ClusterObjectFieldDescriptor(Label="struct", Tag=0x00000025, Type=TestCluster.Structs.SimpleStruct), + ClusterObjectFieldDescriptor(Label="rangeRestrictedInt8u", Tag=0x00000026, Type=uint), + ClusterObjectFieldDescriptor(Label="rangeRestrictedInt8s", Tag=0x00000027, Type=int), + ClusterObjectFieldDescriptor(Label="rangeRestrictedInt16u", Tag=0x00000028, Type=uint), + ClusterObjectFieldDescriptor(Label="rangeRestrictedInt16s", Tag=0x00000029, Type=int), + ClusterObjectFieldDescriptor(Label="listLongOctetString", Tag=0x0000002A, Type=typing.List[bytes]), + ClusterObjectFieldDescriptor(Label="timedWriteBoolean", Tag=0x00000030, Type=bool), + ClusterObjectFieldDescriptor(Label="unsupported", Tag=0x000000FF, Type=bool), + ClusterObjectFieldDescriptor(Label="nullableBoolean", Tag=0x00008000, Type=typing.Union[Nullable, bool]), + ClusterObjectFieldDescriptor(Label="nullableBitmap8", Tag=0x00008001, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableBitmap16", Tag=0x00008002, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableBitmap32", Tag=0x00008003, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableBitmap64", Tag=0x00008004, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableInt8u", Tag=0x00008005, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableInt16u", Tag=0x00008006, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableInt24u", Tag=0x00008007, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableInt32u", Tag=0x00008008, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableInt40u", Tag=0x00008009, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableInt48u", Tag=0x0000800A, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableInt56u", Tag=0x0000800B, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableInt64u", Tag=0x0000800C, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableInt8s", Tag=0x0000800D, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="nullableInt16s", Tag=0x0000800E, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="nullableInt24s", Tag=0x0000800F, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="nullableInt32s", Tag=0x00008010, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="nullableInt40s", Tag=0x00008011, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="nullableInt48s", Tag=0x00008012, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="nullableInt56s", Tag=0x00008013, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="nullableInt64s", Tag=0x00008014, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="nullableEnum8", Tag=0x00008015, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableEnum16", Tag=0x00008016, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableFloatSingle", Tag=0x00008017, Type=typing.Union[Nullable, float]), + ClusterObjectFieldDescriptor(Label="nullableFloatDouble", Tag=0x00008018, Type=typing.Union[Nullable, float]), + ClusterObjectFieldDescriptor(Label="nullableOctetString", Tag=0x00008019, Type=typing.Union[Nullable, bytes]), + ClusterObjectFieldDescriptor(Label="nullableCharString", Tag=0x0000801E, Type=typing.Union[Nullable, str]), + ClusterObjectFieldDescriptor(Label="nullableEnumAttr", Tag=0x00008024, Type=typing.Union[Nullable, TestCluster.Enums.SimpleEnum]), + ClusterObjectFieldDescriptor(Label="nullableStruct", Tag=0x00008025, Type=typing.Union[Nullable, TestCluster.Structs.SimpleStruct]), + ClusterObjectFieldDescriptor(Label="nullableRangeRestrictedInt8u", Tag=0x00008026, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableRangeRestrictedInt8s", Tag=0x00008027, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="nullableRangeRestrictedInt16u", Tag=0x00008028, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="nullableRangeRestrictedInt16s", Tag=0x00008029, Type=typing.Union[Nullable, int]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + boolean: 'bool' = None + bitmap8: 'uint' = None + bitmap16: 'uint' = None + bitmap32: 'uint' = None + bitmap64: 'uint' = None + int8u: 'uint' = None + int16u: 'uint' = None + int24u: 'uint' = None + int32u: 'uint' = None + int40u: 'uint' = None + int48u: 'uint' = None + int56u: 'uint' = None + int64u: 'uint' = None + int8s: 'int' = None + int16s: 'int' = None + int24s: 'int' = None + int32s: 'int' = None + int40s: 'int' = None + int48s: 'int' = None + int56s: 'int' = None + int64s: 'int' = None + enum8: 'uint' = None + enum16: 'uint' = None + floatSingle: 'float' = None + floatDouble: 'float' = None + octetString: 'bytes' = None + listInt8u: 'typing.List[uint]' = None + listOctetString: 'typing.List[bytes]' = None + listStructOctetString: 'typing.List[TestCluster.Structs.TestListStructOctet]' = None + longOctetString: 'bytes' = None + charString: 'str' = None + longCharString: 'str' = None + epochUs: 'uint' = None + epochS: 'uint' = None + vendorId: 'uint' = None + listNullablesAndOptionalsStruct: 'typing.List[TestCluster.Structs.NullablesAndOptionalsStruct]' = None + enumAttr: 'TestCluster.Enums.SimpleEnum' = None + struct: 'TestCluster.Structs.SimpleStruct' = None + rangeRestrictedInt8u: 'uint' = None + rangeRestrictedInt8s: 'int' = None + rangeRestrictedInt16u: 'uint' = None + rangeRestrictedInt16s: 'int' = None + listLongOctetString: 'typing.List[bytes]' = None + timedWriteBoolean: 'bool' = None + unsupported: 'bool' = None + nullableBoolean: 'typing.Union[Nullable, bool]' = None + nullableBitmap8: 'typing.Union[Nullable, uint]' = None + nullableBitmap16: 'typing.Union[Nullable, uint]' = None + nullableBitmap32: 'typing.Union[Nullable, uint]' = None + nullableBitmap64: 'typing.Union[Nullable, uint]' = None + nullableInt8u: 'typing.Union[Nullable, uint]' = None + nullableInt16u: 'typing.Union[Nullable, uint]' = None + nullableInt24u: 'typing.Union[Nullable, uint]' = None + nullableInt32u: 'typing.Union[Nullable, uint]' = None + nullableInt40u: 'typing.Union[Nullable, uint]' = None + nullableInt48u: 'typing.Union[Nullable, uint]' = None + nullableInt56u: 'typing.Union[Nullable, uint]' = None + nullableInt64u: 'typing.Union[Nullable, uint]' = None + nullableInt8s: 'typing.Union[Nullable, int]' = None + nullableInt16s: 'typing.Union[Nullable, int]' = None + nullableInt24s: 'typing.Union[Nullable, int]' = None + nullableInt32s: 'typing.Union[Nullable, int]' = None + nullableInt40s: 'typing.Union[Nullable, int]' = None + nullableInt48s: 'typing.Union[Nullable, int]' = None + nullableInt56s: 'typing.Union[Nullable, int]' = None + nullableInt64s: 'typing.Union[Nullable, int]' = None + nullableEnum8: 'typing.Union[Nullable, uint]' = None + nullableEnum16: 'typing.Union[Nullable, uint]' = None + nullableFloatSingle: 'typing.Union[Nullable, float]' = None + nullableFloatDouble: 'typing.Union[Nullable, float]' = None + nullableOctetString: 'typing.Union[Nullable, bytes]' = None + nullableCharString: 'typing.Union[Nullable, str]' = None + nullableEnumAttr: 'typing.Union[Nullable, TestCluster.Enums.SimpleEnum]' = None + nullableStruct: 'typing.Union[Nullable, TestCluster.Structs.SimpleStruct]' = None + nullableRangeRestrictedInt8u: 'typing.Union[Nullable, uint]' = None + nullableRangeRestrictedInt8s: 'typing.Union[Nullable, int]' = None + nullableRangeRestrictedInt16u: 'typing.Union[Nullable, uint]' = None + nullableRangeRestrictedInt16s: 'typing.Union[Nullable, int]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class SimpleEnum(IntEnum): kUnspecified = 0x00 @@ -28668,7 +31789,7 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class Events: @dataclass - class TestEvent(ClusterEventDescriptor): + class TestEvent(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return 0x050F @@ -28685,22 +31806,35 @@ def descriptor(cls) -> ClusterObjectDescriptor: ClusterObjectFieldDescriptor(Label="arg2", Tag=2, Type=TestCluster.Enums.SimpleEnum), ClusterObjectFieldDescriptor(Label="arg3", Tag=3, Type=bool), ClusterObjectFieldDescriptor(Label="arg4", Tag=4, Type=TestCluster.Structs.SimpleStruct), - ClusterObjectFieldDescriptor(Label="arg5", Tag=5, Type=typing.List[TestCluster.Structs.SimpleStruct], IsArray=True), - ClusterObjectFieldDescriptor(Label="arg6", Tag=6, Type=typing.List[TestCluster.Enums.SimpleEnum], IsArray=True), + ClusterObjectFieldDescriptor(Label="arg5", Tag=5, Type=typing.List[TestCluster.Structs.SimpleStruct]), + ClusterObjectFieldDescriptor(Label="arg6", Tag=6, Type=typing.List[TestCluster.Enums.SimpleEnum]), ]) arg1: 'uint' = 0 arg2: 'TestCluster.Enums.SimpleEnum' = 0 arg3: 'bool' = False arg4: 'TestCluster.Structs.SimpleStruct' = field(default_factory=lambda: TestCluster.Structs.SimpleStruct()) - arg5: typing.List['typing.List[TestCluster.Structs.SimpleStruct]'] = field(default_factory=lambda: []) - arg6: typing.List['typing.List[TestCluster.Enums.SimpleEnum]'] = field(default_factory=lambda: []) + arg5: 'typing.List[TestCluster.Structs.SimpleStruct]' = field(default_factory=lambda: []) + arg6: 'typing.List[TestCluster.Enums.SimpleEnum]' = field(default_factory=lambda: []) @dataclass class Messaging(Cluster): id: typing.ClassVar[int] = 0x0703 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class EventId(IntEnum): kMeterCoverRemoved = 0x00 @@ -28995,6 +32129,43 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ApplianceIdentification(Cluster): id: typing.ClassVar[int] = 0x0B00 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="basicIdentification", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="companyName", Tag=0x00000010, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="companyId", Tag=0x00000011, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="brandName", Tag=0x00000012, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="brandId", Tag=0x00000013, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="model", Tag=0x00000014, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="partNumber", Tag=0x00000015, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="productRevision", Tag=0x00000016, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="softwareRevision", Tag=0x00000017, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="productTypeName", Tag=0x00000018, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="productTypeId", Tag=0x00000019, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="cecedSpecificationVersion", Tag=0x0000001A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + basicIdentification: 'uint' = None + companyName: 'typing.Optional[str]' = None + companyId: 'typing.Optional[uint]' = None + brandName: 'typing.Optional[str]' = None + brandId: 'typing.Optional[uint]' = None + model: 'typing.Optional[bytes]' = None + partNumber: 'typing.Optional[bytes]' = None + productRevision: 'typing.Optional[bytes]' = None + softwareRevision: 'typing.Optional[bytes]' = None + productTypeName: 'typing.Optional[bytes]' = None + productTypeId: 'typing.Optional[uint]' = None + cecedSpecificationVersion: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -29245,6 +32416,43 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class MeterIdentification(Cluster): id: typing.ClassVar[int] = 0x0B01 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="companyName", Tag=0x00000000, Type=str), + ClusterObjectFieldDescriptor(Label="meterTypeId", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="dataQualityId", Tag=0x00000004, Type=uint), + ClusterObjectFieldDescriptor(Label="customerName", Tag=0x00000005, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="model", Tag=0x00000006, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="partNumber", Tag=0x00000007, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="productRevision", Tag=0x00000008, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="softwareRevision", Tag=0x0000000A, Type=typing.Optional[bytes]), + ClusterObjectFieldDescriptor(Label="utilityName", Tag=0x0000000B, Type=typing.Optional[str]), + ClusterObjectFieldDescriptor(Label="pod", Tag=0x0000000C, Type=str), + ClusterObjectFieldDescriptor(Label="availablePower", Tag=0x0000000D, Type=int), + ClusterObjectFieldDescriptor(Label="powerThreshold", Tag=0x0000000E, Type=int), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + companyName: 'str' = None + meterTypeId: 'uint' = None + dataQualityId: 'uint' = None + customerName: 'typing.Optional[str]' = None + model: 'typing.Optional[bytes]' = None + partNumber: 'typing.Optional[bytes]' = None + productRevision: 'typing.Optional[bytes]' = None + softwareRevision: 'typing.Optional[bytes]' = None + utilityName: 'typing.Optional[str]' = None + pod: 'str' = None + availablePower: 'int' = None + powerThreshold: 'int' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + @@ -29495,6 +32703,19 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ApplianceEventsAndAlert(Cluster): id: typing.ClassVar[int] = 0x0B02 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Enums: class EventIdentification(IntEnum): kEndOfCycle = 0x01 @@ -29626,6 +32847,23 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ApplianceStatistics(Cluster): id: typing.ClassVar[int] = 0x0B03 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="logMaxSize", Tag=0x00000000, Type=uint), + ClusterObjectFieldDescriptor(Label="logQueueMaxSize", Tag=0x00000001, Type=uint), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + logMaxSize: 'uint' = None + logQueueMaxSize: 'uint' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: @@ -29821,6 +33059,275 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: class ElectricalMeasurement(Cluster): id: typing.ClassVar[int] = 0x0B04 + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="measurementType", Tag=0x00000000, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dcVoltage", Tag=0x00000100, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dcVoltageMin", Tag=0x00000101, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dcVoltageMax", Tag=0x00000102, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dcCurrent", Tag=0x00000103, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dcCurrentMin", Tag=0x00000104, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dcCurrentMax", Tag=0x00000105, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dcPower", Tag=0x00000106, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dcPowerMin", Tag=0x00000107, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dcPowerMax", Tag=0x00000108, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="dcVoltageMultiplier", Tag=0x00000200, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dcVoltageDivisor", Tag=0x00000201, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dcCurrentMultiplier", Tag=0x00000202, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dcCurrentDivisor", Tag=0x00000203, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dcPowerMultiplier", Tag=0x00000204, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="dcPowerDivisor", Tag=0x00000205, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acFrequency", Tag=0x00000300, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acFrequencyMin", Tag=0x00000301, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acFrequencyMax", Tag=0x00000302, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="neutralCurrent", Tag=0x00000303, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="totalActivePower", Tag=0x00000304, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="totalReactivePower", Tag=0x00000305, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="totalApparentPower", Tag=0x00000306, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="measured1stHarmonicCurrent", Tag=0x00000307, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measured3rdHarmonicCurrent", Tag=0x00000308, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measured5thHarmonicCurrent", Tag=0x00000309, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measured7thHarmonicCurrent", Tag=0x0000030A, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measured9thHarmonicCurrent", Tag=0x0000030B, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measured11thHarmonicCurrent", Tag=0x0000030C, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measuredPhase1stHarmonicCurrent", Tag=0x0000030D, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measuredPhase3rdHarmonicCurrent", Tag=0x0000030E, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measuredPhase5thHarmonicCurrent", Tag=0x0000030F, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measuredPhase7thHarmonicCurrent", Tag=0x00000310, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measuredPhase9thHarmonicCurrent", Tag=0x00000311, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="measuredPhase11thHarmonicCurrent", Tag=0x00000312, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="acFrequencyMultiplier", Tag=0x00000400, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acFrequencyDivisor", Tag=0x00000401, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="powerMultiplier", Tag=0x00000402, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="powerDivisor", Tag=0x00000403, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="harmonicCurrentMultiplier", Tag=0x00000404, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="phaseHarmonicCurrentMultiplier", Tag=0x00000405, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="instantaneousVoltage", Tag=0x00000500, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="instantaneousLineCurrent", Tag=0x00000501, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="instantaneousActiveCurrent", Tag=0x00000502, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="instantaneousReactiveCurrent", Tag=0x00000503, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="instantaneousPower", Tag=0x00000504, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="rmsVoltage", Tag=0x00000505, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageMin", Tag=0x00000506, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageMax", Tag=0x00000507, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsCurrent", Tag=0x00000508, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsCurrentMin", Tag=0x00000509, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsCurrentMax", Tag=0x0000050A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="activePower", Tag=0x0000050B, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="activePowerMin", Tag=0x0000050C, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="activePowerMax", Tag=0x0000050D, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="reactivePower", Tag=0x0000050E, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="apparentPower", Tag=0x0000050F, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="powerFactor", Tag=0x00000510, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="averageRmsVoltageMeasurementPeriod", Tag=0x00000511, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="averageRmsUnderVoltageCounter", Tag=0x00000513, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsExtremeOverVoltagePeriod", Tag=0x00000514, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsExtremeUnderVoltagePeriod", Tag=0x00000515, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageSagPeriod", Tag=0x00000516, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageSwellPeriod", Tag=0x00000517, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acVoltageMultiplier", Tag=0x00000600, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acVoltageDivisor", Tag=0x00000601, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acCurrentMultiplier", Tag=0x00000602, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acCurrentDivisor", Tag=0x00000603, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acPowerMultiplier", Tag=0x00000604, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acPowerDivisor", Tag=0x00000605, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="overloadAlarmsMask", Tag=0x00000700, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="voltageOverload", Tag=0x00000701, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="currentOverload", Tag=0x00000702, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="acOverloadAlarmsMask", Tag=0x00000800, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="acVoltageOverload", Tag=0x00000801, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="acCurrentOverload", Tag=0x00000802, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="acActivePowerOverload", Tag=0x00000803, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="acReactivePowerOverload", Tag=0x00000804, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="averageRmsOverVoltage", Tag=0x00000805, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="averageRmsUnderVoltage", Tag=0x00000806, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="rmsExtremeOverVoltage", Tag=0x00000807, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="rmsExtremeUnderVoltage", Tag=0x00000808, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="rmsVoltageSag", Tag=0x00000809, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="rmsVoltageSwell", Tag=0x0000080A, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="lineCurrentPhaseB", Tag=0x00000901, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="activeCurrentPhaseB", Tag=0x00000902, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="reactiveCurrentPhaseB", Tag=0x00000903, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="rmsVoltagePhaseB", Tag=0x00000905, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageMinPhaseB", Tag=0x00000906, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageMaxPhaseB", Tag=0x00000907, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsCurrentPhaseB", Tag=0x00000908, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsCurrentMinPhaseB", Tag=0x00000909, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsCurrentMaxPhaseB", Tag=0x0000090A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="activePowerPhaseB", Tag=0x0000090B, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="activePowerMinPhaseB", Tag=0x0000090C, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="activePowerMaxPhaseB", Tag=0x0000090D, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="reactivePowerPhaseB", Tag=0x0000090E, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="apparentPowerPhaseB", Tag=0x0000090F, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="powerFactorPhaseB", Tag=0x00000910, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="averageRmsVoltageMeasurementPeriodPhaseB", Tag=0x00000911, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="averageRmsOverVoltageCounterPhaseB", Tag=0x00000912, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="averageRmsUnderVoltageCounterPhaseB", Tag=0x00000913, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsExtremeOverVoltagePeriodPhaseB", Tag=0x00000914, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsExtremeUnderVoltagePeriodPhaseB", Tag=0x00000915, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageSagPeriodPhaseB", Tag=0x00000916, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageSwellPeriodPhaseB", Tag=0x00000917, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="lineCurrentPhaseC", Tag=0x00000A01, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="activeCurrentPhaseC", Tag=0x00000A02, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="reactiveCurrentPhaseC", Tag=0x00000A03, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="rmsVoltagePhaseC", Tag=0x00000A05, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageMinPhaseC", Tag=0x00000A06, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageMaxPhaseC", Tag=0x00000A07, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsCurrentPhaseC", Tag=0x00000A08, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsCurrentMinPhaseC", Tag=0x00000A09, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsCurrentMaxPhaseC", Tag=0x00000A0A, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="activePowerPhaseC", Tag=0x00000A0B, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="activePowerMinPhaseC", Tag=0x00000A0C, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="activePowerMaxPhaseC", Tag=0x00000A0D, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="reactivePowerPhaseC", Tag=0x00000A0E, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="apparentPowerPhaseC", Tag=0x00000A0F, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="powerFactorPhaseC", Tag=0x00000A10, Type=typing.Optional[int]), + ClusterObjectFieldDescriptor(Label="averageRmsVoltageMeasurementPeriodPhaseC", Tag=0x00000A11, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="averageRmsOverVoltageCounterPhaseC", Tag=0x00000A12, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="averageRmsUnderVoltageCounterPhaseC", Tag=0x00000A13, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsExtremeOverVoltagePeriodPhaseC", Tag=0x00000A14, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsExtremeUnderVoltagePeriodPhaseC", Tag=0x00000A15, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageSagPeriodPhaseC", Tag=0x00000A16, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="rmsVoltageSwellPeriodPhaseC", Tag=0x00000A17, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]), + ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=typing.Optional[uint]), + ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), + ]) + + measurementType: 'typing.Optional[uint]' = None + dcVoltage: 'typing.Optional[int]' = None + dcVoltageMin: 'typing.Optional[int]' = None + dcVoltageMax: 'typing.Optional[int]' = None + dcCurrent: 'typing.Optional[int]' = None + dcCurrentMin: 'typing.Optional[int]' = None + dcCurrentMax: 'typing.Optional[int]' = None + dcPower: 'typing.Optional[int]' = None + dcPowerMin: 'typing.Optional[int]' = None + dcPowerMax: 'typing.Optional[int]' = None + dcVoltageMultiplier: 'typing.Optional[uint]' = None + dcVoltageDivisor: 'typing.Optional[uint]' = None + dcCurrentMultiplier: 'typing.Optional[uint]' = None + dcCurrentDivisor: 'typing.Optional[uint]' = None + dcPowerMultiplier: 'typing.Optional[uint]' = None + dcPowerDivisor: 'typing.Optional[uint]' = None + acFrequency: 'typing.Optional[uint]' = None + acFrequencyMin: 'typing.Optional[uint]' = None + acFrequencyMax: 'typing.Optional[uint]' = None + neutralCurrent: 'typing.Optional[uint]' = None + totalActivePower: 'typing.Optional[int]' = None + totalReactivePower: 'typing.Optional[int]' = None + totalApparentPower: 'typing.Optional[uint]' = None + measured1stHarmonicCurrent: 'typing.Optional[int]' = None + measured3rdHarmonicCurrent: 'typing.Optional[int]' = None + measured5thHarmonicCurrent: 'typing.Optional[int]' = None + measured7thHarmonicCurrent: 'typing.Optional[int]' = None + measured9thHarmonicCurrent: 'typing.Optional[int]' = None + measured11thHarmonicCurrent: 'typing.Optional[int]' = None + measuredPhase1stHarmonicCurrent: 'typing.Optional[int]' = None + measuredPhase3rdHarmonicCurrent: 'typing.Optional[int]' = None + measuredPhase5thHarmonicCurrent: 'typing.Optional[int]' = None + measuredPhase7thHarmonicCurrent: 'typing.Optional[int]' = None + measuredPhase9thHarmonicCurrent: 'typing.Optional[int]' = None + measuredPhase11thHarmonicCurrent: 'typing.Optional[int]' = None + acFrequencyMultiplier: 'typing.Optional[uint]' = None + acFrequencyDivisor: 'typing.Optional[uint]' = None + powerMultiplier: 'typing.Optional[uint]' = None + powerDivisor: 'typing.Optional[uint]' = None + harmonicCurrentMultiplier: 'typing.Optional[int]' = None + phaseHarmonicCurrentMultiplier: 'typing.Optional[int]' = None + instantaneousVoltage: 'typing.Optional[int]' = None + instantaneousLineCurrent: 'typing.Optional[uint]' = None + instantaneousActiveCurrent: 'typing.Optional[int]' = None + instantaneousReactiveCurrent: 'typing.Optional[int]' = None + instantaneousPower: 'typing.Optional[int]' = None + rmsVoltage: 'typing.Optional[uint]' = None + rmsVoltageMin: 'typing.Optional[uint]' = None + rmsVoltageMax: 'typing.Optional[uint]' = None + rmsCurrent: 'typing.Optional[uint]' = None + rmsCurrentMin: 'typing.Optional[uint]' = None + rmsCurrentMax: 'typing.Optional[uint]' = None + activePower: 'typing.Optional[int]' = None + activePowerMin: 'typing.Optional[int]' = None + activePowerMax: 'typing.Optional[int]' = None + reactivePower: 'typing.Optional[int]' = None + apparentPower: 'typing.Optional[uint]' = None + powerFactor: 'typing.Optional[int]' = None + averageRmsVoltageMeasurementPeriod: 'typing.Optional[uint]' = None + averageRmsUnderVoltageCounter: 'typing.Optional[uint]' = None + rmsExtremeOverVoltagePeriod: 'typing.Optional[uint]' = None + rmsExtremeUnderVoltagePeriod: 'typing.Optional[uint]' = None + rmsVoltageSagPeriod: 'typing.Optional[uint]' = None + rmsVoltageSwellPeriod: 'typing.Optional[uint]' = None + acVoltageMultiplier: 'typing.Optional[uint]' = None + acVoltageDivisor: 'typing.Optional[uint]' = None + acCurrentMultiplier: 'typing.Optional[uint]' = None + acCurrentDivisor: 'typing.Optional[uint]' = None + acPowerMultiplier: 'typing.Optional[uint]' = None + acPowerDivisor: 'typing.Optional[uint]' = None + overloadAlarmsMask: 'typing.Optional[uint]' = None + voltageOverload: 'typing.Optional[int]' = None + currentOverload: 'typing.Optional[int]' = None + acOverloadAlarmsMask: 'typing.Optional[uint]' = None + acVoltageOverload: 'typing.Optional[int]' = None + acCurrentOverload: 'typing.Optional[int]' = None + acActivePowerOverload: 'typing.Optional[int]' = None + acReactivePowerOverload: 'typing.Optional[int]' = None + averageRmsOverVoltage: 'typing.Optional[int]' = None + averageRmsUnderVoltage: 'typing.Optional[int]' = None + rmsExtremeOverVoltage: 'typing.Optional[int]' = None + rmsExtremeUnderVoltage: 'typing.Optional[int]' = None + rmsVoltageSag: 'typing.Optional[int]' = None + rmsVoltageSwell: 'typing.Optional[int]' = None + lineCurrentPhaseB: 'typing.Optional[uint]' = None + activeCurrentPhaseB: 'typing.Optional[int]' = None + reactiveCurrentPhaseB: 'typing.Optional[int]' = None + rmsVoltagePhaseB: 'typing.Optional[uint]' = None + rmsVoltageMinPhaseB: 'typing.Optional[uint]' = None + rmsVoltageMaxPhaseB: 'typing.Optional[uint]' = None + rmsCurrentPhaseB: 'typing.Optional[uint]' = None + rmsCurrentMinPhaseB: 'typing.Optional[uint]' = None + rmsCurrentMaxPhaseB: 'typing.Optional[uint]' = None + activePowerPhaseB: 'typing.Optional[int]' = None + activePowerMinPhaseB: 'typing.Optional[int]' = None + activePowerMaxPhaseB: 'typing.Optional[int]' = None + reactivePowerPhaseB: 'typing.Optional[int]' = None + apparentPowerPhaseB: 'typing.Optional[uint]' = None + powerFactorPhaseB: 'typing.Optional[int]' = None + averageRmsVoltageMeasurementPeriodPhaseB: 'typing.Optional[uint]' = None + averageRmsOverVoltageCounterPhaseB: 'typing.Optional[uint]' = None + averageRmsUnderVoltageCounterPhaseB: 'typing.Optional[uint]' = None + rmsExtremeOverVoltagePeriodPhaseB: 'typing.Optional[uint]' = None + rmsExtremeUnderVoltagePeriodPhaseB: 'typing.Optional[uint]' = None + rmsVoltageSagPeriodPhaseB: 'typing.Optional[uint]' = None + rmsVoltageSwellPeriodPhaseB: 'typing.Optional[uint]' = None + lineCurrentPhaseC: 'typing.Optional[uint]' = None + activeCurrentPhaseC: 'typing.Optional[int]' = None + reactiveCurrentPhaseC: 'typing.Optional[int]' = None + rmsVoltagePhaseC: 'typing.Optional[uint]' = None + rmsVoltageMinPhaseC: 'typing.Optional[uint]' = None + rmsVoltageMaxPhaseC: 'typing.Optional[uint]' = None + rmsCurrentPhaseC: 'typing.Optional[uint]' = None + rmsCurrentMinPhaseC: 'typing.Optional[uint]' = None + rmsCurrentMaxPhaseC: 'typing.Optional[uint]' = None + activePowerPhaseC: 'typing.Optional[int]' = None + activePowerMinPhaseC: 'typing.Optional[int]' = None + activePowerMaxPhaseC: 'typing.Optional[int]' = None + reactivePowerPhaseC: 'typing.Optional[int]' = None + apparentPowerPhaseC: 'typing.Optional[uint]' = None + powerFactorPhaseC: 'typing.Optional[int]' = None + averageRmsVoltageMeasurementPeriodPhaseC: 'typing.Optional[uint]' = None + averageRmsOverVoltageCounterPhaseC: 'typing.Optional[uint]' = None + averageRmsUnderVoltageCounterPhaseC: 'typing.Optional[uint]' = None + rmsExtremeOverVoltagePeriodPhaseC: 'typing.Optional[uint]' = None + rmsExtremeUnderVoltagePeriodPhaseC: 'typing.Optional[uint]' = None + rmsVoltageSagPeriodPhaseC: 'typing.Optional[uint]' = None + rmsVoltageSwellPeriodPhaseC: 'typing.Optional[uint]' = None + attributeList: 'typing.List[uint]' = None + featureMap: 'typing.Optional[uint]' = None + clusterRevision: 'uint' = None + class Commands: diff --git a/src/controller/python/chip/clusters/attribute.cpp b/src/controller/python/chip/clusters/attribute.cpp index a6ee511542ab4f..ccfac39a8722dd 100644 --- a/src/controller/python/chip/clusters/attribute.cpp +++ b/src/controller/python/chip/clusters/attribute.cpp @@ -67,12 +67,16 @@ using OnReadEventDataCallback = void (*)(PyObject * appContext, chip:: using OnSubscriptionEstablishedCallback = void (*)(PyObject * appContext, uint64_t subscriptionId); using OnReadErrorCallback = void (*)(PyObject * appContext, uint32_t chiperror); using OnReadDoneCallback = void (*)(PyObject * appContext); +using OnReportBeginCallback = void (*)(PyObject * appContext); +using OnReportEndCallback = void (*)(PyObject * appContext); OnReadAttributeDataCallback gOnReadAttributeDataCallback = nullptr; OnReadEventDataCallback gOnReadEventDataCallback = nullptr; OnSubscriptionEstablishedCallback gOnSubscriptionEstablishedCallback = nullptr; OnReadErrorCallback gOnReadErrorCallback = nullptr; OnReadDoneCallback gOnReadDoneCallback = nullptr; +OnReportBeginCallback gOnReportBeginCallback = nullptr; +OnReportBeginCallback gOnReportEndCallback = nullptr; class ReadClientCallback : public ReadClient::Callback { @@ -160,6 +164,10 @@ class ReadClientCallback : public ReadClient::Callback gOnReadErrorCallback(mAppContext, aError.AsInteger()); } + void OnReportBegin(const ReadClient * apReadClient) override { gOnReportBeginCallback(mAppContext); } + + void OnReportEnd(const ReadClient * apReadClient) override { gOnReportEndCallback(mAppContext); } + void OnDone(ReadClient * apReadClient) override { gOnReadDoneCallback(mAppContext); @@ -226,13 +234,16 @@ void pychip_WriteClient_InitCallbacks(OnWriteResponseCallback onWriteResponseCal void pychip_ReadClient_InitCallbacks(OnReadAttributeDataCallback onReadAttributeDataCallback, OnReadEventDataCallback onReadEventDataCallback, OnSubscriptionEstablishedCallback onSubscriptionEstablishedCallback, - OnReadErrorCallback onReadErrorCallback, OnReadDoneCallback onReadDoneCallback) + OnReadErrorCallback onReadErrorCallback, OnReadDoneCallback onReadDoneCallback, + OnReportBeginCallback onReportBeginCallback, OnReportEndCallback onReportEndCallback) { gOnReadAttributeDataCallback = onReadAttributeDataCallback; gOnReadEventDataCallback = onReadEventDataCallback; gOnSubscriptionEstablishedCallback = onSubscriptionEstablishedCallback; gOnReadErrorCallback = onReadErrorCallback; gOnReadDoneCallback = onReadDoneCallback; + gOnReportBeginCallback = onReportBeginCallback; + gOnReportEndCallback = onReportEndCallback; } chip::ChipError::StorageType pychip_WriteClient_WriteAttributes(void * appContext, DeviceProxy * device, size_t n, ...) diff --git a/src/controller/python/templates/python-cluster-Objects-py.zapt b/src/controller/python/templates/python-cluster-Objects-py.zapt index 685d8dcbf446c6..1ac8fff93b0706 100644 --- a/src/controller/python/templates/python-cluster-Objects-py.zapt +++ b/src/controller/python/templates/python-cluster-Objects-py.zapt @@ -12,7 +12,7 @@ from chip import ChipUtility from chip.tlv import uint -from .ClusterObjects import ClusterObject, ClusterObjectDescriptor, ClusterObjectFieldDescriptor, ClusterCommand, ClusterAttributeDescriptor, Cluster, ClusterEventDescriptor +from .ClusterObjects import ClusterObject, ClusterObjectDescriptor, ClusterObjectFieldDescriptor, ClusterCommand, ClusterAttributeDescriptor, Cluster, ClusterEvent from .Types import Nullable, NullValue {{#zcl_clusters}} @@ -20,6 +20,27 @@ from .Types import Nullable, NullValue class {{asUpperCamelCase name}}(Cluster): id: typing.ClassVar[int] = {{asHex code 4}} + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ +{{#zcl_attributes_server}} + {{#if entryType}} + ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase label }}", Tag={{asMEI manufacturerCode code}}, Type={{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}}), + {{else}} + ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase label }}", Tag={{asMEI manufacturerCode code}}, Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}}), + {{/if}} +{{/zcl_attributes_server}} + ]) + +{{#zcl_attributes_server}} +{{#if entryType}} + {{ asLowerCamelCase label }}: '{{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}}' = None +{{else}} + {{ asLowerCamelCase label }}: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}}' = None +{{/if}} +{{/zcl_attributes_server}} + {{#zcl_enums}} {{#first}} class Enums: @@ -119,7 +140,7 @@ class {{asUpperCamelCase name}}(Cluster): class Events: {{/first}} @dataclass - class {{asUpperCamelCase name}}(ClusterEventDescriptor): + class {{asUpperCamelCase name}}(ClusterEvent): @ChipUtility.classproperty def cluster_id(cls) -> int: return {{ asHex parent.code 4 }} @@ -133,12 +154,12 @@ class {{asUpperCamelCase name}}(Cluster): return ClusterObjectDescriptor( Fields = [ {{#zcl_event_fields}} - ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase name }}", Tag={{ fieldIdentifier }}, Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}{{#if isArray}}, IsArray=True{{/if}}), + ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase name }}", Tag={{ fieldIdentifier }}, Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}), {{/zcl_event_fields}} ]) {{#zcl_event_fields}} - {{ asLowerCamelCase name }}: {{#if isArray}}typing.List[{{/if}}'{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}'{{#if isArray}}]{{/if}} = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.parent.name)}} + {{ asLowerCamelCase name }}: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}' = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.parent.name)}} {{/zcl_event_fields}} {{/zcl_events}} diff --git a/src/controller/python/test/test_scripts/base.py b/src/controller/python/test/test_scripts/base.py index b8e13681b03e95..4333271caf24df 100644 --- a/src/controller/python/test/test_scripts/base.py +++ b/src/controller/python/test/test_scripts/base.py @@ -29,6 +29,7 @@ import time import ctypes import chip.clusters as Clusters +import chip.clusters.Attribute as Attribute logger = logging.getLogger('PythonMatterControllerTEST') logger.setLevel(logging.INFO) @@ -249,7 +250,7 @@ def TestReadBasicAttributes(self, nodeid: int, endpoint: int, group: int): "VendorID": 9050, "ProductName": "TEST_PRODUCT", "ProductID": 65279, - "NodeLabel": "Test", + "NodeLabel": "", "Location": "", "HardwareVersion": 0, "HardwareVersionString": "TEST_VERSION", @@ -321,12 +322,14 @@ def TestSubscription(self, nodeid: int, endpoint: int): updateLock = threading.Lock() updateCv = threading.Condition(updateLock) - def OnValueChange(path: Clusters.Attribute.AttributePath, data: typing.Any) -> None: + def OnValueChange(path: Attribute.TypedAttributePath, transaction: Attribute.SubscriptionTransaction) -> None: nonlocal desiredPath, updateCv, updateLock, receivedUpdate - if path != desiredPath: + if path.Path != desiredPath: return + + data = transaction.GetAttribute(path) logger.info( - f"Received report from server: path: {path}, value: {data}") + f"Received report from server: path: {path.Path}, value: {data}") with updateLock: receivedUpdate += 1 updateCv.notify_all() diff --git a/src/controller/python/test/test_scripts/cluster_objects.py b/src/controller/python/test/test_scripts/cluster_objects.py index c04641f3e49beb..1c44ba8e9a3b0a 100644 --- a/src/controller/python/test/test_scripts/cluster_objects.py +++ b/src/controller/python/test/test_scripts/cluster_objects.py @@ -18,9 +18,10 @@ import chip.clusters as Clusters import logging -from chip.clusters.Attribute import AttributePath, AttributeReadResult, AttributeStatus, ValueDecodeFailure +from chip.clusters.Attribute import AttributePath, AttributeReadResult, AttributeStatus, ValueDecodeFailure, TypedAttributePath, SubscriptionTransaction import chip.interaction_model import asyncio +import time logger = logging.getLogger('PythonMatterControllerTEST') logger.setLevel(logging.INFO) @@ -33,18 +34,22 @@ def _IgnoreAttributeDecodeFailure(path): - return str(path) in ignoreAttributeDecodeFailureList + return path in ignoreAttributeDecodeFailureList -def _AssumeAttributesDecodeSuccess(values): - for k, v in values['Attributes'].items(): - print(f"{k} = {v}") - if isinstance(v.Data, ValueDecodeFailure): - if _IgnoreAttributeDecodeFailure(k): - print(f"Ignoring attribute decode failure for path {k}") - else: - raise AssertionError( - f"Cannot decode value for path {k}, got error: '{str(v.Data.Reason)}', raw TLV data: '{v.Data.TLVValue}'") +def VerifyDecodeSuccess(values): + for endpoint in values: + for cluster in values[endpoint]: + for attribute in values[endpoint][cluster]: + v = values[endpoint][cluster][attribute] + print(f"EP{endpoint}/{attribute} = {v}") + if (isinstance(v, ValueDecodeFailure)): + if _IgnoreAttributeDecodeFailure((endpoint, cluster, attribute)): + print( + f"Ignoring attribute decode failure for path {endpoint}/{attribute}") + else: + raise AssertionError( + f"Cannot decode value for path {k}, got error: '{str(v.Data.Reason)}', raw TLV data: '{v.Data.TLVValue}'") def _AssumeEventsDecodeSuccess(values): @@ -135,8 +140,9 @@ async def TestSubscribeAttribute(cls, devCtrl): sub = await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=[(1, Clusters.OnOff.Attributes.OnOff)], reportInterval=(3, 10)) updated = False - def subUpdate(path, value): + def subUpdate(path: TypedAttributePath, transaction: SubscriptionTransaction): nonlocal updated + value = transaction.GetAttribute(path) logger.info( f"Received attribute update path {path}, New value {value}") updated = True @@ -168,85 +174,98 @@ async def TestReadAttributeRequests(cls, devCtrl): (0, Clusters.Basic.Attributes.HardwareVersion), ] res = await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req) - if (len(res['Attributes']) != 3): + if ((0 not in res) or (Clusters.Basic not in res[0]) or (len(res[0][Clusters.Basic]) != 3)): raise AssertionError( - f"Got back {len(res['Attributes'])} data items instead of 3") - _AssumeAttributesDecodeSuccess(res) + f"Got back {len(res)} data items instead of 3") + VerifyDecodeSuccess(res) logger.info("2: Reading Ex Cx A*") req = [ (0, Clusters.Basic), ] - _AssumeAttributesDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) + VerifyDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) logger.info("3: Reading E* Cx Ax") req = [ Clusters.Descriptor.Attributes.ServerList ] - _AssumeAttributesDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) + VerifyDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) logger.info("4: Reading Ex C* A*") req = [ 0 ] - _AssumeAttributesDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) + VerifyDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) logger.info("5: Reading E* Cx A*") req = [ Clusters.Descriptor ] - _AssumeAttributesDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) + VerifyDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) logger.info("6: Reading E* C* A*") req = [ '*' ] - _AssumeAttributesDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) + VerifyDecodeSuccess(await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req)) + + res = await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req, returnClusterObject=True) + logger.info( + f"Basic Cluster - Label: {res[0][Clusters.Basic].productLabel}") + logger.info( + f"Test Cluster - Struct: {res[1][Clusters.TestCluster].struct}") + logger.info(f"Test Cluster: {res[1][Clusters.TestCluster]}") logger.info("7: Reading Chunked List") res = await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=[(1, Clusters.TestCluster.Attributes.ListLongOctetString)]) - if res.get('Attributes', {}).get(AttributePath(EndpointId=1, Attribute=Clusters.TestCluster.Attributes.ListLongOctetString)).Data.value != [b'0123456789abcdef' * 32] * 4: + if res[1][Clusters.TestCluster][Clusters.TestCluster.Attributes.ListLongOctetString] != [b'0123456789abcdef' * 32] * 4: raise AssertionError("Unexpected read result") + async def TriggerAndWaitForEvents(cls, devCtrl, req): + res = await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestEventRequest()) + res = await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestEventRequest()) + res = await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestEventRequest()) + + for i in range(0, 10): + print("Reading out events..") + res = await devCtrl.ReadEvent(nodeid=NODE_ID, events=req) + if (len(res) != 0): + break + + time.sleep(1) + + if (len(res) == 0): + raise AssertionError("Got no events back") + @classmethod async def TestReadEventRequests(cls, devCtrl, expectEventsNum): logger.info("1: Reading Ex Cx Ex") req = [ (1, Clusters.TestCluster.Events.TestEvent), ] - res = await devCtrl.ReadEvent(nodeid=NODE_ID, events=req) - if (len(res['Events']) != expectEventsNum): - raise AssertionError( - f"Got back {len(res['Events'])} event items instead of {expectEventsNum}") - _AssumeEventsDecodeSuccess(res) + + await cls.TriggerAndWaitForEvents(cls, devCtrl, req) + logger.info("2: Reading Ex Cx E*") req = [ (1, Clusters.TestCluster), ] - res = await devCtrl.ReadEvent(nodeid=NODE_ID, events=req) - if (len(res['Events']) != 0): - raise AssertionError( - f"Got back {len(res['Events'])} event items instead of 0") - _AssumeEventsDecodeSuccess(res) + await cls.TriggerAndWaitForEvents(cls, devCtrl, req) logger.info("3: Reading Ex C* E*") req = [ 1 ] - if (len(res['Events']) != 0): - raise AssertionError( - f"Got back {len(res['Events'])} event items instead of 0") - _AssumeEventsDecodeSuccess(await devCtrl.ReadEvent(nodeid=NODE_ID, events=req)) + + await cls.TriggerAndWaitForEvents(cls, devCtrl, req) logger.info("4: Reading E* C* E*") req = [ '*' ] - if (len(res['Events']) != 0): - raise AssertionError( - f"Got back {len(res['Events'])} event items instead of 0") - _AssumeEventsDecodeSuccess(await devCtrl.ReadEvent(nodeid=NODE_ID, events=req)) + + await cls.TriggerAndWaitForEvents(cls, devCtrl, req) # TODO: Add more wildcard test for IM events.