概述
自ThingsBoard 3.3起,支持向设备上传和分发OTA(空中升级)更新。
租户管理员可将固件或软件包上传到OTA仓库,上传后可分配到设备配置或设备。
ThingsBoard会通知设备有可用更新,并经由协议专用API提供固件下载。
平台会记录更新状态和更新历史,用户可通过仪表盘监控更新进度。
将OTA包上传到ThingsBoard仓库
进入\u201cOTA Updates\u201d菜单项以列表显示并上传OTA更新包。每个包包含:
- 标题 —— 包名称。可为生产版与调试版固件/软件使用不同名称。
- 版本 —— 包版本。标题与版本的组合在租户内须唯一。
- 设备配置 —— 每个包与一个设备配置兼容。平台会校验兼容性,避免为设备安装不兼容的固件/软件。关联设备配置表示使用该配置的设备可以更新到此包,但需用户或脚本将包分配到设备配置或设备后才触发更新。
- 类型 —— 可选 Firmware 或 Software。
- 校验和算法 —— 可选,所用校验和算法的简称。
- 校验和 —— 可选,文件校验和值。若未提供,服务器会自动使用SHA-256。
- 描述 —— 可选,固件文本说明。
可浏览已上传的包并按标题搜索,也可下载或删除包。 点击表格行可打开包详情,详情中可复制包ID和校验和。 审计日志会记录上传固件的用户信息。
上述操作均可通过REST API完成。
Firmware与Software
ThingsBoard核心中FOTA与SOTA的实现差异很小,多数用例仅需FOTA。 但LwM2M设备对FOTA和SOTA更新的处理方式不同。
将OTA包分配到设备配置
可将固件/软件分配到设备配置,以自动分发给使用该配置的所有设备。见下方截图。
设备配置详情中仅可选择兼容的OTA更新包(详见上传)。 一个设备配置可能被数千台设备使用。分配固件/软件会触发更新流程。
将OTA包分配到设备
也可将固件/软件分配到特定设备。见下方截图。
分配到设备的固件版本会自动覆盖设备配置上的固件版本。
例如,假设您有两个具有配置P1的设备D1和D2:
- 如果将固件包F1分配给配置P1(通过配置详情UI或REST API),设备D1和D2都将更新为F1。
- 如果将固件包F2分配给设备D1(通过设备详情UI或REST API),设备D1将更新为F2。
- 随后将固件包F3分配给配置P1只会影响D2,因为D1在设备级别已有特定的固件版本分配。 因此,D2将更新为F3,而D1将继续使用F2。
客户可为所属设备选择并分配可用固件,但不能上传或管理固件包。
更新流程
将固件/软件分配到设备或设备配置会触发更新流程。 ThingsBoard跟踪更新的进度并将其保存到设备属性中。
更新进度可能处于以下状态之一。更新的状态存储为设备的属性,用于在仪表板上可视化更新过程。
QUEUED状态
固件/软件更新的初始状态。 表示关于新固件/软件的通知已排队但尚未推送到设备。 ThingsBoard对更新通知进行排队以避免峰值负载。队列以恒定的速度处理。 默认情况下,配置为每分钟通知最多100个设备。有关更多详细信息,请参阅配置属性。
INITIATED状态
表示关于固件/软件的通知已从队列中取出并推送到设备。 在内部,ThingsBoard将通知转换为以下共享属性的更新:
- fw(sf)_title - 固件(软件)的名称。
- fw(sf)_version - 固件(软件)的版本。
- fw(sf)_size - 固件(软件)文件的大小(字节)。
- fw(sf)_checksum - 用于验证接收文件完整性的属性。
- fw(sf)_checksum_algorithm - 用于计算文件校验和的算法。
设备可以使用MQTT、 HTTP、CoAP或LwM2M API订阅共享属性更新。
设备报告的更新状态
其余状态由正在处理更新的设备固件/软件报告。 我们为最常见的协议准备了这些状态的描述以及用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 和 checksum 库: 进入客户端文件夹路径,执行以下命令以通过 ThingsBoard 获取固件示例脚本: 下载 HTTP 客户端示例:http_firmware_client.py 出现以下提示时:
设备固件已更新。要查看状态,请前往固件仪表板,如下文所述。 要了解固件更新相关操作,请发起请求并订阅属性。 |
随后执行以下命令安装 MQTT 和 checksum 库: 进入客户端文件夹路径并执行以下命令,以通过 ThingsBoard 获取固件示例脚本: 下载 MQTT 客户端示例:mqtt_firmware_client.py 出现以下提示时:
设备固件已更新。要查看状态,请前往固件仪表板,如下文所述。 要了解固件更新相关操作,请发起请求并订阅属性。 |
在终端中执行以下命令安装 CoAP 和 checksum 库: 进入客户端文件夹路径,执行以下命令以通过 ThingsBoard 获取固件示例脚本: 下载 CoAP 客户端示例:coap_firmware_client.py 出现以下提示时:
设备固件已更新。要查看状态,请前往固件仪表板,如下文所述。 要了解固件更新相关操作,请发起请求并订阅属性。 |
仪表板
ThingsBoard提供固件/软件更新的汇总,用于监控和跟踪您的设备的固件/软件更新状态,例如哪些设备正在更新、任何启动问题以及哪些设备已经更新。
固件更新监控仪表板
为您添加到ThingsBoard的每个新租户自动创建仪表盘。 您还可以从GitHub中下载此仪表板JSON并将其导入现有租户。
您可以在此查看所有设备的列表及其固件的完整信息。
单击设备名称旁的”固件更新历史”按钮可了解特定设备的固件更新状态。
软件更新监控仪表板
为您添加到ThingsBoard的每个新租户自动创建仪表板。 您还可以下载此GitHub存储库中的仪表板JSON并将其导入现有租户。
您可以在此查看所有设备的列表及其软件的完整信息。
配置
队列处理速度
要在选定的时间段内设置将接收通知的设备的最大数量,请使用以下配置属性:
1
2
export TB_QUEUE_CORE_FW_PACK_INTERVAL_MS=60000
export TB_QUEUE_CORE_FW_PACK_SIZE=100
最大大小设置
默认情况下,我们可以在数据库中保存的固件最大大小为2 GB。不可配置。
将 OTA 包分配给设备组
专业版允许您将固件/软件分配给特定设备组,以自动分发到该组内的所有设备。参见下方截图。
设备组详情中仅可选择兼容的 OTA 更新包(详见预配置)。固件/软件的分配会触发更新流程。
单独分配给设备的固件版本将自动覆盖分配给设备组的固件版本。
例如,假设设备 A1、A2 和 A3 位于同一设备组,但使用不同的设备档案。
- 设备 A1 和 A2 具有兼容的设备档案,设备 A3 不兼容。将此包分配给该设备组时,固件/软件仅会更新设备 A1 和 A2。
- 若仅对设备 A2 更新包,设备 A1 将保持未更新状态。
调度器
调度器可设置 OTA 包更新的确切日期和时间。您可以以列表形式查看调度事件,或在日历视图中查看即将发生的事件。
-
要安排更新,请点击屏幕右上角的加号打开对话框。
- 在打开对话框的配置选项卡中,输入事件名称,从下拉菜单选择事件类型(软件/固件更新)并选择更新目标:
- 若需为设备、设备档案或设备组安排更新,请从下拉菜单中选择实体和所需 OTA 包。
- 若需为设备组所有者安排更新,请从下拉菜单中选择组所有者、该所有者下的特定实体组以及要更新的包。
-
在计划选项卡中,选择时区,设置希望实体更新的日期和时间。若需重复执行,请勾选「重复」框。在出现的下拉菜单中选择更新频率。 选择「每周」更新时,应勾选希望更新的星期。基于计时器的更新可设置频率:小时、分钟或秒,以及数值。还需设置重复结束时间。
- 配置参数和计划时间后,点击「创建」按钮。可通过名称旁的对应按钮编辑或删除已创建的调度事件。在编辑调度事件对话框中可配置 Method 和 Params。
在日历中,可通过下拉菜单选择首选视图类型。点击调度事件可编辑或删除。