一、描述

OTA(Over-the-Air Technology)即空中下载技术,是设备平台的一项基础功能。您可使用云鲸设备平台的OTA升级功能,对分布在全球各地的IoT设备进行OTA升级。

二、数据交互图

设备端定时版本检测

APP触发立即更新固件版本

三、通讯协议

3.1 通讯方式

传输方式 MQTT
序列化方式 JSON
编码格式 UTF-8

3.2 Topic定义

Topic名称 描述
/${productId}/${deviceId}/iot/ota/up ota上行消息,ota服务订阅此Topic获取属性消息
/${productId}/${deviceId}/iot/ota/up/reply ota上行消息回复,设备或应用订阅该消息获取结果
/${productId}/${deviceId}/iot/ota/down ota下行消息,设备订阅此Topic获取物模型服务下发消息
/${productId}/${deviceId}/iot/ota/down/reply ota下行消息回复,ota服务订阅该消息获取结果

3.3 method 枚举

method名称 描述
get 设备检查是否有固件升级
process 设备上报升级状态
upgrade ota服务通知设备进行固件升级

四、场景示例

4.1 设备获取固件升级任务

设备自检测(定时、启动)进行检查是否有固件升级,尝试下发ota固件升级消息到

Topic:/${productId}/${deviceId}/iot/ota/up

发送到该Topic的JSON格式如下:

{
    "method": "get",
    "data": {
        "version": "v01.01.01.11"
    }
}

字段说明:

字段名 类型 是否必须 说明
method String 表示设备请求ota的操作类型 ,get 表示检查是否有固件升级
data Object 表示设备或应用程序发送给ota服务的属性信息
data.{version} String 设备当前固件版本信息

ota服务收到设备固件检测更新消息后,尝试下发ota固件升级回复消息到

Topic:/${productId}/${deviceId}/iot/ota/up/reply

1)如若有升级任务,发送到该Topic的JSON格式如下:

{
    "code": 0,
    "msg": "success",
    "method": "get",
    "result": {
        "autoUpgrade": true,
        "forceUpgrade": false,
        "ignoreBattery": false,
        "robotApkSize": 1024000,
        "robotDownloadUrl": "https://narwal-test-public-cdn.narwal.com/DX8_UP_v00.06.01.12_CN.tar.gz",
        "robotSign": "KyefoaF/fnG/Locv3X4kJMesWwz/kZ1FHsGMIZVNIDmoXEZH",
        "robotUpgradeType": 2,
        "robotVersion": "v00.06.01.12",
        "upgradeDescribe": "version describe",
        "source":1
  }
}

2)如若没有升级任务,发送到该Topic的JSON格式如下:

{
    "code": 0,
    "msg": "success",
    "method": "get",
    "result": {
        "autoUpgrade": null,
        "forceUpgrade": null,
        "ignoreBattery": null,
        "robotApkSize": null,
        "robotDownloadUrl": "",
        "robotUpgradeType": null,
        "robotVersion": null,
        "upgradeDescribe": null,
        "source":null
  }
}

字段说明:

字段名称 类型 是否必须 说明
code Int 表示ota处理该请求的状态,为0表示正常,不为0为异常,异常错误码请看 错误码枚举
method String 表示ota响应method,与请求参数的method相同
msg String 表示ota服务处理该请求的错误消息
result Object 表示ota服务响应的内容
result.autoUpgrade Boolean 表示自动升级开关,(true:开、false:关)
result.forceUpgrade Boolean 表示强制升级开关,(true:开、false:关)
result.ignoreBattery Boolean 表示忽略电量以及与基站连接状态,(true:是、false:否)
result.robotApkSize Integer 机器人固件大小(单位b)
result.robotDownloadUrl String 固件下载URL
result.robotSign String 固件包的签名
result.robotVersion String 固件版本号
result.robotUpgradeType Integer 固件类型(1:局部包、2:整包)
result.upgradeDescribe Integer 固件升级文案
result.source Integer 操作来源(后台:1、APP:2)

4.2 设备上报升级状态

设备在进行固件升级时,尝试下发ota升级状态消息到

Topic:/${productId}/${deviceId}/iot/ota/up

发送到该Topic的JSON格式如下:

{
         "seqId": 157889065989,
         "method": "process",
        "data": {
              "sourceVersion": "v01.01.01.00",
              "targetVersion": "v01.01.01.11",
              "failReason": "error description",
              "errorCode": 100,
              "status": 1,
              "startTime": 1735625711"endTime": 1735629311
    }
}

字段说明:

字段名 类型 是否必须 说明
seqId Long 表示设备请求ota的消息id,保证上报状态消息时序性
method String 表示设备请求ota的操作类型 ,process 表示上报升级状态
data Object 表示设备或应用程序发送给ota服务的属性信息
data.sourceVersion String 设备升级前固件版本信息
data.targetVersion String 设备升级后固件版本信息
data.failReason String 设备升级失败描述
data.errorCode Integer 设备升级失败错误码
data.status Integer 设备当前升级状态(0:失败、1:成功、2:升级中、3:下载中、4:下载失败、5:下载成功)
data.startTime Long 设备升级开始时间(单位(秒)
data.endTime Long 设备升级结束时间(单位(秒)

ota服务收到设备固件升级状态消息后,尝试下发ota固件升级状态回复消息到
Topic:/${productId}/${deviceId}/iot/ota/up/reply
发送到该Topic的JSON格式如下:

{
    "code": 0,
    "msg": "success",
    "result": {}
}

4.3 云端通知设备进行固件升级

ota服务在判断需要通知设备进行固件升级,将尝试下发固件升级消息到

Topic:/${productId}/${deviceId}/iot/ota/down,如 应用在线 并订阅了该Topic,则需要回复消息并进行固件升级。

发送到该Topic的JSON格式如下:

{
     "method": "upgrade"
    "data": {
        "autoUpgrade": true,
        "forceUpgrade": false,
        "ignoreBattery": false,
        "robotApkSize": 1024000,
        "robotDownloadUrl": "https://narwal-test-public-cdn.narwal.com/DX8_UP_v00.06.01.12_2024-12-26-21-25_CN.tar.gz",
        "robotSign": "KyefoaF/fnG/Locv3X4kJMeOz44AMM/hHHLGIIlFHsGMIZVNIDmoXEZH",
        "robotUpgradeType": 2,
        "robotVersion": "v00.06.01.12",,
        "upgradeDescribe": "version describe",
        "source":1
  }
}

字段说明:

字段名称 类型 是否必须 说明
method String 表示ota响应method,与请求参数的method相同
msg String 表示ota服务处理该请求的错误消息
result Object 表示ota服务响应的内容
result.autoUpgrade Boolean 表示自动升级开关,(true:开、false:关)
result.forceUpgrade Boolean 表示强制升级开关,(true:开、false:关)
result.ignoreBattery Boolean 表示忽略电量以及与基站连接状态,(true:是、false:否)
result.robotApkSize Integer 机器人固件大小(单位b)
result.robotDownloadUrl String 固件下载URL
result.robotSign String 固件包的签名
result.robotVersion String 固件版本号
result.robotUpgradeType Integer 固件类型(1:局部包、2:整包)
result.upgradeDescribe Integer 固件升级文案
result.source Integer 操作来源(后台:1、APP:2)

设备收到固件升级消息后,将尝试回复升级固件消息到

Topic:/${productId}/${deviceId}/iot/ota/down/reply

发送到该Topic的JSON格式如下:

{
    "code": 0,
    "msg": "success",
    "result": {}
}

五、错误码枚举

errorCode errorMessage
910001 不正确的JSON格式。
910002 缺少method信息
910004 method是无效的方法。
500 服务端处理异常。
 创建时间:2025-02-17 10:23
最后编辑:陈勇琦  更新时间:2025-02-20 10:40