Skip to content

ThingsBoard 接入对象存储 ​

正文与配图来自原稿。用 MinIO 存文件,ThingsBoard 只存链接 + 业务遥测。

1、概述 ​

很多人讨论如何把非结构化数据存进 ThingsBoard。首先要明确:不要用 PostgreSQL / Cassandra 直接存大文件——不合适,术业有专攻。

例如摄像头录像、声音采集器的音频,要在 TB 上「能播」,平台侧往往只需要一个可访问的链接;文件本身交给对象存储等专门系统。

下面用真实案例说明这条链路。

2、需求 ​

场景:养猪场部署声音采集器,采集猪叫声等音频,上传到自建 MinIO;设备联网后:

  1. 把音频文件传到 MinIO
  2. 拿到文件在 MinIO 上的访问地址
  3. 再通过 HTTP 上报遥测到 ThingsBoard(链接 + 分析结果等字段),遥测按时间留下每一次录音记录

声音采集端若用 Python,可直接看 MinIO 官方文档 的 Python SDK。

若硬件不方便跑 Python SDK:可由设备把文件 HTTP 传到你们自己的 Java 上传服务,Java 封装 MinIO SDK 完成入库并返回文件 URL;设备收到 URL 后再向 TB 报遥测。原稿项目里就是用这种自定义辅助程序实现的。

3、架构图 ​

声音采集器 → MinIO → ThingsBoard

流程概括:

text
声音采集器
  ├─ 上传声音文件 → MinIO
  │                    └─ 返回声音文件链接
  └─ HTTP 上传遥测(含链接等)→ ThingsBoard

补充(辅) ​

点说明
TB 存什么建议遥测/属性里存 URL、时长、分析结果、设备 ID 等,不存二进制
上传路径设备直传 MinIO,或经网关/Java 中转(中转便于统一鉴权、病毒扫描)
播放仪表板部件用遥测里的 URL 播音频/视频;权限用 MinIO 预签名 URL 更稳妥
与摄像头方案实时预览多用 SRS 拉流;录像文件仍可落对象存储,再把地址报给 TB。见 接入摄像头方案

ThingsBoard 设备 HTTP 遥测示例:

text
POST /api/v1/{ACCESS_TOKEN}/telemetry
Content-Type: application/json

{
  "audioUrl": "https://minio.example.com/bucket/xxx.wav",
  "durationSec": 12,
  "score": 0.86
}

相关文章 ​