diff --git a/dashboard/src/client/models/descriptions.ts b/dashboard/src/client/models/descriptions.ts index debff851..5888641f 100644 --- a/dashboard/src/client/models/descriptions.ts +++ b/dashboard/src/client/models/descriptions.ts @@ -12220,6 +12220,24 @@ export const clusters: Record = { } } }, + "305134641": { + "id": 305134641, + "label": "InovelliCluster", + "attributes": { + "305070177": { + "id": 305070177, + "cluster_id": 305134641, + "label": "LEDIndicatorIntensityOn", + "type": "uint" + }, + "305070178": { + "id": 305070178, + "cluster_id": 305134641, + "label": "LEDIndicatorIntensityOff", + "type": "uint" + } + } + }, "308149265": { "id": 308149265, "label": "NeoCluster", diff --git a/matter_server/common/custom_clusters.py b/matter_server/common/custom_clusters.py index aa6f7e9c..ae7849a1 100644 --- a/matter_server/common/custom_clusters.py +++ b/matter_server/common/custom_clusters.py @@ -368,6 +368,79 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: value: int = 0 +@dataclass +class InovelliCluster(Cluster, CustomClusterMixin): + """Custom (vendor-specific) cluster for Inovelli - Vendor ID 4961 (0x1361).""" + + id: ClassVar[int] = 0x122FFC31 + + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + """Return descriptor for this cluster.""" + return ClusterObjectDescriptor( + Fields=[ + ClusterObjectFieldDescriptor( + Label="ledIndicatorIntensityOn", Tag=0x122F0061, Type=uint + ), + ClusterObjectFieldDescriptor( + Label="ledIndicatorIntensityOff", Tag=0x122F0062, Type=uint + ), + ] + ) + + ledIndicatorIntenstyOn: uint | None = None + ledIndicatorIntensityOff: uint | None = None + + class Attributes: + """Attributes for the Inovelli Cluster.""" + + @dataclass + class LEDIndicatorIntensityOn( + ClusterAttributeDescriptor, CustomClusterAttributeMixin + ): + """LEDIndicatorIntensityOn Attribute within the Inovelli Cluster.""" + + @ChipUtility.classproperty + def cluster_id(cls) -> int: + """Return cluster id.""" + return 0x122FFC31 + + @ChipUtility.classproperty + def attribute_id(cls) -> int: + """Return attribute id.""" + return 0x122F0061 + + @ChipUtility.classproperty + def attribute_type(cls) -> ClusterObjectFieldDescriptor: + """Return attribute type.""" + return ClusterObjectFieldDescriptor(Type=uint) + + value: uint = 0 + + @dataclass + class LEDIndicatorIntensityOff( + ClusterAttributeDescriptor, CustomClusterAttributeMixin + ): + """LEDIndicatorIntensityOff Attribute within the Inovelli Cluster.""" + + @ChipUtility.classproperty + def cluster_id(cls) -> int: + """Return cluster id.""" + return 0x122FFC31 + + @ChipUtility.classproperty + def attribute_id(cls) -> int: + """Return attribute id.""" + return 0x122F0062 + + @ChipUtility.classproperty + def attribute_type(cls) -> ClusterObjectFieldDescriptor: + """Return attribute type.""" + return ClusterObjectFieldDescriptor(Type=uint) + + value: uint = 0 + + @dataclass class NeoCluster(Cluster, CustomClusterMixin): """Custom (vendor-specific) cluster for Neo - Vendor ID 4991 (0x137F)."""