如何使用Matter CHIP 工具
CHIP 工具(chip-tool
)是一种 Matter 控制器实现,允许将Matter 设备委托到网络中并使用Matter 消息与其进行通信,这些消息可以对数据模型操作(例如集群命令)进行编码。
该工具还提供特定于 Matter 的其他实用程序,例如解析设置有效负载或执行发现操作。
代码仓库
您可以在目录中找到 CHIP 工具的源文件 examples/chip-tool 。
注意: CHIP 工具会将配置状态缓存在
/tmp/chip_tool_config.ini
文件中。删除此文件和目录.ini
中的其他文件 ;/tmp
有时可以解决与陈旧配置相关的问题。为了使配置持久化(因为每次重新启动时
/tmp
目录可能会被刷新),您可以 使用选项 更改 CHIP Tool 缓存其配置的目录--storage-directory
构建运行
在使用 CHIP 工具之前,您必须在 Linux(amd64/aarch64) 或 macOS 上从源代码编译它。如果您想在 Raspberry Pi 上运行它,它必须使用64 位操作系统。
编译 CHIP 工具
要构建并运行 CHIP 工具:
-
安装 Matter 所需的所有软件包并准备源代码和构建系统。阅读Building Matter指南以获取说明。
-
在目录中打开命令提示符
connectedhomeip
。 -
运行以下命令:
./scripts/examples/gn_build_example.sh examples/chip-tool BUILD_PATH
在此命令中,
BUILD_PATH
指定目标二进制文件的放置位置。
运行 CHIP 工具
要检查 CHIP 工具是否正确运行,请从BUILD_PATH
目录执行以下命令:
$ ./chip-tool
因此,CHIP 工具会以默认的 单命令模式启动并打印所有可用命令。在这种情况下,这些命令被称为集群,但并非所有列出的命令都与数据模型中的 集群 相对应(例如,配对或发现命令)。但是,每个列出的命令都可以 通过附加子命令 成为新的更复杂命令的根。特定命令及其用例的示例在支持的命令和选项部分中进行了描述。
CHIP工具模式
单命令模式(默认)
在此模式下,如果任何单个命令未在一定超时期限内完成,CHIP 工具将因超时错误退出。超时错误将类似于以下内容:
[1650992689511] [32397:1415601] CHIP: [TOO] Run command failure: ../../../examples/chip-tool/commands/common/CHIPCommand.cpp:392: CHIP Error 0x00000032: Timeout
此外,当使用单命令模式时,CHIP Tool 会在每条发送的命令中建立一个新的 CASE 会话。
修改单命令模式下的超时时间
可以通过提供可选参数来修改任何命令执行的超时时间--timeout
,该参数的值为秒,最大值为65535秒。
命令示例:
$ ./chip-tool otasoftwareupdaterequestor subscribe-event state-transition 5 10 0x1234567890 0 --timeout 65535
交互模式
在此模式下,如果命令未在超时期限内完成,则命令将以错误终止。但是,CHIP 工具不会终止,也不会终止先前命令启动的进程。此外,在使用交互模式时,CHIP 工具仅 在尚无可用会话时才会建立新的 CASE 会话。在以下命令中,它将使用现有会话。
启动交互模式
对于需要长时间运行的事件订阅等命令,可以先以交互模式启动 CHIP 工具,然后再运行该命令。要启动交互模式,请运行以下命令:
$ ./chip-tool interactive start
在此模式下,您可以订阅事件或属性。详细步骤请参阅订阅事件或属性。
使用 CHIP Tool 进行 Matter 设备测试
以下步骤取决于您在设备上实现的应用程序集群。
这些步骤使用 支持蓝牙 LE 调试方法的Matter Lighting 应用示例。您可以使用其他 Matter 示例并继续遵循此过程。如果您使用不同的示例,步骤 7可能会因 应用程序中实施的集群而异。
步骤 1:准备 Matter 设备
按照Matter Lighting 应用程序示例文档,使用 Matter 设备固件构建和编程设备。
步骤 2:在 Matter 设备上启用蓝牙 LE 广告
一些示例配置为在启动时自动进行广告。其他示例需要物理触发,例如按下按钮。请遵循所选平台的 Matter 设备示例的文档,了解如何为给定示例启用蓝牙 LE 广告。
步骤 3:设置 IP 网络
要执行后续步骤,IP 网络必须已启动并运行。例如,可以使用OpenThread 边界路由器建立 Thread 网络。
步骤 4:确定网络配对凭据
您必须向 CHIP 工具提供网络凭证,该凭证将在设备调试过程中使用网络接口 (例如 Thread 或 Wi-Fi) 配置设备。Matter 规范没有定义控制器获取网络凭证的首选方式。在本指南中,我们将提供获取 Thread 和 Wi-Fi 网络凭证的步骤。
获取 Thread 网络凭证
从 Thread 边界路由器获取并存储当前活动操作数据集。此步骤可能因 Thread 边界路由器实现而异。
如果您正在使用OpenThread 边界路由器(OTBR),请使用以下命令之一检索此信息:
-
对于在 Docker 中运行的 OTBR:
sudo docker exec -it otbr sh -c "sudo ot-ctl dataset active -x" 0e080000000000010000000300001335060004001fffe002084fe76e9a8b5edaf50708fde46f999f0698e20510d47f5027a414ffeebaefa92285cc84fa030f4f70656e5468726561642d653439630102e49c0410b92f8c7fbb4f9f3e08492ee3915fbd2f0c0402a0fff8 Done
-
对于 OTBR 本机安装:
sudo ot-ctl dataset active -x 0e080000000000010000000300001335060004001fffe002084fe76e9a8b5edaf50708fde46f999f0698e20510d47f5027a414ffeebaefa92285cc84fa030f4f70656e5468726561642d653439630102e49c0410b92f8c7fbb4f9f3e08492ee3915fbd2f0c0402a0fff8 Done
对于 Thread,您还可以使用不同的带外方法来获取网络凭证。
获取 Wi-Fi 网络凭证
您必须获取以下 Wi-Fi 网络凭证才能将 Matter设备委托给 Wi-Fi 网络:
- 无线网络名称 (SSID)
- Wi-Fi 密码
确定 SSID 和密码所需的步骤可能因设置而异。例如,您可能需要联系当地的 Wi-Fi 网络管理员。
步骤 5:确定 Matter 设备的鉴别器并设置 PIN 码
Matter 使用以下价值观:
-
鉴别器: 一个 12 位值,用于辨别多个可委托设备广告。
-
设置 PIN 码: 用于验证设备的 27 位值。
设备启动时,您可以在设备的日志终端(例如 UART)中找到这些值。例如:
I: 254 [DL]Device Configuration:
I: 257 [DL] Serial Number: TEST_SN
I: 260 [DL] Vendor Id: 65521 (0xFFF1)
I: 263 [DL] Product Id: 32768 (0x8000)
I: 267 [DL] Hardware Version: 1
I: 270 [DL] Setup Pin Code: 20202021
I: 273 [DL] Setup Discriminator: 3840 (0xF00)
I: 278 [DL] Manufacturing Date: (not set)
I: 281 [DL] Device Type: 65535 (0xFFFF)
在此打印输出中,鉴别器是3840 (0xF00)
,设置PIN码是20202021
。
步骤 6:将 Matter 设备接入现有 IP 网络
在与 Matter 设备通信之前,它必须首先加入现有的 IP网络。
Matter 设备可以使用不同的调试通道:
- 尚未连接到目标 IP 网络的设备使用蓝牙 LE作为调试通道。
- 已经加入IP网络的设备只需要使用IP协议对Matter网络进行调试。
通过蓝牙 LE 进行调试
在这种情况下,您的设备可以通过蓝牙 LE 加入现有 IP 网络,然后加入 Matter 网络。Thread 和 Wi-Fi 网络有不同的场景,如以下小节所述。
通过蓝牙 LE 连接设备后,控制器打印以下日志:
Secure Session to Device Established
该日志消息意味着使用 SPAKE2+ 协议的 PASE(密码认证会话建立)会话已建立。
通过蓝牙 LE 调试 Thread 网络
要将设备委托给现有的 Thread 网络,请使用以下命令模式:
$ ./chip-tool pairing ble-thread <node_id> hex:<operational_dataset> <pin_code> <discriminator>
在此命令中:
通过蓝牙 LE 调试 Wi-Fi 网络
要将设备调试到现有的 Wi-Fi 网络,请使用以下命令模式:
$ ./chip-tool pairing ble-wifi <node_id> <ssid> <password> <pin_code> <discriminator>
在此命令中:
- <node_id> 是正在委托的节点的用户定义 ID。
- 和 是步骤 3 中确定的凭证。
- <pin_code> 和 **是步骤5中确定的设备特定密钥。
如果您更喜欢十六进制格式,请使用前缀hex:
。例如:
$ ./chip-tool pairing ble-wifi <node_id> hex:<ssid> hex:<password> <pin_code> <discriminator>
注意: <node_id>可以以带有前缀的十六进制值形式提供
0x
通过 IP 网络进行调试
当 Matter 设备已经存在于 IP网络中,但尚未被委托到 Matter 网络时,此选项可用。
要调试设备,您可以使用在步骤 5中获得的设置 PIN 码或设置 PIN 码和鉴别符或者您也可以使用二维码有效载荷。
使用设置 PIN 码进行调试
要发现设备并尝试使用提供的设置代码与其中一个设备配对,请使用以下命令模式:
$ ./chip-tool pairing onnetwork <node_id> <pin_code>
该命令会不断尝试设备,直到与其中一个设备配对成功或配对可能性耗尽。在此命令中:
- <node_id> 是正在委托的节点的用户定义 ID。
- <pin_code>是在步骤 5中确定的设备特定设置 PIN 码 ,用于发现设备。
使用长鉴别器进行调试
要发现具有长鉴别器的设备并尝试使用提供的设置代码与其中一个设备配对,请使用以下命令模式:
$ ./chip-tool pairing onnetwork-long <node_id> <pin_code> <discriminator>
该命令会不断尝试设备,直到与其中一个设备配对成功或配对可能性耗尽。在此命令中:
- <node_id> 是正在委托的节点的用户定义 ID。
- <pin_code> 和 **是步骤5中确定的设备特定密钥。
使用二维码有效载荷或手动配对码进行调试
Matter 设备在启动时记录二维码有效负载和手动配对码。
要根据给定的二维码有效负载或手动配对码发现设备并尝试与其中一个设备配对,请使用以下命令模式:
$ ./chip-tool pairing code <node_id> <qrcode_payload-or-manual_code>
该命令会不断尝试设备,直到与其中一个设备配对成功或 配对可能性耗尽。在此命令中:
- <node_id> 是正在委托的节点的用户定义 ID。
- <qrcode_payload-or-manual_code> 是二维码有效负载 ID,例如
MT:Y.K9042C00KA0648G00
,或者手动配对代码,如749701123365521327694
。
忘记已委托的设备
如果需要重新测试调试,以下命令将从已调试的 Matter 设备列表中删除具有给定节点 ID 的设备:
$ ./chip-tool pairing unpair <node_id>
在此命令中, *<node_id>*是 CHIP 工具即将忘记的节点的用户定义 ID 。
步骤 7:控制应用程序数据模型集群
完成所有上述步骤后,您已成功将 Matter 设备投入网络。现在,您可以通过与数据模型集群交互来测试该设备 。
示例:物质照明应用示例
就我们在步骤 1 中引用的 Matter Lighting 应用示例而言,该应用实现了开/关和级别控制集群。这意味着 您可以通过切换灯泡(使用onoff
集群命令)或操纵其亮度(使用levelcontrol
集群命令)来测试它:
-
使用以下命令模式来切换 OnOff 属性状态(例如 通过 LED 状态可视化):
$ ./chip-tool onoff toggle <node_id> <endpoint_id>
在此命令中:
- <node_id> 为用户定义的委托节点ID。
- <endpoint_id> 是实现了 OnOff 集群的端点的 ID。
-
使用以下命令模式来改变 CurrentLevel 属性的值(例如通过 LED 亮度进行可视化):
$ ./chip-tool levelcontrol move-to-level <level> <transition_time> <option_mask> <option_override> <node_id> <endpoint_id>
在此命令中:
-
0
是在和之间编码的亮度级别254
,除非 在集群中配置了自定义范围。 - <transition_time> 是过渡时间。
- <option_mask> 是选项掩码。
- <option_override> 是选项覆盖。
- <node_id> 为用户定义的委托节点ID。
- <endpoint_id> 是实现了LevelControl集群的端点的ID。
-
步骤 8:从 Matter 设备读取基本信息
每个 Matter 设备都支持基本信息集群,该集群维护控制器可以从设备获取的属性集合。这些属性可以包括供应商名称、产品名称或软件版本。read
使用集群上的CHIP 工具命令 从设备basicinformation
读取这些值:
$ ./chip-tool basicinformation read vendor-name <node_id> <endpoint_id>
$ ./chip-tool basicinformation read product-name <node_id> <endpoint_id>
$ ./chip-tool basicinformation read software-version <node_id> <endpoint_id>
在这些命令中:
- <node_id> 为用户定义的委托节点ID。
- <endpoint_id> 是实现了基本信息集群的端点ID。
您还可以使用以下命令列出基本信息集群的所有可用命令:
$ ./chip-tool basicinformation
支持的命令和选项
本节包含各种 CHIP 工具命令和选项的一般列表,不仅限于调试程序和集群交互。
打印所有支持的集群
要打印 CHIP 工具支持的所有集群,请运行以下命令:
$ ./chip-tool
输出示例:
[1647346057.900626][394605:394605] CHIP:TOO: Missing cluster name
Usage:
./chip-tool cluster_name command_name [param1 param2 ...]
+-------------------------------------------------------------------------------------+
| Clusters: |
+-------------------------------------------------------------------------------------+
| * accesscontrol |
| * accountlogin |
| * administratorcommissioning |
| * alarms |
| * any |
| * appliancecontrol |
| * applianceeventsandalert |
| * applianceidentification |
| * appliancestatistics |
| * applicationbasic |
获取特定集群支持的命令列表
要打印特定集群支持的命令列表,请使用以下命令模式:
$ ./chip-tool <cluster_name>
在此命令中:
- <cluster_name> 是可用集群之一(以 列出
chip-tool
)。
命令示例:
$ ./chip-tool onoff
输出示例:
[1647417645.182824][404411:404411] CHIP:TOO: Missing command name
Usage:
./chip-tool onoff command_name [param1 param2 ...]
+-------------------------------------------------------------------------------------+
| Commands: |
+-------------------------------------------------------------------------------------+
| * command-by-id |
| * off |
| * on |
| * toggle |
| * off-with-effect |
| * on-with-recall-global-scene |
| * on-with-timed-off |
| * read-by-id |
| * read |
| * write-by-id |
| * write |
| * subscribe-by-id |
| * subscribe |
| * read-event-by-id |
| * subscribe-event-by-id |
+-------------------------------------------------------------------------------------+
[1647417645.183836][404411:404411] CHIP:TOO: Run command failure: ../../examples/chip-tool/commands/common/Commands.cpp:84: Error 0x0000002F
获取特定集群支持的属性列表
要获取特定集群的属性列表,请使用以下命令模式:
$ ./chip-tool <cluster_name> read
在此命令中:
- <cluster_name> 是可用集群之一(以 列出
chip-tool
)。
命令示例:
$ ./chip-tool onoff read
输出示例:
[1647417857.913942][404444:404444] CHIP:TOO: Missing attribute name
Usage:
./chip-tool onoff read attribute-name [param1 param2 ...]
+-------------------------------------------------------------------------------------+
| Attributes: |
+-------------------------------------------------------------------------------------+
| * on-off |
| * global-scene-control |
| * on-time |
| * off-wait-time |
| * start-up-on-off |
| * server-generated-command-list |
| * client-generated-command-list |
| * attribute-list |
| * feature-map |
| * cluster-revision |
+-------------------------------------------------------------------------------------+
[1647417857.914110][404444:404444] CHIP:TOO: Run command failure: ../../examples/chip-tool/commands/common/Commands.cpp:120: Error 0x0000002F
获取命令选项列表
要获取特定命令的参数列表,请使用以下命令模式:
$ ./chip-tool <cluster_name> <target_command>
在此命令中:
- <cluster_name> 是可用集群之一(以 列出
chip-tool
)。 - <target_command> 是目标命令名称之一。
命令示例:
$ ./chip-tool onoff on
输出示例:
[1647417976.556313][404456:404456] CHIP:TOO: InitArgs: Wrong arguments number: 0 instead of 2
Usage:
./chip-tool onoff on node-id/group-id endpoint-id-ignored-for-group-commands [--paa-trust-store-path] [--commissioner-name] [--trace_file] [--trace_log] [--ble-adapter] [--timedInteractionTimeoutMs] [--suppressResponse]
[1647417976.556362][404456:404456] CHIP:TOO: Run command failure: ../../examples/chip-tool/commands/common/Commands.cpp:135: Error 0x0000002F
选定的命令选项
列出了可用于配置输入命令的选定选项。
选择蓝牙适配器
要选择 CHIP Tool 使用的蓝牙适配器,请使用以下命令模式:
--ble-adapter <id>
在此命令中:
- 是HCI设备的ID。
使用示例:
$ ./chip-tool pairing ble-thread 1 hex:0e080000000000010000000300001335060004001fffe002084fe76e9a8b5edaf50708fde46f999f0698e20510d47f5027a414ffeebaefa92285cc84fa030f4f70656e5468726561642d653439630102e49c0410b92f8c7fbb4f9f3e08492ee3915fbd2f0c0402a0fff8 20202021 3840 --ble-adapter 0
使用消息跟踪
消息跟踪允许捕获可用于测试自动化的 CHIP Tool 安全消息。跟踪使用多种类型的标志来控制跟踪的去向。
下列标志可用:
-
跟踪文件标志:
--trace_file <filename>
这里, 是存储跟踪数据的文件的名称。它可以按以下方式附加到命令中:
$ ./chip-tool pairing <pairing_options> --trace_file <filename>
-
跟踪日志标志:
--trace_log <onoff>
这里, 是一个
[0/1]
标志,设置为将1
跟踪数据与自动化日志一起打印到控制台。
更改存储目录
CHIP Tool 默认将其配置存储在该/tmp
目录中。您可以使用标志更改存储目录--storage-directory
。
用法:
--storage-directory <directory>
这里, 是存储配置的目录的路径。
使用示例:
$ ./chip-tool pairing ble-wifi <node_id> <ssid> <password> <pin_code> <discriminator> --storage-directory <directory>
$ ./chip-tool temperaturemeasurement read measured-value <node_id> <endpoint_id> --storage-directory <directory>
专员姓名和 ID 标志
所有 CHIP Tool 命令均可与以下专员相关标志一起使用:
--commissioner-name
--commissioner-nodeid
这些标志可让您控制与设备交互时 CHIP 工具使用哪些结构和节点 ID 。它们在您 使用多个结构的 情况下特别有用,但您也可以将它们与单个 CHIP 工具节点标识一起使用。
--commissioner-name
该标志可让您通过选择特定的面料专员来控制使用哪种面料。
根据 CHIP 工具的实施,委员需要具有以下名称:alpha
第一个委员、beta
第二个委员、gamma
第三个委员、4
第四个委员、5
第五个委员,等等。
如果不使用此标志,CHIP 工具将假定该命令是针对专员的alpha
,因此是针对与该专员相关联的结构。
命令示例:
$ ./chip-tool any subscribe-by-id '0x0028,0x0028,0x0101,0x0028,0x0028,0x0028' '5,6,0,1,2,4' 100 1000 1 '0,0,1,0,0,0' --keepSubscriptions true
$ ./chip-tool any subscribe-by-id '0x0028,0x0028,0x0101,0x0028,0x0028,0x0028' '5,6,0,1,2,4' 100 1000 2 '0,0,1,0,0,0' --keepSubscriptions true --commissioner-name beta
$ ./chip-tool any subscribe-by-id '0x0028,0x0028,0x0101,0x0028,0x0028,0x0028' '5,6,0,1,2,4' 100 1000 3 '0,0,1,0,0,0' --keepSubscriptions true --commissioner-name gamma
--commissioner-nodeid
此标志允许您选择在使用标志指定的结构上使用的节点 ID--commissioner-name
。
如果您不使用此标志,CHIP 工具会假定命令是使用CHIP 工具存储的 ID 值发送的。如果没有,CHIP 工具
会使用默认的后备节点 ID 发送命令112233
。
注意: 如果设备已使用特定 进行调试
--commissioner-nodeid
,则必须始终--commissioner-nodeid
CHIP 工具命令提供该标志或更新设备上的访问控制列表 (ACL)。否则,
112233
将使用默认的后备节点 ID,并且通信将失败。
命令示例:
$ ./chip-tool pairing code-thread 1 hex:000030000150208562618342348532605109bd31cda6908667addca8789211addac0102c4a9 34970112332 --commissioner-name alpha --commissioner-nodeid 999999
$ ./chip-tool basicinformation read vendor-id --commissioner-name alpha --commissioner-nodeid 999999
针对配对的对等设备运行测试套件
CHIP 工具允许针对配对的 Matter 设备运行一组已在工具中编译的测试。
-
要获取可用测试的列表,请运行以下命令:
$ ./chip-tool tests
-
要针对配对设备执行特定测试,请使用以下 命令模式:
$ ./chip-tool tests <test_name>
在此命令中:<test_name> 是特定测试的名称。
解析设置有效负载
CHIP 工具提供了一个实用程序,用于解析 Matter 入门设置负载并以可读形式打印它。例如,可以在启动期间将负载打印在设备控制台上。要解析设置代码,请使用带有子命令payload
的命令parse-setup-payload
,如以下命令模式所示:
$ ./chip-tool payload parse-setup-payload <payload>
其中, 是需要解析的payload的ID。
命令示例:
-
设置二维码有效载荷:
$ ./chip-tool payload parse-setup-payload MT:6FCJ142C00KA0648G00
-
手动配对代码:
$ ./chip-tool payload parse-setup-payload 34970112332
解析附加数据有效负载
要解析额外的数据负载,请使用以下命令模式:
$ ./chip-tool payload parse-additional-data-payload <payload>
在此命令中:
- 是包含需要解析的附加数据的有效负载的 ID。
发现操作
该discover
命令可用于解析节点ID并发现可用的Matter设备。使用以下命令打印该命令可用的子命令discover
:
$ ./chip-tool discover
解析节点名称
要解析与给定节点 ID 对应的 DNS-SD 名称并更新设备控制器中节点的地址,请使用以下命令模式:
$ ./chip-tool discover resolve <node_id> <fabric_id>
在此命令中:
- <node_id> 是需要解析的节点的 ID。
- <fabric_id> 是节点所属的 Matter 结构的 ID。
发现可用的 Matter 设备
要发现操作区域中所有可用的 Matter 佣金,请运行以下命令:
$ ./chip-tool discover commissionables
发现可用的 Matter 专员
要发现操作区域中所有可用的 Matter 专员,请运行以下命令:
$ ./chip-tool discover commissioners
配对
该pairing
命令支持 Matter 设备调试过程的不同方法。推荐的方法如下:
code-thread
- 用于线程调试。code-wifi
- 用于 Wi-Fi 调试。code
- 当设备已经存在于 IP 网络中时,用于调试设备。ble-thread
- 用于 Thread 调试;请参阅通过蓝牙 LE 调试 Thread 网络部分。ble-wifi
- 用于 Wi-Fi 调试;详见通过蓝牙 LE 调试 Wi-Fi 网络onnetwork
- 用于在设备已存在于IP 网络中时调试设备;请参阅 使用设置 PIN 码进行调试中的说明
要列出所有pairing
子命令和调试方法,请运行以下命令:
$ ./chip-tool pairing
命令示例:
以下命令将具有节点 ID 的 Thread 设备委托1
给Matter 结构。hex:...
参数是操作数据集,其中包含
有关设备将委托给的 Thread 网络的信息。入职数据集有效负载34970112332
(简短的手动配对代码)用于发现和委托设备。
$ ./chip-tool pairing code-thread 1 hex:000030000150208562618342348532605109bd31cda6908667addca8789211addac0102c4a9 34970112332
以下命令将具有节点 ID 的 Wi-Fi 设备委托1
给Matter 结构。SSIDwifi_test
和密码admin123
是
设备将要委托给的 Wi-Fi 网络的必需信息。入职数据集有效负载34970112332
(简短的手动配对代码)用于发现和委托设备。
$ ./chip-tool pairing code-wifi 1 wifi_test admin123 34970112332
以下命令将具有节点 ID 的设备委托1
给 Matter结构。入职数据集有效负载MT:8IXS142C00KA0648G00
(二维码有效负载)用于发现和委托设备。
$ ./chip-tool pairing code 1 MT:8IXS142C00KA0648G00
与认证相关的标志
pairing
可以使用多个标志运行调试命令,这些标志允许您修改与证明相关的设置:
-
--paa-trust-store-path
- 用于提供包含产品认证机构 (PAA) 证书信息的目录路径。该路径可以是绝对路径,也可以是相对于当前工作目录的路径。使用此标志,CHIP 工具会查找与 设备上编程的 PAI 和 DAC 证书匹配的PAA 证书。如果没有 此标志,CHIP 工具会使用内置测试 PAA 证书。
-
--cd-trust-store-path
- 用于提供包含用于验证设备认证声明的密钥的目录的路径。该路径可以是绝对路径,也可以是相对于当前工作 目录的路径。使用此标志,CHIP 工具除了查找众所周知的内置公钥(内置公钥
src/credentials/attestation_verifier/DefaultDeviceAttestationVerifier.cpp
)外,还会查找其他公钥,以用于验证认证声明签名。
- 用于提供包含用于验证设备认证声明的密钥的目录的路径。该路径可以是绝对路径,也可以是相对于当前工作 目录的路径。使用此标志,CHIP 工具除了查找众所周知的内置公钥(内置公钥
-
--only-allow-trusted-cd-keys
- 用于仅允许来自的密钥--cd-trust-store-path
,而不允许内置测试密钥。如果未提供该标志或提供值为false
,则允许使用不受信任的 CD 验证密钥。如果提供值为true
(--only-allow-trusted-cd-keys true
),则不允许测试密钥,并且不会接受使用测试密钥签名的 CD。 -
--bypass-attestation-verifier
- 用于绕过认证验证器。如果未提供该标志或提供的值为false
, 则不会绕过认证验证器。如果提供的值为true
( ), 则在认证验证失败的情况下,--bypass-attestation-verifier true
调试将继续。失败可能是 由认证声明、PAA 或 PAI 证书或设备认证证书中的错误引起的。如果您 想快速调试基于 未知 PAA 的 PAI 和 DAC 证书和/或由未知 密钥签名的认证声明的设备, 此选项会很有帮助。
与数据模型集群交互
该集群支持的所有操作,如以下命令模式所示:
$ ./chip-tool <cluster_name>
命令示例:
$ ./chip-tool binding
输出示例:
[1647502596.396184][411686:411686] CHIP:TOO: Missing command name
Usage:
./chip-tool binding command_name [param1 param2 ...]
+-------------------------------------------------------------------------------------+
| Commands: |
+-------------------------------------------------------------------------------------+
| * command-by-id |
| * read-by-id |
| * read |
| * write-by-id |
| * write |
| * subscribe-by-id |
| * subscribe |
| * read-event-by-id |
| * subscribe-event-by-id |
+-------------------------------------------------------------------------------------+
[1647502596.396299][411686:411686] CHIP:TOO: Run command failure: ../../examples/chip-tool/commands/common/Commands.cpp:84: Error 0x0000002F
根据此列表,binding
集群支持读取或写入等操作。该集群的属性也可以由控制器订阅,这意味着 CHIP 工具将收到通知,例如当属性值发生变化或发生特定事件时。
例子
将 ACL 写入accesscontrol
集群
访问控制列表概念允许管理所有数据模型交互(例如读取属性、写入属性、调用命令)。有关ACL 的更多信息,请参阅 访问控制指南。
要将 ACL 写入accesscontrol
集群,请使用以下命令模式:
$ ./chip-tool accesscontrol write acl <acl_data> <node_id> <endpoint_id>
在此命令中:
- <acl_data> 是格式化为 JSON 数组的 ACL 数据。
- <node_id> 是将要接收 ACL 的节点的 ID。
- <endpoint_id>
accesscontrol
是 实现集群的端点的ID 。
binding
向集群添加绑定表
绑定描述了包含绑定集群的设备与终端设备之间的关系。必须添加适当的 ACL 以允许终端设备从绑定设备接收命令。绑定过程完成后,绑定设备将包含有关连接设备的信息,例如 IPv6 地址和 Matter 网络中到端点的路由。
要将绑定表添加到binding
集群,请使用以下命令模式:
$ ./chip-tool binding write binding <binding_data> <node_id> <endpoint_id>
在此命令中:
- <binding_data> 是格式化为 JSON 数组的绑定数据。
- <node_id> 是将要接收绑定的节点的 ID。
- <endpoint_id>
binding
是实现集群的端点的ID。
运行TestClusters
测试
-
使用以下命令清除状态初始化:
rm -fr /tmp/chip_*
-
在 shell 窗口中,启动 DUT 设备:
./out/debug/standalone/chip-all-clusters-app
-
在第二个 shell 窗口中,将 DUT 与 CHIP 工具配对:
./out/debug/standalone/chip-tool pairing onnetwork 333221 20202021
-
使用以下命令运行测试:
./out/debug/standalone/chip-tool tests TestCluster --nodeId 333221
多管理员场景
多管理员功能允许您将 Matter 设备加入到多个 Matter 结构,并让多个不同的 Matter 管理员对其进行管理。 完成以下部分中提到的步骤。
步骤 1:委托设备
将 Matter 设备委托给第一个结构。
步骤 2:打开调试窗口
确保第一个结构的管理员为另一个结构的新管理员打开调试窗口。使用以下命令模式在配对的 Matter 设备上打开调试窗口:
$ ./chip-tool pairing open-commissioning-window <node_id> <option> <window_timeout> <iteration> <discriminator>
在此命令中:
- <node_id> 是应该打开调试窗口的节点的 ID。
- 对于增强调试方法, 等于 1;对于基本调试方法, 等于 0。
- <window_timeout> 是调试窗口关闭前的时间(以秒为单位)。
- 是用于派生 PAKE 验证器的 PBKDF 迭代次数。
- 是在调试期间确定的设备特定鉴别器。
注意:如果 设置为 0,则 和值将被忽略。
命令示例:
$ ./chip-tool pairing open-commissioning-window 1 1 300 1000 2365
步骤 3:保存配对码
记下命令输出中打印的手动配对码或二维码有效负载,因为第二个 Matter 管理员需要它将 Matter 设备加入其结构。
输出示例:
[1663675289.149337][56387:56392] CHIP:DMG: Received Command Response Status for Endpoint=0 Cluster=0x0000_003C Command=0x0000_0000 Status=0x0
[1663675289.149356][56387:56392] CHIP:CTL: Successfully opened pairing window on the device
[1663675289.149409][56387:56392] CHIP:CTL: Manual pairing code: [36281602573]
[1663675289.149445][56387:56392] CHIP:CTL: SetupQRCode: [MT:4CT91AFN00YHEE7E300]
步骤 4:将 Matter 设备部署到新结构
完成以下步骤:
-
打开 CHIP 工具的另一个实例。
-
在 CHIP Tool 的新实例中,使用以下命令模式将 Matter 设备委托给新的结构:
$ ./chip-tool pairing code <node_id> <payload> --commissioner-name <commissioner_name>
在此命令中:
- <node_id> 是用户定义的正在调试的节点的 ID。它不需要与第一个结构相同的 ID。
- 是二维码有效载荷或打开调试窗口时第一个调试实例生成的手动配对码
- <commissioner_name> 是第二个结构的名称。有效值为“alpha”、“beta”、“gamma”以及大于或等于 4 的整数。如果未指定,则默认为“alpha”。
命令示例:
$ ./chip-tool pairing code 1 36281602573 --commissioner-name beta
步骤 5:测试命令接收
完成上述步骤后,Matter 设备应该能够接收并响应第二个结构中发送的 Matter 命令。例如,您可以使用以下命令模式在 支持集群的OnOff
设备上切换属性状态:
$ ./chip-tool onoff toggle <node_id> <endpoint_id> --commissioner-name <commissioner_name>
在此命令中:
- <node_id> 为用户定义的委托节点ID。
- <endpoint_id> 是实现了 OnOff 集群的端点的 ID。
- <commissioner_name> 是第二个结构的名称。有效值为“alpha”、“beta”、“gamma”以及大于或等于 4 的整数。如果未指定,则默认为“alpha”。
命令示例:
$ ./chip-tool onoff toggle 1 1 --commissioner-name beta
订阅事件或属性
订阅事件或属性可让您在事件或属性在 Matter 网络中发生变化时镜像其状态。您可以订阅的事件或属性列表取决于所选集群。 您可以随时拥有多个订阅,并在一个订阅中订阅多个属性或事件(这些属性或事件可以来自不同的集群)。但是,您不能 在单个订阅中同时订阅属性和事件。换句话说,每个订阅必须专门用于属性或事件。
注意: 如果您将 要发送的订阅设置
isUrgent
为 ,则订阅行为将有所不同True
。有关更多信息,请参阅 Matter 规范。
订阅属性
以下步骤将以doorlock
集群为例
-
通过运行以下命令以交互模式启动 CHIP 工具
$ ./chiptool interactive start
所有后面的命令都将在交互模式下执行
>>>
。 -
运行以下命令来显示您可以订阅的所有可用属性
<cluster-name>
:>>> <cluster-name> subscribe
将出现该集群的所有可用属性的列表。
注意: 您的配件可能不支持所有这些属性。如果控制器发送不支持的属性,您将收到错误。
例如,对于门锁集群:
>>> doorlock subscribe
将出现以下列表:
+-------------------------------------------------------------------------------------+ | Attributes: | +-------------------------------------------------------------------------------------+ | * lock-state | | * lock-type | | * actuator-enabled | | * door-state | | * door-open-events | | * door-closed-events | | * open-period | | * number-of-total-users-supported | | * number-of-pinusers-supported | | * number-of-rfidusers-supported | | * number-of-week-day-schedules-supported-per-user | | * number-of-year-day-schedules-supported-per-user | | * number-of-holiday-schedules-supported | | * max-pincode-length | | * min-pincode-length | | * max-rfidcode-length | | * min-rfidcode-length | | * credential-rules-support | | * number-of-credentials-supported-per-user | | * language | | * ledsettings | | * auto-relock-time | | * sound-volume | | * operating-mode | | * supported-operating-modes | | * default-configuration-register | | * enable-local-programming | | * enable-one-touch-locking | | * enable-inside-status-led | | * enable-privacy-mode-button | | * local-programming-features | | * wrong-code-entry-limit | | * user-code-temporary-disable-time | | * send-pinover-the-air | | * require-pinfor-remote-operation | | * expiring-user-timeout | | * generated-command-list | | * accepted-command-list | | * event-list | | * attribute-list | | * feature-map | | * cluster-revision | +-------------------------------------------------------------------------------------+
-
使用以下模式将您选择的参数添加到订阅命令
>>> <cluster-name> subscribe <argument> <min-interval> <max-interval> <node_id> <endpoint_id>
在此命令中:
- 是集群的名称。
- 是所选参数的名称。
- 指定 自上次报告以来服务器必须经过的最少秒数才能发送新的报告。
- 指定自 上次报告以来服务器必须经过的秒数才能发送新的报告。
- 为用户定义的委托节点ID。
- <endpoint_id> 是所选集群实现的端点的 ID 。
例如:
>>> doorlock subscribe lock-state 5 10 1 1
该命令运行后,CHIP 工具将在门锁状态每次发生变化时(例如,由于按下按钮或外部生态系统动作)检查门锁状态,并在其自身记录中更新。
订阅事件
以下步骤将以doorlock
集群为例
-
通过运行以下命令以交互模式启动 CHIP 工具
$ ./chiptool interactive start
所有后面的命令都将在交互模式下执行 (
>>>
)。 -
运行以下命令来显示您可以订阅的所有可用事件
<cluster-name>
:>>> <cluster-name> subscribe-event
将出现集群的所有可用事件的列表。
注意: 您的配件可能不支持所有这些事件。如果控制器发送不支持的事件,您将收到错误。
例如,对于门锁集群:
>>> doorlock subscribe-event
将出现以下列表:
+-------------------------------------------------------------------------------------+ | Events: | +-------------------------------------------------------------------------------------+ | * door-lock-alarm | | * door-state-change | | * lock-operation | | * lock-operation-error | | * lock-user-change | +-------------------------------------------------------------------------------------+
-
使用以下模式将您选择的事件添加到订阅命令
>>> <cluster-name> subscribe-event <event-name> <min-interval> <max-interval> <node_id> <endpoint_id>
在此命令中:
- 是集群的名称。
- 是所选事件的名称。
- 指定 自上次报告以来服务器必须经过的最少秒数才能发送新的报告。
- 指定自 上次报告以来服务器必须经过的秒数才能发送新的报告。
- <node_id> 为用户定义的委托节点ID。
- <endpoint_id> 是所选集群实现的端点的 ID。
例如:
>>> doorlock subscribe-event door-lock-alarm 5 10 1 1
该命令运行后,CHIP 工具将在门锁状态每次发生变化时(例如,由于按下按钮或外部生态系统动作)检查门锁状态,并在其自身记录中更新。
使用属性 ID 或事件 ID 订阅
您还可以使用以下命令,而不是 使用属性 ID 或事件 IDsubscribe
进行订阅:
subscribe-by-id
subscribe-event-by-id
subscribe
步骤与或命令相同subscribe-event
。
使用通配符
CHIP 工具支持集群、属性或事件、端点或这些的任意组合的参数值的命令通配符。例如,使用通配符,您可以读取 Matter 网络中所有设备上具有特定节点 ID 的特定端点上的集群的所有属性。 这使您能够更快、更 有效地解析和收集集群信息。0x101
可以使用以下通配符:
- 对于所有属性:
0xFFFFFFFF
- 对于所有集群:
0xFFFFFFFF
- 对于所有端点:
0xFFFF
您可以在单个命令中组合使用这些通配符。通配符既可以在单个命令模式下使用,也可以在交互模式下使用。
您可以使用以下命令模式:
$ ./chip-tool <cluster_name> <command> <attribute_event_name> <node_id> <endpoint_id>
在此命令中:
-
是集群的名称。
-
是通配符支持的命令名称:
+-------------------------------------------------------------------------------------+ | Commands: | +-------------------------------------------------------------------------------------+ | * read | | * read-by-id | | * subscribe | | * subscribe-by-id | +-------------------------------------------------------------------------------------+
-
<attribute_event_name> 是所选属性或事件的名称。
-
<node_id> 为用户定义的委托节点ID。
-
<endpoint_id> 是所选集群实现的端点的 ID。
命令示例:
-
0xFFFFFFFF
要从集群中读取doorlock
ID 为1
且 位于端点 的节点的所有属性(通配符)1
,请运行以下命令:$ ./chip-tool doorlock read-by-id 0xFFFFFFFF 1 1
-
lock-state
要从集群中读取 ID为且 位于所有端点(通配符)上的doorlock
节点的属性,请运行以下 命令:1``0xFFFF
$ ./chip-tool doorlock read lock-state 1 0xFFFF
-
0xFFFFFFFF
要从集群中读取doorlock
具有 ID 的节点1
和所有端点 (wildcard ) 的所有属性 (wildcard0xFFFF
),请运行以下命令:$ ./chip-tool doorlock read-by-id 0xFFFFFFFF 1 0xFFFF
any
在命令中使用通配符
使用该any
命令,您还可以对集群名称使用通配符。该any
命令可以与以下命令结合使用:
+-------------------------------------------------------------------------------------+
| Commands: |
+-------------------------------------------------------------------------------------+
| * command-by-id |
| * read-by-id |
| * write-by-id |
| * subscribe-by-id |
| * read-event-by-id |
| * subscribe-event-by-id |
| * read-all |
| * subscribe-all |
+-------------------------------------------------------------------------------------+
因此,您可以使用以下命令模式:
$ ./chip-tool any <command_name> [parameters of the <command_name>]
在此命令中:
- <command_name> 是该命令支持的命令之一
any
,如上 所列。 - [<command_name> 的参数]是 <command_name> 所需的参数。您可以通过运行不带任何参数的命令来检查它们。
命令模式示例read-by-id
:
$ ./chip-tool any read-by-id <cluster-ids> <attribute-ids> <destination-id> <endpoint-ids>
命令示例:
-
要读取集群 ( ) 上 ID 为且端点为的节点的
0x0
属性 ( ) ,请运行 以下命令:lock state``0x101
doorlock``1``1
$ ./chip-tool any read-by-id 0x101 0x0 1 1
-
0xFFFFFFFF
要从集群0x101
中读取doorlock
ID 为1
且位于端点 的节点的所有属性(通配符 )1
,请运行以下命令:$ ./chip-tool any read-by-id 0x101 0xFFFFFFFF 1 1
-
要读取ID 为且位于端点 的节点的
0xFFFFFFFF
所有集群 (wildcard) 上的所有属性 (wildcard) ,请运行 以下命令:0xFFFFFFFF``1``1
./chip-tool any read-by-id 0xFFFFFFFF 0xFFFFFFFF 1 1
-
要读取具有 ID 的节点的
0xFFFFFFFF
所有集群 (wildcard)和所有端点 (wildcard) 上的所有属性 (wildcard ),请运行以下命令:0xFFFFFFFF``1``0xFFFF
./chip-tool any read-by-id 0xFFFFFFFF 0xFFFFFFFF 1 0xFFFF
在门锁设备上保存用户和凭证
Matter 门锁设备可以存储用户和凭证池,让您可以配置不同的访问场景。池中的每个用户和凭证都有一个索引值。此外,每个用户都有一个已占用凭证列表。
默认情况下,每个门锁设备都没有定义用户或凭证,但它在两个池中保留了几个插槽,可以填充新用户和凭证,最高可达属性NumberOfTotalUsersSupported
和NumberOfCredentialsSupportedPerUser
属性中指定的值。
用户和凭证之间的所有通信仅使用其各自的索引值进行。两个池之间不共享任何其他信息。
CHIP 工具可让您在门锁设备中添加用户和凭据,并安全地将他们的索引相互匹配。这是一项可选功能,仅在使用实施doorlock
集群的设备时可用。
注意: 只有 拥有访问控制列表中指定的正确权限的人员才能修改用户和凭据。
要保存凭据和用户,您需要完成以下步骤:
步骤 1:设置用户
要使用 CHIP 工具在门锁设备上设置用户,请使用以下命令模式:
$ ./chip-tool doorlock set-user <operation-type> <user-index> <user-name> <user-unique-id> <user-status> <user-type> <credential-rule> <destination-id> <endpoint-id> --timedInteractionTimeoutMs <ms_value>
在此命令中:
-
是用户可用的操作类型之一:
Add
- 此操作在 处的槽中设置一个新用户。Clear
- 此操作从 处的槽中删除现有用户。Modify
- 此操作修改位于 位置的现有用户。
-
是用户的索引值,位于和 属性
1
值之间。将用户索引设置为 将导致错误。NumberOfTotalUsersSupported``0
-
是用户的名称,最大长度为 10 个字节。可以设置为
null
。 -
是一个 4 字节数字,用于描述唯一的用户 ID。可以设置为
null
。 -
可以设置为
null
或为下列值之一:1
(OccupiedEnabled
)- 此状态表示给定的用户槽 已被使用并且处于活动状态。3
(OccupiedDisabled
) - 此状态表示给定的用户 槽已被使用,但已禁用。与0
和不同1
,支持此状态 是可选的。
-
是用户的类型,可以是集群 的 Matter Application Clusters 规范中指定的值之一
doorlock
(请参阅“5.2.9.16.UserTypeEnum
”部分)。可以设置为null
。 -
**是 解锁门锁必须使用的凭证数量。此参数可以设置为
null
或为以下值之一:0
(单一)- 需要一种凭证类型才能解锁。1
(双重)——需要两种凭证类型才能解锁。2
(三重) - 需要三种凭证类型才能解锁。
-
为门锁设备的节点ID。
-
是门锁设备上端点的ID。
-
--timedInteractionTimeoutMs
是服务器端接收请求的时间窗口的持续时间(以毫秒为单位)( <ms_value> ) 。这应该 有足够的时间来接收请求。
命令示例:
以下命令运行在 索引处set-user
添加(0
)用户的命令
$ ./chip-tool doorlock set-user 0 1 AAA 6452 1 0 0 1 1 --timedInteractionTimeoutMs 1000
以下命令与上述命令的操作相同,但它以空用户名 ( null
) 为目标,并具有null
唯一 ID。用户状态默认为OccupiedEnabled
,用户类型默认为UnrestrictedUser
,凭证规则默认为 single。
$ ./chip-tool doorlock set-user 0 1 null null null null null 1 1 --timedInteractionTimeoutMs 1000
步骤2:分配凭据
在门锁设备上创建用户后,请使用以下命令模式为其分配凭证:
$ ./chip-tool doorlock set-credential <operation-type> <{Credential}> <credential-data> <user-index> <user-status> <user-type> <destination-id> <endpoint-id> --timedInteractionTimeoutMs <ms_value>
在此命令中:
-
是凭证可用的操作类型之一:
Add
- 此操作在 处的槽位为用户添加新凭证。Clear
- 此操作将从位置处的用户中删除现有凭证。Modify
此操作修改位于 位置的用户现有凭证。
-
<{Credential}> 是一个 JSON 对象,包含以下两个字段:
-
"credentialType"
是凭证类型的关键字段。它可以具有以下值之一:0
- 编程 PIN1
- 别针2
射频识别3
指纹4
- 手指静脉
-
"credentialIndex"
是凭证索引的关键字段。如果"credentialType"
不是“编程 PIN”,则"credentialIndex"
必须介于和属性值之间 (有关详细信息,请参阅 Matter Application Clusters 规范的第 5.2.3.20 节 )。是编程 PIN 所必需的。在 其他情况下,将凭证索引设置为将导致错误。
-
-
是一个八位字节字符串参数,其中包含秘密凭证数据。例如,PIN 码值(
12345
在下面的示例中)。 -
是与凭证关联的用户的索引。可以设置为
null
创建新用户。 -
是将与凭证关联的用户的状态。
-
是用户的类型,可以是集群 的 Matter Application Clusters 规范中指定的值之一
-
为门锁设备的节点ID。
-
是门锁设备上端点的ID。
-
--timedInteractionTimeoutMs
是服务器端接收请求的时间窗口的持续时间(以毫秒为单位)( <ms_value> ) 。这应该有足够的时间来接收请求。
命令示例:
$ ./chip-tool doorlock set-credential 0 '{ "credentialType": 1, "credentialIndex": 1 }' "12345" 1 null null 1 1 --timedInteractionTimeoutMs 1000
对用户和凭证的操作
在门锁设备上设置用户和凭据后,您可以使用多个 CHIP Tool 命令与他们进行交互。 所有命令都重复使用本节前面介绍的参数。以下命令模式可用:
-
读取用户的状态:
$ ./chip-tool doorlock get-user <user-index> <destination-id> <endpoint-id>
此命令返回指定 和 处指定 的用户状态。
-
读取凭证的状态:
$ ./chip-tool doorlock get-credential-status <{Credential}> <destination-id> <endpoint-id>
此命令返回指定 和 处指定*<{Credential}>* 的凭证状态。
-
清洁用户:
$ ./chip-tool doorlock clear-user <user-index> <destination-id> <endpoint-id> --timedInteractionTimeoutMs <ms_value>
此命令清理在 指定 和 处包含指定 的插槽。
-
清理凭证:
$ ./chip-tool doorlock clear-credential <{Credential}> <destination-id> <endpoint-id> --timedInteractionTimeoutMs <ms_value>
此命令清理在 指定 和 处包含指定 <{Credential}> 的插槽。
使用用户 PIN 码进行操作
如果在分配凭证时将 设置为 PIN ,则可以使用以下 命令模式来验证它是否有效并调用它来打开或关闭门锁 :
-
验证 PIN 码:
$ ./chip-tool doorlock read require-pinfor-remote-operation <destination-id> <endpoint-id>
此命令返回
false
或true
:false
表示关闭或打开门锁不需要提供PIN码。true
表示关闭或打开门锁需要输入PIN码
-
更改 PIN 码使用要求:
$ ./chip-tool doorlock write require-pinfor-remote-operation true <destination-id> <endpoint-id>
此命令将 的设置修改为
require-pinfor-remote-operation
。true
运行后,您将必须使用 PIN 码来锁定或解锁门。 -
使用 PIN 码关闭门锁:
$ ./chip-tool doorlock lock-door <destination-id> <endpoint-id> --timedInteractionTimeoutMs <ms_value> --PinCode 12345
在这个命令中,您需要提供 与您设置的
--PinCode
PIN码相对应的 (例如12345
) -
使用 PIN 码打开门锁:
$ ./chip-tool doorlock unlock-door <destination-id> <endpoint-id> --timedInteractionTimeoutMs <ms_value> --PinCode 12345
在这个命令中,您需要提供 与您设置的
--PinCode
PIN码相对应的 (例如12345
)
转载自:https://juejin.cn/post/7377202850379333644