Matter 中的设备具有明确定义的数据模型 (DM),该模型是对设备功能的层次化建模。在此层次结构的顶层是设备 。
设备和端点
所有设备(包括智能手机和智能助理)都由 节点1组成。节点 是网络中用户可以感知为功能完整的唯一可识别和可寻址资源。Matter 中的网络通信源自节点并终止于节点。Matter
节点是端点 的集合。每个端点都包含一组特征集。例如,一个端点可能与照明功能相关,而 另一个端点与移动侦测相关,还有一个端点处理设备 OTA 等实用程序。
节点角色
节点角色 是一组相关行为。每个节点可以有一个或多个角色。节点角色包括:
- 委托方:执行 委托的节点。
- 控制器:可以控制一个或多个节点的节点。 示例包括 Google Home app (GHA)、 Google Assistant 和 Google Nest Hub (2nd gen)。某些 设备类型(例如开/关灯 开关)具有控制器 角色。
- 被控方:可以由一个或多个 节点控制的节点。大多数设备类型都可以是被控方,但某些具有控制器角色的设备类型(例如开/关灯开关)除外。开/关灯开关只能是控制器。 它不能是被控方。
- OTA 提供方:可以提供 OTA 软件更新的节点。
- OTA 请求方:可以请求 OTA 软件 更新的节点。
集群
在端点 中,节点有一个或多个集群 。这些是设备层次结构中的另一个步骤,因为它们将特定功能分组,例如智能插座上的开/关集群或可调光灯端点上的级别控制集群。
一个节点也可能有多个端点,每个端点都会创建相同功能的实例。例如,灯具可能会公开对单个灯的独立控制,或者电源板可能会公开对单个插座的控制。
属性
在最后一个级别,我们会找到属性,这些属性是节点所持有的状态,例如级别控制集群的当前级别属性。属性可以定义为不同的数据类型,例如 uint8、字符串或数组。
命令
除了属性之外,集群还具有命令,这些命令是可执行的操作 。它们在 Matter's 的 DM 中等同于 远程过程调用。命令类似于动词,例如门锁集群上的 锁门。命令可能会生成响应和结果;在 Matter中,此类响应也被定义为命令,方向 相反。
事件
最后,集群还可能具有事件,这些事件可以被视为过去状态转换的记录 。虽然属性表示当前状态, 事件却是过去的日志,并且包含单调递增的 计数器、时间戳和优先级。它们可以捕获状态转换,以及使用属性无法轻松实现的数据建模。
端点 0 保留给实用程序集群 。实用程序集群是特定的集群,用于封装端点上的服务功能,例如发现、寻址、诊断和软件更新。另一方面,应用集群 支持主要操作,例如开/关或温度测量。
设备类型
总而言之,当设备制造商计划推出新设备时,应包含哪些集群组合?
Matter 规范要求设备实现 或扩展一个或多个 设备类型。设备类型是强制性集群和可选集群的集合,用于定义物理设备的顶级属性,例如可调光灯、门锁或视频播放器。
设备类型不是由 Matter 规范主文档指定的,而是由随附文档(即 设备 库 )指定的。同样,所有应用集群都在应用集群库 中定义。您可以在 Connectivity Standards Alliance (Alliance)成员网站上找到这三个文档。
实现设备类型的每个端点都必须实现定义该设备类型的强制性集群。除了强制性集群之外,端点还可以实现其他集群,包括设备类型的一个或多个可选集群,甚至是并非设备类型一部分的集群。
客户端和服务器
集群可以是客户端集群 或服务器集群 。服务器是有状态 的,并且包含属性、事件和命令,而客户端是无状态 的,其职责是与远程服务器集群发起交互 ,从而执行以下操作:
- 从其远程属性读取 和向其写入 。
- 读取 其远程事件。
- 调用 其远程命令。
虽然 DM 在节点内是层次化的,但节点之间的关系并非如此。Matter 中的节点没有垂直 控制器/外围设备或领导者/追随者关系。Matter相反,这种关系是水平的:任何集群都可以是服务器 或客户端 。 因此,对于不同的集群和功能,一个节点可能既是服务器又是客户端。
例如,我们可能有两盏台灯:节点 A 和节点 B 。这两个节点都实现了开/关灯设备类型。 此设备类型包含一个开/关服务器集群,用于控制各自的物理灯输出。
但是,与典型的台灯一样,我们的实体设备还将包含一个开/关灯开关设备类型,用于其本地开/关开关。 此设备类型必须实现一个开/关客户端集群,以便它可以控制服务器集群。
在此示例中,节点 A 上的开/关客户端集群正在更改节点 A 和节点 B 上的开/关服务器集群的属性,而节点 B 的客户端集群仅更改节点 B 本身上的服务器集群。
在下一部分中,我们将详细介绍客户端和服务器集群如何交互:交互模型 。
描述符集群
顾名思义,描述符集群服务器提供内省信息。它描述了端点,并枚举了以下内容:
- 服务器集群。
- 客户端集群。
- 设备类型。
- 其他端点,称为“部件”。
每个设备类型都需要实现描述符集群。根设备类型在端点 0 上定义。读取其描述符集群将为客户端提供遍历可用端点的完整树并执行适用操作的可见性。
委托方或控制设备(例如手机或中枢)可以使用描述符集群上的信息来对设备(灯、开关、泵、温控器)进行建模,以及对该特定设备实例实现的功能进行建模,从而向用户显示正确的界面。
服务器集群
ServerList 属性列出了端点中的集群服务器。
客户端集群
ClientList 属性列出了端点中的集群客户端。
设备类型列表
DeviceTypeList 属性是端点支持的设备类型的列表,以及各自的修订版本。它必须包含至少一个设备类型。
部件列表
PartsList 包含用于实现此设备类型的端点的列表。
端点 0(根节点)的 PartsList 包含设备的所有端点,但端点 0 本身除外。
其他端点的 PartsList 通常为空。例如,温度传感器需要温度测量服务器集群,而不需要其他任何内容。
其他设备类型可能由多个设备类型实例的树形结构组成。例如,视频播放器设备类型可以由 TV、视频播放器、扬声器和不同的内容应用设备类型组成,每个类型都在不同的端点上。
-
Matter 规范确定设备可以 有多个节点。 例如,智能手机可能有多个应用,每个应用都是一个不同的节点。就本入门指南而言,所有设备都将包含一个节点。预计大多数物理设备都将遵循此模式。 ↩