读取事务

读取交易

Matter 中与节点交互的首要用例之一是读取另一个节点的属性,例如来自传感器的温度值。在此类互动中,必须执行的第一个操作是读取请求操作。

读取事务的操作序列
图 1:读取事务

读取请求操作

方向:发起者 -> 目标

在此 Action 中,发起方查询符合以下条件的目标:

  • 属性请求:目标的零个或多个属性的列表。此列表包含目标所请求属性的零个或多个路径。
  • 事件请求:目标所请求事件的零个或多个路径的列表。

目标收到“读取请求操作”后,它将组建一个包含所请求的信息的报告数据操作。

报告数据操作

方向:目标 -> 发起者

在此 Action 中,目标会返回以下内容:

  • 属性报告:读取操作请求中请求的零个或多个报告属性的列表。
  • 事件报告:包含零个或多个已报告事件的列表。
  • 禁止响应:一个标志,用于确定是否应禁止对此操作的状态响应
  • 订阅 ID:如果此报告是订阅交易的一部分,则必须包含一个用于标识订阅交易的整数。

状态响应操作

方向:Target -> Initiator 或 Initiator -> Target

一旦发起程序收到请求的数据,默认情况下它必须生成状态响应操作。此操作会从发起者发送,用于确认收到报告数据。如果设置了“Suppress Status Response”(抑制状态响应)标志,启动器不得发送状态响应操作。

一旦发起者发送状态响应操作,或者已启用“抑制响应”标志的发起者收到报告数据操作,读取/报告查询即会完成。

状态响应操作只包含一个 status 字段,此字段将确认操作成功或显示失败代码。

读取限制

读取请求操作和报告数据操作仅适用于 Unicast。此外,这些请求的路径不能针对一组节点。

状态响应操作仅限 Unicast,无法作为对群组广播的响应生成。

订阅交易

订阅交易的操作序列
图 2:订阅交易

订阅请求操作

方向:发起者 -> 目标

除了单个读取请求操作之外,发起者还可以订阅属性或事件的定期更新。因此,订阅交易之后的定期数据更新可能会生成相同的报告数据操作。

订阅互动会在两个节点之间创建关系,其中目标会定期向发起者生成报告数据操作。发起者为订阅者,目标为发布者。

订阅请求操作包含:

  • 最小间隔区间:两次报告之间的最小时间间隔。
  • 最大时间间隔上限:两次报告之间的最大时间间隔。
  • 属性报告:读取操作请求中请求的零个或多个已报告属性的列表。
  • 事件报告:包含零个或多个已报告事件的列表。

订阅请求发出后,目标会使用一个包含第一批报告的数据(Primed Publish Data)的报告数据操作来响应启动器。

然后,发起者确认报告数据操作,并向目标发送状态响应操作。目标收到状态响应操作(没有报告任何错误)后,就会发送订阅响应操作。

目标随后将按照协商的时间间隔定期发送报告数据操作,发起者将对这些 Action 做出响应,直到订阅丢失或被取消。

订阅响应操作

方向:目标 -> 发起者

这是针对订阅交易的最后一个操作,该过程到此结束。包括:

  • 订阅 ID:用于标识订阅的整数。
  • 最小间隔:报告之间的最终确定的最小时间间隔。
  • 最大间隔:报告之间的最终确定的最长时间间隔。

订阅限制

  • 订阅请求操作和订阅响应操作是仅限 Unicast 的操作。
  • 订阅互动中的所有报告数据操作都必须具有相同的订阅 ID。
  • 如果订阅者未在 Action 之间协商的最长时间间隔内收到报告数据操作,订阅将被终止。
  • 根据上述规则,发布商只需停止发送定期报告数据操作即可终止订阅互动。
  • 订阅者可以使用 INACTIVE_SUBSCRIPTION 状态代码响应“报告数据”操作,从而终止订阅互动。