2021年8月

ThingsBoard 移动端采用 flutter 来实现,支持 Android 和 iOS,当然,web 也可以。总体测试下来,还是算不错的,虽然还没有 release 版本,但是,完全可以使用。

准备工作

flutter 工作环境

参考官方手册,很简单,下载,解压缩,运行:flutter doctor ,一步步排查,直到没有错误。这里不多说,不是重点。

Android

需要提前准备好 Android 开发环境和SDK,具体请参考 Android 开发环境要求,主要是能跑起来环境就没问题。

iOS

前提是需要一台 macOS 的电脑,配置低了还不行,还需要安装很多软件环境,这个对普通开发者还是有难度,土豪除外。

源码分析

配置自己的服务器

lib/constants/app_constants.dart, thingsBoardApiEndpoint 改成你的服务器地址即可;

汉化过程

大概思路就是各种dart 文件,比如: lib/modules/profile/change_password_page.dart,修改密码页面,把字符串改成中文就好了,没什么其他要求。

编译

运行 flutter build apk,可简单了,结果就是这样:

jiekechoo@jiekechoo flutter_thingsboard_app % flutter build apk --no-tree-shake-icons

Building with sound null safety 

Running Gradle task 'assembleRelease'...                                
Running Gradle task 'assembleRelease'... Done                     212.8s
✓  Built build/app/outputs/flutter-apk/app-release.apk (22.8MB).

apk 文件在 build/app/outputs/flutter-apk/app-release.apk,拿到Android 手机上安装即可使用,非常简单。

中文汉化效果预览

登录

直接使用 ThingsBoard 上用户登录即可

tb-app-login.png

设备

tb-app.png

仪表板

tb-app1.png

2021.8.14 第一时间将 TB 3.3 的 OTA 功能进行源码分析,基本思路就是 应用了telemetry 和 attributes ,不复杂,自己实现的话也是要这样来做。这里,只是分析了 CoAP 协议层,其他类似。

1、CoAP 路径:

按照官方文档里面的路径是错误的,需要改成如下url路径才能获取固件:coap://localhost/fw/$access_token?title=$title&version=$versoin

具体文件位置:
/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportService.java

2、checksum算法

默认支持 SHA256,如果设备端不支持或有其他算法请自取 enum 里面内容。
/common/data/src/main/java/org/thingsboard/server/common/data/ota/ChecksumAlgorithm.java
public enum ChecksumAlgorithm {

MD5,
SHA256,
SHA384,
SHA512,
CRC32,
MURMUR3_32,
MURMUR3_128

}

3、OTA Dashboard

自带了两个不错的查看 OTA 的dashboard,赶紧收藏起来。
firmware:
/application/src/main/data/json/demo/dashboards/firmware.json
software:
/application/src/main/data/json/demo/dashboards/software.json
firmware-dashboard.png

4、OTA 固件存储

firmware / software 文件使用 oid 格式存储,隐藏列,无法查看,具体详细内容请自行查看postgresql oid数据类型。

5、测试脚本

https://thingsboard.io/docs/user-guide/resources/firmware/ 目录下
http_firmware_client.py
mqtt_firmware_client.py
coap_firmware_client.py
基本可以用,但是脚步写的不是很好,有能力的可以自己改。

5、升级步骤

1、服务有一个属性,标记是不是要升级,设备定期去获取这个属性,有的话就下载,提交服务器“下载中”;
2、固定地址下载:包括固件名字和版本号,下载完成:提交服务器“已下载”;
3、设备验证固件包完整性,提交服务器“已验证”;
4、设备开始更新前,提交服务器“更新中”;
5、设备更新完成后,成功提交“已更新”,失败提交“失败”;