设备数据模型

Matter 中的设备具有明确定义的数据模型 (DM),该模型是对设备功能的分层建模。此层次结构的顶层是设备

设备和端点

所有设备(包括智能手机和家居助理)都由节点1组成。节点是网络中可唯一标识和寻址的资源,用户可以将其视为功能完整的实体。Matter 中的网络通信在节点上发起和终止。

节点是端点的集合。每个端点都封装了一组功能。 例如,一个端点可能与照明功能相关,另一个端点与运动检测相关,还有一个端点处理实用程序(例如设备 OTA)。

设备、节点和端点的层次结构
图 1:设备、节点和端点

节点角色

节点角色是一组相关行为。每个节点可以具有一个或多个角色。节点角色包括:

  • 专员:执行调试的节点。
  • 控制器:可以控制一个或多个节点的节点。 例如,Google Home app (GHA)Google AssistantGoogle Nest Hub (2nd gen)。某些设备类型(例如开/关灯开关)具有控制器角色。
  • 被控节点:可由一个或多个节点控制的节点。大多数设备类型都可以是 Controlee,但具有 Controller 角色的某些设备类型除外,例如开/关灯开关。开/关灯开关只能是控制器。不能是受控设备。
  • OTA 提供商:可以提供 OTA 软件更新的节点。
  • OTA 请求者:可以请求 OTA 软件更新的节点。

集群

Endpoint 中,一个 Node 可以有多个 Cluster。这些是设备层次结构中的另一个步骤,因为它们将特定功能分组,例如智能插头上的开/关集群或可调光灯端点上的电平控制集群。

一个节点也可以有多个端点,每个端点都会创建一个相同功能的实例。例如,灯具可能会公开对单个灯的独立控制,而电源插座可能会公开对单个插座的控制。

属性

在最后一个级别,我们会找到属性,这些属性是节点所保持的状态,例如电平控制集群的当前电平属性。属性可以定义为不同的数据类型,例如 uint8、字符串或数组。

节点、端点、属性和命令的层次结构
图 2:节点、端点、属性和命令

命令

除了属性之外,集群还具有命令,这些命令是可以执行的操作。它们相当于 Matter 的 DM 中的远程过程调用。命令类似于动词,例如门锁集群上的锁门命令可能会生成响应和结果;在 Matter 中,此类响应也被定义为命令,但方向相反。

事件

最后,集群还可以包含事件,这些事件可以视为过去状态转换的记录。虽然属性表示当前状态,但事件是过去的日志,包含单调递增的计数器、时间戳和优先级。它们可以捕获状态转换,并实现属性无法轻松实现的数据建模。

完整示例设备
图 3:Matter 设备互动模型层次结构的示例

端点 0 专用于实用程序集群。实用程序集群是包含端点上服务功能的特定集群,例如发现、寻址、诊断和软件更新。另一方面,应用集群支持开/关或温度测量等主要操作。

设备类型

设备制造商在规划新设备时,应包含哪些集群组合?

Matter 规范要求设备实现或扩展一个或多个设备类型。设备类型是一组必需和可选的集群,用于定义实体设备的顶级属性,例如可调光灯门锁视频播放器

设备类型并非由 Matter 规范主文档指定,而是由随附文档“设备库”指定。同样,所有应用集群都在应用集群库中定义。您可以在Connectivity Standards Alliance (Alliance)会员网站上找到这三份文档。

实现设备类型的每个端点都必须实现定义该设备类型的强制性集群。除了必需的 Cluster 之外,Endpoint 还可以实现其他 Cluster,包括设备类型的一个或多个可选 Cluster,甚至是不属于设备类型的 Cluster。

客户端和服务器

聚类可以是客户端聚类,也可以是服务器端聚类。服务器是有状态的,可保存属性、事件和命令,而客户端是无状态的,其职责是与远程服务器集群发起互动,从而执行以下操作:

  • 从其远程属性读取和向其远程属性写入
  • 远程事件的读取
  • 远程命令的调用

虽然 DM 在节点内是分层的,但节点之间的关系不是分层的。Matter 中的节点没有垂直控制器/外围设备或领导者/跟随者关系。相反,这种关系是横向的:任何集群都可以是服务器客户端。因此,对于不同的集群和功能,节点可能既是服务器又是客户端。

例如,我们可能有两盏台灯:节点 A节点 B。这两个节点都实现了开/关灯设备类型。此类设备类型包含一个 On/Off Server 集群,用于控制各自的物理灯光输出。

不过,与典型的台灯一样,我们的实体设备也会包含一个开/关灯开关设备类型,用于本地开/关开关。此设备类型必须实现 On/Off Client 集群,以便控制服务器集群。

同时实现“开/关灯”和“灯开关”的灯具
图 4:客户端和服务器集群

在此示例中,节点 A 上的“开/关”客户端集群正在更改节点 A 和节点 B 上“开/关”服务器集群的属性,而节点 B 的客户端集群仅更改节点 B 本身上的服务器集群。

在下一部分中,我们将详细介绍客户端和服务器集群如何交互:交互模型

描述符集群

顾名思义,描述符集群服务器提供自省信息。它描述了端点,列举了端点的以下信息:

  • 服务器集群。
  • 客户端集群。
  • 设备类型。
  • 其他端点(称为“部件”)。

每种设备类型都需要实现描述符集群。根设备类型在端点 0 上定义。读取其描述符集群将使客户端能够遍历可用端点的完整树并执行适用的操作。

调试器或控制设备(例如手机或 hub)可以使用描述符集群中的信息来对设备(灯、开关、泵、温控器)以及该特定设备实例实现的特定功能进行建模,从而向用户显示正确的界面。

服务器集群

ServerList 属性列出了端点中的集群服务器。

客户端集群

ClientList 属性列出了端点中的集群客户端。

设备类型列表

DeviceTypeList 属性是端点支持的设备类型列表,以及相应的修订版本。必须包含至少一个设备类型。

零件清单

PartsList 包含用于实现相应设备类型的端点列表。

端点 0(根节点)的 PartsList 包含设备的所有端点(端点 0 除外)。

其他端点的 PartsList 通常为空。例如,温度传感器强制要求使用温度测量服务器集群,而没有其他要求。

其他设备类型可能由多个 DeviceType 实例以树状结构组成。例如,视频播放器设备类型可以由电视、视频播放器、音箱和不同的内容应用设备类型组成,每种设备类型都位于不同的端点上。


  1. Matter 规范规定,一个设备可以有多个节点。例如,智能手机可能包含多个应用,每个应用都是一个不同的节点。在本入门指南中,所有设备都将包含单个节点。预计大多数实体设备都会遵循此模式。