文档首页 > > SDK参考> SDK开发指南> LiteOS端云互通组件实战演练> (参考)端云互通组件以太网接入实例> 命令下发

命令下发

分享
更新时间:2020/04/17 GMT+08:00

命令下发一般分为两种形式:立即下发和缓存下发。

  • 立即下发:华为云IoT立即发送收到的命令,如果设备不在线或者设备没收到指令则下发失败。立即下发适合对命令实时性有要求的场景,比如路灯开关灯,燃气表开关阀。使用立即下发时,应用服务器需要自己保证命令下发的时机。
图1 命令立即下发流程

  • 缓存下发:平台收到命令后放入队列。在设备上线的时候,平台依次下发命令队列中的命令。缓存下发适合对命令实时性要求不高的场景,比如配置水表的参数。缓存下发平台根据设备的省电模式进行不同处理。
图2 命令缓存下发流程

应用服务器向华为云IoT下发命令时,携带参数expireTime(简称TTL,表示最大缓存时间)。如果不带expireTime,则默认expireTime为48小时。

expireTime=0:命令立即下发。

expireTime>0:命令缓存下发。

LiteOS SDK端云互通组件场景命令下发的调测过程,命令下发步骤如下:

  1. 登录华为云IoT的开发者Portal。开发者Portal的访问地址、账号和密码需要向华为云IoT服务商申请。
  2. 在“我的设备”界面的设备列表中,选择接收命令的设备,点击“命令下发(</>)”。在弹出界面中,配置下发给设备的命令参数。

    图3 命令下发

  3. 在“我的设备”界面的设备列表中,选择接收命令的设备->“历史命令”,查看“状态”栏的显示。

    图4 命令下发状态

    状态说明如下:

    • 超期:表示命令在华为云IoT缓存时间超期,未向设备下发。
    • 成功:表示华为云IoT已经将命令下发给设备,且收到设备上报的命令执行结果。
    • 失败:表示编解码插件解析为空,或执行结果响应里面有“ERROR CODE”等。
    • 超时:表示华为云IoT等待ACK响应超时。
    • 取消:表示应用侧已经取消命令下发。
    • 等待:表示命令在华为云IoT缓存,还未下发给设备。
    • 已发送:表示华为云IoT已经将命令下发给设备。
    • 已送达:表示华为云IoT已经将命令下发给设备,且收到设备返回的ACK消息。

  4. LiteOS SDK端云互通组件从消息缓存中获取消息码流并解析,agent_tiny_cmd_ioctl.c中atiny_cmd_ioctl()接口对应的回调函数(实际调用atiny_write_app_write()处理下发命令)。

    int atiny_write_app_write(void* user_data, int len) 
    { 
       int i; 
       uint8_t cmd_data[len]; 
       memcpy(cmd_data, user_data, len); 
       for(i=0;i<len;i++) 
       { 
           //打印下发的命令数据,用户可以处理下发的命令,根据具体的命令控制硬件设备
           printf("########   %d",cmd_data[i]); 
        } 
        (void)atiny_printf("write num19 object success\r\n"); 
        return ATINY_OK; 
    }

    agent_tiny_cmd_ioctl.c位于 LiteOS/demos/agenttiny_lwm2m。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问