设备数据模型

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

设备和端点

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

节点是一组端点。每个端点都包含一组功能。 例如,端点可能与照明功能相关,而另一个端点与移动侦测相关,另一个端点与实用程序(如设备 OTA)相关。

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

节点角色

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

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

集群

在一个端点中,一个节点包含一个或多个集群。这些是设备层次结构中的另一个步骤,它们对特定功能进行分组,如智能插座上的“开启/关闭”集群,或可调暗的灯端点上的“级别控制”集群。

一个节点可能有多个端点,每个端点创建相同功能的实例。例如,灯具可能会单独控制各个灯,或者电源板可能会暴露各个插座的控制。

属性

在最后一个级别,我们将找到属性,即节点持有的状态,例如级别控件集群的当前级别属性。属性可以定义为不同的数据类型,例如 uint8、字符串或数组。

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

命令

除了特性之外,集群还有命令,也就是可以执行的操作。它们在 Matter 的远程过程调用的 DM 中等效。命令类似于动词,例如“门锁”集群上的“锁门”。命令可以生成响应和结果;在 Matter 中,此类响应也称为命令,命令的方向是反向的。

事件

最后,集群还可能包含“事件”,它们可以视为过去的状态转换记录。属性表示当前状态,而事件是过去的日志,包含单调递增的计数器、时间戳和优先级。它们支持捕获状态转换,以及使用属性无法轻易实现的数据建模。

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

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

设备类型

当设备制造商计划新设备时,应整合哪些集群组合?

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

设备类型不是由 Matter 规范主文档指定的,而是由一个配套文档(即设备库)指定。同样,所有应用集群都在应用集群库中定义。您可以在 Connectivity Standards Alliance (Alliance) 成员网站上找到这三个文档。

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

客户端和服务器

集群可以是客户端集群服务器集群。虽然服务器是有状态的并存储属性、事件和命令,但客户端是无状态的,它负责发起与远程服务器集群的交互,从而执行:

  • reads from 和 writes(写入到远程属性)。
  • 读取其远程事件。
  • 调用其远程命令。

虽然 DM 在节点内具有层次结构,但节点之间的关系不相同。Matter 中的节点没有垂直控制器/外围设备或主服务器/跟随器关系。相反,关系是水平关系:任何集群可以是服务器或客户端。因此,对于不同的集群和功能,节点可能既是服务器又是客户端。

例如,我们可能有两个台灯:“节点 A”和“节点 B”。两个节点都实现了开/关灯设备类型。此设备类型包含一个开启/关闭服务器集群,用于控制各自的物理灯光输出。

但是,和典型的台灯一样,我们的实体设备还包含用于本地开/关开关的开/关灯开关设备类型。此设备类型必须实现开启/关闭客户端集群,才能控制服务器集群。

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

在本示例中,节点 A 上的开启/关闭客户端集群会更改节点 A 和节点 B 上的开启/关闭服务器集群的特性,而节点 B 的客户端集群只会更改节点 B 上的服务器集群。

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

描述符聚类

顾名思义,描述符集群服务器会提供自检信息。它会描述端点枚举其以下内容:

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

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

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

服务器集群

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

客户端集群

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

设备类型列表

DeviceTypeList 属性是 Endpoint 支持的设备类型及其各自的修订版本的列表。它必须至少包含一种设备类型。

零件列表

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

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

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

其他设备类型可能由多个“设备类型”实例的树结构组成。例如,视频播放器设备类型可以由电视、视频播放器、音响设备和不同的内容应用设备类型组成,它们分别位于不同的端点。


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