一、描述
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-20 10:40