设备接入 IOTDA-消息下发:消息下发使用QoS 1说明

时间:2024-11-28 11:20:43

消息下发使用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,设备无需订阅,非系统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"  
         }
     }
support.huaweicloud.com/usermanual-iothub/iot_01_0331.html