=====利用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]]