Matter

Matter 驱动参考:通过蓝牙把设备调试进本地 Fabric、配对设备的流程、节点身份,以及 cluster 点位。

以 Markdown 查看

Matter 驱动读的是 Matter over Thread 的仪器:通过 Matter 标准认证的智能传感器、插座、灯具之类的设备。Ganter Lab 扮演的是一个带着自己本地 Fabric 的 Matter 控制器:它在本机上通过蓝牙低功耗把每一台设备调试入网一次,把你现有 Thread 网络的凭据交给它,从那以后就通过你的 Thread 边界路由器、走那个网络和它对话。

这把通常的配置顺序颠倒了过来。Matter 设备不是从一个主机和端口开始的:它是从一次配对仪式开始的,事后存下来的只有那个已调试节点稳定的身份。

配对之前你需要:

  • 本机上一块蓝牙低功耗适配器,处于打开状态,并且 Windows 允许 Ganter Lab 使用它。
  • 一个已有的、带边界路由器的 Thread 网络,以及它完整的活动运行数据集。Ganter Lab 把设备加入你的网络;它编不出这个网络的凭据。
  • 设备的配网码,印在设备上或者它的包装上,并且设备处于配对模式。

配对设备的流程

在 Matter 驱动上,其他驱动提供“添加设备”的位置,这里的命令栏提供的是配对设备。它会打开一个带三个字段的表单:

字段 它是什么 格式 默认值
设备名称 这台设备将来在 Connector 里带着的名字,可编辑。 自由文本 Matter device
Matter 配网码 那串官方的手工配对码,或者完整的 QR 载荷。输入时打码,旁边有一个显示控件。 一串 11 位或 21 位的手工输入码(短横线和空格会被忽略;校验位会被核对),或者以 MT: 开头的完整 QR 载荷。不声明支持蓝牙调试入网的 QR 载荷会被拒绝,保留的或超出范围的配网码也一样。
Thread 运行数据集 你那个 Thread 网络完整的活动数据集,来自网络管理员或者边界路由器。输入时打码,旁边有一个显示控件。 十六进制文本(空白字符和一个 hex: 前缀都能容忍),解码之后最多 254 字节。它必须是完整的数据集:Active Timestamp、Channel、Channel Mask、Extended PAN ID、Mesh-Local Prefix、Network Key、Network Name、PAN ID、PSKc 和 Security Policy 必须一个不缺,残缺或畸形的数据集会被拒绝,并点名缺的是哪一项。

三个字段都填好之前,配对设备一直不可用。配对进行时,表单会报告它走到哪一步:校验(检查配网码和数据集)、查找(通过蓝牙搜索设备)、配对(用配网码做认证)、加入 Thread(发送网络配置,并等设备出现在 Thread 网络上)、保存(把已调试的节点记进本地 Fabric)。

在物理设备还没被改动之前,取消是可用的;一旦调试入网已经改动了设备,这个按钮就写着 Ganter Lab 正在安全收尾,流程会把这条记录做完,而不是丢下一个调试到一半的节点。一次只跑一次配对;一次配对进行期间的第二次尝试会被拒绝。

秘密从不被存下来。 配网码和 Thread 数据集只在表单开着的时候存在;配对结束、失败或被取消时它们就被清掉,它们的任何一点都不会写进配置。存下来的只有那个节点的身份。

配对失败时,消息会说明原因:配网码或数据集无效、蓝牙缺失或被关掉、Windows 拒绝了蓝牙访问、没有找到匹配的设备、设备驳回了配网码,或者设备虽然调试入网了却始终没有出现在 Thread 网络上。配网码填错会被直接点名,所以对策就是把印着的那串码再看一遍,并让设备重新进入配对模式。

只要失败发生在仪器已经被调试入网之后,消息就会说出来并显示节点 ID:这个节点留在 Fabric 里,等它上了网,日后可以用“发现设备”把它加进来。这种情况下不要复位设备;只有一条说“什么都没有保存”的消息,才表示仪器完全没被动过。

节点身份

配对好的设备绑定在仪器那个稳定的 64 位节点 ID 上,它在设备的“连接”卡片里以 16 位十六进制数只读显示,旁边就是设备状态。可编辑的显示名称归你改;节点 ID 不归。存下来的身份已经读不出来的设备,会在那个位置显示需要重新配对

因为身份就是节点 ID,所以各台 Matter 设备的连接状态彼此独立:禁用、删除或者丢掉一个节点,不会让另一个变得不可用;而删掉一台设备,只是放开它对那条安全会话的占用,并不会把仪器从本地 Fabric 里移除。

设备发现

Matter 驱动上的发现设备列出已经调试进本应用本地 Fabric 的那些节点,所以一个设备被删掉的节点(或者一个配对完成却没有留下设备的节点),不必再做一次仪式就能加回来。已经配置过的节点 ID 会被标出来,打开会跳到已有的那台设备上。设备发现的候选项带的是节点身份,不带任何配网秘密。一般的设备发现流程见 Connector 页面。

点位

Matter 的点位没有自由文本地址字段。点位名称就是要读的那个 cluster 名。这个名字必须和 Matter 规范里写的那个 cluster 名对上,空格和标点也在内,大小写忽略:On/OffLevel ControlTemperature Measurement。因为名字就是地址,所以它里面不能有冒号;面板会拒绝并说明。没有哪个 cluster 叫这个名字时,读取报错并点名那个不认识的 cluster。值会被转换成点位声明的数据类型;声明的类型表示不了的值同样读作报错,而不是给一个凑数的数字。

另有两个数字字段说明在设备的什么位置读这个 cluster。设备为每一个可控的输出暴露一个端点,从 1 开始编号,所以一盏两路的灯或者一个插排是一个端点一个点位地读;端点 0 是节点本身。属性是要读这个 cluster 的哪一个值,而 0 就是这个 cluster 自己的值,几乎每一个点位要的都是它。

字段 作用 取值 默认值
点位名称 给点位取名,同时选定要从节点上读的那个 Matter cluster。不能有冒号。 拼写出来的 cluster 名,例如 On/Off Tag 1
输出(端点) 这个点位读的是设备的哪一个输出。 0 及以上;1 是第一个可控的输出 1
属性 这个点位读的是这个 cluster 的哪一个属性。 0 及以上;0 是这个 cluster 自己的值 0
数据类型 这个值对外暴露成的那个 OPC UA 类型。 Boolean、Int32、UInt32、Float、Double、String Float
轮询间隔 这个属性多久读一次,按点位算;点位没写时用设备的默认值(1000 毫秒)。 毫秒 设备默认值

Matter 的点位是只读的:读写字段不提供可写的选项,运行时也拒绝对属性的写入。改变一台 Matter 设备(例如把它打开)是一条 Matter 命令,而点位写入并不建模这件事。