SceneManagement Cluster
Cluster ID: 0x0062 |
Endpoint: Typically on Endpoint 1 (application endpoint)
SceneManagement is the scene management Cluster in Matter — it bundles attribute values from multiple Clusters into a single "snapshot" and restores the entire set of states with one command. For example, a "Movie Mode" scene can simultaneously dim the lights, set a warm color temperature, and close the curtains — all in one scene.
Each scene is uniquely identified by GroupID + SceneID and belongs to a Group, which can contain multiple scenes. The core data structure of a scene is ExtensionFieldSets — a set of "Cluster ID + attribute value list" snapshots that define which attributes of which Clusters are set to what values.
SceneManagement (0x0062) is the new Cluster introduced in Matter 1.4, replacing the legacy Scenes (0x0005). The new version introduces Fabric-level isolation (each Fabric independently manages its own scene table) and the FabricSceneInfo struct, resolving the security issues of shared scene tables across multiple Fabrics in the old version. New projects should use 0x0062 directly; the legacy 0x0005 has been marked as deprecated.
Commands
The SceneManagement Cluster has 8 commands covering scene CRUD operations, one-tap recall, and cross-group copying. AddScene and RecallScene are the two most commonly used in daily development. Click a command ID in the table below to jump to its detailed description.
| ID | Name | Description | Response Command |
|---|---|---|---|
0x00 |
AddScene | Add or update a scene | AddSceneResponse |
0x01 |
ViewScene | View full data of a specified scene | ViewSceneResponse |
0x02 |
RemoveScene | Remove a specified scene | RemoveSceneResponse |
0x03 |
RemoveAllScenes | Remove all scenes in a specified Group | RemoveAllScenesResponse |
0x04 |
StoreScene | Capture current state and store as a scene | StoreSceneResponse |
0x05 |
RecallScene | Recall a specified scene in one step | None |
0x06 |
GetSceneMembership | Query the list of scenes in a Group | GetSceneMembershipResponse |
0x40 |
CopyScene | Copy scenes between Groups | CopySceneResponse |
AddScene — Add Scene (0x00)
Adds a new scene to the device's scene table, or updates an existing one.
The core scene data is passed via ExtensionFieldSets — it defines which attributes of which Clusters this scene controls.
If the specified GroupID + SceneID already exists, it will be overwritten.
| Parameter | Type | Description |
|---|---|---|
| GroupID | group-id | Group ID the scene belongs to. 0x0000 means not belonging to any Group |
| SceneID | uint8 | Scene ID, unique within the Group (0x00 ~ 0xFF) |
| TransitionTime | uint32 | Transition time in units of 0.1 second (100 ms). For example, 10 = 1.0 second |
| SceneName | string | Scene name (max 16 bytes). Requires the device to support the SN feature |
| ExtensionFieldSets | list | List of attribute snapshots per Cluster (see data structure details) |
AddSceneResponse Fields
| Field | Type | Description |
|---|---|---|
| Status | status | Operation result status code |
| GroupID | group-id | Group ID the scene belongs to |
| SceneID | uint8 | Scene ID |
Usage Scenarios
A user creates a "Movie Mode" in the app: lights dimmed to 10%, color temperature set to warm white, curtains closed. The app packages these attribute values into ExtensionFieldSets, stores them on the device via AddScene, and later recalls them with RecallScene in one step.
ViewScene — View Scene (0x01)
Reads the full data of a specified scene, including transition time, scene name, and ExtensionFieldSets. Used to display scene details in the app UI or to retrieve the current configuration before editing.
| Parameter | Type | Description |
|---|---|---|
| GroupID | group-id | Group ID the scene belongs to |
| SceneID | uint8 | Scene ID to view |
ViewSceneResponse Fields
| Field | Type | Description |
|---|---|---|
| Status | status | Operation result status code |
| GroupID | group-id | Group ID |
| SceneID | uint8 | Scene ID |
| TransitionTime | uint32 | Transition time (0.1 second) |
| SceneName | string | Scene name |
| ExtensionFieldSets | list | Attribute snapshots per Cluster |
Usage Scenarios
When the app's scene editing page loads, it first uses ViewScene to read the current configuration and display it to the user. After the user makes changes, the app updates the scene via AddScene.
RemoveScene — Remove Scene (0x02)
Removes a specified scene from the device's scene table. After removal, the SceneID can be reused.
| Parameter | Type | Description |
|---|---|---|
| GroupID | group-id | Group ID the scene belongs to |
| SceneID | uint8 | Scene ID to remove |
RemoveSceneResponse Fields
| Field | Type | Description |
|---|---|---|
| Status | status | Operation result status code |
| GroupID | group-id | Group ID |
| SceneID | uint8 | Scene ID |
Usage Scenarios
A user removes a scene no longer needed from the app, such as deleting an old "Party Mode".
RemoveAllScenes — Remove All Scenes in Group (0x03)
Removes all scenes in a specified Group at once. Suitable for resetting or clearing all scene configurations in an area.
| Parameter | Type | Description |
|---|---|---|
| GroupID | group-id | Group ID whose scenes are to be removed |
RemoveAllScenesResponse Fields
| Field | Type | Description |
|---|---|---|
| Status | status | Operation result status code |
| GroupID | group-id | Group ID |
Usage Scenarios
After redecorating, a user clears all old scenes in the "Living Room" Group to reconfigure from scratch.
StoreScene — Capture Current State (0x04)
Takes a "snapshot" of the device's current actual state and saves it as a scene. The device automatically reads the current attribute values from its own Clusters and packages them into ExtensionFieldSets stored in the scene table. Unlike AddScene, which requires manually specifying each attribute value, StoreScene is more like a "save current state" shortcut.
| Parameter | Type | Description |
|---|---|---|
| GroupID | group-id | Group ID the scene belongs to |
| SceneID | uint8 | Scene ID (overwrites if it already exists) |
StoreSceneResponse Fields
| Field | Type | Description |
|---|---|---|
| Status | status | Operation result status code |
| GroupID | group-id | Group ID |
| SceneID | uint8 | Scene ID |
Usage Scenarios
After a user adjusts the lights to their preferred state using a slider, they tap the "Save as Scene" button. The app sends a StoreScene command, and the device automatically stores the current brightness, color temperature, and other attribute values into the scene table. No need for the app to read each attribute value individually and pass them via AddScene.
RecallScene — Recall Scene (0x05)
Recalls a specified scene in one step. The device reads the ExtensionFieldSets saved in the scene and sets each Cluster's attribute values to the target values recorded in the scene. If TransitionTime is specified, the device transitions smoothly within the given duration (e.g., gradual dimming).
| Parameter | Type | Required | Description |
|---|---|---|---|
| GroupID | group-id | Yes | Group ID the scene belongs to |
| SceneID | uint8 | Yes | Scene ID to recall |
| TransitionTime | uint32 | No | Overrides the scene's own transition time (0.1 second). If omitted, uses the value stored with the scene |
The unit of TransitionTime is 0.1 second (100 ms), not seconds or milliseconds.
For example, a value of 10 means 1.0 second, and 30 means 3.0 seconds.
This differs from the legacy Scenes Cluster which used whole-second units; the new version provides higher precision.
Usage Scenarios
A user taps the "Movie Mode" button in the app, which sends RecallScene. The lights dim from their current brightness to 10% within 1 second, the color temperature gradually shifts to warm white, and the curtains slowly close. All devices execute synchronously with a smooth, natural transition.
GetSceneMembership — Query Scene List (0x06)
Queries which scenes exist in a specified Group. Returns the list of all stored SceneIDs under that Group and the remaining capacity. Used to display the scene list in the app UI or to determine how many more scenes can be created.
| Parameter | Type | Description |
|---|---|---|
| GroupID | group-id | Group ID to query |
GetSceneMembershipResponse Fields
| Field | Type | Description |
|---|---|---|
| Status | status | Operation result status code |
| Capacity | uint8 / null | Remaining scene storage capacity. null means unknown |
| GroupID | group-id | Group ID |
| SceneList | list<uint8> | List of SceneIDs stored in this Group |
Usage Scenarios
When the app opens the "Scene Management" page, it first calls GetSceneMembership to retrieve all scene IDs in the current Group, then calls ViewScene for each one to fetch the scene details and display them in a list.
CopyScene — Copy Scene (0x40)
Copies scenes between Groups. Can copy a single scene or all scenes from a source Group to a target Group at once. Ideal for sharing the same scene configuration across different rooms.
| Parameter | Type | Description |
|---|---|---|
| Mode | CopyModeBitmap | Bit 0: CopyAllScenes — when set to 1, copies all scenes from the source Group |
| GroupIdentifierFrom | group-id | Source Group ID |
| SceneIdentifierFrom | uint8 | Source Scene ID (ignored when CopyAllScenes = 1) |
| GroupIdentifierTo | group-id | Target Group ID |
| SceneIdentifierTo | uint8 | Target Scene ID (ignored when CopyAllScenes = 1) |
CopySceneResponse Fields
| Field | Type | Description |
|---|---|---|
| Status | status | Operation result status code |
| GroupIdentifierFrom | group-id | Source Group ID |
| SceneIdentifierFrom | uint8 | Source Scene ID |
Usage Scenarios
A user has configured a "Reading Mode" scene in the living room and wants the same configuration in the study. Using CopyScene, the scene is copied from the living room Group to the study Group without needing to reconfigure each attribute value.
Attributes
The SceneManagement Cluster has 3 attributes. Scene data itself is not exposed through attributes but is read via the ViewScene / GetSceneMembership commands. The attributes provide metadata such as scene table capacity and current state information.
| ID | Name | Type | Description |
|---|---|---|---|
0x0000 |
LastConfiguredBy Removed in newer versions | node-id / null | Node ID that last modified the scene table |
0x0001 |
SceneTableSize | uint16 | Total scene table capacity |
0x0002 |
FabricSceneInfo | list<FabricSceneInfo> | Scene summary info per Fabric |
LastConfiguredBy(0x0000) Removed in newer versions
LastConfiguredBy is no longer part of newer Matter specifications (it is absent from the connectedhomeip v1.6 definitions this site checks against). Devices built to newer versions will not implement it; this section is kept only as a reference for older devices. Newer versions no longer expose a "last configured by" value; per-fabric scene details are provided through FabricSceneInfo instead.
Records the Node ID that last modified the scene table.
Useful for troubleshooting "who changed the scene configuration" issues.
A value of null means the scene table has never been modified, or the device does not support tracking this information.
| ID | Name | Type | Description |
|---|---|---|---|
0x0000 |
LastConfiguredBy Removed in newer versions | node-id / null | Nullable. Records the Node that last modified the scene table via AddScene / RemoveScene / StoreScene or similar commands. null = not recorded or never modified |
SceneTableSize(0x0001)
The maximum capacity of the device's scene table, i.e., the maximum number of scenes it can store. This is the total capacity shared across all Fabrics. Typical device values range from 8 to 16.
| ID | Name | Type | Description |
|---|---|---|---|
0x0001 |
SceneTableSize | uint16 | Total scene table capacity. Multiple Fabrics share this capacity limit; for example, a value of 16 means all Fabrics combined can store at most 16 scenes |
FabricSceneInfo(0x0002)
Scene state information independently maintained by each Fabric. This is a list where each element corresponds to one Fabric. Through it, you can determine how many scenes the current Fabric has, which scene is currently active, and how many more can be stored.
An important design aspect of SceneManagement is Fabric-level isolation: each Fabric (think of it as each smart home platform, such as Apple Home or Google Home) can only see and operate its own scenes, and cannot read or modify another Fabric's scene data. FabricSceneInfo also only returns information for the current Fabric.
| Field | Type | Description |
|---|---|---|
| SceneCount | uint8 | Number of scenes currently stored by this Fabric |
| CurrentScene | uint8 | Currently active Scene ID (the scene from the last RecallScene / StoreScene) |
| CurrentGroup | group-id | Group ID of the currently active scene |
| SceneValid | bool | Whether the current scene state is still valid. Becomes false if device attributes are manually changed (not through a scene operation) |
| RemainingCapacity | uint8 | Number of additional scenes this Fabric can still store |
| FabricIndex | fabric-idx | Fabric index this record corresponds to |
After a scene is recalled via RecallScene, SceneValid becomes true.
However, if the user subsequently adjusts brightness or color temperature manually (not through a scene operation), the device's actual state no longer matches the scene record,
and SceneValid reverts to false.
This field can be used to determine whether the current device state still matches a scene.
Core Data Structures
ExtensionFieldSets (Extension Field Sets)
ExtensionFieldSets is the core data of a scene — it records "which attributes of which Clusters this scene sets to what values." The structure is a list where each element contains a Cluster ID and the list of attribute values to set for that Cluster.
| Level | Field | Type | Description |
|---|---|---|---|
| ExtensionFieldSet | ClusterID | cluster-id | Cluster ID to control, e.g. 0x0006 (OnOff) |
| AttributeValueList | list | List of attribute values for this Cluster | |
| AttributeValuePair | AttributeID | attrib-id | Attribute ID, e.g. 0x0000 (OnOff on/off state) |
| ValueUnsigned8/16/... | various | Attribute value; the type depends on the attribute's definition |
For example, a "Movie Mode" scene's ExtensionFieldSets might contain:
- OnOff (0x0006): On/Off = On
- LevelControl (0x0008): Brightness = 25 (approx. 10%)
- ColorControl (0x0300): Color X = 370, Color Y = 300 (warm white)
When the device executes RecallScene, it reads these attribute pairs one by one and invokes the corresponding Cluster's logic to set the attribute values.
Each Cluster needs to implement the ScenesManagement callback interface to support scene storage and recall.
Feature Bitmap
The SceneManagement Cluster declares the device's advanced capabilities via FeatureMap (0xFFFC):
The SN feature is optional. Devices that do not support SN will ignore the SceneName parameter in AddScene, and ViewScene will return an empty string for SceneName. If the app needs to display scene names, it can store them locally in the app without relying on the device.
Example Data
Attribute Read Example
Return data when reading SceneManagement Cluster attributes:
{
// --- Scene table info ---
"0x0001": 16, // SceneTableSize = 16 (max 16 scenes)
// --- Fabric scene info ---
"0x0002": [ // FabricSceneInfo (current Fabric's scene summary)
{
"SceneCount": 3, // Current Fabric has 3 stored scenes
"CurrentScene": 1, // Currently active Scene ID
"CurrentGroup": 0, // Group ID of the currently active scene
"SceneValid": true, // Current scene state is valid
"RemainingCapacity": 13, // Can store 13 more scenes
"FabricIndex": 1 // Fabric index
}
]
}
AddScene Command Example
Create a "Movie Mode" scene containing attribute snapshots from three Clusters: OnOff, LevelControl, and ColorControl:
{
"invokeRequests": [{
"commandPath": {
"endpointId": 1,
"clusterId": "0x0062",
"commandId": "0x00" // AddScene
},
"commandFields": {
"GroupID": 0, // Group ID (0 = not in any Group)
"SceneID": 1, // Scene ID
"TransitionTime": 10, // Transition time = 1.0 second (unit: 0.1 second)
"SceneName": "Movie", // Scene name (requires SN feature)
"ExtensionFieldSets": [ // Attribute snapshots per Cluster
{
"ClusterID": "0x0006", // OnOff Cluster
"AttributeValueList": [
{ "AttributeID": "0x0000", "ValueUnsigned8": 1 }
]
},
{
"ClusterID": "0x0008", // LevelControl Cluster
"AttributeValueList": [
{ "AttributeID": "0x0000", "ValueUnsigned8": 25 }
]
},
{
"ClusterID": "0x0300", // ColorControl Cluster
"AttributeValueList": [
{ "AttributeID": "0x0003", "ValueUnsigned16": 370 },
{ "AttributeID": "0x0004", "ValueUnsigned16": 300 }
]
}
]
}
}]
}
In practice, ExtensionFieldSets should only include Clusters that the device actually supports. Before sending, you can check which Clusters the device has via the Descriptor Cluster's (0x001D) ServerList, to avoid command failures caused by including unsupported Clusters.
Common Scenarios
Scenario 1: Movie Mode — Dim Lights in One Tap
Goal: User taps the "Movie Mode" button, and the lights transition to dim warm lighting within 2 seconds.
- When creating the scene, use
AddScene (0x00)to set ExtensionFieldSets:- OnOff: On
- LevelControl: Brightness = 25 (approx. 10%)
- ColorControl: Color temperature set to warm white
- For daily use, the app sends
RecallScene (0x05)with the GroupID and SceneID - The device smoothly transitions to the target state within 2 seconds, with lights naturally dimming and warming
- If the user wants an instant switch without transition, override TransitionTime = 0 in RecallScene
Scenario 2: Wake-Up Mode — Natural Morning Wake-Up
Goal: Every morning at 7:00 AM, the lights gradually brighten from off to bright cool white, simulating a sunrise.
- Use
AddScene (0x00)to create a "Wake-Up" scene:- OnOff: On
- LevelControl: Brightness = 254 (100%)
- ColorControl: Color temperature set to cool white (daylight)
- Set up an automation rule: trigger
RecallScene (0x05)daily at 07:00 - The lights gradually brighten from off to daylight white over 1 minute for a natural wake-up
- Can be combined with OnOff Cluster's OnWithTimedOff as a forget-to-turn-off safeguard: auto-off 30 minutes after wake-up
Scenario 3: One-Tap Scene Switching — Physical Button Trigger
Goal: A wall switch's single-press / double-press triggers different scenes respectively.
- Pre-configure two scenes:
- SceneID = 1 "Daily": Brightness 80%, natural white light
- SceneID = 2 "Movie": Brightness 10%, warm white light
- Configure in binding rules (Binding):
- Switch single-press -> RecallScene (GroupID=0, SceneID=1)
- Switch double-press -> RecallScene (GroupID=0, SceneID=2)
- Scene switching executes entirely locally (via Group multicast), without cloud dependency, for extremely fast response
-
Using
StoreScene (0x04), users can customize: adjust the lights to their preferred state, then long-press the switch to trigger StoreScene, saving the current state as the scene mapped to that button