对于一些位于偏远环境的设备,可以远程配置或控制设备显得尤为重要。ZWS云从设计之初就充分考虑了这一需求,支持云端远程下发命令给设备。
介绍
ZWS云平台是致远电子研发的通用物联网云平台,提供多种不同物联网云服务,为设备厂商提供上云服务,支持对厂商不同种类设备的数据采集和分析。
物联网的设备有千万种,不同的设备有着不同的控制命令,比如“开关灯”,“时间同步”,“文件召回”等。ZWS云针对这些不同命令做了归并分类,可以分为三种:
通用命令:所有接入ZWS云都需要支持的命令,例如文件召回,固件升级等。
透传命令:命令下发过程不经平台校验,只做透传的命令。
差异化命令:设备类型自己跟其他设备类型不同的命令。
对于这三种命令,虽然他们分类不一样,但他们下发的流程是差不多的,都是先在云端定义好命令的格式,然后再下发给设备,设备收到命令后进行命令的响应操作。具体流程如下图所示:
定义命令
定义命令是设备建模的一部分,可在功能块中定义命令字段。对于通用命令和透传命令,ZWS云平台已经在common_fn功能块进行了定义,用户可以直接使用,不需要重复定义。这两种命令定义如下所示:
对于第三种差异化命令,这个是由用户自定义的,用户可以在自定义设备类型的功能块下添加自己差异化的命令,如下图:
说明:自定义命令如果需要设备响应必须配置以下两个字段:
cmdid: 命令id,用于关联响应结果;
mtype: 消息类型,命令类型的消息此字段值固定是2。
差异化命令,用户除了可以在功能块里面添加自己的命令实现命令下发的需求,还可以复用通用功能块的set_config命令配置。用户只需要把自己的命令参数放到set_config命令的cfg_info字段里进行下发,设备收到该命令后进行响应即可。
set_config命令不仅可以给用户自定义命令复用,而且,可以通过set_config命令配置设备的状态值。
设备接收命令
设备固件开发需要集成“ZWS_SDK”,SDK里面提供了设备连接云服务关于网络层的封装同时也提供了一些demo,其中device_example这个demo演示设备怎么连接云,然后设备接收处理云端命令。用户可以直接通过make指令编译SDK里的device_expl.c,编译成功后,把设备的三元组传给运行程序,把demo跑起来。
linux系统,在SDK所在目录执行以下命令:
./bin/device_example demo_dev_type d123 123123123
代码说明:
1. demo中关于命令的回调是在device_expl.c文件中的on_message函数。
2. demo中只实现部分通用命令的响应处理,自定义命令需要用户自己实现。
下发命令
在设备管理的高阶功能界面,通过set_config命令下发给设备,设备接收命令,响应成功后返回给ZWS云平台,如下:
设备收到命令的处理日志: