4. Matter设备类型与集群规范

在Matter规范中,设备类型(Device Type)与集群(Cluster)是两个不同层级的概念。设备类型描述的是“这个设备在用户和生态系统中扮演什么角色”,例如一盏可调光灯、一个温度传感器或一扇门锁;集群则描述“这个设备具备哪些标准能力”,例如开关、调光、色温控制、电量检测或门锁状态。理解二者的映射关系,是开发Matter设备、编写固件、设计配网流程以及做认证测试的基础。

Matter采用“设备类型 = 若干必需集群 + 若干可选集群”的建模方式。一个设备类型会规定哪些集群必须实现、哪些集群可选实现,以及每个集群中哪些属性、命令和事件是强制的。设备类型还带有Device Type ID,例如0x0100表示On/Off Light,0x0101表示Dimmable Light,0x0302表示Temperature Sensor,0x000A表示Door Lock。开发时,设备类型决定了设备在App中如何被识别、如何被控制,也决定了控制器(如手机、音箱、网关)会以什么方式与它交互。

下面这张图展示了常见Matter设备类型与它们对应的核心标准集群之间的映射关系。图中左侧是设备类型,右侧是集群,连线表示“该设备类型必须或通常实现该集群”。

Matter 常见设备类型 ↔ 标准集群映射 左侧为设备类型(Device Type),右侧为集群(Cluster),连线表示必需或典型实现关系 设备类型 On/Off Light 0x0100 · 开关灯 Dimmable Light 0x0101 · 可调光灯 Color Temperature Light 0x010C · 色温灯 On/Off Plug-in Unit 0x010A · 智能插座 Temperature Sensor 0x0302 · 温度传感器 Door Lock 0x000A · 门锁 Occupancy Sensor 0x0107 · 人体存在传感器 标准集群 On/Off Cluster (0x0006) 开关控制 · 属性 OnOff Level Control (0x0008) 亮度调节 · CurrentLevel Color Control (0x0300) 色温/色相 · ColorTemperatureMireds Temperature Measurement (0x0402) MeasuredValue · 单位0.01°C Occupancy Sensing (0x0406) Occupancy · 0/1 位图 Door Lock (0x0101) LockState · Lock/Unlock命令 Power Source (0x002F) BatChargeLevel · 电量状态 Identify (0x0003) IdentifyTime · 设备识别闪烁 照明类设备 传感类设备 安防/电源类 必需集群 可选/辅助集群

从图中可以读出几个关键规律。第一,照明类设备共享On/Off Cluster(0x0006)作为基础能力,Dimmable Light在此基础上增加Level Control(0x0008),Color Temperature Light再叠加Color Control(0x0300)。第二,传感器类设备通常以Measurement Cluster为核心,例如温度传感器使用Temperature Measurement(0x0402),人体存在传感器使用Occupancy Sensing(0x0406),并且往往需要Power Source(0x002F)来报告电量。第三,门锁类设备以Door Lock Cluster(0x0101)为核心,同时需要Power Source和Identify等辅助集群。第四,Identify Cluster(0x0003)几乎出现在所有设备类型中,用于配网时让用户确认“正在操作的是哪台设备”。

在实际开发中,设备类型与集群的映射会直接影响固件代码结构。以ESP32-C3 + Matter SDK为例,创建一个Dimmable Light设备时,需要在Endpoint 1上注册以下集群:Identify、Groups、On/Off、Level Control,以及可选的Scenes和Occupancy Sensing。代码骨架大致如下:

// 示例:Dimmable Light 端点集群注册(基于Matter SDK思路)
endpoint_id = 1;
device_type = 0x0101; // Dimmable Light

// 必需集群
AddCluster(Identify, 0x0003);
AddCluster(Groups, 0x0004);
AddCluster(OnOff, 0x0006);
AddCluster(LevelControl, 0x0008);

// 可选集群
AddCluster(Scenes, 0x0005);
AddCluster(OccupancySensing, 0x0406);

// 属性初始化示例
OnOff_OnOff = false;
LevelControl_CurrentLevel = 128; // 0~254,128约50%
LevelControl_MinLevel = 1;
LevelControl_MaxLevel = 254;

这里有一个容易混淆的点:设备类型ID和集群ID都是16位数值,但它们的命名空间不同。0x0101作为设备类型表示Dimmable Light,而0x0101作为集群表示Door Lock。开发时不能只看数值,必须结合上下文判断。在Matter规范中,设备类型ID通常出现在Descriptor Cluster的DeviceTypeList属性中,而集群ID出现在ClusterRevision和FeatureMap等属性中。

另一个关键概念是“必需集群”与“可选集群”的区分。必需集群是设备类型定义中强制要求实现的,如果缺失,设备无法通过Matter认证,控制器也可能拒绝识别。可选集群则允许厂商根据产品功能决定是否实现。例如,一个Dimmable Light可以实现Color Control,从而升级为Color Temperature Light;也可以不实现,保持基础调光功能。这种“设备类型可扩展”的设计,让同一套硬件可以通过固件配置支持多种产品形态。

对于传感器类设备,还需要注意Measurement Cluster的属性和单位约定。以Temperature Measurement(0x0402)为例,MeasuredValue属性的单位是0.01°C,即2500表示25.00°C。MinMeasuredValue和MaxMeasuredValue用于声明量程,Tolerance用于声明精度。如果传感器读数超出量程,MeasuredValue应设为0x8000(表示无效值)。这些细节在开发驱动层时就必须处理好,否则控制器App可能显示异常或触发错误告警。

门锁类设备则涉及更复杂的状态机。Door Lock Cluster(0x0101)的LockState属性有多个枚举值:0x00表示Not Fully Locked,0x01表示Locked,0x02表示Unlocked,0x03表示Not Fully Unlocked。LockType属性区分Deadbolt、Magnetic、Other等类型。门锁还支持LockDoor和UnlockDoor命令,以及LockOperation事件用于记录开锁来源(如Keypad、Remote、Fingerprint)。开发门锁固件时,必须保证LockState与实际机械状态同步,否则会出现“App显示已锁但门实际未锁”的安全隐患。

最后,设备类型与集群的映射关系还影响配网和绑定流程。当控制器发现一个设备时,会读取Descriptor Cluster的DeviceTypeList,从而知道该设备是什么类型、支持哪些集群。然后控制器根据设备类型决定在UI上显示哪些控件:灯显示开关和亮度滑块,传感器显示数值卡片,门锁显示锁定/解锁按钮。如果设备类型声明错误,或者必需集群缺失,控制器可能无法正确渲染UI,甚至拒绝配网。因此,在开发初期就应明确产品对应的设备类型,并严格按照规范实现必需集群,再根据功能需要添加可选集群。

开发建议:在Matter SDK中,设备类型和集群通常通过ZAP(Zigbee Cluster Library Application Profile)工具配置。ZAP文件会生成端点、集群、属性和命令的代码框架。建议先确定设备类型,再用ZAP勾选必需集群,最后补充可选集群和自定义属性。每次修改ZAP配置后,重新生成代码并检查ClusterRevision和FeatureMap是否符合规范版本。
常见错误:把设备类型ID和集群ID混用;遗漏Identify Cluster导致配网时无法识别设备;Temperature Measurement的MeasuredValue未按0.01°C单位换算;Door Lock的LockState未与机械状态同步。这些问题在认证测试中都会被重点检查。