Matter学习笔记(3)——交互模型

一、简介

1.1 交互方式

交互模型层定义了客户端和服务器设备之间可以执行哪些交互。发起交互的节点称为发起者(通常为客户端设备),作为交互的接收者的节点称为目标(通常为服务器设备)。

节点通过以下方式进行交互:

  • 读取属性和事件
  • 订阅属性和事件(此交互用于创建与目标的订阅,以便定期接收来自目标的数据报告,而不是轮询数据。)
  • 写入属性
  • 调用命令

Matter 设备实现互联互通,主要是靠在上层定义了一套统一的 Data Model(数据模型), 在这套设备模型里面,设备内的逻辑功能单元是用 EndPoint 来表示的。每个 EndPoint 的功能有若干个 Culsters 来描述。 通讯的过程是有本地的 EndPoint 和远端的 EndPoint 来交互完成的,这个交互过程称之为 Interaction

1.2 群组

Matter 中的节点可以属于一个。设备组是一种机制,用于在同一 Action 中同时寻址和向多台设备发送消息。一个群组中的所有节点共享同一群组 ID(一个 16 位整数)。

为了完成群组级别的通信(群组广播),Matter 利用 IPv6 Multicast 消息,并且所有群组成员具有相同的 Multicast 地址。

1.3 路径

每当我们想要与属性、事件或命令互动时,都必须指定此互动的路径:属性、事件或命令在节点数据模型层次结构中的位置。需要注意的是,路径可能还会使用通配符运算符来同时寻址多个节点或集群,从而聚合这些互动,从而减少操作数量。

此机制对于提高通信的响应速度非常重要。例如,当用户想要关闭所有灯时,语音助理可以与一组灯中的多个灯建立单次互动,而不是与一系列单独的互动互动。如果发起者与每个指示灯创建单独的交互,则可能会在设备响应速度方面产生人可感知的延迟。这种效果会导致多台设备对命令做出响应,且设备之间会有明显延迟。

可以使用以下某个选项组合 Matter 中的路径:

<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID>        <cluster> <attribute | event | command>

在这些路径构建块中,endpointcluster 还可能包含用于选择多个节点实例的通配符运算符。

1.4 可计时和无计时

有两种执行写入或调用 Matter 的方式:计时的和非计时的。计时事务为写入/调用操作的发送建立了一个超时上限。这个超时的目的是为了防止针对事务的拦截攻击。它特别适用于对控制资产进行访问的设备,如车库开门器和锁。

二、交互模型的层次结构

每当节点与另一个节点建立加密的通信序列时,它们就构成了交互关系。每次交互都由一个或多个事务组成,事务由一项或多项操作组成,这些操作可理解为节点之间的即时通讯级消息。

事务支持多项 Action,如从其他节点请求属性或事件的读取请求操作,或其响应,即报告数据操作,用于将信息从服务器传回客户端。

三、读取交互

3.1 读取请求操作

  • 属性请求:包含零个或多个 Target 属性的列表。此列表包含零个或多个指向目标所请求属性的路径。
  • 事件请求:包含目标所请求事件的零个或多个路径的列表。
    在目标收到读取请求操作后,它会使用所请求的信息组合一个报告数据操作。

3.2 报告数据操作

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

3.3 状态响应操作

Initiator 收到请求的数据后,默认情况下必须生成状态响应操作。此操作从 Initiator 发送,确认已收到所报告的数据。如果已设置“抑制状态响应”标志,Initiator 不得发送状态响应操作。

Initiator 发送状态响应操作后,或启用“禁止响应”标志的 Initiator 收到报告数据操作后,读取交互完成。

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

3.4 读取限制

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

状态响应操作仅限 Unicast,不能作为对组播的响应生成。

四、写入交互(非定时)

4.1 写入请求操作

  • 写入请求:包含一个或多个元组(包含路径和数据)的列表。
  • 定时请求:指示此操作是否属于定时写入交互的标志。
  • 抑制响应:一个标志,用于确定是否应抑制对此操作的状态响应

4.2 写入回复操作

  • 写入响应:针对写入请求操作发送的每个写入请求的路径和错误代码列表。

4.3 非定时写入限制

写入请求操作可能是组播,但在这种情况下必须设置“禁止响应”标志。其原因在于,网络可能会被群组中每个成员的同步响应所淹没。

如需启用此行为,“写入请求”列表中使用的路径可以包含群组,也可能包含通配符,但仅限于“端点”字段。

五、写入交互(定时)

5.1 定时请求操作

  • Timeout:此事务可以保持打开状态的毫秒数。在此期间,Initiator 发送的下一项操作将被视为有效。

收到定时请求操作后,Target 必须使用状态响应操作确认定时请求操作。一旦 Initiator 收到未报告任何错误的状态响应操作,就会发送写入请求操作。

5.2 写入请求操作

与上文所述的写入请求操作相同。

5.3 写入回复操作

与上文所述的写入回复操作相同。

5.4 定时写入限制

定时请求操作、写入请求操作和写入响应操作是单播操作。

六、调用命令交互(非定时)

6.1 调用请求操作

  • 调用请求:集群命令的路径列表,以及命令的可选参数(名为命令字段)。
  • 定时请求:一个标志,用于指示此操作是否为定时调用命令交互的一部分。
  • 抑制响应:一个标志,用于指示是否应抑制调用响应操作。
  • 互动 ID:一个整数,用于将调用请求操作与调用响应操作进行匹配。

6.2 调用响应操作

  • 调用响应:每个发送的调用请求的命令响应或状态列表。
  • 互动 ID:一个整数,用于将调用请求操作与调用响应操作进行匹配。

6.2 非定时调用限制

调用请求操作可能是组播,但在这种情况下必须设置“禁止响应”标志。其原因在于,网络可能会被组中每个成员的同步响应应所淹没。

如需启用此行为,“调用请求”列表中使用的路径可能包含群组,也可能包含通配符,但仅限于“端点”字段。此外,如果 Action 是组播,则事务将终止,并且没有响应。

七、调用命令交互(定时)

7.1 定时请求操作

  • Timeout:此事务可以保持打开状态的毫秒数。在此期间,Initiator 发送的下一项操作将被视为有效。

收到定时请求操作后,Target 必须使用状态响应操作确认定时请求操作。一旦 Initiator 收到未报告任何错误的状态响应操作,就会发送调用请求操作。

7.2 调用请求操作

与上文所述的调用请求操作相同。

7.3 调用响应操作

与上文所述的调用响应操作相同。

7.4 定时调用限制

定时请求操作、调用请求操作和调用响应操作仅限 Unicast,因此是单播操作。

调用请求操作支持使用包含群组的路径以及通配符,但调用响应操作不支持通配符。

八、订阅交互

8.1 订阅请求操作

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

发出订阅请求后,Target 会使用一个包含第一批报告数据的报告数据操作来响应发起方:Primed Publish Data

然后,Initiator 会确认报告数据操作,并将状态响应操作发送至目标。一旦目标收到没有报告任何错误的状态响应操作,就会发送订阅响应操作。

随后,Target 将按协商的时间间隔定期发送报告数据操作,Initiator 将响应这些操作,直到订阅丢失或取消订阅。

8.2 订阅请求操作

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

8.3 订阅限制

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

九、交互示例:门锁

以下部分介绍了交互类型的示例。这些示例使用虚构的 Matter 控制器作为交互发起者,使用门锁设备作为交互目标。

  • 读取交互
    Matter 控制器可以使用读取交互从门锁设备的数据模型层读取一个或多个属性或事件。例如,Matter 控制器可以读取集群 LockType 的属性 DoorLock,以向用户显示适当的图标。下图显示了完成此交互需要交换的操作。

  • 写入交互
    写入交互可用于修改门锁设备的一个或多个属性。例如,Matter 控制器可以更改集群 OperatingMode 的属性 DoorLock,将锁置于隐私模式,在该模式下,门只能从建筑物内部手动解锁。下图显示了完成此交互需要交换的操作。

  • 调用命令交互
    调用命令交互允许 Matter 控制器调用来自门锁设备的数据模型层的命令之一。例如,Matter 控制器可以使用集群 UnlockDoor 的命令 DoorLock 远程解锁门。下图显示了完成此交互需要交换的操作。

注:这是调用命令交互的一种特殊情况,即计时交互,它需要在发送实际命令之前再交换两条消息。需要这两条消息来确保攻击者无法在房主外出时拦截并重放该命令来解锁门。

  • 订阅交互
    订阅交互可用于监视门锁设备的一个或多个属性或事件的状态。例如,Matter 控制器可以订阅集群 LockState 的属性 DoorLock,以便在门被其他用户解锁时接收通知。下图显示了完成此交互需要交换的操作。

注:这是一个长时间运行的交互,由执行的多个事务组成,直到任何一方停止响应或响应失败状态。


• 由 Leung 写于 2023 年 12 月 3 日

• 参考:互动模型  |  Matter  |  Google Home Developers
    nRF Connect SDK - Matter

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Initial 脚手架国内镜像地址

官方的脚手架下载太慢了&#xff0c;并且现在没有了Java8的选项&#xff0c;所以找到国内的脚手架镜像地址&#xff0c;推荐给大家。 首先说官方的脚手架 官方的脚手架地址为&#xff1a; https://start.spring.io/ 但是可以看到&#xff0c;并没有了Java8的选项。 所以推荐…

3dMax拼图生成工具Puzzle2D使用教程

Puzzle2D for 3dsMax拼图生成工具使用教程 Puzzle2D简介&#xff1a; 2D拼图随机生成器&#xff08;英文&#xff1a;Puzzle2D&#xff09; &#xff0c;是一款由#沐风课堂#用MAXScript脚本语言开发的3dsMax建模小工具&#xff0c;可以随机创建2D可编辑样条线拼图图形。可批量…

【tensorflow学习-选择动作】 学习tensorflow代码调用过程

a actor.choose_action(s) def choose_action(self, s):s s[np.newaxis, :]return self.sess.run(self.action, {self.s: s}) # get probabilities for all actions输入&#xff1a;s 输出&#xff1a;self.sess.run(self.action, {self.s: s}) &#xff1a;a

解决:UnboundLocalError: local variable ‘js’ referenced before assignment

解决&#xff1a;UnboundLocalError: local variable ‘js’ referenced before assignment 文章目录 解决&#xff1a;UnboundLocalError: local variable js referenced before assignment背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使…

实战案例:chatglm3 基础模型多轮对话微调

chatglm3 发布了&#xff0c;这次还发了base版本的模型&#xff0c;意味着我们可以基于这个base模型去自由地做SFT了。 本项目实现了基于base模型的SFT。 base模型 https://huggingface.co/THUDM/chatglm3-6b-base由于模型较大&#xff0c;建议离线下载后放在代码目录&#…

OSG编程指南:专栏内容介绍及目录

1、专栏介绍 OpenSceneGraph&#xff08;OSG&#xff09;场景图形系统是一个基于工业标准 OpenGL 的软件接口&#xff0c;它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。本专栏基于 OSG 3.6.5版本进行源码的编写及扩展&#xff0c;也通用于其他OSG版本的…

OpenTelemetry系列 - 第2篇 Java端接入OpenTelemetry

目录 一、架构说明二、方式1 - 自动化2.1 opentelemetry-javaagent.jar&#xff08;Java8 &#xff09;2.2 使用opentelemetry-javaagent.jar完成自动注入2.3 配置opentelemetry-javaagent.jar2.4 使用注解&#xff08;WithSpan, SpanAttribute&#xff09;2.5.1 代码集成WithS…

【栈和队列(2)】

文章目录 前言队列队列方法队列模拟实现循环队列练习1 队列实现栈 前言 队列和栈是相反的&#xff0c;栈是先进后出&#xff0c;队列是先进先出&#xff0c;相当于排队打饭&#xff0c;排第一的是最先打到饭出去的。 队列 队列&#xff1a;只允许在一端进行插入数据操作&…

20、Resnet 为什么这么重要

&#xff08;本文已加入“计算机视觉入门与调优”专栏&#xff0c;点击专栏查看更多文章信息&#xff09; resnet 这一网络的重要性&#xff0c;上一节大概介绍了一下&#xff0c;可以从以下两个方面来有所体现&#xff1a;第一是 resnet 广泛的作为其他神经网络的 back bone&…

Redis集合对象

一. 编码 集合对象的编码可以是intset或者hashtable。 intset编码的集合对象使用整数集合作为底层实现&#xff0c;集合对象包含的所有元素都保存在整数集合里面。 127.0.0.1:6379> sadd numbers 1 3 5 (integer) 3 127.0.0.1:6379> object encoding numbers "ints…

使用凌鲨进行内网穿透

为了方便在本地进行开发和调试工作&#xff0c;有时候需要安全地连接内网或Kubernetes集群中的服务。 在net proxy server中可以限制访问用户&#xff0c;也可以设置端口转发的密码。 使用 连接端口转发服务 列出可转发端口 可转发端口是服务端设置的&#xff0c;不会暴露真…

锁表的原因及解决办法

引言 作为开发人员&#xff0c;我们经常会和数据库打交道。 当我们对数据库进行修改操作的时候&#xff0c;例如添加字段&#xff0c;更新记录等&#xff0c;没有正确评估该表在这一时刻的使用频率&#xff0c;直接进行修改&#xff0c;致使修改操作长时间无法响应&#xff0…

2023年【起重机司机(限桥式起重机)】报名考试及起重机司机(限桥式起重机)考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【起重机司机(限桥式起重机)】报名考试及起重机司机(限桥式起重机)考试资料&#xff0c;包含起重机司机(限桥式起重机)报名考试答案和解析及起重机司机(限桥式起重机)考试资料练习。安全生产模拟考试一点通结合…

正是阶段高等数学复习--函数极限的计算

之前在预备阶段中函数极限的解决方式分三步&#xff0c;第一步观察形式并确定用什么方式来解决&#xff0c;第二步化简&#xff0c;化简方式一共有7种&#xff0c;分别是最重要的三种&#xff08;等价替换、拆分极限存在的项、计算非零因子&#xff09;以及次重要的4种&#xf…

BurpSuite 请求/响应解密插件开发

BurpSuite 请求/响应解密插件开发 本文主要记录如何利用burp官方的新版API即MontoyaApi 写一个请求/响应的解密插件。背景下面是主要的操作步骤&#xff1a;根据上述操作做完之后&#xff0c;生成&#xff0c;然后在burp中加载插件&#xff0c;然后通关抓包看效果&#xff0c;具…

DevEco Studio 调整开发工具中的字体大小与行高

我们打开编辑器 选择 左上角 File 下的 Settings 将左侧菜单栏 编辑 展开 我们在编辑下面 选择 Font 然后 如下图指向的两个位置 我们可以调整它的字体大小和行高 设置好之后 右下角 点击 Apply 应用 然后点击 OK即可 当然 你按着 Ctrl 然后鼠标滚动 也可以像浏览器那样 拉…

维基百科文章爬虫和聚类:高级聚类和可视化

一、说明 维基百科是丰富的信息和知识来源。它可以方便地构建为带有类别和其他文章链接的文章&#xff0c;还形成了相关文档的网络。我的 NLP 项目下载、处理和应用维基百科文章上的机器学习算法。 在我的上一篇文章中&#xff0c;KMeans 聚类应用于一组大约 300 篇维基百科文…

Spring IOC—基于XML配置和管理Bean 万字详解(通俗易懂)

目录 一、前言 二、通过类型来获取Bean 0.总述&#xff08;重要&#xff09; : 1.基本介绍 : 2.应用实例 : 三、通过指定构造器为Bean注入属性 1.基本介绍 : 2.应用实例 : 四、通过p命名空间为Bean注入属性 1.基本介绍 : 2.应用实例 : 五、通过ref引用实现Bean的相…

吸烟(抽烟)检测和识别2:Pytorch实现吸烟(抽烟)检测和识别(含吸烟(抽烟)数据集和训练代码)

吸烟(抽烟)检测和识别2&#xff1a;Pytorch实现吸烟(抽烟)检测和识别(含吸烟(抽烟)数据集和训练代码) 目录 吸烟(抽烟)检测和识别2&#xff1a;Pytorch实现吸烟(抽烟)检测和识别(含吸烟(抽烟)数据集和训练代码) 1.吸烟(抽烟)检测和识别 2.吸烟(抽烟)数据集 &#xff08;1&am…