设备远程升级¶
Edge OTA 功能范围 |
Edge Logger |
Edge Gateway & Extensive |
---|---|---|
Edge 软件远程升级 |
√ |
× |
Edge 操作系统漏洞远程升级 |
√ |
√ |
开发子设备 OTA 能力¶
与 EnOS Cloud 侧类似,EnOS Edge 提供了一套面对子设备的 OTA 升级服务:
获取固件版本信息:子设备定时上报自身的版本信息,Edge 接收推送至云端,并校验版本号是否为最新
推送升级消息:子设备接收到 Edge 升级请求并下载固件文件
获取升级进度和结果:子设备进入升级流程后,可向 Edge 上报升级进度和结果,继而 Edge 会推送至云端展示
子设备端 OTA 升级很大程度上依赖于设备自身的物理空间和功能实现:
子设备与 Edge 建立 Http 升级通道或串口连接
子设备能够获取自己的固件版本信息,通过升级通道上报至 Edge
子设备的固件需要上传至 EnOS 管理控制台 OTA 升级模块
子设备需要自主管理版本号能力
子设备需要自主定义升级进度
子设备需要自己有验证固件完整性的能力,在升级过程中如失败,子设备能够自动回滚到升级前的版本
通过 Edge OTA 升级子设备的性能:
串口升级通道下,最多 5 个子设备同时升级(5个 Thread 线程),建议升级完毕后,删除“升级”,以免占用 Edge 资源。
针对某一子设,EnOS 云端控制台,可进行单独的空中升级管理。
子设备上报版本号并获取升级消息¶
子设备需上报当前的固件版本信息给 Edge,只有上报过固件版本信息的设备,才能在控制台创建升级任务。子设备按一定的时间间隔轮询 OTA 子设备升级服务器,上报自身版本,服务器收到消息后会回复是否有可用的固件更新。其中,在服务器回复有更新可用的消息包中会附带固件包的下载 URL、校验方式和校验码
请求数据格式
{
"assetId":"",
"version":"1.0.0",
"serialNum":"1234-5678-90aa"
}
响应数据格式
无可用升级
{ "assetId":"ZR3c5CfFSO", "version":"1.0.0", "code":0, "desc":"no update", "signMethod":"", "sign":"", "downloadurl":"" }
有可用升级
{ "assetId":"999999", "version":"v2.0.0.1", "code":1, "desc":"has update", "signMethod":"MD5", "sign": "zxnchksmichasncjdchjcdn", "downloadurl":"/version/15912345678" }
参数说明
参数 |
类型 |
是否必须 |
描述 |
assetId |
string |
否 |
子设备 ID,通常在上报子设备版本的时候为空,并通过 HTTP 响应获取,以供后用 |
version |
string |
是 |
子设备当前版本 |
serialNum |
string |
是 |
MAC 地址,在上报版本时为必填项,可以理解为在获取版本的同时通过SN号获取子设备的 assetId |
code |
integer |
是 |
结果返回码,0代表不升级,1代表升级 |
desc |
string |
否 |
消息描述 |
signMethod |
string |
升级成功必须 |
校验方式:支持 md5 或者 SHA256 |
sign |
string |
升级成功必须 |
校验码 |
downloadurl |
string |
升级成功必须 |
固件下载 URL |
子设备下载固件包¶
在控制台创建云端推送的固件升级任务,符合升级条件的在线子设备,将会通过 Edge 收到云端推送过来的固件信息,如果当前子设备不在线,将在下次上线时接收到升级请求。子设备接收到有可用更新的消息后,从消息中解析出固件包的 URL,通过 HTTP 协议下载固件包,串口子设备直接通过串口协议下载固件包。
子设备推送下载状态与结果¶
子设备需要主动通过URL下载固件包,并将下载结果和下载状态按自定义策略发给 OTA 子设备升级服务器。
推送数据格式
下载失败
{ "assetId":"ZR3c5CfFSO", "code":0, "message":"download fail" }
下载成功
{ "assetId":"ZR3c5CfFSO", "code":1, "message":"download success" }
响应数据格式
{
"httpstatus":404,
"message":"unsupported url"
}
参数说明
参数 |
类型 |
是否必须 |
描述 |
assetId |
string |
是 |
子设备 ID |
code |
integer |
是 |
结果返回码,0 代表下载失败或者是 md5 校验失败,1 代表下载成功且 md5 校验成功 |
message |
string |
是 |
结果返回字段 |
httpstatus |
integer |
是 |
支持的请求错误码 400,404,406,500;请求成功则返回 204,无内容 |
子设备推送升级结果¶
子设备开始下载固件后,根据自身策略进行固件包升级,并计算自身升级进度。升级进度和升级结果可以通过下列三个格式的消息向 OTA 子设备升级服务器上报升级,运维人员可以在控制台中查看升级进度。响应的升级异常可以通过 errcode
字段上报。
推送数据格式
升级失败消息体
{ "assetId":"999999", "version":"v1.0.0.3", "desc":"during upgrade", "flag":0, "process":0, "errcode":0 }
正在升级
{ "assetId":"999999", "version":"", "desc":"updating", "flag":1, "process": 60, "errcode":0 }
升级成功
{ "assetId":"999999", "version":"v2.0.0.1", "desc":"update completed", "flag":2, "process": 100, "errcode":0 }
响应数据格式
{
"httpstatus":404,
"message":"unsupported url"
}
参数说明
参数 |
类型 |
是否必须 |
描述 |
assetId |
string |
是 |
子设备 ID |
version |
string |
是 |
子设备当前版本 |
desc |
string |
否 |
描述信息 |
flag |
integer |
是 |
升级状态,0 代表升级失败,1 代表升级中,2 代表升级成功,其他值会提示错误 |
process |
integer |
是 |
升级进度,0-100 的整数 |
errcode |
string |
是 |
错误码,上报错误码要求 flag 为 0 |
httpstatus |
integer |
是 |
支持的请求错误码 400,404,405,406,500;请求成功则返回 204,无内容 |
备注
只有当 flag 为 2,process 为 100,version 为待升级的版本,三者同时成立时,云端才会显示升级成功。
完成以上子设备配置后,请继续下一步,添加升级设备。
添加升级设备¶
登录 EnOS 控制台,从左侧导航栏中选择 Edge 管理 > Edge详情 > OTA升级。
点击 添加设备,按照页面提示选择需要升级的子设备进行添加即可。
填写 SN 序列号,用于区分设备。
备注
关于 SN 序列号填写,默认推荐填写 MAC 地址,保证与接口上报 SN 内容一致;亦可填写子设备唯一标识 ID。
添加固件升级¶
Edge 遵循 IoT Hub 固件远程升级流程,从而代理子设备进行 OTA 升级。在完成上述开发子设备 OTA 能力以及添加升级设备的操作后,后续对固件无线(OTA)升级请参见 固件无线(OTA)升级
OTA 升级流程示例¶
登录 EnOS 控制台,从左侧导航栏中选择 Edge 管理,选择相应 Edge 设备,对子设备进行 OTA 升级。 以下以串口子设备为例,说明 OTA 升级操作流程。
步骤 1 ~ 3 为创建子设备
步骤 4 ~ 6 为上传子设备固件的流程,上传成功后,子设备会定期比对自身固件版本号与上传版本是否一致,如不一致,自动启动 OTA 升级.
步骤¶
左侧导航栏中选择 Edge 管理 > Edge详情 > OTA升级 > 添加设备:
选择产品,编辑产品列表后的 SN,点击 确定。
左侧导航栏中选择 设备管理 > OTA升级 > 固件管理 > 新增固件,填写固件表单,填写完成后,点击确定。
左侧导航栏中选择 设备管理 > OTA升级 > OTA 任务 > 新增任务,填写任务表单,填写完成后,点击确定。
备注
需要子设备在线。