立即试用 商务报价
社区版
文档 > 概念 > OTA升级

本页目录

固件更新

概述

ThingsBoard3.3开始允许租户管理员将固件上传到存储库后将固件分配给设备配置设备后并通知相关设备有可用的更新,通过特定的API协议进行固件下载平台会跟踪更新的状态关存储更新的历史记录而用户可以在仪表板查看更新过程。


存储库

打开”OTA更新”菜单显示所有OTA更新包:

  • 标题 - 固件包名称。
  • 版本 - 固件包版本。标题和版本的组合成租户范围内唯一的标识。
  • 设备配置 - 每个固件包都有一个设备配置进行兼容这样可以防止意外更新不兼容的固件给设备同时也会让设备更新当前固件包,但是在用户将脚本分配给设备配置和设备之前不会触发更新。
  • 类型 - 固件的FirmwareSoftware
  • Checksum 固件校验算法。
  • Checksum - 固件校验值如果没有则会通过SHA-256自动生成。
  • 描述 - 固件包的说明。

在固件包列表页面可以通过标题进行查询、下载、删除和查看详细信息,在详细信息页面可以复制id和checksum参数值并且审计日志会记录固件的更新信息。

所有操作也可通过REST API进行。

硬件与软件

ThingsBoard内部核心的FOTA和SOTA实现之间存在较小差异大多数用例和应用程序只会使用FOTA但是LwM2M处理FOTA和SOTA的方式不同。

设备配置

将固件分配给设备配置之后所有对应的设备可以使用更新,请参加下面截图:

设备配置详细信息允许你选择兼容的OTA固件包(有关详细信息请参阅配置),所有设备都会使用设备配置的固件分配触发更新过程

设备

将固件分配给特定设备,请参加下面截图:

分配给设备的固件版本将自动覆盖分配给设备配置文件的固件版本。

例如:假设你的设备D1和D2具有配置文件P1:

  • 如果将包F1分配给配置P1(通过配置详细信息UI或REST API),设备D1和D2将更新为F1。
  • 如果将包F2分配给设备D1(通过配置详细信息UI或REST API)设备D1将更新为F2。
  • 如果将包F3分配给配置文件P1将仅影响D2,因为它没有在设备级别分配特定的固件版本。因此D2将更新为F3而D1将继续使用F2。

客户可以选择可用的固件并将其分配给属于他们的设备但是客户无法配置或管理固件包。

禁止删除分配给至少一个设备或设备配置的固件包。

更新过程

ThingsBoard固件分配给设备或设备配置会触发更新过程而更新的进度会保存在设备属性中。
更新状态可能具有以任意状态并存储为一个设备属性用于在仪表板显示更新新过程。

等待状态

固件分配给设备或设备配置的第一个状态。
表示固件的通知已排队但尚未推送到设备。
ThingsBoard对更新通知进行排队以避免峰值负载。
队列以恒定的速度处理默认情况配置为每分钟最多通知100个设备有关详细信息请参阅配置属性

启动状态

ThingsBoard把固件的通知从队列中推送给设备并转换为以下共享属性的更新:

  • fw(sf)_title - 名称
  • fw(sf)_version - 版本
  • fw(sf)_size - 文件大小
  • fw(sf)_checksum - 文件属性
  • fw(sf)_checksum_algorithm - 校验算法

设备可以通过MQTT, HTTP, CoAPLwM2MAPI订阅共享属性更新。

更新设备状态

其它状态由当前正在处理更新的设备固件上报通过Python编写的的协议准备了这些状态的描述和示例应用程序,应用程序模拟设备固件的行为可用作实施参考。

  • DOWNLOADING - 设备固件开始下载更新
  • DOWNLOADED - 设备固件完成更新下载
  • VERIFIED - 设备固件验证更新
  • UPDATING - 设备固件开始更新
  • UPDATED - 设备固件成功更新
  • FAILED - 设备固件更新失败

ThingsBoard固件更新成功后设备发送以下遥测数据:

固件:

1
{"current_fw_title": "myFirmware", "current_fw_version": "1.2.3", "fw_state": "UPDATED"}

软件:

1
{"current_sw_title": "mySoftware", "current_sw_version": "1.2.3", "sw_state": "UPDATED"}

ThingsBoard固件更新失败后设备发送以下遥测数据:

固件:

1
{"fw_state": "FAILED", "fw_error":  "the human readable message about the cause of the error"}

软件:

1
{"sw_state": "FAILED", "sw_error":  "the human readable message about the cause of the error"}

在终端中执行以下命令安装HTTP和校验和库:

1
pip3 install requests mmh3 --user

在终端中输入客户端文件夹的路径并为ThingsBoard执行以下命令以获取固件示例脚本:

1
python3 http_firmware_client.py 

下载HTTP客户端示例: http_firmware_client.py

收到以下消息后

  • Please write your ThingsBoard host or leave it blank to use default (localhost): - 本地主机或平台地址;
  • Please write your ThingsBoard port or leave it blank to use default (8080): - 按“enter”继续或输入端口号;
  • Please write accessToken for device: - 复制设备accessToken并将其粘贴到终端;
  • Please write firmware chunk size in bytes or leave it blank to get all firmware by request: - 为留空则立即以完整大小下载文件如果要分段下载请输入块的大小。

设备的固件已更新要查看状态应该转到固件仪表板如下所示。

通过请求共享属性了解固件更新。

在终端中执行以下命令安装MQTT和校验和库:

1
pip3 install paho-mqtt mmh3 --user

输入客户端文件夹的路径并为ThingsBoard执行以下命令以获取固件示例脚本:

1
python3 mqtt_firmware_client.py 

下载MQTT客户端示例:mqtt_firmware_client.py

收到以下消息后

  • Please write your ThingsBoard host or leave it blank to use default (localhost): - 本地主机或平台地址;
  • Please write your ThingsBoard port or leave it blank to use default (1883): - 按“enter”继续或输入端口号;
  • Please write accessToken for device: - 复制设备accessToken并将其粘贴到终端;
  • Please write firmware chunk size in bytes or leave it blank to get all firmware by request: - 为留空则立即以完整大小下载文件如果要分段下载请输入块的大小。

设备的固件已更新要查看状态应该转到固件仪表板如下所示。

通过请求共享属性了解固件更新。

在终端中执行以下命令安装CoAP和校验和库:

1
pip3 install asyncio aiocoap mmh3 --user

在终端中输入客户端文件夹的路径并为ThingsBoard执行以下命令以获取固件示例脚本:

1
python3 coap_firmware_client.py 

下载CoAP客户端示例:coap_firmware_client.py

收到以下消息后

  • Please write your ThingsBoard host or leave it blank to use default (localhost): - 本地主机或平台地址;
  • Please write your ThingsBoard port or leave it blank to use default (5683): - 按“enter”继续或输入端口号;
  • Please write accessToken for device: - 复制设备accessToken并将其粘贴到终端;
  • Please write firmware chunk size in bytes or leave it blank to get all firmware by request: - 为留空则立即以完整大小下载文件如果要分段下载请输入块的大小。

设备的固件已更新要查看状态应该转到固件仪表板如下所示。

通过请求共享属性了解固件更新。

仪表板

ThingsBoard提供固件更新摘要以监控和跟踪设备的固件更新状态,例如哪些设备正在更新、启动状态以及哪些已经更新。

固件监控仪表板

ThingsBoard的每个租户自动创建的固件监控仪表板,还可以在此处下载仪表板JSON并为现有租户导入它。

查看到所有设备的列表以及有关其固件的完整信息。

点击设备名称旁边的“固件更新历史”按钮,可以了解具体设备的固件更新状态。

软件监控仪表板

ThingsBoard的每个租户自动创建的固件监控仪表板,还可以在此处下载仪表板JSON并为现有租户导入它。

可以看到所有设备的列表以及有关其软件的完整信息。

点击设备名称旁边的“固件更新历史”按钮,可以了解具体设备的软件更新状态。

配置

队列处理速度

使用以下配置属性设置将在所选时间段内通知的最大设备数:

1
2
export TB_QUEUE_CORE_FW_PACK_INTERVAL_MS=60000
export TB_QUEUE_CORE_FW_PACK_SIZE=100
文件大小设置

数据库中保存的最大固件大小默认为2GB并不能被修改。