读取事务
在 Matter 中与节点交互的首要用例之一是读取其他节点的属性,例如传感器的温度值。在这种互动中,必须执行的第一个操作是读取请求操作。
读取请求操作
方向:发起方 -> 目标
在此操作中,发起者会查询目标,提供以下信息:
- 属性请求:包含目标的零个或多个属性的列表。此列表由指向目标请求的属性的零个或多个路径组成。
- 事件请求:指向目标所请求事件的一个或多个路径的列表。
目标收到读取请求操作后,会组装一个包含请求信息的“报告数据”操作。
报告数据操作
方向:目标 -> 发起方
在此 Action 中,目标会做出以下响应:
- 属性报告:Read 操作请求中请求的零个或多个已报告属性的列表。
- 事件报告:包含零个或多个已报告事件的列表。
- Suppress Response:此标志用于确定是否应抑制对此操作的状态响应。
- 订阅 ID:如果此报告是订阅交易的一部分,则必须包含用于标识订阅交易的整数。
状态响应操作
方向:目标 -> 发起方或发起方 -> 目标
发起方收到请求的数据后,默认情况下必须生成状态响应操作。此操作由发起方发送,用于确认已收到所报告的数据。如果设置了“Suppress Status Response”(抑制状态响应)标志,发起者不得发送“Status Response Action”(状态响应操作)。
发起者发送状态响应操作或接收启用了“抑制响应”标志的报告数据操作后,读取/报告查询即告完成。
状态响应操作仅包含一个 status 字段,该字段用于确认操作成功或显示失败代码。
阅读限制
“读取请求”操作和“报告数据”操作仅适用于 Unicast。此外,这些请求的路径不得定位到节点组。
状态响应操作仅适用于 Unicast,无法作为对群发的响应生成。
订阅交易
“订阅请求”操作
方向:发起方 -> 目标
除了单个读取请求操作之外,发起者还可以订阅属性或事件的定期更新。因此,在订阅交易后,系统可能会因定期数据更新而生成相同的“报告数据操作”。
订阅互动会在两个节点之间建立关系,其中目标节点会定期向发起方生成报告数据操作。发起者是订阅方,目标是发布方。
订阅请求操作包含:
- 最小间隔下限:报告之间的最小间隔。
- 最大间隔上限:报告之间的最大间隔。
- 属性报告:Read Action Request 中请求的零个或多个已报告属性的列表。
- 事件报告:包含零个或多个已报告事件的列表。
订阅请求发出后,目标会向发起方响应,其中包含包含第一批已报告数据的“报告数据”操作:预加载的已发布数据。
然后,发起者通过发送到目标的状态响应操作来确认“报告数据”操作。目标平台收到报告无错误的状态响应操作后,会发送订阅响应操作。
目标端随后会按协商的间隔时间定期发送“报告数据”操作,发起方会对这些操作做出响应,直到订阅丢失或取消为止。
“订阅回复”操作
方向:目标 -> 发起方
这是订阅交易的最后一个操作,也是整个流程的结束。It includes:
- 订阅 ID:用于标识订阅的整数。
- 最小间隔:报告之间的最终确定的最小间隔。
- 最大间隔时间:报告之间的最终确定的最大间隔时间。
订阅限制
- “订阅请求”操作和“订阅响应”操作仅适用于 Unicast。
- 订阅互动中的所有报告数据操作都必须具有相同的订阅 ID。
- 如果订阅方未在操作间协商的最长间隔时间内收到报告数据操作,则订阅将被终止。
- 根据之前的规则,发布商只需停止发送定期报告数据操作,即可终止订阅互动。
- 订阅者可以通过使用
INACTIVE_SUBSCRIPTION
状态代码响应“报告数据”操作来终止订阅互动。