其他分享
首页 > 其他分享> > 【华为云技术分享】【我的物联网成长记17】一条物联网设备控制命令的一生

【华为云技术分享】【我的物联网成长记17】一条物联网设备控制命令的一生

作者:互联网

【摘要】 一条物联网设备控制命令从诞生到完成使命,它的一生是什么样的?本文将带你解读物联网设备控制命令的完整生命周期。

概述

为能有效地对设备进行管理,设备的产品模型中定义了物联网平台可向设备下发的命令,应用服务器可以调用物联网平台开放的API接口向单个设备或批量设备下发命令,或者用户通过物联网平台直接向单个设备下发命令,以实现对设备的远程控制。

华为物联网平台有两种命令下发机制:

对于使用LWM2M/CoAP协议的设备,建议用户使用缓存下发模式,工作模式设置为PSM模式(系统默认值)。如需使用立即下发模式(工作模式设置为DRX或eDRX模式),需要在设备上报数据后立即下发命令才能成功。

对于集成了Agent Lite SDK或使用原生MQTT协议的设备,物联网平台仅支持立即下发模式。

业务流程

LWM2M/CoAP协议设备场景

物联网平台提供立即下发和缓存下发两种机制。应用服务器向物联网平台下发命令时,携带参数expireTime(简称TTL,表示最大缓存时间)。如果不带expireTime,则默认expireTime为48小时。

命令立即下发流程

1578533383875188.png

应用调用华为物联网平台提供的接口,下发请求到物联网平台,携带expireTime参数为0。消息样例如下:

 1 Method: POST
 2 request: https://server:port/iocm/app/cmd/v1.4.0/deviceCommands
 3 Header:
 4 "app_key: ******"
 5 "Authorization:Bearer******"
 6 Content-Type:application/json
 7 Body:
 8 {
 9   "deviceId": "********",
10   "command": {
11     "serviceId": "Brightness",
12     "method": "SET_DEVICE_LEVEL",
13     "paras": {
14       "value": "1",
15       }
16   },
17   "callbackUrl": "http://127.0.0.1:9999/cmd/callbackUrl",
18   "expireTime": 0,
19   "maxRetransmit": 1
20 }

2.物联网平台调用编解码插件对命令请求进行编码后,会通过LWM2M协议定义的设备管理和服务实现接口的Execute操作下发命令,消息体为二进制格式。

3.物联网平台向应用返回201 Created,携带命令状态为SENT。(如果设备不在线或者设备没收到指令则下发失败,命令状态为FAIL)

4.设备收到命令后返回ACK响应。

5.若应用下发命令时携带了"callbackUrl",物联网平台推送状态通知消息给应用,携带命令状态为DELIVERED。消息样例如下:

 1 Method: POST
 2 request:
 3 Body:
 4 {
 5   "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
 6   "commandId": "108a9c71462a48e09426e06e844d47ba3",
 7   "result": {
 8     "resultCode": "DELIVERED",
 9     "resultDetail": null
10   }
11 }

6.设备执行命令后通过205 Content响应返回命令执行结果。

7.若应用下发命令时携带了"callbackUrl",物联网平台会调用编解码插件对设备响应进行解码,然后推送状态通知消息给应用,携带命令状态为SUCCESSFUL。消息样例如下:

 1 Method: POST
 2 request:
 3 Body:
 4 {
 5   "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
 6   "commandId": "108a9c71462a48e09426e06e844d47ba",
 7   "result": {
 8     "resultCode": "SUCCESSFUL",
 9     "resultDetail": null
10   }
11 }

命令缓存下发流程

1578533457726797.png

  1. 应用调用华为物联网平台提供的接口,下发请求到物联网平台,携带expireTime参数大于0。

  2. 物联网平台将命令写入缓存队列,并上报201 Created,携带命令状态为PENDING。

  3. 设备上线或设备上报数据到平台。

  4. 物联网平台调用编解码插件对命令请求进行编码后,根据协议规范下发命令给设备。

  5. 若应用下发命令时携带了"callbackUrl",物联网平台推送状态通知消息给应用,携带命令状态为SENT。

  6. 后续流程请参考“命令立即下发”的步骤4到步骤7。

集成Agent Lite SDK设备/原生MQTT设备场景

对于集成Agent Lite SDK或使用原生MQTT协议接入的设备,物联网平台只支持立即下发模式,设备不在线时命令下发失败。

1578533487368423.png

 

整个命令下发流程中命令执行状态以及状态变化机制如下图所示。

1578533536979635.png

 

  1. 应用调用华为物联网平台提供的接口,下发请求到物联网平台。消息样例如下:
  2.  1 Method: POST
     2 request: https://server:port/iocm/app/cmd/v1.4.0/deviceCommands
     3 Header:
     4 "app_key: ******"
     5 "Authorization:Bearer******"
     6 Content-Type:application/json
     7 Body:
     8 {
     9   "deviceId": "********",
    10   "command": {
    11     "serviceId": "Brightness",
    12     "method": "SET_DEVICE_LEVEL",
    13     "paras": {
    14       "value": "1",
    15       }
    16   },
    17   "callbackUrl": "http://127.0.0.1:9999/cmd/callbackUrl",
    18   "expireTime": 0,
    19   "maxRetransmit": 1
    20 }

     

  3. 物联网平台根据协议规范下发命令给设备。

    MQTT设备必须先订阅平台指定的Topic才能收到平台下发的命令,消息样例如下:

    1 { 
    2 "msgType": "cloudReq", 
    3 "serviceId": "Brightness", 
    4 "mid": 2016, 
    5 "cmd": "SET_DEVICE_LEVEL", 
    6 "paras": { 
    7  "value": "1"
    8  } 
    9 }

     

  4. 物联网平台向应用返回202 Accepted,携带命令状态为SENT。

  5. 设备收到命令后返回ACK响应。

  6. 若应用下发命令时携带了"callbackUrl",物联网平台推送状态通知消息给应用,携带命令状态为DELIVERED。消息样例如下:

     1 Method: POST
     2 request:
     3 Body:
     4 {
     5   "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
     6   "commandId": "108a9c71462a48e09426e06e844d47ba",
     7   "result": {
     8     "resultCode": "DELIVERED",
     9     "resultDetail": null
    10   }
    11 }

     

  7. 设备执行命令后返回命令执行结果,消息样例如下:

    1 response: Status 
    2 Code: 200 OK

     

  8. 若应用下发命令时携带了"callbackUrl",物联网平台会调用编解码插件对设备响应进行解码,然后推送状态通知消息给应用,携带命令状态为SUCCESSFUL。消息样例如下:

     1 Method: POST
     2 request:
     3 Body:
     4 {
     5   "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
     6   "commandId": "108a9c71462a48e09426e06e844d47ba",
     7   "result": {
     8     "resultCode": "SUCCESSFUL",
     9     "resultDetail": null
    10   }
    11 }

    命令执行状态说明

等待(PENDING) 超期(EXPIRED) 取消(CANCELED) 如果命令下发任务为“等待”状态时,用户人工取消了命令下发任务,则任务状态变更为“取消”。 已发送(SENT) 超时(TIMEOUT) NB-IoT设备收到命令后,物联网平台在180秒内未收到设备反馈的收到命令响应,此时状态会变为“超时”。MQTT设备无此状态。

已送达(DELIVERED)

物联网平台收到设备反馈的已收到下发命令响应后,状态变为“已送达”。

成功(SUCCESSFUL)

如果设备在执行完命令后,会给物联网平台反馈命令执行成功的结果,将任务状态变更为“成功”。

失败(FAIL)

作者:华为云云享专家 我是卤蛋

标签:状态,17,平台,下发,联网,命令,华为,设备
来源: https://www.cnblogs.com/huaweicloud/p/12525323.html