通过thingsboard-gateway升级设备

夹谷星剑
2023-12-01

thingsboard iot平台已经支持设备ota,官方提供的demo都是设备直连的情况。提供的网关python程序不能直接升级设备。研究了下,网关其实也是设备,可以将升级包下载到网关,由网关对设备进行升级。前提是这个网关程序是自己写的,或者更改官方的python程序。

1 网关先关注以下主题

v1/devices/me/attributes
v1/devices/me/attributes/response/+
v1/devices/me/rpc/request/+
v1/devices/me/rpc/response/+
v2/fw/response/+/chunk/+

2 上电后设备先发送以下信息,告知iot平台固件版本号

v1/devices/me/telemetry

{
    "current_fw_title": "Initial",
    "current_fw_version": "v1.1"
}

3 平台点击网关选择升级包时,此topic会收到如下信息

v1/devices/me/attributes

{"fw_title":"otatest","fw_version":"v1.2","fw_tag":"otatest v1.2","fw_size":457965,"fw_checksum_algorithm":"SHA256","fw_checksum":"72448ed632fc5956ff3f76ab23a3d026cbe5f4dca22658c32922fcffe23673d5"}

4 网关也可以发送消息主动查询升级信息

v1/devices/me/attributes/request/${requestId}

{
    "sharedKeys": "fw_version,fw_checksum_algorithm,fw_checksum,fw_size,fw_title,fw_version"
}

平台应答
v1/devices/me/attributes/response/+
{"shared":{"fw_checksum":"72448ed632fc5956ff3f76ab23a3d026cbe5f4dca22658c32922fcffe23673d5","fw_checksum_algorithm":"SHA256","fw_size":457965,"fw_title":"otatest","fw_version":"v1.2"}}

${requestId}从1开始,每次递增

5 网关升级过程中需要同步以下信息到iot平台

v1/devices/me/telemetry 

{
    "current_fw_title": "Initial",
    "current_fw_version": "v1.1",
    "fw_state": "DOWNLOADING"
}

其中fw_state状态有6种
DOWNLOADING 收到关于新固件/软件更新的通知,设备开始下载更新包
DOWNLOADED  设备已完成更新包的下载
VERIFIED 设备已验证下载包的校验和。
UPDATING  设备已启动固件/软件更新。通常在设备重新启动或服务重新启动之前发送
UPDATED 固件已成功更新到下一版本
FAILED -未验证校验和,或设备更新失败。

6 获取升级包,从以下topic发送信息

v2/fw/request/${requestId}/chunk/${chunkNum}
发送内容:1024

其中 
${requestId}- 请求id从1开始,每次递增
${chunkNum}- 请求块号,必须从0开始,每次递增1。发送内容为每次接收的字节数,该值不能超过65535

平台应答:
平台应答请求包数据,长度为1024,最后一包一般少于这个数

网关取到完整升级包后就可以升级不同设备,并将升级状态同步到iot平台,如果升级失败也要发送状态。

 类似资料: