Matter Cluster 260 — Closure Control
Matter Cluster 260 (0x0104) Closure Control: attributes, commands, events, data types, shadow paths and bridge payload examples.
Matter Cluster 260 — Closure Control Cluster
Matter Cluster 260, also written as 0x0104, is the Closure Control Cluster.
This cluster provides an interface for controlling a Closure.
Cluster Identity
| Field | Value |
|---|---|
| Cluster ID decimal | 260 |
| Cluster ID hex | 0x0104 |
| Cluster name | Closure Control |
| Cluster revision (Matter 1.6.1) | 1 |
| Role | application |
| Scope | Endpoint |
| PICS code | CLCTRL |
| Typical endpoint | 1 |
Revision history
| Revision | Change |
|---|---|
| 1 | Initial revision |
Shadow Path Format
Cluster 260 values in the device shadow use this format:
endpoint_id / 260 / attribute_id
Example:
{
"1/260/1": 0
}
| Part | Meaning |
|---|---|
1 | Endpoint ID |
260 | Closure Control cluster |
1 | MainState attribute |
Cluster 260 Features
The FeatureMap attribute (1/260/65532) is a bitmap. Each bit set means the device implements that feature and the attributes and commands that depend on it.
| Bit | Code | Feature | Conformance | Meaning |
|---|---|---|---|---|
| 0 | PS | Positioning | O | Supports Positioning with at least Fully Opened (0%) and Fully Closed (100%) discrete positions |
| 1 | LT | MotionLatching | O | Supports a latch (securing a position, or a state) |
| 2 | IS | Instantaneous | O | Supports the Instantaneous feature |
| 3 | SP | Speed | [PS & !IS] | Supports Speed motion throttling |
| 4 | VT | Ventilation | [PS] | Supports Ventilation discrete state |
| 5 | PD | Pedestrian | [PS] | Supports Pedestrian discrete state |
| 6 | CL | Calibration | [PS] | Supports the Calibration feature |
| 7 | PT | Protection | O | Supports the Protection feature |
| 8 | MO | ManuallyOperable | O | Supports the manual operation feature |
Example: FeatureMap = 0 means no optional feature is enabled; 511 means every feature listed above is enabled.
Data Types
ClosureErrorEnum
The following ranges are reserved for general and manufacturer specified closure errors. The manufacturer-specific error definitions must NOT duplicate the general error definitions.
| Value | Name | Conformance | Meaning |
|---|---|---|---|
| 0 | PhysicallyBlocked | M | An obstacle is blocking the closure movement |
| 1 | BlockedBySensor | M | The closure is unsafe to move, as determined by a sensor (e.g. photoelectric sensor) before attempting movement |
| 2 | TemperatureLimited | M | A warning raised by the closure that indicates an over-temperature, e.g. due to excessive drive or stall current |
| 3 | MaintenanceRequired | M | Some malfunctions that are not easily recoverable are detected, or urgent servicing is needed |
| 4 | InternalInterference | M | An internal element is prohibiting motion, e.g. an integrated door within a bigger garage door is open and prevents motion |
CurrentPositionEnum
| Value | Name | Conformance | Meaning |
|---|---|---|---|
| 0 | FullyClosed | M | Fully closed state |
| 1 | FullyOpened | M | Fully opened state |
| 2 | PartiallyOpened | M | Partially opened state (closure is not fully opened or fully closed) |
| 3 | OpenedForPedestrian | PD | Closure is in the Pedestrian position |
| 4 | OpenedForVentilation | VT | Closure is in the Ventilation position |
| 5 | OpenedAtSignature | M | Closure is in its "Signature position" |
MainStateEnum
| Value | Name | Conformance | Meaning |
|---|---|---|---|
| 0 | Stopped | M | Closure is stopped |
| 1 | Moving | M | Closure is actively moving |
| 2 | WaitingForMotion | M | Closure is waiting before a motion (e.g. pre-heat, pre-check) |
| 3 | Error | M | Closure is in an error state |
| 4 | Calibrating | CL | Closure is currently calibrating its Opened and Closed limits to determine effective physical range |
| 5 | Protected | PT | Some protective measures are activated to prevent damage to the closure. Commands MAY be rejected. |
| 6 | Disengaged | MO | Closure has a disengaged element preventing any actuator movements |
| 7 | SetupRequired | M | Movement commands are ignored since the closure is not operational and requires further setup and/or calibration |
TargetPositionEnum
| Value | Name | Conformance | Meaning |
|---|---|---|---|
| 0 | MoveToFullyClosed | M | Move to a fully closed state |
| 1 | MoveToFullyOpen | M | Move to a fully open state |
| 2 | MoveToPedestrianPosition | PD | Move to the Pedestrian position |
| 3 | MoveToVentilationPosition | VT | Move to the Ventilation position |
| 4 | MoveToSignaturePosition | M | Move to the Signature position |
LatchControlModesBitmap (bitmap)
| Bit | Name | Conformance | Meaning |
|---|---|---|---|
| 0 | RemoteLatching | LT | Remote latching capability |
| 1 | RemoteUnlatching | LT | Remote unlatching capability |
OverallCurrentStateStruct (struct)
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 0 | Position | CurrentPositionEnum (nullable) | PS | desc | Indicates the current Position state of the closure, as defined in the CurrentPositionEnum. |
| 1 | Latch | bool (nullable) | LT | desc | Indicates the current latching state of the closure. |
| 2 | Speed | ThreeLevelAutoEnum | SP | desc | Indicates the current speed of the closure, as defined in the ThreeLevelAutoEnum. |
| 3 | SecureState | bool (nullable) | M | desc | Indicates the current secure state of the closure. |
OverallTargetStateStruct (struct)
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 0 | Position | TargetPositionEnum (nullable) | PS | — | Indicates the target position that the closure is moving to. |
| 1 | Latch | bool (nullable) | LT | — | Indicates the desired latching state of the closure. |
| 2 | Speed | ThreeLevelAutoEnum | SP | — | Indicates the desired speed at which the closure should perform the movement toward the target position. |
Cluster 260 Attributes
Cluster 260 defines 6 attributes plus the global attributes. Conformance: M mandatory, O optional, a feature code means "mandatory when that feature is present", square brackets mean "optional when …".
| ID | Hex | Attribute | Type | Conformance | Access | Qualities | Default |
|---|---|---|---|---|---|---|---|
| 0 | 0x0000 | CountdownTime | elapsed-s | [PS & !IS] | R (read: view) | nullable, quiet reporting | null |
| 1 | 0x0001 | MainState | MainStateEnum | M | R (read: view) | — | — |
| 2 | 0x0002 | CurrentErrorList | list of ClosureErrorEnum | M | R (read: view) | — | — |
| 3 | 0x0003 | OverallCurrentState | OverallCurrentStateStruct | M | R (read: view) | nullable | null |
| 4 | 0x0004 | OverallTargetState | OverallTargetStateStruct | M | R (read: view) | nullable | null |
| 5 | 0x0005 | LatchControlModes | LatchControlModesBitmap | LT | R (read: view) | — | — |
Global attributes
| ID | Hex | Attribute | Meaning |
|---|---|---|---|
| 65528 | 0xFFF8 | GeneratedCommandList | Response command IDs this server generates. |
| 65529 | 0xFFF9 | AcceptedCommandList | Command IDs this server accepts. |
| 65531 | 0xFFFB | AttributeList | Attribute IDs implemented. |
| 65532 | 0xFFFC | FeatureMap | Implemented optional features (see above). |
| 65533 | 0xFFFD | ClusterRevision | Cluster revision implemented; 1 for a Matter 1.6.1 device. |
Attribute Details
Attribute 0 / 0x0000 — CountdownTime
Path example:
1/260/0
Indicates the estimated time left before the operation is completed, in seconds. A value of 0 (zero) means that the operation has completed. A value of null indicates that there is no time currently defined until operation completion. This may happen because the completion time is unknown.
| Property | Value |
|---|---|
| Type | elapsed-s |
| Conformance | [PS & !IS] |
| Access | R (read: view) |
| Qualities | nullable, quiet reporting |
| Constraint | max 259200 |
| Default | null |
Example:
{
"1/260/0": 0
}
Attribute 1 / 0x0001 — MainState
Path example:
1/260/1
Indicates the current operational state of the closure associated with the server. The MainState diagram is provided exclusively for informational purposes only and is an exemplary design of the internals of a closure implementation to help illustrate the aspects of function that are considered by the cluster's normative text.
| Property | Value |
|---|---|
| Type | MainStateEnum |
| Conformance | M |
| Access | R (read: view) |
Values (MainStateEnum):
| Value | Name | Meaning |
|---|---|---|
| 0 | Stopped | Closure is stopped |
| 1 | Moving | Closure is actively moving |
| 2 | WaitingForMotion | Closure is waiting before a motion (e.g. pre-heat, pre-check) |
| 3 | Error | Closure is in an error state |
| 4 | Calibrating | Closure is currently calibrating its Opened and Closed limits to determine effective physical range |
| 5 | Protected | Some protective measures are activated to prevent damage to the closure. Commands MAY be rejected. |
| 6 | Disengaged | Closure has a disengaged element preventing any actuator movements |
| 7 | SetupRequired | Movement commands are ignored since the closure is not operational and requires further setup and/or calibration |
Example:
{
"1/260/1": 0
}
Attribute 2 / 0x0002 — CurrentErrorList
Path example:
1/260/2
Indicates the currently active errors. An empty list indicates that there are no active errors. There must NOT be duplicate values of ClosureErrorEnum within the CurrentErrorList.
| Property | Value |
|---|---|
| Type | list of ClosureErrorEnum |
| Conformance | M |
| Access | R (read: view) |
| Constraint | max 10 entries |
Example:
{
"1/260/2": []
}
Attribute 3 / 0x0003 — OverallCurrentState
Path example:
1/260/3
Indicates the current Position, Latch and/or Speed states, whichever are applicable according to the feature flags set. Null, if the state is unknown. Examples could be, but are not limited to: - The state of Position/Latch is not known yet because the closure is not calibrated. - The product has lost its Position/Latch state after manual motion during a shutdown. The values of the different fields within the structure of this attribute depend on: - The effects of MoveTo commands. - The effects of SetTarget and Step commands in a Closure Dimension Cluster associated with this cluster. - The Stop command.
| Property | Value |
|---|---|
| Type | OverallCurrentStateStruct |
| Conformance | M |
| Access | R (read: view) |
| Qualities | nullable |
| Default | null |
Value is a OverallCurrentStateStruct struct (see Data Types).
Example:
{
"1/260/3": {
"position": 0,
"latch": true,
"speed": 0,
"secureState": true
}
}
Attribute 4 / 0x0004 — OverallTargetState
Path example:
1/260/4
Indicates the TargetPosition, TargetLatch and/or TargetSpeed values, whichever are applicable according to the feature flags set. Null, if the state is unknown. For example after a reboot.
| Property | Value |
|---|---|
| Type | OverallTargetStateStruct |
| Conformance | M |
| Access | R (read: view) |
| Qualities | nullable |
| Default | null |
Value is a OverallTargetStateStruct struct (see Data Types).
Example:
{
"1/260/4": {
"position": 0,
"latch": true,
"speed": 0
}
}
Attribute 5 / 0x0005 — LatchControlModes
Path example:
1/260/5
This attribute specifies whether the latch mechanism can be latched or unlatched remotely.
| Property | Value |
|---|---|
| Type | LatchControlModesBitmap |
| Conformance | LT |
| Access | R (read: view) |
Bits (LatchControlModesBitmap):
| Bit | Name | Meaning |
|---|---|---|
| 0 | RemoteLatching | Remote latching capability |
| 1 | RemoteUnlatching | Remote unlatching capability |
Example:
{
"1/260/5": 0
}
Cluster 260 Commands
Cluster 260 has 3 client-to-server commands and 0 responses.
| ID | Hex | Command | Direction | Conformance | Response | Description |
|---|---|---|---|---|---|---|
| 0 | 0x00 | Stop | client → server | !IS | status | On receipt of this command, the closure must stop its movement as fast as the closure is able too. |
| 1 | 0x01 | MoveTo | client → server | M | status | On receipt of this command, the closure must operate to update its position, latch state and/or motion speed. |
| 2 | 0x02 | Calibrate | client → server | CL | status | This command is used to trigger a calibration of the closure. |
AcceptedCommandList
The AcceptedCommandList attribute lists the command IDs the endpoint actually implements:
endpoint_id / 260 / 65529
{
"1/260/65529": [
0,
1,
2
]
}
Before sending a Cluster 260 command, check that the command ID exists in endpoint/260/65529. Optional commands are only present when the matching feature is set in FeatureMap.
Bridge Command Payload Format
The bridge accepts Matter commands in this structure:
{
"message_id": "1",
"command": "device_command",
"args": {
"endpoint_id": 1,
"cluster_id": 260,
"command_name": "Stop",
"payload": {},
"timed_request_timeout_ms": 1000
}
}
For Cluster 260, always use "cluster_id": 260. Payload keys are the command field names in lowerCamelCase. Octet-string fields are base64-encoded. timed_request_timeout_ms is required for timed commands and ignored otherwise.
Command: Stop
Purpose
On receipt of this command, the closure must stop its movement as fast as the closure is able too. If the server's MainState attribute has one of the following values: - Moving - WaitingForMotion - Calibrating then any motions is stopped and the MainState attribute is set to Stopped. A status code of SUCCESS must always be returned, regardless of the value of the MainState attribute when this command is received.
Command Identity
| Field | Value |
|---|---|
| Command ID | 0 |
| Command hex | 0x00 |
| Command name | Stop |
| Direction | client → server |
| Conformance | !IS |
| Response | status |
| Access | (invoke: operate) |
Payload Fields
This command has no payload fields.
Bridge Command Example
{
"message_id": "1",
"command": "device_command",
"args": {
"endpoint_id": 1,
"cluster_id": 260,
"command_name": "Stop",
"payload": {}
}
}
Command: MoveTo
Purpose
On receipt of this command, the closure must operate to update its position, latch state and/or motion speed. The rationale behind defining the conformance as being purely optional in the table above is to ensure that commands containing one or more fields related to unsupported features are still accepted, rather than being rejected outright. For example, if a simple client, which is not able to determine the capabilities of the server, invokes a command that includes both position and speed, a server that does not support the speed feature would simply ignore the speed field while still adjusting its position as requested.
Command Identity
| Field | Value |
|---|---|
| Command ID | 1 |
| Command hex | 0x01 |
| Command name | MoveTo |
| Direction | client → server |
| Conformance | M |
| Response | status |
| Access | (invoke: operate, timed) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | Position | position | TargetPositionEnum | O | — | Indicates the position where the closure is moving to, as defined in the TargetPositionEnum. |
| 1 | Latch | latch | bool | O | — | Indicates the desired latching state of the closure, as defined in the OverallCurrentStateStruct Latch Field. |
| 2 | Speed | speed | ThreeLevelAutoEnum | O | — | Indicates a desired overall speed of motion, as defined in the ThreeLevelAutoEnum. |
Position values (TargetPositionEnum): 0 = MoveToFullyClosed, 1 = MoveToFullyOpen, 2 = MoveToPedestrianPosition, 3 = MoveToVentilationPosition, 4 = MoveToSignaturePosition
Bridge Command Example
{
"message_id": "1",
"command": "device_command",
"args": {
"endpoint_id": 1,
"cluster_id": 260,
"command_name": "MoveTo",
"payload": {
"position": 0,
"latch": true
},
"timed_request_timeout_ms": 1000
}
}
This is a timed command: the bridge must send it inside a timed interaction, so timed_request_timeout_ms is required.
Command: Calibrate
Purpose
This command is used to trigger a calibration of the closure.
Command Identity
| Field | Value |
|---|---|
| Command ID | 2 |
| Command hex | 0x02 |
| Command name | Calibrate |
| Direction | client → server |
| Conformance | CL |
| Response | status |
| Access | (invoke: manage, timed) |
Payload Fields
This command has no payload fields.
Bridge Command Example
{
"message_id": "1",
"command": "device_command",
"args": {
"endpoint_id": 1,
"cluster_id": 260,
"command_name": "Calibrate",
"payload": {},
"timed_request_timeout_ms": 1000
}
}
This is a timed command: the bridge must send it inside a timed interaction, so timed_request_timeout_ms is required.
Cluster 260 Events
| ID | Hex | Event | Priority | Conformance | Description |
|---|---|---|---|---|---|
| 0 | 0x00 | OperationalError | critical | M | This event is generated when a reportable error condition is detected. |
| 1 | 0x01 | MovementCompleted | info | !IS | This event, if supported, is generated when the overall operation ends, either successfully or otherwise. |
| 2 | 0x02 | EngageStateChanged | info | MO | This event, if supported, is generated when the MainStateEnum attribute changes state to and from disengaged, indicating if the actuator is Engaged or Disengaged. |
| 3 | 0x03 | SecureStateChanged | info | M | This event, if supported, is generated when the SecureState field in the OverallCurrentState attribute changes. |
Event 0 — OperationalError
This event is generated when a reportable error condition is detected. A closure that generates this event must also set the MainState attribute to Error, indicating an error condition. This event contains the following fields:
| ID | Field | Type | Conformance | Meaning |
|---|---|---|---|---|
| 0 | ErrorState | list of ClosureErrorEnum | M | — |
Event 1 — MovementCompleted
This event, if supported, is generated when the overall operation ends, either successfully or otherwise. For example, the event is sent upon the completion of a movement operation in a blind.
This event has no fields.
Event 2 — EngageStateChanged
This event, if supported, is generated when the MainStateEnum attribute changes state to and from disengaged, indicating if the actuator is Engaged or Disengaged. This event contains the following fields: - True, when the actuator is in a Engaged state, actuator movements possible. - False, when the actuator is in a Disengaged state, preventing any actuator movements.
| ID | Field | Type | Conformance | Meaning |
|---|---|---|---|---|
| 0 | EngageValue | bool | M | — |
Event 3 — SecureStateChanged
This event, if supported, is generated when the SecureState field in the OverallCurrentState attribute changes. It is used to indicate whether a closure is securing a space against possible unauthorized entry. This event contains the following fields: - True, when the closure is in a secure state, e.g. unauthorized/undetectable access is not possible. - False, when the closure is in an insecure state, e.g. unauthorized/undetectable access is possible.
| ID | Field | Type | Conformance | Meaning |
|---|---|---|---|---|
| 0 | SecureValue | bool | M | — |
SmartphoneKey Notes
- Cluster 260 is not currently exposed by SmartphoneKey devices. This page documents the Matter 1.6.1 specification so that future devices can be interpreted without changes to the backend.
- Shadow paths follow
endpoint/260/attribute; attribute values that the device reports as unreadable are written asn/a. - Attribute IDs, command IDs and enum values on this page come from the CSA Matter 1.6.1 data model; descriptions are condensed from the specification text.