1、ThingsBoard平台初探:平台架构、核心概念与组件生态概览
各位同学,欢迎来到《ThingsBoard可视化组件自定义开发实战》的第一课。
说实话,我第一次接触ThingsBoard的时候,第一反应是「这玩意儿怎么这么复杂?」。租户、设备、资产、仪表板……一堆概念砸过来,确实容易懵。但后来我慢慢发现,只要搞懂了它的骨架,剩下的都是添砖加瓦的事。
今天我们就来拆解一下ThingsBoard的平台架构和核心概念。我会结合我实际项目中的一些踩坑经历,帮你快速建立起整体认知。
1.1 平台架构:三层解耦,各司其职
ThingsBoard的架构,说白了就是「数据采集 → 处理 → 展示」这条流水线。它分成了三层:
| 层级 | 核心组件 | 我的理解 |
|---|---|---|
| 接入层 | MQTT / HTTP / CoAP 网关 | 负责跟设备「握手」,把乱七八糟的协议统一成内部消息 |
| 核心层 | 规则引擎、实体服务、消息队列 | 数据的「大脑」——过滤、转换、触发告警都在这 |
| 展示层 | 仪表板、部件库、REST API | 我们做自定义组件主要就是跟这层打交道 |
我记得刚接手一个智慧工厂项目时,客户要求设备数据必须实时展示在仪表板上。我当时想当然地以为直接在前端轮询就行,结果被架构师骂了一顿——ThingsBoard的展示层是通过WebSocket订阅数据变化的,不是轮询。这个设计细节,后面做自定义组件时你会深有体会。
1.2 核心概念:租户、设备、资产、仪表板
这四个概念是ThingsBoard的「四梁八柱」。我一个个说,你一个个记。
1.2.1 租户(Tenant)
租户就是「隔离单位」。一个ThingsBoard实例可以服务多个客户,每个客户的数据完全隔离。我在做SaaS平台时,就利用租户隔离来区分不同工厂的数据——A工厂看不到B工厂的设备,哪怕它们用的是同一个ThingsBoard实例。
为什么要有租户? 你想想看,如果所有设备都混在一起,权限管理会变成噩梦。租户就是给你画了个「地盘」。
1.2.2 设备(Device)
设备是ThingsBoard里最基础的实体。它代表一个物理设备或虚拟设备。每个设备有一个唯一的deviceName和deviceType,通过访问令牌(Access Token)或证书进行身份认证。
设备上报的数据分为三类:
- 遥测数据(Telemetry):时间序列数据,比如温度、湿度、电压。这是仪表板展示的主力。
- 属性(Attributes):静态或半静态数据,比如设备型号、固件版本。
- RPC请求:从平台向设备发指令,比如「打开阀门」。
1.2.3 资产(Asset)
资产是设备的「容器」或「逻辑分组」。比如一个工厂是一个资产,工厂里的所有设备都属于这个资产。资产可以嵌套——工厂下面有车间,车间下面有产线,产线下面有设备。
我习惯用资产来构建层级关系树。在仪表板里,你可以通过资产ID来过滤设备,实现「点击某个车间,只显示该车间的设备数据」的效果。
1.2.4 仪表板(Dashboard)
仪表板就是我们的「画布」。它由多个部件(Widget)组成,每个部件绑定一个或多个数据源。我们这门课的核心,就是教你如何开发自定义部件,然后把它拖到仪表板上。
仪表板支持状态(State)切换——你可以把仪表板想象成一本「画册」,每个状态是一页,点击按钮就能翻页。这个功能在做多页面监控时非常实用。
1.3 组件生态概览:从内置到自定义
ThingsBoard的组件生态,我把它分成三个层次:
- 内置部件库:开箱即用的图表、表格、地图、控件。够用,但不够灵活。
- 市场插件:社区贡献的第三方部件,质量参差不齐。我建议谨慎使用,因为升级ThingsBoard版本时可能不兼容。
- 自定义组件:这是我们这门课的重点。用HTML + CSS + JavaScript + Angular框架,开发完全符合业务需求的部件。
为什么要学自定义组件?我举个例子你就明白了。有一次客户要求仪表板上显示一个「设备健康度仪表盘」,需要把温度、振动、运行时长三个指标融合成一个综合评分。内置部件做不到这种「多数据源融合计算」的效果,只能自己写。
1.4 数据流:从设备到仪表板的完整链路
理解了概念,我们来看看数据是怎么从设备「流」到仪表板的。这条链路很关键,因为自定义组件本质上就是这条链路的「最后一公里」。
设备 → MQTT Broker → 规则引擎 → 数据库 → WebSocket → 仪表板部件
每一步的作用:
- 设备:通过MQTT协议上报JSON格式的遥测数据,比如
{"temperature": 25.6, "humidity": 68} - 规则引擎:对数据进行过滤、转换、告警判断。比如温度超过30度就发邮件通知。
- 数据库:时序数据库(Cassandra或TimescaleDB)存储历史数据,用于展示趋势图。
- WebSocket:实时推送最新数据到前端。这是仪表板「动起来」的关键。
- 仪表板部件:我们开发的组件订阅WebSocket消息,更新UI。
我记得有一次调试自定义组件,数据死活不更新。查了半天,发现是规则引擎里把遥测数据的key改了——设备上报的是temp,规则引擎里映射成了temperature,而我的组件订阅的还是temp。嗯,这种「数据源对不上」的问题,在自定义开发中非常常见。
1.5 本章小结
这一章我们做了三件事:
- 理清了ThingsBoard的三层架构:接入层、核心层、展示层
- 吃透了四大核心概念:租户、设备、资产、仪表板
- 了解了组件生态:内置部件、市场插件、自定义组件
下一章,我们会正式进入开发环境搭建。我会手把手教你配置ThingsBoard开发实例、安装Node.js和Angular CLI,并跑通第一个自定义组件模板。
记住一句话:搞懂数据流,组件开发就成功了一半。我们下节课见。
公众号:蓝海资料掘金营,微信deep3321