通用配网 Cluster(GeneralCommissioning)
Cluster ID: 0x0030 |
所在 Endpoint: 固定在 Endpoint 0(Root Endpoint)
GeneralCommissioning 是 Matter 配网(Commissioning)流程的总控 Cluster —— 负责管理整个配网过程的生命周期。 它不处理具体的网络凭据(那是 NetworkCommissioning 的事), 而是控制配网流程的「开始」「推进」和「结束」,并通过 Fail-Safe 机制保证配网失败时设备能安全回滚。
如果把配网流程比作一次数据库事务,GeneralCommissioning 就是负责 BEGIN / COMMIT / ROLLBACK 的那个角色。
ArmFailSafe 相当于 BEGIN(开启事务),CommissioningComplete 相当于 COMMIT(提交事务),
而 Fail-Safe 超时则自动触发 ROLLBACK(回滚所有变更)。
命令(Commands)
GeneralCommissioning Cluster 共有 3 个请求命令,每个都有对应的响应命令。 这三个命令构成了配网流程的骨架:先启动安全计时器,再设置法规配置,最后提交完成。 点击下方表格中的命令 ID 可跳转到对应的详细说明。
Client → Server(请求命令)
| ID | 名称 | 说明 | 响应 |
|---|---|---|---|
0x00 |
ArmFailSafe | 启动/续期 Fail-Safe 计时器 | ArmFailSafeResponse |
0x02 |
SetRegulatoryConfig | 设置设备的法规区域配置 | SetRegulatoryConfigResponse |
0x04 |
CommissioningComplete | 确认配网完成,提交所有变更 | CommissioningCompleteResponse |
Server → Client(响应命令)
| ID | 名称 | 说明 | 对应请求 |
|---|---|---|---|
0x01 |
ArmFailSafeResponse | 返回 Fail-Safe 启动结果 | ArmFailSafe |
0x03 |
SetRegulatoryConfigResponse | 返回法规配置结果 | SetRegulatoryConfig |
0x05 |
CommissioningCompleteResponse | 返回配网完成结果 | CommissioningComplete |
ArmFailSafe —— 启动 Fail-Safe(0x00)
启动或续期 Fail-Safe 计时器。这是配网流程的第一步 —— 在做任何配网操作之前,必须先调用它开启安全保护。 Fail-Safe 计时器一旦启动,设备会进入「可配网」状态;如果计时器超时而配网未完成(未收到 CommissioningComplete), 设备会自动回滚所有已执行的配网变更,恢复到配网前的状态。
| 参数 | 类型 | 说明 |
|---|---|---|
| ExpiryLengthSeconds | uint16 | Fail-Safe 超时秒数。设为 0 表示立即取消当前 Fail-Safe(主动回滚) |
| Breadcrumb | uint64 | 配网进度标记,写入设备的 Breadcrumb 属性 |
ArmFailSafeResponse 响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| ErrorCode | CommissioningErrorEnum | 操作结果 |
| DebugText | String | 可选的调试信息 |
ExpiryLengthSeconds 不能超过 BasicCommissioningInfo.MaxCumulativeFailsafeSeconds(通常 900 秒 = 15 分钟)。
超过此上限会返回 ValueOutsideRange 错误。
此外,同一时间只有一个 Commissioner 能持有 Fail-Safe —— 如果另一个 Commissioner 已经在配网,
会返回 BusyWithOtherAdmin。
使用场景与注意事项
Commissioner(App)在开始配网时调用 ArmFailSafe 启动计时器。
如果配网过程耗时较长(比如等用户输入 Wi-Fi 密码),可以在超时前再次调用 ArmFailSafe 续期。
将 ExpiryLengthSeconds 设为 0 是主动放弃配网的方式 —— 设备会立即回滚所有变更。
SetRegulatoryConfig —— 设置法规配置(0x02)
设置设备的法规区域(室内/室外)和国家代码。不同国家和地区对无线电设备有不同的法规要求(如发射功率、可用频段), 设备需要根据法规配置来调整自己的无线参数。
| 参数 | 类型 | 说明 |
|---|---|---|
| NewRegulatoryConfig | RegulatoryLocationTypeEnum | 目标法规配置(Indoor / Outdoor / IndoorOutdoor) |
| CountryCode | String (2 字符) | ISO 3166-1 alpha-2 国家代码(如 "CN"、"US")。"XX" 表示不指定 |
| Breadcrumb | uint64 | 配网进度标记 |
SetRegulatoryConfigResponse 响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| ErrorCode | CommissioningErrorEnum | 操作结果 |
| DebugText | String | 可选的调试信息 |
设置的 NewRegulatoryConfig 不能超出设备的 LocationCapability。
例如:如果设备的 LocationCapability 是 Indoor(仅支持室内),
你不能把 RegulatoryConfig 设置为 Outdoor,否则会返回 ValueOutsideRange。
大多数消费级设备的 LocationCapability 都是 IndoorOutdoor(不限制),所以这个检查很少失败。
使用场景与注意事项
在 ArmFailSafe 之后、CommissioningComplete 之前调用。通常 Commissioner 会自动获取用户的地理位置,
填入对应的国家代码。如果无法确定位置,可以使用 "XX" 表示不指定。
法规配置影响设备可使用的 Wi-Fi 信道和发射功率,设置错误可能导致设备无法连接某些网络。
CommissioningComplete —— 完成配网(0x04)
配网流程的最后一步。调用成功后,设备会:
- 停止 Fail-Safe 计时器
- 永久保存所有配网期间的变更(网络凭据、NOC 证书、ACL 权限等)
- 将 Breadcrumb 重置为
0
此命令没有参数。只有当前持有 Fail-Safe 的 Commissioner 才能调用它。
CommissioningCompleteResponse 响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| ErrorCode | CommissioningErrorEnum | 操作结果 |
| DebugText | String | 可选的调试信息 |
CommissioningComplete 必须在 Fail-Safe 激活状态下调用,并且调用者必须是启动 Fail-Safe 的同一个 Commissioner。
如果没有活跃的 Fail-Safe,会返回 NoFailSafe 错误;
如果是另一个 Commissioner 调用,会返回 InvalidAuthentication。
使用场景与注意事项
所有配网步骤(网络配置、NOC 证书安装、ACL 权限设置等)都完成后,发送此命令锁定变更。 一旦调用成功,设备就正式加入 Matter Fabric,可以被 Fabric 内的控制器管理。 如果此命令失败或未发送,Fail-Safe 超时后设备会自动回滚,一切恢复原样。
属性详解
GeneralCommissioning Cluster 共有 5 个属性。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x0000 |
Breadcrumb | uint64 | 配网追踪 | Commissioner 设置的进度标记 |
0x0001 |
BasicCommissioningInfo | struct | 基础配网信息 | Fail-Safe 超时参数 |
0x0002 |
RegulatoryConfig | RegulatoryLocationTypeEnum | 法规配置 | 当前法规区域配置 |
0x0003 |
LocationCapability | RegulatoryLocationTypeEnum | 法规配置 | 设备支持的法规区域能力 |
0x0004 |
SupportsConcurrentConnection | bool | 连接能力 | 是否支持配网期间并发连接 |
配网追踪(0x0000)
用于 Commissioner 追踪配网流程的推进状态。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
Breadcrumb 进度标记 |
uint64 |
由 Commissioner 通过命令参数写入的进度追踪值。
每个配网命令(ArmFailSafe、SetRegulatoryConfig 等)都带有 Breadcrumb 参数,
执行成功后设备会更新此属性。Commissioner 可以读取它来确认上一步命令是否真正生效。
配网完成(CommissioningComplete)后自动重置为 0
|
Breadcrumb 是一个简单但实用的「已执行到哪一步」标记。 例如 Commissioner 在 ArmFailSafe 时设 Breadcrumb = 1,SetRegulatoryConfig 时设为 2,写入网络凭据时设为 3。 如果配网中途出错需要重试,读取 Breadcrumb 就知道上次执行到了第几步,可以从断点继续而不必从头来过。
基础配网信息(0x0001)
描述设备的 Fail-Safe 时间限制,Commissioner 据此设置合理的超时参数。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0001 |
BasicCommissioningInfo 基础配网信息 |
struct | 包含 Fail-Safe 超时的关键参数(见下方结构体) |
BasicCommissioningInfo 结构体
| 字段 | 类型 | 说明 |
|---|---|---|
| FailSafeExpiryLengthSeconds | uint16 | Fail-Safe 默认超时秒数。Commissioner 通常在 ArmFailSafe 命令中使用此值 |
| MaxCumulativeFailsafeSeconds | uint16 | Fail-Safe 的最大累计时长。ArmFailSafe 的 ExpiryLengthSeconds 不能超过此值,否则返回 ValueOutsideRange |
大多数设备的 FailSafeExpiryLengthSeconds 为 60 秒,MaxCumulativeFailsafeSeconds 为 900 秒(15 分钟)。
这意味着单次 ArmFailSafe 最长可设 900 秒。如果配网流程需要更长时间(如等用户操作),
Commissioner 需要在超时前重新调用 ArmFailSafe 续期,但总时长不能超过 900 秒。
法规配置(0x0002, 0x0003)
描述设备的法规区域配置及其能力限制。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0002 |
RegulatoryConfig 当前法规配置 |
RegulatoryLocationTypeEnum | 设备当前的法规区域设置。通过 SetRegulatoryConfig 命令修改 |
0x0003 |
LocationCapability 区域能力 |
RegulatoryLocationTypeEnum | 设备硬件支持的法规区域范围。RegulatoryConfig 的取值不能超出此能力。只读属性,由设备固件决定 |
实际开发中,大多数消费级 Matter 设备的 LocationCapability 都是 IndoorOutdoor (2),
对应地 RegulatoryConfig 也默认设为 IndoorOutdoor。
只有工业级或特殊用途的设备才会限制为纯 Indoor 或纯 Outdoor。
连接能力(0x0004)
描述设备在配网期间的网络连接能力。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0004 |
SupportsConcurrentConnection 支持并发连接 |
bool |
设备是否能在配网期间同时维持多个网络连接。
true = 设备可以在连接 Wi-Fi 的同时保持 BLE 通道(大多数设备);
false = 设备连接 Wi-Fi 后会断开 BLE,Commissioner 需要通过 Wi-Fi 网络重新发现设备
|
当此属性为 false 时,Commissioner 在发送 ConnectNetwork 后会失去与设备的通信。
此时 Commissioner 需要:
(1) 通过 mDNS 在目标网络上重新发现设备;
(2) 建立 CASE 安全通道(因为 PASE 通道已断开);
(3) 然后才能继续发送 CommissioningComplete。
这增加了配网流程的复杂性和耗时。
枚举定义
CommissioningErrorEnum
所有 GeneralCommissioning 命令的响应都包含此错误码,用于表示操作结果。
ArmFailSafe 返回 BusyWithOtherAdmin → 另一个 App 或控制器正在配网这个设备,等待其完成或超时; CommissioningComplete 返回 NoFailSafe → Fail-Safe 已经超时自动回滚了,需要重新开始整个配网流程; SetRegulatoryConfig 返回 ValueOutsideRange → 检查设备的 LocationCapability,选择其支持的区域类型。
RegulatoryLocationTypeEnum
标识设备的法规使用场景。用于 RegulatoryConfig、LocationCapability 属性和 SetRegulatoryConfig 命令。
示例数据
属性数据示例
以下是一个正在配网中的设备的 GeneralCommissioning Cluster 典型属性数据:
{
// --- 配网追踪 ---
"0x0000": 3, // Breadcrumb = 3(Commissioner 设置的进度标记)
// --- 基础配网信息 ---
"0x0001": { // BasicCommissioningInfo
"failSafeExpiryLengthSeconds": 60, // Fail-Safe 默认 60 秒
"maxCumulativeFailsafeSeconds": 900 // 最长累计 900 秒(15 分钟)
},
// --- 法规配置 ---
"0x0002": 2, // RegulatoryConfig = IndoorOutdoor(当前配置)
"0x0003": 2, // LocationCapability = IndoorOutdoor(设备能力)
// --- 并发连接 ---
"0x0004": true // SupportsConcurrentConnection = true(支持并发连接)
}
ArmFailSafe 交互示例
Commissioner 启动 Fail-Safe 计时器的请求与响应:
// Commissioner → Device:启动 Fail-Safe 计时器
{
"invokeRequests": [{
"commandPath": {
"endpointId": 0,
"clusterId": "0x0030",
"commandId": "0x00" // ArmFailSafe
},
"commandFields": {
"expiryLengthSeconds": 60, // 60 秒超时
"breadcrumb": 1 // 配网进度标记
}
}]
}
// Device → Commissioner:确认 Fail-Safe 已启动
{
"errorCode": 0, // OK
"debugText": ""
}
CommissioningComplete 交互示例
配网完成时的最终确认:
// Commissioner → Device:完成配网
{
"invokeRequests": [{
"commandPath": {
"endpointId": 0,
"clusterId": "0x0030",
"commandId": "0x04" // CommissioningComplete
},
"commandFields": {} // 无参数
}]
}
// Device → Commissioner:确认配网完成
{
"errorCode": 0, // OK
"debugText": ""
}
在实际开发中,Commissioner SDK(如 Android 的 chip-tool 或 iOS 的 Matter.framework)通常会自动处理 GeneralCommissioning 的命令序列。 App 开发者很少需要手动发送这些命令,但理解它们的工作原理有助于排查配网失败的问题。
常见场景
场景 1:标准配网流程(正常路径)
- Commissioner 通过 BLE 与设备建立 PASE 安全通道
- 读取
BasicCommissioningInfo (0x0001)获取 Fail-Safe 超时参数 - 发送
ArmFailSafe (0x00),ExpiryLengthSeconds = 60,Breadcrumb = 1 - 发送
SetRegulatoryConfig (0x02),设置国家代码和法规区域,Breadcrumb = 2 - 通过 NetworkCommissioning (0x0031) 配置网络凭据并连接
- 安装 NOC 证书(OperationalCredentials Cluster)
- 设置 ACL 权限(AccessControl Cluster)
- 发送
CommissioningComplete (0x04)提交所有变更 - 配网完成,设备正式加入 Fabric
整个流程通常在 30 秒内完成(不计用户输入时间)。
场景 2:Fail-Safe 超时回滚
- Commissioner 发送 ArmFailSafe(60 秒超时)
- 成功写入了 Wi-Fi 凭据
- 但在安装 NOC 证书时出错,Commissioner 决定放弃
- Commissioner 未发送 CommissioningComplete
- 60 秒后 Fail-Safe 计时器超时
- 设备自动回滚:删除刚写入的 Wi-Fi 凭据、重置 Breadcrumb 为 0
- 设备恢复到配网前的状态,可以重新开始配网
也可以主动回滚:发送 ArmFailSafe(ExpiryLengthSeconds = 0) 立即触发回滚,
不需要等待 60 秒超时。这比等超时更快,也更礼貌。
场景 3:法规配置处理
- 读取
LocationCapability (0x0003)确认设备支持的区域类型 - 根据用户所在地区确定 CountryCode(如中国 =
"CN",美国 ="US") - 根据设备的实际使用场景选择 RegulatoryConfig:
- 智能灯、插座、传感器 → 通常
IndoorOutdoor (2) - 户外安防摄像头 →
Outdoor (1) - 不确定 → 使用
IndoorOutdoor (2)(如果设备支持)
- 智能灯、插座、传感器 → 通常
- 发送
SetRegulatoryConfig - 如果返回
ValueOutsideRange,降级到设备的 LocationCapability 允许的值重试