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

消息下发使用说明

消息下发是平台向设备直接下发消息的一种方式。具有缓存特性,当设备不在线时,平台会对下发的消息进行缓存,直到设备上线。

消息缓存下发使用说明

以MQTT设备接入为例,使用系统Topic进行设备消息缓存下发说明:
图1 消息缓存下发流程
  1. 应用侧或平台用下发设备消息接口,下发请求到物联网平台,下发消息样例如下:
    POST https://{Endpoint}/v5/iot/{project_id}/devices/{device_id}/messages
    Content-Type: application/json
    X-Auth-Token: ********
    
    {
      "message_id": "99b32da9-cd17-4cdf-a286-f6e849cbc364",  
      "name": "messageName",  
      "message": "HelloWorld"
    }
  2. 物联网平台向应用返回201 Created,消息状态为PENDING。
  3. 物联网平台通过设备消息状态变更通知接口推送消息结果给应用,设备未上线时,设备消息状态为等待(PENDING),对应的消息样例如下:
    Topic: $oc/devices/{device_id}/sys/messages/down  
    数据格式:
    {  
        "resource": "device.message.status",  
        "event": "update",  
        "notify_data": {   
          "message_id": "string",   
          "name": "string",    
          "device_id": "string",    
          "status": "PENDING",   
          "timestamp": "string"  
         }
     }
  4. 设备上线。
  5. 设备订阅消息下发的topic,用于接收消息,订阅的topic见步骤6
  6. 物联网平台根据协议规范下发消息给设备。MQTT设备必须先订阅平台消息下发下行接口对应的Topic才能收到平台下发的消息,消息样例如下:
    Topic: $oc/devices/{device_id}/sys/messages/down  
    数据格式:
    {
        "object_device_id": "{object_device_id}",
        "name": "name",
        "id": "id",
        "content": "hello"
    }
  7. 平台将消息的最终结果推送给应用服务器,设备消息状态为已送达(DELIVERED)。使用接口:设备消息状态变更通知接口
    Topic: $oc/devices/{device_id}/sys/messages/down  
    数据格式:
    {  
        "resource": "device.message.status",  
        "event": "update",  
        "notify_data": {   
          "message_id": "string",   
          "name": "string",    
          "device_id": "string",    
          "status": "DELIVERED",   
          "timestamp": "string"  
         }
     }

消息下发使用QoS 1说明

MQTT设备接入,使用QoS 1的系统Topic进行设备消息下发说明:

图2 消息下发使用Qos 1流程图
  1. 设备上线。
  2. 订阅Topic,设置订阅Topic的QoS为1。
    图3 订阅Topic的QoS为1
  3. 应用侧或平台用下发设备消息接口,下发请求到物联网平台,下发消息样例如下:
    POST https://{Endpoint}/v5/iot/{project_id}/devices/{device_id}/messages
    Content-Type: application/json
    X-Auth-Token: ********
    
    {
      "message_id": "99b32da9-cd17-4cdf-a286-f6e849cbc364",  
      "name": "messageName",  
      "message": "HelloWorld"
    }
  4. 物联网平台根据协议规范下发消息给设备。MQTT设备必须先订阅平台消息下发下行接口对应的Topic才能收到平台下发的消息,消息样例如下:
    Topic: $oc/devices/{device_id}/sys/messages/down  
    数据格式:
    {
        "object_device_id": "{object_device_id}",
        "name": "name",
        "id": "id",
        "content": "hello"
    }
  5. 物联网平台向设备下发消息后,向应用服务器返回201 Created,消息状态为DELIVERED。消息下发是异步操作,不需要等设备ACK就可以回响应。
  6. 物联网平台没有收到设备接收消息的ACK响应,重发消息;默认每隔2s重发一次,总下发3次。
  7. 设备再次上线或订阅Topic。
  8. 物联网平台会重发之前设备未回ACK且未超时的消息,默认每隔10s重发一次,总下发5次;每次重发也会触发每隔2s重发机制。
  9. 平台将消息的最终结果推送给应用服务器,设备消息状态为已送达(DELIVERED)或超时(TIMEOUT)。使用接口:设备消息状态变更通知接口
    Topic: $oc/devices/{device_id}/sys/messages/down  
    数据格式:
    {  
        "resource": "device.message.status",  
        "event": "update",  
        "notify_data": {   
          "message_id": "string",   
          "name": "string",    
          "device_id": "string",    
          "status": "DELIVERED",   
          "timestamp": "string"  
         }
     }

下发消息状态

MQTT设备消息执行状态以及状态变化机制如下所示。

图4 设备消息状态
表1 消息执行状态

消息执行状态

说明

等待(PENDING)

MQTT协议设备不在线,物联网平台会将消息进行缓存,此时任务状态为“等待”状态。

超时(TIMEOUT)

物联网平台缓存的PENDING状态的消息,如果1天之内还没有下发下去,物联网平台会将消息状态设置为“超时”。

已送达(DELIVERED)

物联网平台将消息发送给设备后,状态变为“已送达”。

失败(FAILED)

物联网平台发送消息给设备不成功,消息状态变为“失败”。

分享:

    相关文档

    相关产品