读取事务

读取事务

Matter 中与节点交互时,第一个用例是从其他节点读取特性,例如传感器的温度值。在此类交互中,必须执行的第一个操作是读取请求操作。

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

读取请求操作

方向:启动器 -> 目标

在此 Action 中,Initiator 会查询具有以下特征的目标:

  • 属性请求:零个或零个以上目标属性的列表。此列表包含零个或多个指向目标请求的特性的路径。
  • 事件请求:指向目标请求的事件的路径的零个或多个路径。

目标收到读取请求操作后,它将使用请求的信息组合报告数据操作。

报告数据操作

方向:目标 -> 启动器

在此操作中,目标返回:

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

状态响应操作

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

发起程序收到请求的数据后,默认情况下,它必须生成状态响应操作。此操作会从 Initiator 中发送,确认已收到报告的数据。如果已设置“禁止显示状态响应”标志,则启动器不得发送状态响应操作。

发起者发送状态响应操作,或者启用“禁止显示响应”标志的启动器收到报告数据操作后,读取/报告查询即完成。

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

读取限制

读取请求操作和报告数据操作仅限 Unicast。此外,这些请求的路径可能不会定位一组节点。

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

订阅交易

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

订阅请求操作

方向:启动器 -> 目标

除了单个读取请求操作外,Initiator 还可以订阅特性或事件的定期更新。因此,系统可能会在订阅交易后的定期数据更新中生成相同的报告数据操作。

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

“订阅请求”操作包含:

  • Min Interval Floor(时间间隔下限下限):报告之间的最短时间间隔。
  • 最大时间间隔上限:报告之间的最大时间间隔。
  • 特性报告:读取操作请求中请求零个或多个报告的特性列表。
  • 事件报告:包含零个或多个报告的事件的列表。

订阅请求之后,目标会使用包含第一批报告数据(即已预告的已发布数据)的报告数据操作来响应启动器。

然后,Initiator 会使用发送到目标的状态响应操作来确认报告数据操作。一旦目标收到未报告任何错误的状态响应操作,它就会发送订阅响应操作。

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

订阅响应操作

方向:目标 -> 启动器

这是对订阅交易的最后一项操作,到这里就结束了流程。包括:

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

订阅限制

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