当前位置: 首页 > 工具软件 > ember-cli-ifa > 使用案例 >

11. Zigbee应用程序框架开发指南 - 命令行接口(CLI)

宰父志新
2023-12-01

1 Zigbee应用程序框架开发指南 - 概述

2 Zigbee应用程序框架开发指南 - 应用程序框架结构

3 Zigbee应用程序框架开发指南 - 应用程序框架目录结构

4 Zigbee应用程序框架开发指南 - 生成应用程序配置文件

5 Zigbee应用程序框架开发指南 - 应用程序框架API

6 Zigbee应用程序框架开发指南 - 应用程序框架Callback接口

7 Zigbee应用程序框架开发指南 - 时间处理

8 Zigbee应用程序框架开发指南 - 事件

9 Zigbee应用程序框架开发指南 - 属性管理

10 Zigbee应用程序框架开发指南 - 命令处理和生成

11 Zigbee应用程序框架开发指南 - 命令行接口(CLI)

12 Zigbee应用程序框架开发指南 - 调试打印接口

13 Zigbee应用程序框架开发指南 - 多网络支持

14 Zigbee应用程序框架开发指南 - 睡眠设备

15 Zigbee应用程序框架开发指南 - 应用程序框架插件

16 Zigbee应用程序框架开发指南 - 扩展ZigBee Cluster Library (ZCL)

17 Zigbee应用程序框架开发指南 - 使用Ember AppBuilder设计应用程序

18 Zigbee应用程序框架开发指南 - 应用框架V6

11 命令行接口(CLI)

Zigbee应用程序框架包括一个命令行接口(CLI),它实现了许多常见的命令和特定于集群的命令。例如,与常见功能相关的命令(如网络形成和属性读写)由CLI实现。

Zigbee应用程序框架CLI可以将整数参数作为十进制和十六进制表示法。如果参数包含0x前缀,则假定它是十六进制,否则是十进制。此外,整数数组可以在花括号内传递,字符串可以在引号内传递。

命令行引用可以在Zigbee应用程序框架API引用中找到。

11.1 扩展命令行接口

扩展命令行接口的过程如下:

  1. 在AppBuilder的“include”选项卡中,添加一个名为EMBER_AF_ENABLE_CUSTOM_COMMANDS的宏。这允许在文件/app/framework/cli/custom- clip .h中包含一个名为emberAfCustomCommands的命令数组,该命令数组在该文件中被派生出来。现在必须为emberAfCustomCommands数组提供定义,以满足编译时链接器的需求。
  2. 在应用程序中定义一个名为emberAfCustomCommands的EmberCommandEntry类型数组
  3. 下面的示例添加了两个命令,“form”和“join”。这些命令每个都有四个参数,用简短的“uvsh”形式描述。下一节将介绍用于描述命令参数的简写形式。
//The table of network commands. 
EmberCommandEntry networkCommands[] = { 
{ "form", formCommand, "uvsh" }, 
{ "join", joinCommand, "uvsh" }, 
... 
{ NULL } 
};
  1. 您定义的所有命令都属于EmberCommandEntry类型。类型EmberCommandEntry记录在堆栈API参考中。基本上它们的形式是“ command”、、 args”,其中的参数是一串字符,指示传递的参数的底层类型。EmberCommandEntry在/app/util/serial/
    command-interpreter2.h中的定义如下。
typedef PGM struct { 
#endif 
/** Use letters, digits, and underscores, '_', for the command name. 
* Command names are case-sensitive. 
*/ 
PGM_P name; 
/** A reference to a function in the application that implements the 
* command. 
* If this entry refers to a nested command, then action field 
* has to be set to NULL. 
*/ 
CommandAction action; 
/** 
* In case of normal (non-nested) commands, argumentTypes is a 
* string that specifies the number and types of arguments the 
* command accepts. The argument specifiers are: 
* - u: one-byte unsigned integer. 
* - v: two-byte unsigned integer 
* - w: four-byte unsigned integer 
* - s: one-byte signed integer 
* - b: string. The argument can be entered in ascii by using 
* quotes, for example: "foo". Or it may be entered 
* in hex by using curly braces, for example: { 08 A1 f2 }. 
* There must be an even number of hex digits, and spaces 
* are ignored. 
* - *: zero or more of the previous type. 
* If used, this must be the last specifier. 
* - ?: Unknown number of arguments. If used this must be the only 
* character. This means, that command interpreter will not 
* perform any validation of arguments, and will call the 
* action directly, trusting it that it will handle with 
* whatever arguments are passed in. 
* Integer arguments can be either decimal or hexidecimal. 
* A 0x prefix indicates a hexidecimal integer. Example: 0x3ed. 
*
* In case of a nested command (action is NULL), then this field 
* contains a pointer to the nested EmberCommandEntry array. 
*/ 
PGM_P argumentTypes; 
/** A description of the command. 
*/ 
PGM_P description; 
} EmberCommandEntry;

11.2 CLI示例

11.2.1 示例1:使用Zigbee 3.0 Security创建网络

  1. 使用Simplicity Studio console或简单的telnet程序连接到网络的协调器。如果设备在Port 1上公开了它的CLI,您可以通过telnet连接到Port 4901来连接它。一旦连接到设备,使用network creator插件的form命令来创建网络
Device 1> plugin network-creator form 1 0xabcd 10 15
  1. 使用network creator安全插件的open-network命令允许连接,以便新设备可以进入网络:
Device 1> plugin network-creator-security open-network
  1. 使用网络控制插件启动命令将第二个设备连接到创建的网络:
Device 2> plugin network-steering start 0

11.2.2 示例2:创建一个网络

您可以使用两个设备并使用CLI启动网络。

  1. 使用Simplicity Studio console 或简单的telnet程序连接到网络的协调器。如果设备在Port 1上公开了它的CLI,您可以通过telnet连接到Port 4901来连接它。一旦连接到设备,使用网络表单命令来形成网络。
Device 1> network form 11 2 0x00aa
  1. 使用网络pjoin命令允许连接,以便新设备可以进入网络:
Device 1> network pjoin 0xff
  1. 使用网络连接命令将第二个设备连接到创建的网络:
Device 2> network join 11 2 0x00aa

11.2.3 示例3:发送一个属性读取

一旦形成了网络,就可以使用CLI在网络内发送消息。例如,使用global read命令读取basic cluster’s的ZCL版本。

  1. 通过填充Ember应用程序框架的消息传递缓冲区来创建命令。
Device 2> zcl global read 0 0

此命令将Cluster id 0、属性id 0的全局读写入消息传递缓冲区。

  1. 使用Send命令将全局读命令发送到设备。send命令接受三个参数:消息应该发送到的双字节节点ID、发送端点和目标端点。
Device 2> send 0x0000 1 1

该命令将全局读命令从设备2发送到设备1,设备1是网络的协调器,因此具有短节点id 0x0000。

11.2.4 示例4:发送一个Cluster命令

ZCL的许多核心Clusters都在Zigbee应用程序框架中内置了CLI命令。例如,identify命令允许您使用ZCL identify CLI命令创建一个ZCL identify命令,并使用send命令发送它。

Device 2> zcl identify id 30 
Device 2> send 0 1 1

这个ZCL命令使用Identify Cluster。identify命令指定标识时间和缩写ID,并发送一个30秒的值,该值也将发送到协调器。

当您输入此命令时,它被加载到消息缓冲区中。在构建命令时,命令行界面显示消息缓冲区的内容以进行验证。如果您在命令中犯了一个错误,您可以在发送命令之前重新输入该命令。
为了在空中发送ZCL命令,使用CLI提供的一个单独的发送命令。

send命令有几个您可以指定的附加options和endpoints。如果它是广播的,您可以分组发送命令。
无论何时发送消息,发送消息的节点都会报告正在传输哪个Cluster。同样,无论何时接收消息,它都会给出接收内容的打印输出。

 类似资料: