设备数据模型

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

设备和端点

所有设备(包括智能手机和家居助理)均由节点1组成。“节点”是网络中可以标识为唯一且可寻址的资源,用户可以感知到整个功能。Matter 中的网络通信始于和终止节点。

节点是一组端点。每个端点都封装了一个功能集。例如,端点可能涉及照明功能,而端点可能涉及移动侦测,以及其他与实用程序(例如设备 OTA)的处理方式。

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

节点角色

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

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

集群

端点内,一个节点包含一个或多个集群。这是设备层次结构中的另一个步骤,因为它们将特定功能(例如智能插座上的开启/关闭集群或调光端点上的水平控制集群)分组。

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

属性

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

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

命令

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

活动

最后,集群可能还有事件,可以视为过去状态转换的记录。虽然特性代表当前状态,但事件是以前的记录,并且包括单调递增的计数器、时间戳和优先级。 它们可以捕获状态转换,以及使用属性来不易实现的数据建模。

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

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

设备类型

设备制造商计划规划新设备时,我们应该将哪些集群组合纳入一起?

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

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

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

客户端和服务器

集群可能是客户端集群或服务器集群。服务器是有状态的,存储特性、事件和命令,而客户端是无状态的,其职责是与远程服务器集群发起交互,从而执行以下操作:

  • read写入其远程特性。
  • 读取的远程事件。
  • 调用其远程命令。

虽然 DM 在节点内分层,但节点之间的关系不然。Matter 中的节点不具有垂直控制器/外围设备或领先者/关注者关系。相反,关系是水平的:任何集群可以是服务器客户端。 因此,就不同的集群和功能而言,一个节点可能既是服务器,又是客户端。

例如,我们可能有两个表格灯:节点 A节点 B。这两个节点均实现开启/关闭灯设备类型。此设备类型包括一个控制其各自的物理光输出的开启/关闭服务器集群。

不过,与典型的台灯一样,我们的实体设备也会为其本地开启/关闭开关添加开/关灯开关设备类型。此设备类型必须实现开启/关闭客户端集群,以便控制服务器集群。

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

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

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

描述符集群

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

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

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

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

服务器集群

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

客户端集群

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

设备类型列表

DeviceTypeList 特性是端点所支持的设备类型及其对应的修订版本的列表。它必须至少包含一个设备类型。

零部件列表

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

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

其他端点的 PartsList 通常为空。例如,温度传感器规定了温度测量服务器集群。

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


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