使用生活物联网平台设备端SDK的内置OTA功能,用户只需要适配所使用的模组和新品,即可使用生活物联网平台的云端OTA服务。本文主要介绍自有品牌项目下使用OTA控制台升级固件的流程。
前提条件
设备已烧录了一个固件版本,且已成功连接到生活物联网平台。
背景信息
总体OTA升级流程如下:
设备端开发升级所需的固件
编译设备端新固件,固件中需要内置版本号信息,设备完成固件烧写并重启后,会上报该新版本号到OTA服务端。
控制台(云端)执行升级过程
用户在OTA控制台执行操作,包括上传固件、验证固件、批量升级、管理固件等。
手机App端确认升级和验证升级结果
如果固件升级开启App确认功能,则需要用户在手机App上确认升级任务后,控制台才会执行固件升级。升级完成后,在手机App上验证升级结果。
一、设备端开发升级所需的固件
设备端(以Wi-Fi设备为例)主要有3个topic来与云端进行交互,流程如下图所示。
设备端通过以下topic向云端上报当前版本号。通常设备上电开机后需要上报一次当前固件版本号。
当设备完成OTA固件下载并烧录,重启后该topic上报的则为新固件的版本信息。
数据上行
/ota/device/inform/${productKey}/${deviceName}
请求数据格式:
{ "id":"123", "params":{ "version":"1.0.1", "module":"MCU" } }
参数
类型
说明
id
String
消息ID号。String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。
version
String
OTA模块版本。
module
String
OTA模块名。
说明
上报默认(default)模块的版本号时,可以不上报module参数。
设备的默认(default)模块的版本号代表整个设备的固件版本号。
当有新版本固件时,云端通过以下topic向设备端推送新固件的版本信息。
数据下行
/ota/device/upgrade/${productKey}/${deviceName}
设备端通过以下topic向云端上报OTA升级进度。该进度可以在控制台以及手机App中查看。
数据上行
/ota/device/progress/${productKey}/${deviceName}
说明建议设置设备端上报进度频率为3秒内最多一次。若设备上报进度频繁,在物联网平台控制台的OTA升级包详情的批次详情中,可能无法查看到上报的全部进度。
{ "id": "123", "params": { "step": "-1", "desc": "OTA升级失败,请求不到升级包信息。", "module": "MCU" } }
参数
类型
说明
id
String
消息ID号。String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。
step
String
OTA升级进度。
取值范围:
1~100的整数:升级进度百分比。
-1:升级失败。
-2:下载失败。
-3:校验失败。
-4:烧写失败。
desc
String
当前步骤的描述信息,长度不超过128个字符。如果发生异常,此字段可承载错误信息。
module
String
升级包所属的模块名。模块的更多信息,请参见添加升级包。
说明 上报默认(default)模块的OTA升级进度时,可以不上报module参数。
根据设备端开发文档和设备端与云端交互的流程图,开发待升级的设备固件。详细的OTA开发编程请参见设备OTA编程。
编译生成新的设备固件,并确认设备端新固件的版本号。
在SDK根目录,执行编译命令。
aos make clean aos make living_platform@<模组名>
以下为编译过程中的日志片段,其中app_version_new对应的即为新固件的版本号。
Check if required tools for esp8266 exist Making config file for first time processing components: living_platform esp8266 platform/mcu/esp8266 vcall init auto_component server region: MAINLAND server env: ONLINE APP: living_platform Board: esp8266host user: liuese branch: rel_1.1.0 hash: 0f1596cffffd9a4646a3cce4d3c7ba9b4f14649d app_version_new:app-1.0.0-20191107142256 //新固件的版本号 firmware type: RELEASE FEATURE_SUPPORT_ITLS != y, so using normal TLS app_version:app-1.0.0-20191107142256 kernel_version:AOS-R-1.3.4 server region: MAINLAND server env: ONLINE APP: living_platform Board: esp8266
二、在控制台执行升级过程
登录生活物联网平台控制台。
上传固件。
进入 页面。
在固件列表页签中的产品下拉框选择产品名称,并单击添加固件。
输入固件相关参数,并单击确定完成。
通常使用容易识别的固件名称和版本号来标识固件,建议将固件版本号与设备固件自身版本号保持一致。详细参数解释请参见固件升级。
上传固件后,使用测试设备验证固件。
固件验证的目的是为了保证固件质量,并且,通常建议选择3~5个测试设备来执行固件验证。
确保新固件版本正确,固件运行正常。
确保OTA升级服务可以正常执行,设备可以正常完成升级任务。
返回 页面。
单击固件列表中操作列中的验证固件。
配置验证固件的相关参数。
待升级版本号:现有设备版本号,即原版本号。
待验证设备:选择待验证设备,支持单选、多选、全选。
APP确认升级:选择是否支持App升级确认功能,如果通过云智能App连接设备,可以使用云智能App确认升级该固件。
设备升级超时时间:选择超时时间,达到超时时间后仍未完成固件验证,则验证固件失败。
单击确定,开始执行固件验证。
如果APP确认升级配置为是,需登录手机云智能App,进入 中,单击确认升级后,才开始执行固件验证。
选择新的测试设备,执行以上步骤。
批量升级固件。
固件验证通过后,进入批量升级阶段,可以支持全量、分批向设备推送升级。
返回 页面。
单击固件列表中操作列中的批量升级。
配置批量升级的相关参数,并单击确定完成。
根据您自身需要选择合理参数,控制OTA升级节奏,提高升级成功率。批量升级的参数介绍请参见固件升级。
管理固件升级。
控制台支持对固件的管理,包括了新增、产品维度固件枚举、查看指定固件详情、删除等操作。在固件详情界面中,可以查看当前固件详细信息,还包括了目标设备总数、升级成功数、失败数等信息,有利于厂商掌握该版本升级的结果信息。下面介绍查看固件升级结果的操作为例,更多操作可参见固件升级。
进入 页面。
单击固件列表中操作列中的查看。
在批次管理页签下的设备列表页签中,查看升级状态。
三、多模块升级
应用场景
部分飞燕客户需要对WiFi模组和MCU分别进行升级,所以需要设置不同的模块来区分。因为会存在多个模块同时需要升级的情况,所以需要在控制台同时创建升级任务来依次进行升级,但一个设备在一个时间点只能存在一个升级任务,所以可能出现报错,可参考下面步骤实现。
比如设备当前固件版本:WiFi:1.0.0,MCU:2.0.0
要升级的目标固件版本:WiFi:1.1.0,MCU:2.2.0
(模块之间的版本互不影响)
新增固件
分别给模块创建动态升级任务
先创建一个WiFi 模块从1.0.0升级到1.1.0的动态升级任务
再创建一个MCU模块从2.0.0升级到2.2.0的动态升级任务
由于一个设备同一时间只能在一个正在进行的升级批次中(设备处于待推送、已推送或升级中状态),所以第二个创建的MCU的批次会直接显示失败,但是没关系。先确认WiFi模块的升级,在WiFi模块升级成功后,设备再次上报MCU:2.0.0版本,MCU批次下的该设备就会变成待推送状态,可以继续升级MCU模块。
四、手机App确认升级和验证升级结果
App端主要有4个topic来与云端进行交互,流程如下图所示。
查询待升级固件
App端通过以下topic向云端查询用户绑定设备的待升级信息,根据返回信息展示待升级设备名称列表。在控制台添加批量升级任务后,云端会将相应待确认升级固件列表信息会返回给用户(App端)。
/living/ota/firmware/file/get
确认设备升级
当APP确认升级配置为是时,云端需要收到App端通过该topic上报的消息后,才能开始执行升级任务,并将该执行任务推送到设备端。
/living/ota/confirm
获取正在升级的设备列表(公版App中目前没有使用该topic)
App端选择周期性或者下拉刷新等UI交互方式,通过以下topic向云端查询当前正在升级的设备信息。云端返回升级的设备列表信息等。
/living/ota/devices/list
获取指定固件的升级信息
长连接实时监听,实时通知方式,不需要轮询方便使用;
API接口查询
需要调用接口轮询查询,详情参见:获取用户名下设备的固件升级进度
/living/ota/progress/list
取消固件升级
取消某一个设备的固件升级流程,详情参见:取消固件升级;
/living/ota/cancel
下面以生活物联网平台云智能App为例,介绍App端的操作。
登录云智能App。
选择 。
查看固件升级,展示待升级信息、发起固件升级、展示升级结果等信息。