读取事务
与 Matter 中的节点交互的第一个用例之一是从其他节点读取属性,例如来自传感器的温度值。在此类互动中,必须执行的第一个操作是读取请求操作。
读取请求操作
方向:启动器 -> 目标
在此操作中,发起者会查询提供以下内容的目标:
- 属性请求:包含零个或多个 Target 属性的列表。此列表包含零个或多个指向目标所请求属性的路径。
- 事件请求:包含目标所请求事件的零个或多个路径的列表。
在目标收到读取请求操作后,它会使用所请求的信息组合一个报告数据操作。
报告数据操作
方向:目标 -> 发起方
在此 Action 中,Target 会做出以下响应:
- 属性报告:读取操作请求中请求的零个或多个已报告属性的列表。
- 事件报告:包含零个或多个被报告事件的列表。
- 抑制响应:一个标志,用于确定是否应抑制对此操作的状态响应。
- 订阅 ID:如果此报告是订阅交易的一部分,则必须包含一个用于标识订阅交易的整数。
状态响应操作
方向:目标 -> 发起者或发起者 -> 目标
发起者收到请求的数据后,默认情况下必须生成状态响应操作。此操作从发起者发送,确认已收到所报告的数据。如果已设置“抑制状态响应”标志,发起者不得发送状态响应操作。
发起程序发送状态响应操作后,或启用“禁止响应”标志的发起程序收到报告数据操作后,读取/报告查询即告完成。
状态响应操作只包含一个 status 字段,该字段将确认操作成功或显示失败代码。
读取限制
读取请求操作和报告数据操作仅限 Unicast。此外,这些请求的路径不能定位一组节点。
状态响应操作仅限 Unicast,不能作为对组播的响应生成。
订阅交易
订阅请求操作
方向:启动器 -> 目标
除了单个读取请求操作之外,发起者还可以订阅属性或事件的定期更新。因此,订阅交易之后的定期数据更新也可能会引发相同的报告数据操作。
订阅互动会在两个节点之间创建一种关系,其中目标会定期向发起方生成报告数据操作。发起者是订阅者,目标是发布商。
订阅请求操作包含:
- 最小间隔时间:报告之间的最小时间间隔。
- 最大间隔时间上限:报告之间的最大间隔时间。
- 属性报告:读取操作请求中请求的零个或多个已报告属性的列表。
- 事件报告:包含零个或多个所报告事件的列表。
发出订阅请求后,Target 会使用一个包含第一批报告数据的报告数据操作来响应发起方:Primed Publish Data。
然后,发起者会确认报告数据操作,并将状态响应操作发送至目标。一旦目标收到没有报告任何错误的状态响应操作,就会发送订阅响应操作。
随后,目标将按商定的时间间隔定期发送报告数据操作,发起方将响应这些操作,直到订阅丢失或取消订阅。
订阅响应操作
方向:目标 -> 发起方
这是针对订阅交易的最后一个操作,并会结束该流程。包括:
- 订阅 ID:用于标识订阅的整数。
- 最小间隔:报告之间的最终、确定的最小间隔。
- 最大间隔:报告之间的最终、确定的最大间隔。
订阅限制
- 订阅请求操作和订阅响应操作是仅限 Unicast 的操作。
- 订阅互动中的所有报告数据操作都必须具有相同的订阅 ID。
- 如果订阅者未在操作之间的最大协商间隔内收到报告数据操作,订阅将终止。
- 由于上述规则,发布商只需停止发送定期报告数据操作即可终止订阅互动。
- 订阅者可通过使用
INACTIVE_SUBSCRIPTION
状态代码响应报告数据操作来终止订阅互动。