OTA包括模组升级和MCU应用升级两类,待升级设备通过HTTP协议RESTful标准格式与OneNET平台进行数据交互以完成升级。南向设备目前所需的RESTful API一共有三类:检测任务、拉取文件、上报状态。
本部分内容主要介绍网络调试助手使用API测试拉取固件的过程,为研发人员组包测试提供参考。
鉴权参数说明请参考API鉴权。
这里采用Python来计算Authorization,实际使用时,更改产品id和accesskey即可。Python代码如图1所示。
代码下载地址:
计算出来的鉴权参数:
version=2018-10-31&res=products%2F198290&et=7555917657&method=sha1&sign=ZUXNMUqvAbuH0uHs0S1pd%2BgflNE%3D
网络调试助手作为客户端,连接IP:183.230.40.50,端口:50,如图2所示。
POST http://ota.heclouds.com/ota/device/version?dev_id=522747162 HTTP/1.1
Content-Type: application/json
Authorization:version=2018-10-31&res=products%2F198290&et=7555917657&method=sha1&sign=ZUXNMUqvAbuH0uHs0S1pd%2BgflNE%3D
host:ota.heclouds.com
Content-Length:20
{"s_version":"V1.3"}
manuf=102&model=10201这两个参数的取值如下表所示。
dev_id=522747162需要修改为升级的设备id。其他参数不改变。
芯片平台 | 芯片型号 | 厂商编号 | 芯片编号 |
---|---|---|---|
nordic | ESP32 | 101 | 10101 |
乐鑫 | nrf52832 | 102 | 10201 |
兆易 | GD32 | 103 | 10301 |
其他 | 其他 | 100 | 10001 |
GET /ota/south/check?dev_id=522747162&manuf=102&model=10201&type=2&version=V11&cdn=false HTTP/1.1
Authorization:version=2018-10-31&res=products%2F198290&et=7555917657&method=sha1&sign=ZUXNMUqvAbuH0uHs0S1pd%2BgflNE%3D
host: ota.heclouds.com
//此处有个换行,使用时请删除此行内容,保留换行符
//此处有个换行,使用时请删除此行内容,保留换行符
如图4所示。
GET /ota/south/download/ota_JcWgqjwXigKAfRayjjUW HTTP/1.1
Range:bytes=0-5
host: ota.heclouds.com
//此处有个换行,使用时请删除此行内容,保留换行符
//此处有个换行,使用时请删除此行内容,保留换行符
拉取部分文件时,修改头部Range字段。
Range: bytes={start}-{end},目前只支持如下几种模式:
1、Range: bytes={start}-,获取第{start}+1个字节到最后的数据
例如:Range: bytes=0-,获取所有数据
Range: bytes=2-,获取第3个数据到最后1个数据
注意:如果{start}>=文件总长度,则默认{start}=0
2、Range: bytes={start}-{end},获取第{start}+1个字节到第{end}+1个字节
例如:Range: bytes=0-99,获取前100个字节
注意:若{end}>=文件总长度len,则默认end=len-1
若{start}>{end},start被设置为0
3、Range: bytes=-{end},获取最后end个字节数据
例如:Range: bytes=-100,获取最后100个字节数据
如果{end}大于文件总长度len,则默认end=len(获取所有文件)。
分片返回的状态码:206
不分片返回的状态码:200
POST /ota/south/device/download/ota_3lI1NIMLB6E4u260cLRd/progress?dev_id=522747162 HTTP/1.1
Authorization:version=2018-10-31&res=products%2F198290&et=7555917657&method=sha1&sign=ZUXNMUqvAbuH0uHs0S1pd%2BgflNE%3D
host:ota.heclouds.com
Content-Type: application/json
Content-Length:11
{"step":54}//上报下载进度为54%
POST /ota/south/device/download/ota_3lI1NIMLB6E4u260cLRd/progress?dev_id=522747162 HTTP/1.1
Authorization:version=2018-10-31&res=products%2F198290&et=7555917657&method=sha1&sign=ZUXNMUqvAbuH0uHs0S1pd%2BgflNE%3D
host:ota.heclouds.com
Content-Type: application/json
Content-Length:12
{"step":201}//表示升级完成
1、设备在下载升级包的过程中(分片下载),可以根据需要上报下载进度(设备处于“下载中”,才能上报step=[0,100])
2、如果设备上报的下载进度为100(即step:100),那么平台会将设备的升级状态从“正在下载”修改为“正在升级”状态
3、只有当设备处于“正在下载”状态时,设备才能够使用该接口上报下载进度,其他状态将返回“invalid state”的错误
4、step如果大于100,将作为上报状态使用(设备处于:待升级、下载中、升级中,这三个状态时,可以通过上报如下状态码完成升级流程。其他状态如:已取消,升级失败、升级成功、暂停时,不能上报如下状态):
result码 | 说明 | result码 | 说明 |
---|---|---|---|
101 | 升级包下载成功。 | 102 | 下载失败,空间不足 |
103 | 下载失败,内存溢出 | 104 | 下载失败,下载请求超时 |
105 | 下载失败,电量不足 | 106 | 下载失败,信号不良 |
107 | 下载失败,未知异常 | - | - |
201 | 升级成功 | 202 | 升级失败,电量不足 |
203 | 升级失败,内存溢出 | 204 | 升级失败,版本不一致 |
203 | 升级失败,内存溢出 | 204 | 升级失败,版本不一致 |
205 | 升级失败,MD5校验失败 | 206 | 升级失败,未知异常 |
207 | 达到最大重试次数 | 208 | 设备升级过期 |
上报升级成功状态后,平台会显示任务状态为完成。