通用配网 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 可选的调试信息
Fail-Safe 的核心约束

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)

配网流程的最后一步。调用成功后,设备会:

  1. 停止 Fail-Safe 计时器
  2. 永久保存所有配网期间的变更(网络凭据、NOC 证书、ACL 权限等)
  3. 将 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 的实际用途

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 网络重新发现设备
SupportsConcurrentConnection = false 的影响

当此属性为 false 时,Commissioner 在发送 ConnectNetwork 后会失去与设备的通信。 此时 Commissioner 需要: (1) 通过 mDNS 在目标网络上重新发现设备; (2) 建立 CASE 安全通道(因为 PASE 通道已断开); (3) 然后才能继续发送 CommissioningComplete。 这增加了配网流程的复杂性和耗时。

枚举定义

CommissioningErrorEnum

所有 GeneralCommissioning 命令的响应都包含此错误码,用于表示操作结果。

0
OK 操作成功
1
ValueOutsideRange 参数值超出允许范围(如 ExpiryLengthSeconds 超过上限,或 RegulatoryConfig 超出设备能力)
2
InvalidAuthentication 认证无效 —— 调用者不是启动 Fail-Safe 的那个 Commissioner
3
NoFailSafe 没有活跃的 Fail-Safe —— 在未调用 ArmFailSafe 的情况下尝试 CommissioningComplete
4
BusyWithOtherAdmin 另一个 Commissioner 正在配网中 —— 同一时间只允许一个 Fail-Safe 会话
常见错误速查

ArmFailSafe 返回 BusyWithOtherAdmin → 另一个 App 或控制器正在配网这个设备,等待其完成或超时; CommissioningComplete 返回 NoFailSafe → Fail-Safe 已经超时自动回滚了,需要重新开始整个配网流程; SetRegulatoryConfig 返回 ValueOutsideRange → 检查设备的 LocationCapability,选择其支持的区域类型。

RegulatoryLocationTypeEnum

标识设备的法规使用场景。用于 RegulatoryConfig、LocationCapability 属性和 SetRegulatoryConfig 命令。

0
Indoor 仅限室内使用 —— 设备遵守室内无线电法规(通常限制更宽松)
1
Outdoor 仅限室外使用 —— 设备遵守室外无线电法规(某些频段限制更严格)
2
IndoorOutdoor 室内外均可 —— 设备同时满足室内和室外法规要求(最常见)

示例数据

属性数据示例

以下是一个正在配网中的设备的 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:标准配网流程(正常路径)
  1. Commissioner 通过 BLE 与设备建立 PASE 安全通道
  2. 读取 BasicCommissioningInfo (0x0001) 获取 Fail-Safe 超时参数
  3. 发送 ArmFailSafe (0x00),ExpiryLengthSeconds = 60,Breadcrumb = 1
  4. 发送 SetRegulatoryConfig (0x02),设置国家代码和法规区域,Breadcrumb = 2
  5. 通过 NetworkCommissioning (0x0031) 配置网络凭据并连接
  6. 安装 NOC 证书(OperationalCredentials Cluster)
  7. 设置 ACL 权限(AccessControl Cluster)
  8. 发送 CommissioningComplete (0x04) 提交所有变更
  9. 配网完成,设备正式加入 Fabric

整个流程通常在 30 秒内完成(不计用户输入时间)。

场景 2:Fail-Safe 超时回滚
  1. Commissioner 发送 ArmFailSafe(60 秒超时)
  2. 成功写入了 Wi-Fi 凭据
  3. 但在安装 NOC 证书时出错,Commissioner 决定放弃
  4. Commissioner 未发送 CommissioningComplete
  5. 60 秒后 Fail-Safe 计时器超时
  6. 设备自动回滚:删除刚写入的 Wi-Fi 凭据、重置 Breadcrumb 为 0
  7. 设备恢复到配网前的状态,可以重新开始配网

也可以主动回滚:发送 ArmFailSafe(ExpiryLengthSeconds = 0) 立即触发回滚, 不需要等待 60 秒超时。这比等超时更快,也更礼貌。

场景 3:法规配置处理
  1. 读取 LocationCapability (0x0003) 确认设备支持的区域类型
  2. 根据用户所在地区确定 CountryCode(如中国 = "CN",美国 = "US")
  3. 根据设备的实际使用场景选择 RegulatoryConfig:
    • 智能灯、插座、传感器 → 通常 IndoorOutdoor (2)
    • 户外安防摄像头 → Outdoor (1)
    • 不确定 → 使用 IndoorOutdoor (2)(如果设备支持)
  4. 发送 SetRegulatoryConfig
  5. 如果返回 ValueOutsideRange,降级到设备的 LocationCapability 允许的值重试