文档首页 > > 使用指南> 命令下发

命令下发

分享
更新时间: 2019/12/03 GMT+08:00

概述

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

物联网平台有两种命令下发机制,如下表所示。

命令下发机制

定义

适用场景

LWM2M/CoAP协议设备

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

立即下发

不管设备是否在线,平台收到命令后立即下发给设备。如果设备不在线或者设备没收到指令则下发失败。支持给本应用的设备和被授予权限的其它应用的设备下发命令。

立即下发适合对命令实时性有要求的场景,比如路灯开关灯,燃气表开关阀。使用立即下发时,命令下发的时机需要由应用服务器来保证。

建议用户使用缓存下发模式,工作模式设置为PSM模式(系统默认值)。

如需使用立即下发模式(工作模式设置为DRX或eDRX模式),需要在设备上报数据后立即下发命令才能成功。

适用

缓存下发

物联网平台在收到命令后先缓存,等设备上线或者设备上报数据时再下发给设备,如果单个设备存在多条缓存命令,则进行排队串行下发。支持给本应用的设备和被授予权限的其它应用的设备下发命令。

缓存下发适合对命令实时性要求不高的场景,比如配置水表的参数。

适用。工作模式设置为PSM模式(系统默认值)。

不适用

业务流程

LWM2M/CoAP协议设备场景

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

  • expireTime=0:命令立即下发。

  • expireTime>0:命令缓存下发。

图1 命令立即下发流程
  1. 应用调用创建设备命令接口,下发请求到物联网平台,携带expireTime参数为0。消息样例如下:
    Method: POST
    request: https://server:port/iocm/app/cmd/v1.4.0/deviceCommands
    Header:
    "app_key: ******"
    "Authorization:Bearer******"
    Content-Type:application/json
    Body:
    {
      "deviceId": "********",
      "command": {
        "serviceId": "Brightness",
        "method": "SET_DEVICE_LEVEL",
        "paras": {
          "value": "1",
          }
      },
      "callbackUrl": "http://127.0.0.1:9999/cmd/callbackUrl",
      "expireTime": 0,
      "maxRetransmit": 1
    }
  2. 物联网平台调用编解码插件对命令请求进行编码后,会通过LWM2M协议定义的设备管理和服务实现接口的Execute操作下发命令,消息体为二进制格式。
  3. 物联网平台向应用返回201 Created,携带命令状态为SENT。(如果设备不在线或者设备没收到指令则下发失败,命令状态为FAIL
  4. 设备收到命令后返回ACK响应。
  5. 若应用下发命令时携带了"callbackUrl",物联网平台通过命令状态变化通知接口推送消息给应用,携带命令状态为DELIVERED。消息样例如下:
    Method: POST
    request:
    Body:
    {
      "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
      "commandId": "108a9c71462a48e09426e06e844d47ba3",
      "result": {
        "resultCode": "DELIVERED",
        "resultDetail": null
      }
    }
  6. 设备执行命令后通过205 Content响应返回命令执行结果。
  7. 若应用下发命令时携带了"callbackUrl",物联网平台会调用编解码插件对设备响应进行解码,然后通过命令状态变化通知接口推送消息给应用,携带命令状态为SUCCESSFUL。消息样例如下:
    Method: POST
    request:
    Body:
    {
      "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
      "commandId": "108a9c71462a48e09426e06e844d47ba",
      "result": {
        "resultCode": "SUCCESSFUL",
        "resultDetail": null
      }
    }
图2 命令缓存下发流程
  1. 应用调用创建设备命令接口,下发请求到物联网平台,携带expireTime参数大于0。
  2. 物联网平台将命令写入缓存队列,并上报201 Created,携带命令状态为PENDING
  3. 设备上线或设备上报数据到平台。
  4. 物联网平台调用编解码插件对命令请求进行编码后,根据协议规范下发命令给设备。
  5. 若应用下发命令时携带了"callbackUrl",物联网平台通过命令状态变化通知接口推送消息给应用,携带命令状态为SENT
  6. 后续流程请参考“命令立即下发”的步骤4到步骤7

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

对于集成Agent Lite SDK设备/原生MQTT设备,物联网平台只支持直接下发模式,设备不在线时命令下发失败。

  1. 应用调用设备服务调用接口,下发请求到物联网平台。消息样例如下:
    Method: POST
    request: https://server:port/iocm/app/cmd/v1.4.0/deviceCommands
    Header:
    "app_key: ******"
    "Authorization:Bearer******"
    Content-Type:application/json
    Body:
    {
      "deviceId": "********",
      "command": {
        "serviceId": "Brightness",
        "method": "SET_DEVICE_LEVEL",
        "paras": {
          "value": "1",
          }
      },
      "callbackUrl": "http://127.0.0.1:9999/cmd/callbackUrl",
      "expireTime": 0,
      "maxRetransmit": 1
    }
  2. 物联网平台根据协议规范下发命令给设备。
    MQTT设备必须先订阅 平台命令下发接口对应的Topic才能收到平台下发的命令,消息样例如下:
    { 
    "msgType": "cloudReq", 
    "serviceId": "Brightness", 
    "mid": 2016, 
    "cmd": "SET_DEVICE_LEVEL", 
    "paras": { 
     "value": "1"
     } 
    }
  3. 物联网平台向应用返回202 Accepted,携带命令状态为SENT
  4. 设备收到命令后返回ACK响应。
  5. 若应用下发命令时携带了"callbackUrl",物联网平台通过命令状态变化通知接口推送消息给应用,携带命令状态为DELIVERED。消息样例如下:
    Method: POST
    request:
    Body:
    {
      "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
      "commandId": "108a9c71462a48e09426e06e844d47ba",
      "result": {
        "resultCode": "DELIVERED",
        "resultDetail": null
      }
    }
  6. 设备执行命令后通过设备命令响应通知接口返回命令执行结果,消息样例如下:
    response: Status 
    Code: 200 OK
  7. 若应用下发命令时携带了"callbackUrl",物联网平台会调用编解码插件对设备响应进行解码,然后通过命令状态变化通知接口推送消息给应用,携带命令状态为SUCCESSFUL。消息样例如下:
    Method: POST
    request:
    Body:
    {
      "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
      "commandId": "108a9c71462a48e09426e06e844d47ba",
      "result": {
        "resultCode": "SUCCESSFUL",
        "resultDetail": null
      }
    }

单个设备命令下发

LWM2M/CoAP协议设备

两种方式创建单个NB-IoT设备的命令下发:

  • 调用创建设备命令接口。
  • 在控制台上创建命令下发,操作步骤如下。
  1. 登录物联网平台控制台,点击右上角“进入设备管理服务”。
  2. 在设备列表中,单击具体的设备进入到设备的详情页面。
  3. 在“命令”页签中,点击右上角“命令下发”,在弹出的窗口中选择需要下发的命令并设置命令参数。

    • 仅NB-IoT设备支持通过控制台进行下发命令操作。
    • 设备支持的命令,需要由产品模型定义后,才能在此进行命令下发操作。
    • 下发命令的参数中,带“*”的参数为必选配置项,选择不同的命令,界面所呈现的参数不同。

  4. 在界面上,展示通过界面或“创建设备命令”接口给设备下发的历史命令列表,通过该功能可以详细查看命令下发任务的创建时间、平台发送命令的时间、送达的时间、发送的状态等信息,便于用户了解命令的命令执行状态说明

同时,还支持通过调用相关API接口查询、修改、撤销设备命令等操作,如下表所示。

API接口

功能

查询设备命令

应用服务器向设备下发命令后,可调用此接口在物联网平台查询下发命令的状态及内容信息,以了解命令的执行情况。

修改设备命令

应用服务器向设备下发命令后,如果由于命令排队、设备不在线等原因,物联网平台还未把命令下发给设备执行,此时应用服务器可调用此接口修改该命令的状态信息。当前仅支持把命令状态修改为CANCELED状态,即撤销命令的执行。

创建设备命令撤销任务

应用服务器向设备下发命令后,如果由于命令排队、设备不在线等原因,物联网平台还未把命令下发给设备执行(PENDING状态),此时应用服务器可调用此接口撤销指定设备的所有未下发的命令,对于已下发成功的命令不可撤销。

查询设备命令撤销任务

应用服务器创建了设备命令撤销任务后,可调用此接口查询设备命令撤销任务的详细信息和执行状态,以了解撤销任务的执行情况。

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

通过调用设备服务调用接口,向设备下发命令。

支持通过控制台设备详情里的“命令”页签,查看给设备下发的历史命令列表,可以详细查看命令下发任务的创建时间、平台发送命令的时间、送达的时间、发送的状态等信息,便于用户了解命令的执行状态。

当前不支持通过API接口进行历史命令下发任务的查询。

批量设备命令下发

当前物联网平台仅支持对批量NB-IoT设备进行相同命令的下发。应用服务器可以调用创建批量任务接口,对批量设备下发控制指令。

批量任务下发之后,可以登录物联网平台控制台,点击右上角“进入设备管理服务”。在“批量任务”->“批量命令下发”界面查看任务执行的状态和结果,如果成功率低于100%,则可以单击具体的任务名称,进入任务详情,查看执行失败的原因。

命令执行状态说明

命令执行状态以及状态变化机制如下所示。

命令执行状态

说明

等待(PENDING)

  • NB-IoT设备采用缓存下发模式下发命令时,如果设备未上报数据,物联网平台会将命令进行缓存,此时任务状态为“等待”状态。
  • NB-IoT设备采用立即下发模式下发命令时,无此状态。
  • MQTT设备下发命时令,无此状态。

超期(EXPIRED)

  • NB-IoT设备采用缓存下发模式下发命令时,如果在设置的超期时间内,物联网平台未将命令下发给设备,则状态变更为“超期”。超期时间会根据北向接口中携带的expireTime为准,如果未携带,默认48h。
  • NB-IoT设备采用立即下发模式下发命令时,无此状态。
  • MQTT设备下发命时令,无此状态。

取消(CANCELED)

如果命令下发任务为“等待”状态时,用户人工取消了命令下发任务,则任务状态变更为“取消”。

已发送(SENT)

  • NB-IoT设备采用缓存下发模式下发命令时,设备上报数据,物联网平台会将缓存的命令发送给设备,此时状态会由“等待”变为“已发送”。
  • NB-IoT设备采用立即下发模式下发命令时,如果设备在线,状态为“已发送”。
  • MQTT设备下发命时令,如果设备在线,状态为“已发送”。

超时(TIMEOUT)

NB-IoT设备收到命令后,物联网平台在180秒内未收到设备反馈的收到命令响应,此时状态会变为“超时”。MQTT设备无此状态。

已送达(DELIVERED)

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

成功(SUCCESSFUL)

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

失败(FAIL)

  • 如果设备在执行完命令后,会给物联网平台反馈命令执行失败的结果,将任务状态变更为“失败”。
  • NB-IoT设备采用立即下发模式下发命令时,如果设备离线,状态为“失败”。
  • MQTT设备下发命令时,如果设备离线,状态为“失败”。
分享:

    相关文档

    相关产品

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

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

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

字符长度不能超过200

提交反馈 取消

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

跳转到云社区