Thingsboard OTA
tip
OTA功能至少大于等于3.3版本
一、 准备工作
用到主题预览
请求查询云端固件版本信息
:v1/devices/me/attributes/request/+接收设备云端固件版本信息
:v1/devices/me/attributes/response/+推送当前进度
:v1/devices/me/telemetry请求下载安装包
:v2/fw/request/+/chunk/+接收安装包数据
:v2/fw/response/+/chunk/+
对比当前固件版本信息
请求v1/devices/me/attributes/request/+
查询固件信息
{
"sharedKeys": "fw_version,fw_checksum_algorithm,fw_checksum,fw_size,fw_title"
}
接收v1/devices/me/attributes/response/+
固件版本信息
{
"shared": {
"fw_checksum": "ca937967008aab4f444f1d871f493b8ddc5a83273ee10728ca58abe14a1e0ca8",
"fw_size": 580400,
"fw_title": "TEST2",
"fw_checksum_algorithm": "SHA256",
"fw_version": "0.0.01"
}
}
字段解释
fw_checksum
:校验总数fw_size
:文件大小,以字节为单位fw_title
:标题fw_checksum_algorithm
:校验和算法,默认SHA256fw_version
:版本
tip
在设备启动的时候对比当前版本号是否一致不一致则进行更新
被动更新
通过订阅设备数据属性更新消息来达到被动更新v1/devices/me/attributes
,此场景用于正在运行中的设备
当接收到有消息推送到此topic的时候,判断以下字段是否和当前固件是否一致,如果不一致则进行更新:
{
"fw_title": "ESB8266",
"fw_version": "0.01",
"fw_tag": "ESB8266 0.01",
"fw_size": 580400,
"fw_checksum_algorithm": "SHA256",
"fw_checksum": "ca937967008aab4f444f1d871f493b8ddc5a83273ee10728ca58abe14a1e0ca8"
}
tip
每一次在云平台更新固件的时候,平台都会主动给v1/devices/me/attributes
推送消息
二、 设置固件更新状态
这一步的用意是为了记录当前设备的更新状态,用户可以观看到当前更新状态
通过v1/devices/me/telemetry
上报当前设备固件更新状态
{
"current_fw_title": "Initial", //设备当前标题
"current_fw_version": "v0",//设备当前版本号
"fw_state": "DOWNLOADING" //固件升级状态,参考下面说明
}
current_fw_title
:当前设备标题current_fw_version
:当前设备版本fw_state
:状态DOWNLOADING
: 收到关于新固件/软件更新的通知,设备开始下载更新包DOWNLOADED
: 设备已完成更新包的下载VERIFIED
: 设备已验证下载包的校验和。UPDATING
: 设备已启动固件/软件更新。通常在设备重新启动或服务重新启动之前发送UPDATED
: 固件已成功更新到下一版本FAILED
: -未验证校验和,或设备更新失败。
三、 下载固件
请求下载固件
通过请求Topic:v2/fw/request/+/chunk/+
下载固件
tip
第一个+号为:requestId 第二个+号为:chunkNum
requestId
: 设备自定义请求ID,requestId + 1 用于平台返回数据时的组包主键chunkNum
: 下载包编号从0开始,然后累计。直到下载的数据大小与目标大小一致即可
订阅固件数据包Topic
通过订阅Topic:v2/fw/response/${requestId}/chunk/${chunkNum}
来接收 下载固件的请求
返回内容为Byte字节数据
tip
每次返回的数据追加到已下载里面,然后每次都要比较下载的数据与目标数据是否一致,如果一直代表下载完成,接着对包进行校验
