=====利用Digi SE Cosole远程调试ZCK网络====
许多ZigBee协议的行业规范都定义有网关设备,当运行相应的ZigBee SE Framework程序时,Digi的网关就成为真正意义的行业网关设备。此时,可以通过向网关的IP地址发送基于HTTP协议的Web Service API请求,从而实现对网内设备的信息采集和控制。
这类基于http的Web Service API也称为RPC(远程过程调用),你可以从本地内网的主控发起这样的请求,但Digi提供有一个基于设备云的工具,让您无需编写本地程序,实现通过公有云向网内设备发起RPC请求,同时能返回相应的请求响应,您只需有浏览器就可以观察RCP API调用的结果。这个工具称为Digi-SE Console,除了调试web service API外,该工具还可以列出网络的拓扑和网内设备支持的Cluster和Endpoints.让您在编写和测试RPC接口程序更加方便。为了使用该调试工具,您需要首先[[https://myacct.digi.com/|注册一个免费的设备云帐号]],并将设备添加到您的帐号下。
Digi-SE Console托管在谷歌的Appspot.com上,国内的用户可能需要翻墙才能访问。首先,给设备和网关上电,确保网关能连上互联网,然后打开Digi-SE Console网址。您需要输入设备云的帐号并登录,这样在网关的下拉列表上,你可以找到这台已经连上云的设备。
在Network>Tree菜单项下,可以列出网内所有设备的状态,包括活动的Endpoints和可用的Cluster和对应的属性等。在Debug菜单项,下可以向网关发各种RPC的API调用,并在右上方的窗口上观察所有的消息。
{{digi:rf-wireless:gateway:digi-se-network-tree.png?600|}}
事实上,上面的这张图也是通过RPC命令读取到的。通过ZCL的RPC调用,您可以获取ZigBee网络内设备的信息和状态。RPC命令的API调试窗口在Debug菜单项下。
{{digi:rf-wireless:gateway:zcl-se-debug.png?600|}}
===网关RPC命令的API用法示例===
网关上电后,SE Framework的主程序运行,会自动报告ZCL的一些事件消息,参考[[digi:rf-wireless:gateway:general_operation|网关总体运行和一般操作]]获取更多信息。
首先会有这几条信息:
0x0
Initialization complete, starting main loop
0x1
上面这条消息是在SE Framework程序完成初始化,开始主循环时发出的,表明网关设备开始工作。
0x1
Local device detected that it is joined to a ZigBee network
0x1
上面这条消息是网关的XBee无线模块已经成功建网或是加入ZigBee网络,对网关而言,通常是网络已经建立并生成。
0x3
Synchronization with NTP time server successful
0x1
上面是网关时间服务器的同步消息。
0x105
18DD
00:13:A2:00:41:50:01:28
ZDO_Device_Manager - Received device announce message from known device 00:13:A2:00:41:50:01:28 (NWK: 18DD)
0x1
上面这条则是标准的ZDO公告消息,表明有网内设备上电并公告自己的存在,尝试入网等。
0x102
00:13:A2:00:41:50:01:28
ZDO_Device_Manager - Device 00:13:A2:00:41:50:01:28 detected and marked as active
0x1
当设备尝试入网后尝试和网关通信时,被标记为活动状态。
以上这些消息也称为伪消息(虚拟消息),是网关报告ZigBee网内活动的一些消息。通常,我们需要的是通过Web Service的API主动发起查询或设置命令,这样网关会返回相应的结果。这类命令,通常在在Digi-SE 的Debug页面左侧RPC_ZCL_Interface和RPC_ZigBee_Interface类目下,下面给出一些用法示例:
===获取ZigBee网络的设备信息===
HTTP请求:
HTTP响应:
-
- 0x4A
0x0
0000
0x1
0xC
0x1
0x0
0x0
0000
00:13:A2:00:41:5B:F9:58
0x0
0x0
0000
0x101E
0x0
0x0
0x80
0x80
0x8
0x0
0x0
0x52
0x8F
0x0
TRUE
0x101E
0x0
0000
0xBF0C
- 0x0
- 0x3
- 0xA
- 0xFC00
- 0xFC01
- 0xFC20
- 0xA
0x4A
0x0
0x0
-
- 0x1
0x0
75E7
0x1
0xC
0x1
0x0
0x1
75E7
00:13:A2:00:41:26:F8:49
0x0
0x1
75E7
0x101E
0x0
0x0
0xFF
0xFF
0x8
0x0
0x0
0x52
0x8E
0x0
TRUE
0x101E
0x0
75E7
0xBF0C
- 0x0
- 0x3
- 0xFC00
- 0xFC01
0x1
0x1001
0x0
-
- 0x1
0x0
18DD
0x1
0xC
0x1
0x0
0x1
18DD
00:13:A2:00:41:50:01:28
0x0
0x1
18DD
0x101E
0x0
0x0
0xFF
0xFF
0x8
0x0
0x0
0x52
0x8E
0x0
TRUE
0x101E
0x0
18DD
0xBF0C
- 0x0
- 0x3
- 0xFC00
- 0xFC01
0x1
0x1001
0x0
我们解读一下上面信息,很多是对应程序来说不需要的,每个Item包起来的信息代表一个设备的所有信息,包括它的电源属性,节点描述等标准的ZDO(ZigBee对象设备)信息。比较重要的是Simple_descriptors包起来的信息,其中就包括了活动的endpoit和cluster id,我们可以凭藉这些ID来读取Cluster下面的属性列表和信息。
====获取指定Cluster ID的属性列表====
HTTP请求:
0xFC01
0
0x4A
00:13:A2:00:41:26:F8:49
0x01
HTTP响应:
0x1
0x0
-
0x10
0x0
-
0x30
0x1
-
0x30
0x2
-
0x21
0x3
-
0x21
0x4
-
0xB
0x10
-
0xB
0x11
-
0xB
0x12
-
0xB
0x13
0xBF0C
0xFC01
0x4A
00:13:A2:00:41:26:F8:49
===读取某一属性值===
http请求:
0xFC01
0
0x4A
00:13:A2:00:41:26:F8:49
0x01
-
0
http响应:
0x1
0x0
-
0x0
0x10
0x0
0x1
0xBF0C
0xFC01
0x4A
00:13:A2:00:41:26:F8:49
上面这条响应是对属性0x0000(Split Vat Configuration)的查询结果,其值为0x1(true),在ZCK的规范中代表split vat,也就是双炸锅。
===写入某一属性值===
同样地,我们可以主动配置炸锅,这通过写入属性值这一操作来实现
0xFC01
0
0x4A
00:13:A2:00:41:26:F8:49
0x01
-
0xB
0x10
0xFF000001
具体的属性值所代表的意义,请参考:ZigBee Commercial Kitchen Application Profile Specification
====参考文档====
[[digi:rf-wireless:gateway:zcl|ZigBee术语解析]] \\
[[digi:rf-wireless:gateway:general_operation|ZigBee网关总体运行和一般操作]] \\
[[https://digi-se.appspot.com/edocs/interface_reference/RPC_ZCL_Interface.html|ZCL文档]]\\
[[https://digi-se.appspot.com/console|Digi-SE Console]]