门锁 Cluster(DoorLock)
Cluster ID: 0x0101 | 所在 Endpoint: 通常在 Endpoint 1(功能端点)
DoorLock 是 Matter 门锁设备的核心 Cluster,定义了锁的状态查询、开/关锁操作、用户管理、凭据(PIN 码/指纹/NFC)管理等全部能力。 门锁类设备的日常开发基本都围绕这个 Cluster 展开。
无论你是 App 开发、固件调试、测试验证还是产品评审,这些字段和命令都是你需要了解的核心内容。
命令(Commands)
Command 是发送给门锁执行的操作。大多数写操作都要求 Timed Interaction(定时交互),这是 Matter 针对门锁等安全设备的安全要求。 点击下方表格中的命令 ID 可跳转到对应的详细说明。
| ID | 名称 | 说明 | 定时交互 |
|---|---|---|---|
0x00 | LockDoor | 上锁 | 必须 |
0x01 | UnlockDoor | 解锁 | 必须 |
0x03 | UnlockWithTimeout | 解锁,到时间后自动回锁 | 必须 |
0x1A | SetCredential | 添加或修改凭据(PIN 码、指纹等) | 必须 |
0x1B | GetCredentialStatus | 查询指定凭据槽位的状态 | 不需要 |
0x1D | ClearCredential | 删除凭据 | 必须 |
0x22 | SetAliroReaderConfig | 配置 Aliro NFC 读卡器参数 | 必须 |
0x24 | ClearAliroReaderConfig | 清除 Aliro NFC 配置 | 必须 |
0x26 | SetUser | 添加或修改用户(可设置权限、有效期等) | 必须 |
0x28 | GetUser | 查询指定用户信息 | 不需要 |
0x29 | ClearUser | 删除用户(同时删除其关联的所有凭据) | 必须 |
对于门锁这种安全敏感设备,Matter 要求写操作必须附带一个超时时间(通常 5000~10000 毫秒)。 这是为了防止中间人截获命令后延迟重放 —— 如果命令在超时时间内没有被执行,设备会自动拒绝。
发送 LockDoor 命令时如果没有带超时参数,设备会直接返回错误。
LockDoor —— 上锁(0x00)
向门锁发送上锁指令。执行成功后,LockState 属性会从当前值变为 Locked (1)。 这是门锁最核心、最常用的命令之一。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| PINCode | OctetString | 视配置 | 当 RequirePINforRemoteOperation 为 true 时,远程上锁必须提供 PIN 码 |
使用场景与参数
用户在 App 首页点击「锁门」按钮时调用。需要先检查 ActuatorEnabled (0x02) 确认执行器可用,再以 Timed Interaction 方式发送此命令。
UnlockDoor —— 解锁(0x01)
向门锁发送解锁指令。执行成功后,LockState 属性会变为 Unlocked (2)。 与 LockDoor 对称,同样是最常用的命令。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| PINCode | OctetString | 视配置 | 当 RequirePINforRemoteOperation 为 true 时必须提供 |
使用场景与参数
用户在 App 点击「开锁」或访客到达时远程开门。解锁后建议订阅 LockState 变化,配合 AutoRelockTime 确认是否自动回锁。
UnlockWithTimeout —— 限时解锁(0x03)
解锁门锁,经过指定时间后自动回锁。功能上等同于先 UnlockDoor 再等待 AutoRelockTime,但超时时间由命令参数指定,不受 AutoRelockTime 属性影响。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Timeout | U16 | 是 | 自动回锁等待时间,单位秒 |
| PINCode | OctetString | 视配置 | 同 LockDoor |
使用场景与参数
适用于访客临时进入、快递代收等场景 —— 开门后自动锁回,无需用户手动操作。
SetCredential —— 设置凭据(0x1A)
为用户添加或修改凭据。凭据是用户用来开锁的「钥匙」—— 可以是 PIN 码、指纹、RFID 卡等。 每个凭据需要绑定到一个已存在的用户(通过 SetUser 创建)。
| 参数 | 类型 | 说明 |
|---|---|---|
| OperationType | U8 | 0 = 添加, 2 = 修改 |
| Credential | Struct | 包含 CredentialType(PIN/指纹/RFID 等)和 CredentialIndex(槽位号) |
| CredentialData | OctetString | 凭据数据,如 PIN 码的数字序列 |
| UserIndex | U16 / Nullable | 绑定的用户索引。添加时如果传 null,设备会自动创建新用户 |
| UserStatus | U8 / Nullable | 用户状态(仅在自动创建用户时生效) |
| UserType | U8 / Nullable | 用户类型(仅在自动创建用户时生效) |
使用场景与参数
用户在 App 上添加新密码或录入指纹时调用。添加前需通过 MinPINCodeLength (0x17) / MaxPINCodeLength (0x16) 校验 PIN 码长度,通过 NumberOfCredentialsSupportedPerUser (0x1B) 检查凭据容量。
GetCredentialStatus —— 查询凭据状态(0x1B)
查询指定凭据槽位是否已被占用、绑定在哪个用户上。不需要 Timed Interaction,是只读查询操作。
ClearCredential —— 删除凭据(0x1D)
删除指定的凭据。如果传入特定的 CredentialType 和 CredentialIndex,则精确删除对应凭据;也可以批量清除某类凭据或全部凭据。
SetAliroReaderConfig —— 配置 Aliro 读卡器(0x22)
配置 Aliro NFC 读卡器的签名密钥、群组密钥、支持的协议版本等参数。Aliro 是 Matter 为门锁新增的 NFC 无感开锁标准。
ClearAliroReaderConfig —— 清除 Aliro 配置(0x24)
重置 Aliro NFC 读卡器的所有配置,恢复到未配置状态。
SetUser —— 设置用户(0x26)
创建或修改门锁上的用户。用户是凭据的「容器」—— 每个用户可以绑定多个凭据(密码、指纹等), 并且可以设置权限级别和有效期。用户管理和凭据管理是门锁最复杂的两个操作。
| 参数 | 类型 | 说明 |
|---|---|---|
| OperationType | U8 | 0 = 添加, 2 = 修改, 3 = 清除 |
| UserIndex | U16 | 用户索引号(从 1 开始) |
| UserName | String / Nullable | 用户名称(可选) |
| UniqueID | U32 / Nullable | 用户唯一标识(可选,跨设备同步时有用) |
| UserStatus | U8 / Nullable | 1 = OccupiedEnabled(正常), 3 = OccupiedDisabled(已禁用) |
| UserType | U8 / Nullable | 0 = 普通, 1 = 一年定期, 6 = 远程专用, 等 |
| CredentialRule | U8 / Nullable | 凭据规则:0 = 单一凭据即可, 1 = 需双重认证, 2 = 三重 |
使用场景与参数
在门锁上注册新用户时调用。典型流程:先 SetUser 创建用户,再 SetCredential 为该用户绑定凭据。删除用户时建议用 ClearUser,它会同时清理关联的所有凭据。
GetUser —— 查询用户(0x28)
按 UserIndex 查询用户的详细信息,包括名称、状态、类型、绑定的凭据列表等。不需要 Timed Interaction。
ClearUser —— 删除用户(0x29)
删除指定用户及其关联的所有凭据。这是一个「级联删除」操作 —— 不需要额外调用 ClearCredential。
定时交互示例(Timed Interaction)
发送上锁命令时,请求结构大致如下:
{
"timedRequest": {
"timeoutMs": 5000 // 超时时间 5 秒
},
"invokeRequests": [{
"commandPath": {
"endpointId": 1, // 功能端点
"clusterId": "0x0101", // DoorLock
"commandId": "0x00" // LockDoor
},
"commandFields": {} // LockDoor 无额外参数
}]
}属性详解
DoorLock Cluster 的属性按功能分为五组。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x00 | LockState | enum8 / null | 锁核心状态 | 锁当前状态 |
0x01 | LockType | enum8 | 锁核心状态 | 锁芯类型 |
0x02 | ActuatorEnabled | bool | 锁核心状态 | 执行器是否启用 |
0x03 | DoorState | enum8 / null | 锁核心状态 | 门体状态(需 DoorPositionSensor feature) |
0x04 | DoorOpenEvents | uint32 | 锁核心状态 | 门被打开的累计次数 |
0x05 | DoorClosedEvents | uint32 | 锁核心状态 | 门被关闭的累计次数 |
0x06 | OpenPeriod | uint16 | 锁核心状态 | 门打开持续时间(秒) |
0x10 | NumberOfTotalUsersSupported | uint16 | 用户与凭据 | 支持的最大用户总数 |
0x11 | NumberOfPINUsersSupported | uint16 | 用户与凭据 | 支持 PIN 码的最大用户数 |
0x12 | NumberOfRFIDUsersSupported | uint16 | 用户与凭据 | 支持 RFID 的最大用户数 |
0x13 | NumberOfWeekDaySchedulesSupportedPerUser | uint8 | 用户与凭据 | 每用户工作日时间表数 |
0x14 | NumberOfYearDaySchedulesSupportedPerUser | uint8 | 用户与凭据 | 每用户年度时间表数 |
0x15 | NumberOfHolidaySchedulesSupported | uint8 | 用户与凭据 | 假日时间表总数 |
0x16 | MaxPINCodeLength | uint8 | 用户与凭据 | PIN 码最大长度 |
0x17 | MinPINCodeLength | uint8 | 用户与凭据 | PIN 码最小长度 |
0x18 | MaxRFIDCodeLength | uint8 | 用户与凭据 | RFID 码最大长度 |
0x19 | MinRFIDCodeLength | uint8 | 用户与凭据 | RFID 码最小长度 |
0x1A | CredentialRulesSupport | bitmap8 | 用户与凭据 | 凭据规则支持位图 |
0x1B | NumberOfCredentialsSupportedPerUser | uint8 | 用户与凭据 | 每用户最大凭据数 |
0x1C | Language | string | 操作与显示 | 锁界面语言(ISO 639-1) |
0x1D | LEDSettings | uint8 | 操作与显示 | LED 指示灯设置 |
0x1E | AutoRelockTime | uint32 | 操作与显示 | 自动回锁时间(秒) |
0x1F | SoundVolume | uint8 | 操作与显示 | 操作音量 |
0x20 | OperatingMode | enum8 | 操作与显示 | 当前操作模式 |
0x21 | SupportedOperatingModes | bitmap16 | 操作与显示 | 支持的操作模式位图 |
0x22 | DefaultConfigurationRegister | bitmap16 | 操作与显示 | 默认配置寄存器 |
0x23 | EnableLocalProgramming | bool | 操作与显示 | 是否允许本地编程 |
0x24 | EnableOneTouchLocking | bool | 操作与显示 | 是否启用一键上锁 |
0x25 | EnableInsideStatusLED | bool | 操作与显示 | 是否启用内侧状态 LED |
0x26 | EnablePrivacyModeButton | bool | 操作与显示 | 是否启用隐私模式按钮 |
0x27 | LocalProgrammingFeatures | bitmap8 | 操作与显示 | 本地编程功能位图 |
0x30 | WrongCodeEntryLimit | uint8 | 远程操作 | 错误码输入限制次数 |
0x31 | UserCodeTemporaryDisableTime | uint8 | 远程操作 | 错误码锁定时间(秒) |
0x32 | SendPINOverTheAir | bool | 远程操作 | 是否通过无线发送 PIN |
0x33 | RequirePINforRemoteOperation | bool | 远程操作 | 远程操作是否需要 PIN |
0x80 | AliroReaderVerificationKey | octstr | Aliro NFC | 读卡器验证密钥 |
0x81 | AliroReaderGroupIdentifier | octstr | Aliro NFC | 读卡器组标识 |
0x82 | AliroReaderGroupSubIdentifier | octstr | Aliro NFC | 读卡器子标识 |
0x83 | AliroExpeditedTransactionSupportedProtocolVersions | list | Aliro NFC | 快速交易支持的协议版本 |
0x84 | AliroGroupResolvingKey | octstr | Aliro NFC | 组解析密钥 |
0x85 | AliroSupportedBLEUWBProtocolVersions | list | Aliro NFC | 支持的 BLE UWB 协议版本 |
0x86 | AliroBLEAdvertisingVersion | uint8 | Aliro NFC | BLE 广播版本 |
0x87 | NumberOfAliroCredentialIssuerKeysSupported | uint16 | Aliro NFC | 凭据发行密钥数量 |
0x88 | NumberOfAliroEndpointKeysSupported | uint16 | Aliro NFC | 端点密钥数量 |
锁核心状态(0x00-0x06)
门锁最基本的状态信息,包括锁状态、锁类型、执行器以及门体位置传感器数据。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x00 | LockState 锁状态 | enum8 / null | 锁当前状态。null 表示设备尚未确定锁芯位置(如刚上电时) |
0x01 | LockType 锁类型 | enum8 | 锁芯的物理类型,设备出厂固定 |
0x02 | ActuatorEnabled 执行器启用 | bool | 执行器是否启用。为 false 时所有上锁/解锁命令都会被拒绝 |
0x03 | DoorState 门体状态 | enum8 / null | 门的物理开合状态。需设备支持 DoorPositionSensor feature |
0x04 | DoorOpenEvents 开门次数 | uint32 | 门被打开的累计次数(可写入重置计数) |
0x05 | DoorClosedEvents 关门次数 | uint32 | 门被关闭的累计次数(可写入重置计数) |
0x06 | OpenPeriod 开门持续时间 | uint16 | 门打开后持续未关闭的时间,单位秒 |
LockState 枚举值
LockState 是 Nullable 类型 —— 当设备刚启动、还没来得及检测锁芯位置时,这个值可能是 null。处理这个字段时不要直接当数字用,需要先判断是否为空。
LockType 枚举值
DoorState 枚举值
用户与凭据(0x10-0x1B)
描述门锁支持的用户数量、凭据类型容量以及时间表调度能力。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x10 | NumberOfTotalUsersSupported 最大用户总数 | uint16 | 设备支持的最大用户总数 |
0x11 | NumberOfPINUsersSupported PIN 用户数 | uint16 | 支持 PIN 码的最大用户数 |
0x12 | NumberOfRFIDUsersSupported RFID 用户数 | uint16 | 支持 RFID 的最大用户数 |
0x13 | NumberOfWeekDaySchedulesSupportedPerUser 工作日时间表数 | uint8 | 每个用户支持的工作日时间表数量(如周一至周五特定时段可开锁) |
0x14 | NumberOfYearDaySchedulesSupportedPerUser 年度时间表数 | uint8 | 每个用户支持的年度时间表数量(指定日期范围可开锁) |
0x15 | NumberOfHolidaySchedulesSupported 假日时间表数 | uint8 | 设备支持的假日时间表总数(全局生效,覆盖常规时间表) |
0x16 | MaxPINCodeLength PIN 码最大长度 | uint8 | 设备支持的 PIN 码最大字符数 |
0x17 | MinPINCodeLength PIN 码最小长度 | uint8 | 设备要求的 PIN 码最小字符数 |
0x18 | MaxRFIDCodeLength RFID 码最大长度 | uint8 | 设备支持的 RFID 码最大字节数 |
0x19 | MinRFIDCodeLength RFID 码最小长度 | uint8 | 设备要求的 RFID 码最小字节数 |
0x1A | CredentialRulesSupport 凭据规则支持 | bitmap8 | 设备支持的凭据验证规则(见下方位图) |
0x1B | NumberOfCredentialsSupportedPerUser 每用户凭据数 | uint8 | 每个用户可绑定的最大凭据数量 |
CredentialRulesSupport 位图
Matter 定义的凭据类型包括:PIN(数字密码)、RFID(卡片)、Fingerprint(指纹)、FingerVein(指静脉)、Face(人脸)。 具体支持哪些凭据类型取决于门锁硬件实现。凭据通过 SetCredential 命令管理。
操作与显示(0x1C-0x27)
控制门锁的操作行为、界面显示和本地编程功能。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x1C | Language 界面语言 | string | 锁界面显示语言,2 字符 ISO 639-1 编码(如 "en"、"zh") |
0x1D | LEDSettings LED 设置 | uint8 | LED 指示灯在什么操作下点亮(见下方枚举) |
0x1E | AutoRelockTime 自动回锁时间 | uint32 | 解锁后自动回锁的等待时间,单位秒。0 表示不自动回锁 |
0x1F | SoundVolume 操作音量 | uint8 | 门锁操作提示音的音量级别(见下方枚举) |
0x20 | OperatingMode 操作模式 | enum8 | 门锁当前的操作模式(见下方枚举) |
0x21 | SupportedOperatingModes 支持的操作模式 | bitmap16 | 设备支持哪些操作模式(位掩码,对应 OperatingMode 枚举值) |
0x22 | DefaultConfigurationRegister 默认配置寄存器 | bitmap16 | 标识哪些配置项已从出厂默认值被修改过 |
0x23 | EnableLocalProgramming 本地编程 | bool | 是否允许通过门锁面板本地添加/修改用户和凭据 |
0x24 | EnableOneTouchLocking 一键上锁 | bool | 是否启用一键上锁功能(触摸面板即可锁门) |
0x25 | EnableInsideStatusLED 内侧状态 LED | bool | 是否启用门锁内侧的状态指示 LED |
0x26 | EnablePrivacyModeButton 隐私模式按钮 | bool | 是否启用物理隐私模式按钮(按下后拒绝远程操作) |
0x27 | LocalProgrammingFeatures 本地编程功能 | bitmap8 | 允许通过本地编程执行的具体功能(添加用户、修改时间表等) |
LEDSettings 枚举值
SoundVolume 枚举值
OperatingMode 枚举值
远程操作(0x30-0x33)
与远程(网络/无线)操作安全策略相关的属性。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x30 | WrongCodeEntryLimit 错误码次数限制 | uint8 | 连续输入错误码的最大允许次数,超过后触发临时锁定 |
0x31 | UserCodeTemporaryDisableTime 错误码锁定时间 | uint8 | 触发临时锁定后的禁用时间,单位秒 |
0x32 | SendPINOverTheAir 无线传输 PIN | bool | 是否允许通过无线网络发送 PIN 码(安全相关,通常建议关闭) |
0x33 | RequirePINforRemoteOperation 远程操作需 PIN | bool | 远程(App/网络)操作是否必须附带 PIN 码。为 true 时,LockDoor/UnlockDoor 必须在命令中携带有效 PIN |
WrongCodeEntryLimit 和 UserCodeTemporaryDisableTime 构成门锁的防暴力破解机制。 典型配置为 5 次错误后锁定 60 秒。App 端应在用户达到限制前给出提示,避免误触发锁定。
Aliro NFC 门禁(0x80-0x88)
Aliro 是 Matter 为门锁新增的 NFC 无感开锁标准。支持手机靠近门锁自动解锁,类似 Apple 数字车钥匙的体验。 通过 SetAliroReaderConfig / ClearAliroReaderConfig 命令管理。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x80 | AliroReaderVerificationKey 读卡器验证密钥 | octstr | 用于验证读卡器身份的公钥 |
0x81 | AliroReaderGroupIdentifier 读卡器组标识 | octstr | 读卡器所属组的标识符,同组读卡器共享访问权限 |
0x82 | AliroReaderGroupSubIdentifier 读卡器子标识 | octstr | 读卡器在组内的唯一子标识 |
0x83 | AliroExpeditedTransactionSupportedProtocolVersions 快速交易协议版本 | list | 支持的快速(无需完整握手)交易协议版本列表 |
0x84 | AliroGroupResolvingKey 组解析密钥 | octstr | 用于解析和识别 Aliro 组成员身份的密钥 |
0x85 | AliroSupportedBLEUWBProtocolVersions BLE UWB 协议版本 | list | 支持的 BLE 和 UWB 协议版本列表(用于测距定位) |
0x86 | AliroBLEAdvertisingVersion BLE 广播版本 | uint8 | Aliro 读卡器的 BLE 广播协议版本号 |
0x87 | NumberOfAliroCredentialIssuerKeysSupported 凭据发行密钥数 | uint16 | 设备支持的 Aliro 凭据发行者密钥数量 |
0x88 | NumberOfAliroEndpointKeysSupported 端点密钥数 | uint16 | 设备支持的 Aliro 端点密钥数量 |
标准示例
以下是 Matter 门锁的典型属性数据示例(JSON 格式),逐字段标注含义:
{
// --- 锁核心状态 ---
"0x00": 1, // LockState = Locked(已锁定)
"0x01": 0, // LockType = DeadBolt(锁舌锁)
"0x02": true, // ActuatorEnabled = true(执行器启用)
"0x03": 1, // DoorState = Closed(门已关闭)
// --- 用户与凭据 ---
"0x10": 10, // NumberOfTotalUsersSupported = 10
"0x11": 10, // NumberOfPINUsersSupported = 10
"0x16": 8, // MaxPINCodeLength = 8 位
"0x17": 4, // MinPINCodeLength = 4 位
"0x1B": 5, // NumberOfCredentialsSupportedPerUser = 5
// --- 操作与显示 ---
"0x1E": 30, // AutoRelockTime = 30 秒
"0x1F": 2, // SoundVolume = High
"0x20": 0, // OperatingMode = Normal
"0x21": 65535, // SupportedOperatingModes(支持所有模式)
// --- 远程操作 ---
"0x30": 5, // WrongCodeEntryLimit = 5 次
"0x33": false // RequirePINforRemoteOperation = false
}实际从设备读取数据时,Attribute ID 会是十六进制字符串作为 key。上面的 JSON 中 "0x00" 对应 LockState,"0x20" 对应 OperatingMode。对照本页的属性表就能逐个翻译。
常见场景
场景 1:远程开锁 / 关锁
- 读取
ActuatorEnabled (0x02),确认执行器是否启用 - 读取
RequirePINforRemoteOperation (0x33),判断是否需要用户输入 PIN - 发送
LockDoor (0x00)或UnlockDoor (0x01)命令(必须带 Timed Interaction) - 订阅
LockState (0x00)的变化,确认操作结果
场景 2:添加新用户和 PIN 码
- 读取
NumberOfTotalUsersSupported (0x10)确认用户容量 - 发送
SetUser (0x26)创建用户 - 读取
MinPINCodeLength (0x17)和MaxPINCodeLength (0x16)确认 PIN 长度要求 - 发送
SetCredential (0x1A)为该用户绑定 PIN 码 - 可通过
GetCredentialStatus (0x1B)验证凭据是否设置成功
场景 3:首页展示锁状态
- 读取
LockState (0x00)—— 注意处理null值 - 读取
OperatingMode (0x20)—— 如果不是 Normal,界面上可能需要提示 - 配合 PowerSource Cluster 读取电池电量