更新时间:2023-06-07 GMT+08:00
分享

异步命令下发

概述

异步命令下发主要用于LwM2M/CoAP设备接入物联网平台,平台或应用侧可通过以下方式进行命令下发:

表1 异步命令下发

类型

描述

适用场景

使用流程

异步命令立即下发

不管设备是否在线,平台收到命令后立即下发给设备。如果设备不在线或者设备没收到指令则下发失败。

适用于实时性要求高的场景。

异步命令立即下发

异步命令缓存下发

物联网平台在收到命令后先缓存,等设备上线或者设备上报属性时再下发给设备,如果单个设备存在多条缓存命令,则进行排队串行下发。

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

异步命令缓存下发

异步命令立即下发

图1 LwM2M/CoAP命令下发流程

按照上述使用流程,进行对应步骤的示例如下:

  1. 应用调用下发异步设备命令接口,下发请求到物联网平台,携带send_strategy为immediately。消息样例如下:
    POST https://{endpoint}/v5/iot/{project_id}/devices/{device_id}/async-commands
    Content-Type: application/json
    X-Auth-Token: ********
    
    {
      "service_id" : "WaterMeter",
      "command_name" : "ON_OFF",
      "paras" : {
        "value" : "ON"
      },
       "expire_time": 0,
       "send_strategy": immediately
    }
  2. 物联网平台调用编解码插件对命令请求进行编码后,会通过LwM2M协议定义的设备管理和服务实现接口的Execute操作下发命令,消息体为二进制格式。
  3. 物联网平台向应用返回200 OK,携带命令状态为SENT。(如果设备不在线或者设备没收到指令则下发失败,命令状态为FAILED
  4. 设备收到命令后返回ACK响应。
  5. 若应用订阅了命令的状态变更通知,物联网平台通过命令状态更新通知接口推送消息给应用,携带命令状态为DELIVERED。消息样例如下:
    Method: POST
    request:
    Body:
    {
        "resource": "device.commmad.status",
        "event": "update",
        "event_time": "20200811T080745Z",
        "notify_data": {
            "header": {
                "app_id": "8d4a34e5363a49bfa809c6bd788e6ffa",
                "device_id": "5f111a5a29c62ac7edc88828_test0001",
                "node_id": "test0001",
                "product_id": "5f111a5a29c62ac7edc88828",
                "gateway_id": "5f111a5a29c62ac7edc88828_test0001",
                "tags": []
            },
            "body": {
                "command_id": "49ca40af-7e14-4f7b-b97b-78cdd347a6b9",
                "created_time": "20200811T080738Z",
                "sent_time": "20200811T080738Z",
                "delivered_time": "20200811T080745Z",
                "response_time": "",
                "status": "DELIVERED",
                "result": null
            }
        }
    }
  6. 设备执行命令后通过205 Content响应返回命令执行结果。
  7. 若应用订阅了命令的状态变更通知,物联网平台会调用编解码插件对设备响应进行解码,然后通过命令状态更新通知接口推送消息给应用,携带命令状态为SUCCESSFUL。消息样例如下:
    Method: POST
    request:
    Body:
    {
        "resource": "device.commmad.status",
        "event": "update",
        "event_time": "20200811T080745Z",
        "notify_data": {
            "header": {
                "app_id": "8d4a34e5363a49bfa809c6bd788e6ffa",
                "device_id": "5f111a5a29c62ac7edc88828_test0001",
                "node_id": "test0001",
                "product_id": "5f111a5a29c62ac7edc88828",
                "gateway_id": "5f111a5a29c62ac7edc88828_test0001",
                "tags": []
            },
            "body": {
                "command_id": "49ca40af-7e14-4f7b-b97b-78cdd347a6b9",
                "created_time": "20200811T080738Z",
                "sent_time": "20200811T080738Z",
                "delivered_time": "20200811T080745Z",
                "response_time": "20200811T081745Z",
                "status": "SUCCESSFUL",
                "result": {
                    "resultCode":"SUCCESSFUL",
                    "resultDetail": {
                        "value": "ON"
                    }
                }
            }
        }
    }

异步命令缓存下发

图2 LwM2M/CoAP命令缓存下发流程
  1. 应用调用下发异步设备命令接口,下发请求到物联网平台,携带send_strategy为delay。
  2. 物联网平台将命令写入缓存队列,并上报200 OK,携带命令状态为PENDING
  3. 设备上线或设备上报数据到平台。
  4. 物联网平台调用编解码插件对命令请求进行编码后,根据协议规范下发命令给设备。
  5. 若应用订阅了命令的状态变更通知,物联网平台通过命令状态变化通知接口推送消息给应用,携带命令状态为SENT
  6. 后续流程请参考“命令立即下发”的步骤4到步骤7

LwM2M/CoAP设备命令执行状态说明

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

图3 LwM2M/CoAP命令下发状态
表2 LwM2M/CoAP命令执行状态

命令执行状态

说明

等待(PENDING)

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

超期(EXPIRED)

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

已发送(SENT)

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

超时(TIMEOUT)

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

已送达(DELIVERED)

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

成功(SUCCESSFUL)

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

失败(FAILED)

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

    相关文档

    相关产品