概述
ThingsBoard3.3开始允许租户管理员将固件上传到存储库后将固件分配给设备配置或设备后并通知相关设备有可用的更新,通过特定的API协议进行固件下载平台会跟踪更新的状态关存储更新的历史记录而用户可以在仪表板查看更新过程。
存储库
打开”OTA更新”菜单显示所有OTA更新包:
- 标题 - 固件包名称。
- 版本 - 固件包版本。标题和版本的组合成租户范围内唯一的标识。
- 设备配置 - 每个固件包都有一个设备配置进行兼容这样可以防止意外更新不兼容的固件给设备同时也会让设备更新当前固件包,但是在用户将脚本分配给设备配置和设备之前不会触发更新。
- 类型 - 固件的Firmware或Software。
- 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, CoAP或LwM2MAPI订阅共享属性更新。
更新设备状态
其它状态由当前正在处理更新的设备固件上报通过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和校验和库:
在终端中输入客户端文件夹的路径并为ThingsBoard执行以下命令以获取固件示例脚本:
下载HTTP客户端示例: http_firmware_client.py 收到以下消息后
设备的固件已更新要查看状态应该转到固件仪表板如下所示。 通过请求共享属性了解固件更新。 |
在终端中执行以下命令安装MQTT和校验和库:
输入客户端文件夹的路径并为ThingsBoard执行以下命令以获取固件示例脚本:
下载MQTT客户端示例:mqtt_firmware_client.py 收到以下消息后
设备的固件已更新要查看状态应该转到固件仪表板如下所示。 通过请求共享属性了解固件更新。 |
在终端中执行以下命令安装CoAP和校验和库:
在终端中输入客户端文件夹的路径并为ThingsBoard执行以下命令以获取固件示例脚本:
下载CoAP客户端示例:coap_firmware_client.py 收到以下消息后
设备的固件已更新要查看状态应该转到固件仪表板如下所示。 通过请求共享属性了解固件更新。 |
仪表板
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并不能被修改。
设备分组
专业版为提供了将固件分配给特定设备分组的功能自动将包分发到共享同一组的所有设备,请参阅下面的屏幕截图。
设备组详细信息仅允许选择兼容的OTA更新包(请参阅预配置)了解更多信息。
固件分配会触发更新过程并且固件分配会触发更新过程。
专门为设备分配的固件版本将自动覆盖分配给设备组的固件版本。
例如:假设设备A1、A2和A3位于同一设备组中但具有不同的设备配置文件。
- 设备A1和A2具有兼容的设备配置而设备A3具有不兼容的设备配置将程序包分配给此设备组时固件将仅在设备A1和A2上更新。
- 如果专门在设备A2上更新程序包则设备A1将保持不更新状态。
调度
调度程序允许设置OTA包更新的具体日期和时间可以是列表形式观察计划程序事件,也可以在日历视图中查看即将发生的事件。
-
计划更新请单击屏幕右上角的加号以打开对话框窗口。
- 在打开的对话框的配置选项卡中输入事件名称、选择事件类型和选择更新目标:
- 如果需要为设备、设备配置或设备分组更新计划选择一个实体并且指一个OTA更新。
- 如果需要为设备组所有者安排更新从下拉菜单中选择组的所有者、属于该所有者的特定实体组以及将更新的包。
-
在“计划”选项卡中选择时区设置更新实体的日期和时间、重复动作、更新频率、结束时间。
- 通过单击事件名称右侧按钮来编辑已创建的调度程序事件或将其删除,可以在编辑对话框中修改Method和Params。
在日历中可以通过在下拉菜单中选择选更改视图类型并单击需要编辑或删除调度程序事件。