ThingsBoard3.9.1实测OTA升级全流程

        最近在整理thingsboard课程,基于最新thingsboard版本3.9.1/4.0,欢迎大家收藏关注我提问在评论区留言,我争取把最新、最准、最好的课程,呈现在各位亦师亦友的csdn广大读者面前。

目录

1 OTA升级

1.1 基础功能

1.2 平台发起升级

1.2.1流程说明

1.2.2操作步骤分解

1.2.3总结

1.3 设备发起升级


1 OTA升级

1.1 基础功能

OTA升级功能概述

其核心功能包括:

1、固件管理 :上传、存储和管理设备的文件,支持固件(Firmware)和软件(Software)。

2、设备兼容性:每个升级包都必须与特定的设备配置文件绑定,保证同类兼容性设备才会收到更新通知。

3、升级任务分配 :将固件升级任务分配给指定设备或设备组。

4、状态监控 :实时监控设备的升级进度和状态,包括下载、验证、更新等阶段,并可以通过仪表板可视化展示。

5、日志记录 :记录升级过程中的关键事件,便于故障排查。

6、安全性 :支持安全协议(如 HTTPS 和 MQTT),确保升级文件传输的安全性。

注意

一个完整的OTA升级,需要平台和设备配合起来,才能完成。

平台:管理升级包。

设备:定期轮询是否可升级,下载升级包,上报升级状态/升级结果。

1.2 平台发起升级

1.2.1流程说明

OTA升级流程分步说明

1、准备阶段

用户上传固件文件到 ThingsBoard 平台。

配置固件信息,例如版本号、描述等。

2、任务分配

创建一个OTA升级任务,选择目标设备或设备组。

设置升级参数,例如升级优先级、超时时间等。

3、设备端处理

设备定期向平台查询是否有新的固件更新。

如果有更新,设备会下载固件文件并执行升级操作。

4、状态反馈

设备在升级过程中会向平台发送状态更新,例如“下载中”、“安装中”、“完成”或“失败”。平台会记录这些状态并提供可视化界面供管理员查看。

5、日志与监控

升级完成后,管理员可以通过日志查看整个升级过程的详细信息。

如果升级失败,可以根据日志进行问题排查。

参见图Diag-05-12。

1.2.2操作步骤分解

在服务端,导航菜单“高级功能"-->“OTA升级”,如下:

igw111.bin的内容是123456。

igw111.bin的文件大小6个字节。

说明:

标题* - 升级包的名称。可以对生产和调试固件/软件使用不同的名称。

版本* - 升级包的版本。标题和版本的组合在租户范围内必须是唯一的。

设备配置* - 每个软件包都与一个设备配置文件兼容。

包类型* - 可以是固件或软件。

上传包文件:二进制文件或外部URL。

是否自动生成校验和。

添加完成之后,升级包列表,如下:

升级包上传完成之后,查看详情,如下:

步骤A-将升级包分配给设备,如下:

 或者

步骤B-将升级包分配给设备配置,如下:

注意:以上的步骤A或步骤B的操作,会触发后台OTA升级更新动作,平台自动跟踪更新进度并将其保存到设备共享属性中。共享属性如下:

        fw(sf)_title - 固件(软件)的名称。

        fw(sf)_version - 固件(软件)的版本。

        fw(sf)_size - 固件(软件)文件的大小(以字节为单位)。

        fw(sf)_checksum - 用于验证接收到的文件的完整性的属性。

        fw(sf)_checksum_algorithm - 用于计算文件校验和的算法。

比如步骤A,触发共享属性更新:

平台发送v1/devices/me/attributes

因为设备订阅了v1/devices/me/attributes

所以设备收到v1/devices/me/attributes

内容如下:

{
  "fw_title": "igwPackage",
  "fw_version": "v1.1.1",
  "fw_tag": "igwPackage v1.1.1",
  "fw_size": 6,
  "fw_checksum_algorithm": "SHA256",
  "fw_checksum": "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"
}
{
  "deleted": [
    "fw_url"
  ]
}

在设备端,设备收到订阅消息如下:

设备的共享属性(创建)更新如下:(fw_size = 6)

设备的最新遥测数据(创建)更新如下:(fw_state = INITIAED)

设备开始下载固件,如下:[标记]Mark-20250404-1

(1)设备发送消息给平台请求下载

设备发送v2/fw/request/${requestId}/chunk/${chunkNum}

平台接收v2/fw/request/${requestId}/chunk/${chunkNum}

${requestId}- 请求id从1开始
${chunkNum}- 请求块号,必须从0开始,每次递增1。发送内容为每次接收的字节数,该值不能超过65535,块号递增次数=文件总字节数/每次接收字节数 然后再向上取整,保证安装包文件的能够取完整。

实际消息:(requestId=1/2/3, chunkNum=0/1/2)

v2/fw/request/1/chunk/0

v2/fw/request/2/chunk/1

v2/fw/request/3/chunk/2

payload内容:{2}

(2)平台返回给设备文件内容

 平台发送 v2/fw/response/${requestId}/chunk/${chunkNum}

 设备接收v2/fw/response/${requestId}/chunk/${chunkNum}

payload内容:{x}

 x是升级包文件的字节数据。

实际消息:

 v2/fw/response/1/chunk/0

v2/fw/response/2/chunk/1

v2/fw/response/3/chunk/2

(3)升级过程中,下载状态,升级结果,用遥测数据发送给平台

  设备发送 v1/devices/me/telemetry

 平台接收v1/devices/me/telemetry

   {

      "fw_state": "UPDATED"

}

 “设备开始下载固件”的操作日志截图,如下:

1.2.3总结

设备端需要指令配置和操作总结

 预先准备工作:

设备订阅topic,如下:

v1/devices/me/attributes

v1/devices/me/attributes/response/+

v1/devices/me/rpc/request/+

v1/devices/me/rpc/response/+

v2/fw/response/+/chunk/+

设备发送遥测数据给平台,如下:

  DOWNLOADING 收到关于新固件/软件更新的通知,设备开始下载更新包

DOWNLOADED  设备已完成更新包的下载

VERIFIED 设备已验证下载包的校验和。

UPDATING  设备已启动固件/软件更新。通常在设备重新启动或服务重新启动之前发送

UPDATED 固件已成功更新到下一版本

FAILED -未验证校验和,或设备更新失败。

设备端升级的流程:

1、查询升级指令

使用MQTT或 HTTP协议,设备定期向平台查询是否有新的固件更新。

查询主题通常为 /v1/devices/me/attributes 或 /v1/devices/me/rpc/request/。

2、下载固件文件

如果收到升级指令,设备从平台下载固件文件。

固件文件的URL通常通过RPC调用或属性更新获取。

3、执行升级

下载完成后,设备验证固件文件的完整性(例如校验MD5或SHA256哈希值)。

执行固件更新操作(例如烧录到Flash存储)。

4、反馈状态

设备在升级过程中向TB发送状态更新。

状态更新通常通过发布消息到/v1/devices/me/attributes主题。

1.3 设备发起升级

(1)设备上报当前版本信息(必须步骤)

 设备发送 v1/devices/me/telemetry

 平台接收 v1/devices/me/telemetry 。--平台判断是否需要升级。

 payload内容:

{"current_fw_title":"MyFirmware", "current_fw_version":"v1.0.0"}

(2)设备主动发起更新检查,以查看平台上升级包的版本。

(升级包版本信息一般保存在设备的共享属性中,共享属性可以人工方式更新)

(2-1)设备发送检查更新消息到平台:

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

${requestId} - 请求id,从1开始递增

      payload内容:

{

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

}

(2-2)平台返回给设备的检查更新消息的响应消息:

v1/devices/me/attributes/response/1

payload内容:(比如)

{"shared":{"fw_checksum":"17ae291d08837890026d562e5b666f88d6389fe71d1183d6ed7eeee7505cc209","fw_size":421320,"fw_title":"igwPackage","fw_checksum_algorithm":"SHA256","fw_version":"1.1.1"}}

   以上步骤(2)使用的是attributs方式,也可以用rpc方式。

   比如 设备发送v1/devices/me/rpc/request/$REQUEST_ID

        平台接收v1/devices/me/rpc/request/$REQUEST_ID

  payload内容:

{
  "method": "checkFirmwareUpdates",
  "params": {}
}



        平台发送 v1/devices/me/rpc/response/$REQUEST_ID

        设备接收 v1/devices/me/rpc/response/$REQUEST_ID

         payload内容: 

{

"fw_title": "MyFirmware",
"fw_version": "v1.1",
"fw_size": 1024,
"fw_checksum": "sha256:abcd1234...",
"fw_checksum_algorithm": "SHA256"

}

(3)如果查询到平台有升级包则设备开始下载

        具体步骤参见Mark-20250404-1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值