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里最基础的实体。它代表一个物理设备或虚拟设备。每个设备有一个唯一的deviceNamedeviceType,通过访问令牌(Access Token)证书进行身份认证。

设备上报的数据分为三类:

  • 遥测数据(Telemetry):时间序列数据,比如温度、湿度、电压。这是仪表板展示的主力。
  • 属性(Attributes):静态或半静态数据,比如设备型号、固件版本。
  • RPC请求:从平台向设备发指令,比如「打开阀门」。
⚠️ 避坑指南: 我曾经在项目中把设备属性当遥测数据上报,结果导致仪表板上的历史曲线全乱了。记住:遥测是「随时间变化的值」,属性是「当前状态」。别搞混。

1.2.3 资产(Asset)

资产是设备的「容器」或「逻辑分组」。比如一个工厂是一个资产,工厂里的所有设备都属于这个资产。资产可以嵌套——工厂下面有车间,车间下面有产线,产线下面有设备。

我习惯用资产来构建层级关系树。在仪表板里,你可以通过资产ID来过滤设备,实现「点击某个车间,只显示该车间的设备数据」的效果。

1.2.4 仪表板(Dashboard)

仪表板就是我们的「画布」。它由多个部件(Widget)组成,每个部件绑定一个或多个数据源。我们这门课的核心,就是教你如何开发自定义部件,然后把它拖到仪表板上。

仪表板支持状态(State)切换——你可以把仪表板想象成一本「画册」,每个状态是一页,点击按钮就能翻页。这个功能在做多页面监控时非常实用。

1.3 组件生态概览:从内置到自定义

ThingsBoard的组件生态,我把它分成三个层次:

  1. 内置部件库:开箱即用的图表、表格、地图、控件。够用,但不够灵活。
  2. 市场插件:社区贡献的第三方部件,质量参差不齐。我建议谨慎使用,因为升级ThingsBoard版本时可能不兼容。
  3. 自定义组件:这是我们这门课的重点。用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