4. Cluster分类
cluster可以定义为工具(Utility) Cluster或应用(Application) Cluster。
4.1 工具(Utility) Cluster
工具cluster不是端点的主要应用程序操作的一部分。它可以用于配置、发现、寻址、诊断、监控设备运行状况、软件更新等。它可能与对应的cluster存在临时关系。
作用域为端点的工具cluster示例:标识符、描述符、绑定、组等。 适用于该节点的工具cluster
示例:基本信息、诊断等。
4.2 应用(Application) Cluster
应用cluster支持端点的主要操作。应用cluster可以支持和一个或多个应用程序交互,既包括client也包括server。
应用cluster示例:
- On/Off cluster —— client向server发送命令
- Temperature Measurement cluster —— server向client报告数据
应用程序cluster不是工具cluster,即使它本身可能支持实用的工具功能,如校准、操作模式等。但应用程序cluster规范不应该涉及其应用领域之外的层级和过程。
示例:一个特定的温度测量cluster可能存在于不同的设备上,或在不同的网络中,每个设备具有不同的安全与配网机制和/或策略。
示例:commissioning cluster的范围是配网,而不是测温。
5. Clients and Servers
Clusters 可能是Client Cluster或Server Cluster。服务器是有状态的,保存属性、事件和命令;而客户端是 无状态的,其职责是启动与远程服务器集群的交互,从而执行:
- 读取和写入其远程属性。
- 读取其远程事件。
- 调用其远程命令。
虽然 DM 在节点内是分层的,但节点之间的关系不是。Matter中的节点没有controller/peripheral
或 leader/follower
关系。相反,关系是水平的:任何 Cluster 都可以是Server或Client。因此,对于不同的集群和功能,节点可能既是服务器又是客户端。
例如,我们可能有两个台灯:节点 A和节点 B。两个节点都实现了一个开/关灯设备类型。此设备类型包括控制其各自物理光输出的开/关服务器集群。
但是,就像典型的台灯一样,我们的物理设备还将包括一个开/关灯 开关设备类型,用于其本地开/关。此设备类型必须实现开/关客户端集群,以便它可以控制服务器集群。
客户端与服务端集群
在此示例中,节点 A 上的开/关客户端集群正在更改节点 A 和节点 B 上的开/关服务器集群的属性,而节点 B 的客户端集群仅更改节点 B 本身上的服务器集群。
在下一节中,我们将详细介绍客户端和服务器集群如何交互: Interaction Model(交互模型)。
交互模型
1.概念
如果我们不能对节点执行操作,那么节点的数据模型 (DM) 就不相关了。交互模型(IM),定义了一个节点的 DM 与其他节点的 DM 的关系:即 IM 作为 DM 之间通信的通用语言。
节点通过以下方式相互交互:
- 读取和订阅属性和事件
- 写入属性
- 调用命令
每当一个节点与另一个节点建立加密通信序列时,它们就构成了交互关系。Interactions 可能由一个或多个Transactions组成,而 Transactions 由一个或多个Action组成,可以理解为 Node 之间的 IM 级消息。
交互模型的层次结构
Matter 支持多个操作,例如从另一个节点请求属性或事件的读取请求操作,或其响应,报告数据操作,它将信息从服务器返回到客户端。
1.1 发起者(Initiators )和目标(Targets)
在Matter中,节点的发起目标被称为发起者(Initiators ),而响应的节点则作为目标(Target)。一般来说,发起者是客户端集群,而目标是客户端集群。
1.2 组(Groups)
在Matter中节点可能隶属于某个组。设备组作为一种机制,主要用于在统一操作中同时寻址并向多个设备发送消息。在一个 Group 中,所有的节点共享同一个 Group ID(16位整型)。
为了完成组级通信(群播),Matter 利用IPV6 多播消息,并且让所有的组成员都具有相同的多播地址。
1.3 路径(Path)
当我们想要与属性、事件或命令进行交互时,我们需要为这种交互指定 Path ,也就是属性、事件和命令在节点的数据模型层次结构中的位置。
注:Path 也可以使用Groups或者**统配交互符(Wildcard Operators)**同时处理多个节点或集群,从而减少操作的数量。
Path这种机制对提高通信的响应能力起到很重要的作用。例如:当用户想要关闭所有灯光,语音助手可以与组内多个灯建立单个的交互,而不是传统的一系列单独的交互。
Matter Path 使用规范:
<path> = <node> <endpoint> <cluster> <attribute | event | command> <path> = <group ID> <cluster> <attribute | event | command>
在这些路径构建块中,端点和集群还可能包括用于选择多个节点实例的通配符运算符。
1.4 定时和非定时(Timed & Untimed)
有两种执行写入或调用 Matter 的方式:定时的和非定时的。定时交易为写入/调用动作的发送建立了一个最大的超时。这个超时的目的是为了防止对交易的拦截攻击。它特别适用于对资产进行门禁的设备,如车库开门器和锁。
2. Read Transactions
与 Nodes 交互时的第一个用例 Matter是从另一个节点读取的属性,例如来自传感器的温度值。在此类交互中,必须执行的第一个操作是读取请求操作。
2.1 读取请求操作(Read Request Action)
发起者 -> 目标
在此 Action 中,Initiator 会查询 Target 提供的以下请求:
- 属性请求:零个或多个目标属性的列表。该列表由零个或多个目标请求属性的路径组成。
- 事件请求:目标请求事件的零个或多个路径列表。
目标接收到读取请求操作后,它将使用请求的信息组装一个报告数据操作;当目标接收到读取请求操作后,它将使用请求的信息组装一个报告数据操作。详见下图:
Read Transaction
2.2 报告请求数据(Report Data Action)
目标 -> 发起者
在此 Action 中,Target 响应:
- 属性报告(Attribute Reports):读取操作请求中请求的零个或多个报告属性的列表。
- 事件报告(Event Reports):零个或多个报告事件的列表。
- 抑制响应(Suppress Response):一个标志,用于确定是否应抑制对此操作的状态响应。
- 订阅 ID(Subscription ID):如果此报告是订阅交易的一部分,它必须包含一个用于识别订阅交易的整数。
2.3 状态响应动作(Status Response Action)
目标 -> 发起者 -> 目标
一旦 Initiator 接收到请求的数据,默认情况下它必须生成一个 Status Response Action。此操作由启动器发送,确认已收到报告的数据。如果设置了 Suppress Status Response 标志,则 Initiator 不得发送 Status Response Action。
一旦启动器发送了状态响应操作,或者启动器接收到启用了抑制响应标志的报告数据操作,读取/报告查询就完成了。
状态响应操作仅包含一个状态字段,该字段将确认操作成功或显示失败代码。
3. Subscription Transaction
3.1 订阅请求操作(Subscribe Request Action)
发起者 -> 目标
除了单一的读请求动作外,发起者还可以订阅属性或事件的定期更新。因此,同样的报告数据 Action 可以作为订阅交易后的定期数据更新的结果而产生。
订阅交互创建两个节点之间的关系,其中目标定期向发起者生成报告数据操作。 Initiator 是 Subscriber,Target 是 Publisher。
订阅请求操作包含:
- Min Interval Floor(最小间隔层):报告之间的最小间隔。
- Max Interval Ceiling(最大区间上限):报告之间的最大间隔。
- Attribute Reports(属性报告):读取操作请求中请求的零个或多个报告属性的列表。
- Event Reports(事件报告):零个或多个报告事件的列表。
Subscription Transaction
在订阅请求之后,目标用包含第一批报告数据的报告数据操作响应发起者:Primed Published Data。
然后,发起者通过发送到目标的状态响应操作来确认报告数据操作。一旦目标接收到一个状态响应动作报告没有错误,它发送一个订阅响应动作。
目标随后将以协商的间隔定期发送报告数据操作,发起者将响应这些操作,直到订阅丢失或取消。
3.2 订阅响应操作(Subscribe Response Action)
目标 -> 发起者
这是订阅交易的最后一个操作,并结束了该过程。这包括:
- Subscription ID(订阅 ID):标识订阅的整数。
- Min Interval(最小间隔):最终确定的报告之间的最小间隔。
- Max Interval(最大间隔):最终确定的报告之间的最大间隔。
4. Write Transactions
4.1 不定时写入事务(Untimed Write Transaction)
4.1.1 写请求操作(Write Request Action)
发起者 -> 目标
与读取请求操作类似,在此操作中,发起者为目标提供:
- Write Requests(写入请求):包含路径和数据的一个或多个元组的列表。
- Timed Request(定时请求):一个标志,指示此操作是否是定时写入事务的一部分。
- Suppress Response(抑制响应):指示是否应抑制响应状态操作的标志。
Untimed Write Transaction
4.1.2 写响应操作(Write Response Action)
目标 -> 发起者
4.1.3 不定时写入限制(Untimed Write Restrictions)
写入请求动作可以是一个组播,但在这种情况下,必须设置抑制响应标志。其理由是,否则网络可能会被来自一个组的每个成员的同时响应所淹没。
为了启用这种行为,在写请求列表中使用的路径可以包含组,或者它们可以包含通配符,但只在端点字段上。
4.2 定时写入事务(Timed Write Transaction)
在定时写入事务中比非定时写入事务多了几个步骤。
4.2.1 定时请求操作(Timed request action)
发起者 -> 目标
Initiator 启动事务发送此操作,其中包含:
- Timeout:此事务可以保持打开状态的毫秒数。在此期间,Initiator 发送的下一个动作将被视为有效。
一旦接收到定时请求操作,目标必须使用状态响应操作确认定时请求操作。一旦 Initiator 收到报告没有错误的 Status Response Action,它将发送 Write Request Action。
4.2.2 写请求操作(Write Request Action)
与前面描述的 4.1.1 写请求操作 相同。
4.2.3 写响应操作(Write Response Action)
与前面描述的 4.1.2 写响应操作 相同。
4.2.4 定时写入限制(Timed Write Restrictions)
定时请求动作、写请求动作和写响应动作是单播的。
5.调用事务
调用事务用于在目标节点上调用一个或多个集群命令。它类似于对集群中定义的命令进行的远程过程调用。
与写入事务类似,调用事务支持定时和不定时事务。 有关定时事务的更多信息,请参阅 交互模型:1.4.定时和非定时
5.1 不定时调用事务
5.1.1 调用请求操作(Invoke Request Action)
发起者 -> 目标
类似于读请求动作和写请求动作,在这个动作中,发起者为目标提供:
- Invoke Requests(调用请求):集群命令的路径(PATH)列表 ,以及命令的可选参数,名为 Command Fields。
- Timed Request(超时请求):一个标志,指示此操作是否是定时调用事务的一部分。
- Suppress Response(抑制响应):指示是否应抑制调用响应操作的标志。
- Interaction ID:一个整数,用于将 Invoke Request Action 与 Invoke Response Action 匹配。
5.1.2 调用响应操作(Invoke Response Action)
目标 -> 发起者
目标收到调用请求操作后,它将使用包含以下内容的调用响应操作来完成事务:
- Invoke Responses(调用响应):发送的每个调用请求的命令响应或状态列表。
- Interaction ID:一个整数,用于将 Invoke Response Action 与 Invoke Request Action 匹配。
5.1.3 不定时调用限制
Invoke Request Action可以是一个组播,但在这种情况下,必须设置抑制响应标志。其理由是,否则网络可能会被来自一个组的每个成员的同时响应所淹没。
为了启用这种行为,在调用请求列表中使用的路径可以包含组,或者它们可以包含通配符,但仅在端点字段上。此外,如果行动是组播,这个事务就会在没有响应的情况下终止。
5.2 定时调用事务
与定时写入事务类似,定时调用事务也从定时请求操作开始。
5.2.1 定时请求操作
发起者 -> 目标
Initiator 启动事务发送此操作,其中包含:
- Timeout:此事务可以保持打开状态的毫秒数。在此期间,Initiator 发送的下一个动作将被视为有效。
一旦接收到定时请求操作,目标必须使用状态响应操作确认定时请求操作。一旦 Initiator 收到状态响应操作报告没有错误,它将发送调用请求操作。
Timed Invoke Transaction
5.2.2 调用请求操作(Invoke Request Action)
与前面描述的 5.1.1 调用请求操作 相同。
5.2.3 调用响应操作(Invoke Response Action)
与前面描述的 5.1.2 调用响应操作 相同。
5.2.4 定时调用限制(Timed Invoke Restrictions)
所有的调用命令都可以在定时交互中调用。定时请求动作、调用请求动作和调用响应动作都是单播的,因此不能在定时调用事务上作为群播使用。
Invoke Request Action支持使用带组的路径,以及通配符,但Invoke Response Action不支持通配符的使用。