ThingsBoard 接入对象存储
正文与配图来自原稿。用 MinIO 存文件,ThingsBoard 只存链接 + 业务遥测。
1、概述
很多人讨论如何把非结构化数据存进 ThingsBoard。首先要明确:不要用 PostgreSQL / Cassandra 直接存大文件——不合适,术业有专攻。
例如摄像头录像、声音采集器的音频,要在 TB 上「能播」,平台侧往往只需要一个可访问的链接;文件本身交给对象存储等专门系统。
下面用真实案例说明这条链路。
2、需求
场景:养猪场部署声音采集器,采集猪叫声等音频,上传到自建 MinIO;设备联网后:
- 把音频文件传到 MinIO
- 拿到文件在 MinIO 上的访问地址
- 再通过 HTTP 上报遥测到 ThingsBoard(链接 + 分析结果等字段),遥测按时间留下每一次录音记录
声音采集端若用 Python,可直接看 MinIO 官方文档 的 Python SDK。
若硬件不方便跑 Python SDK:可由设备把文件 HTTP 传到你们自己的 Java 上传服务,Java 封装 MinIO SDK 完成入库并返回文件 URL;设备收到 URL 后再向 TB 报遥测。原稿项目里就是用这种自定义辅助程序实现的。
3、架构图

流程概括:
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
}相关文章
- ThingsBoard 接入摄像头方案
- Arduino + SIM4G 上报 ThingsBoard(设备侧 HTTP 上报另一例)
- 专栏导读
