3 Zigbee应用程序框架开发指南 - 应用程序框架目录结构
4 Zigbee应用程序框架开发指南 - 生成应用程序配置文件
5 Zigbee应用程序框架开发指南 - 应用程序框架API
6 Zigbee应用程序框架开发指南 - 应用程序框架Callback接口
11 Zigbee应用程序框架开发指南 - 命令行接口(CLI)
15 Zigbee应用程序框架开发指南 - 应用程序框架插件
16 Zigbee应用程序框架开发指南 - 扩展ZigBee Cluster Library (ZCL)
17 Zigbee应用程序框架开发指南 - 使用Ember AppBuilder设计应用程序
Zigbee应用程序框架包括一个命令行接口(CLI),它实现了许多常见的命令和特定于集群的命令。例如,与常见功能相关的命令(如网络形成和属性读写)由CLI实现。
Zigbee应用程序框架CLI可以将整数参数作为十进制和十六进制表示法。如果参数包含0x前缀,则假定它是十六进制,否则是十进制。此外,整数数组可以在花括号内传递,字符串可以在引号内传递。
命令行引用可以在Zigbee应用程序框架API引用中找到。
扩展命令行接口的过程如下:
//The table of network commands.
EmberCommandEntry networkCommands[] = {
{ "form", formCommand, "uvsh" },
{ "join", joinCommand, "uvsh" },
...
{ NULL }
};
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;
Device 1> plugin network-creator form 1 0xabcd 10 15
Device 1> plugin network-creator-security open-network
Device 2> plugin network-steering start 0
您可以使用两个设备并使用CLI启动网络。
Device 1> network form 11 2 0x00aa
Device 1> network pjoin 0xff
Device 2> network join 11 2 0x00aa
一旦形成了网络,就可以使用CLI在网络内发送消息。例如,使用global read命令读取basic cluster’s的ZCL版本。
Device 2> zcl global read 0 0
此命令将Cluster id 0、属性id 0的全局读写入消息传递缓冲区。
Device 2> send 0x0000 1 1
该命令将全局读命令从设备2发送到设备1,设备1是网络的协调器,因此具有短节点id 0x0000。
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。同样,无论何时接收消息,它都会给出接收内容的打印输出。