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.