从物联网平台控制台发起批量升级后,设备升级操作记录状态是待升级。
实际升级从物联网平台OTA系统,接收到设备上报的升级进度开始。设备升级操作记录状态是升级中。
设备端接收到物联网平台推送的升级通知后,可立即下载升级包进行升级,也可在业务空闲后,主动获取升级信息进行升级。
物联网平台根据设备端上报的版本号来判断设备端OTA升级是否成功。
设备离线时,不能接收服务端推送的升级消息。
通过MQTT协议接入物联网平台的设备再次上线后,物联网平台自动检测到设备上线,OTA服务端验证该设备是否需要升级。如果需要升级,物联网平台再次推送升级消息给设备,否则不推送消息。
OTA升级流程及使用的Topic和数据格式如下:
(可选)设备连接OTA服务,上报版本号。
设备端通过MQTT协议推送当前设备OTA模块版本号到Topic:/ota/device/inform/${YourProductKey}/${YourDeviceName}。消息格式如下:
{"id":"123","params":{"version":"1.0.1","module":"MCU"}}表1.参数说明参数类型说明idString消息ID号。String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。versionStringOTA模块版本。moduleStringOTA模块名。说明上报默认(default)模块的版本号时,可以不上报module参数。设备的默认(default)模块的版本号代表整个设备的固件版本号。在物联网平台控制台上,添加升级包、验证升级包并发起批量升级任务。
您在控制台触发升级操作之后,设备会收到物联网平台OTA服务推送的升级包的URL地址。
设备端订阅Topic:/ota/device/upgrade/${YourProductKey}/${YourDeviceName}。物联网平台对设备发起OTA升级请求后,设备端会通过该Topic收到升级包的存储地址URL。
消息格式如下:
OTA升级包中仅有一个升级包文件,且下载协议为HTTPS时,包含该参数。
仅升级包下载协议为MQTT时,包含该参数。
取值为1,表示仅包含新版本升级包与之前版本的差异部分,需要设备进行差分还原。
OTA升级包中仅有一个升级包文件时,包含该参数。
_package_udi表示自定义信息的字段。
单个标签格式:"key":"value"。
OTA升级包中有多个文件时,包含该参数。每个升级包文件信息如下:
(可选)设备端SDK接收到物联网平台推送的升级包URL后,若未在24小时内完成升级包下载,该URL失效。设备端可通过调用以下topic,重新向物联网平台主动请求获取升级任务。
设备端发起请求的Topic为/sys/{productKey}/{deviceName}/thing/ota/firmware/get,消息格式如下。
{"id":"123","version":"1.0","params":{"module":"MCU"},"method":"thing.ota.firmware.get"}表4.参数说明参数类型说明idString消息ID号。String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。versionString协议版本,固定为1.0。paramsObject请求参数。moduleString升级包所属的模块名。说明不指定则表示请求默认(default)模块的升级包信息。methodString请求方法,取值thing.ota.firmware.get。物联网平台收到请求后,通过响应Topic:/sys/{productKey}/{deviceName}/thing/ota/firmware/get_reply,向设备端返回升级包信息。
设备端无法自动下载升级包,可通过调用SDK中接口进行下载。下载须在升级包URL下发后的24小时内完成,否则该URL失效。
升级过程中,设备端向服务端推送升级进度到Topic:/ota/device/progress/${YourProductKey}/${YourDeviceName}。
{"id":"123","params":{"step":"-1","desc":"OTA升级失败,请求不到升级包信息。","module":"MCU"}}表3.参数说明参数类型说明idString消息ID号。String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。stepStringOTA升级进度。
设备端完成OTA升级后,推送最新的版本信息到Topic:/ota/device/inform/${YourProductKey}/${YourDeviceName}。如果上报的版本与OTA服务要求的版本一致就认为升级成功,反之失败。
升级成功的唯一判断条件是设备上报正确的版本号。即使升级进度上报为100%,如果不上报新的版本号,会因超时导致升级失败。
设备升级完成后,建议立即重启设备,设备上线后,立即上报新的版本号。设备上线请求和上报版本请求间隔不能超过2秒。