• thingsboard3.4版本之OTA升级


    背景

    在做设备端对接thingsboard平台得时候,去研究设备端对接平台的过程中,花了不少时间,在此之前也没有找到相关的文档,于是出于减少大家去研究的时间,写了这篇博客,希望大家能够点赞和收藏。

    注意:OTA功能是从3.3版本才开始支持的。
    在这里插入图片描述

    参考英文文档地址:
    https://thingsboard.io/docs/user-guide/ota-updates/

    1. 设备事先订阅这些topic主题

    v1/devices/me/attributes
    v1/devices/me/attributes/response/+
    v1/devices/me/rpc/request/+
    v1/devices/me/rpc/response/+
    v2/fw/response/+/chunk/+
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 更新过程的状态变化,需要上传遥测数据到平台

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

    topic:

    v1/devices/me/telemetry
    
    • 1

    发送消息格式:
    //收到软件升级通知发送该格式

    {
    	"current_fw_title": "Initial", //设备当前标题
    	"current_fw_version": "v0",//设备当前版本号
    	"fw_state": "DOWNLOADING" //固件升级状态,一共刘总,参考上述说明
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    //没用收到软件升级通知发送该格式,以便平台上可以看到设备的当前版本号。

    {
    	"current_fw_title": "Initial", //设备当前标题
    	"current_fw_version": "v0",//设备当前版本号
    }
    
    • 1
    • 2
    • 3
    • 4

    3. 设备主动检查更新

    获取平台设置的设备版本信息(比如对单个设备点击修改选中一个版本进行升级,设备里面的共享属性就会更新),设备可以主动获取平台设置的共享属性信息,如果获取信息之后检查到版本信息不一致,可以进行更新,方法如下:
    topic:

    v1/devices/me/attributes/request/${requestId}
    ${requestId} - 请求id,从1开始递增
    
    • 1
    • 2

    发送消息格式:

    {
    	"sharedKeys": "fw_version,fw_checksum_algorithm,fw_checksum,fw_size,fw_title,fw_version"
    }
    
    • 1
    • 2
    • 3

    返回消息topic

    v1/devices/me/attributes/response/1
    
    • 1

    返回消息示例:

    {"shared":{"fw_checksum":"17ae291d08837890026d562e5b666f88d6389fe71d1183d6ed7eeee7505cc209","fw_size":421320,"fw_title":"f","fw_checksum_algorithm":"SHA256","fw_version":"1.2"}}
    
    • 1

    属性key 描述

    fw_checksum	校验和
    fw_size	文件大小,以字节为单位
    fw_title	标题
    fw_checksum_algorithm	校验和算法,默认SHA256
    fw_version	版本
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4. 平台批量更新设备

    会下发升级消息给所有使用该设备配置的所有设备,个别设备单独设置了版本不会进行升级。
    在这里插入图片描述

    平台会主动推送当前最新版本信息给设备,设备可与当前版本判断,如不同,进行更新。

    注意:设备需要首先把设备的当前版本信息推送给平台,平台才会修改版本信息下发通知版本升级信息给设备端,设备收到版本信息后必须对其进行处理,最后上传版本成功或失败消息给平台,平台才会下发下一次的版本升级消息给设备,相当于一个设备升级完成后才能进入下一次的升级。

    接收消息topic:

    v1/devices/me/attributes
    
    • 1

    接收消息格式:

    {
    	"fw_title": "f",
    	"fw_version": "1.0",
    	"fw_tag": "f 1.0",
    	"fw_size": 128537,
    	"fw_checksum_algorithm": "SHA256",
    	"fw_checksum": "67f3b40ba0cbb7d289a9cf6f3f75e6c319f12bdc82d5c35ecc2f51515a13e5cc"
    }
    属性key	描述
    fw_checksum	校验和
    fw_size	文件大小,以字节为单位
    fw_title	标题
    fw_checksum_algorithm	校验和算法,默认SHA256
    fw_version	版本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    5. 设备请求获取安装包文件

    只能获取平台设置的目标版本的安装包文件,请求和获取方式如下:
    设备端发送消息topic:

    v2/fw/request/${requestId}/chunk/${chunkNum}
    
    • 1

    发送消息内容示列:

    1230
    
    • 1

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

    安装包文件数据返回topic:

    v2/fw/response/${requestId}/chunk/${chunkNum}
    
    • 1

    安装包文件返回内容:
    为文件的字节数据,每次返回1230个字节数据,最后一次一般小于1230个字节数据,可以当作文件接收的结束标志。接收完整个文件后,采用sha256进行文件的校验,如果校验和和第4步中的校验和相等,视为数据完整。

  • 相关阅读:
    ucore实验二
    Python进阶——JSON
    操作系统和进程的介绍
    静态时序分析-配置STA环境
    Spring Security(安全框架)
    SQL优化复习
    攻防世界—file_include
    【go】报错整理与解决
    【全网严谨版】L1-016 查验身份证 (C++解法 整理分析了多种方法)
    vivado HW_SYSMON
  • 原文地址:https://blog.csdn.net/qq_40351360/article/details/127659776