☰
ThingsBoard 从零部署教程:15 分钟跑通设备接入、MQTT 遥测上报与实时仪表盘
2026/10/18 2:31:20 网站建设 项目流程

ThingsBoard 从零部署教程:15 分钟跑通设备接入、MQTT 遥测上报与实时仪表盘

【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard

ThingsBoard 是一个 All-in-one IoT 平台,负责设备管理、数据采集、处理与可视化。这份 ThingsBoard 部署教程面向第一次接触物联网平台的新手:全程在一台机器上从源码构建、启动实例、接入一台模拟设备,并搭出第一块实时仪表盘。做完你将拥有:

  • 一个跑在本机 8080 端口的 ThingsBoard 实例
  • 一台通过 MQTT 1883 端口持续上报遥测数据的模拟设备
  • 一块能看到实时温度/湿度曲线的 Dashboard 仪表盘

它解决什么问题

  • 传感器数据没有归宿:温湿度、能耗、定位等数据散落在设备日志里,你需要一个统一入口把它们收上来、存下来、画出来——这正是 ThingsBoard 的主链路。
  • 阈值告警要自己写后端:「温度超 30 度就报警」这类逻辑,ThingsBoard 用规则链(Rule Chain)拖拽节点就能实现,支持告警、邮件、短信通知。
  • 车队/资产要盯屏:位置点持续上报 + 地图 Widget 实时轨迹,适合车队跟踪、设备巡检场景。

边界说明:ThingsBoard 解决的是「设备数据平台」这一层。如果你只是想要一条 MQTT 消息总线,用 mosquitto 就够;只有当你需要设备注册、权限、时序存储、告警和仪表盘一整套时,才轮到它。

仓库自带这些行业方案模板(智能灌溉、智慧零售、智慧停车等),装上模板等于直接拿到一套配好的设备定义、规则链和仪表盘。

开始前:快速自检

项目要求验证方式
系统/资源64 位 Linux 或 macOS,内存 ≥ 8GB,磁盘 ≥ 10GB(Maven 缓存 + 数据库)free -g看内存;df -h .看磁盘
构建环境JDK 25 + Maven 3.9.x(CONTRIBUTING.md 要求的版本)java -version输出 25;mvn -v
数据库Docker + 一个可写的 PostgreSQL 实例(平台默认连接jdbc:postgresql://localhost:5432/thingsboard,账号postgres/postgres)docker ps;psql -U postgres -l能列出数据库
端口8080(Web 控制台 + REST API)、1883(MQTT 传输)未被占用;如用本机 Postgres 还需 5432ss -lntp \| grep -E '8080\|1883\|5432'
设备脚本Python 3 + paho-mqtt(用来模拟设备)python3 -m pip show paho-mqtt

一句话自检结论:JDK 版本不对会直接构建失败,PostgreSQL 连不上会安装失败,先确认这两项再动手。

启动计划:从零到登录页

  1. 克隆仓库
git clone https://gitcode.com/GitHub_Trending/th/thingsboard cd thingsboard
  1. 构建源码
mvn clean install -DskipTests -Dpkg.skip.deb=true -Dpkg.skip.rpm=true

为什么这样写:-DskipTests跳过测试以节省时间;-Dpkg.skip.deb=true/-Dpkg.skip.rpm=true只跳过 deb/rpm 安装包的打包,不跳过 boot 可执行 jar(-Dpkg.skip=true会把 boot jar 一起跳掉,这里不能用)。首次构建要下载大量依赖并构建 Angular 前端,通常 20–40 分钟,期间没有任何输出属正常,不要中途 Ctrl+C。

✅ 验证点:命令正常退出;产物在application/target/thingsboard-4.4.0.1-SNAPSHOT-boot.jar(版本号以pom.xml为准)。

  1. 准备 PostgreSQL:建库并记下连接方式。平台通过环境变量SPRING_DATASOURCE_URL、SPRING_DATASOURCE_USERNAME、SPRING_DATASOURCE_PASSWORD找数据库,默认值是jdbc:postgresql://localhost:5432/thingsboard+postgres/postgres(见 application/src/main/resources/thingsboard.yml)。如果你的 Postgres 不是这个默认连接方式,就覆盖这三个变量,否则安装会直接失败退出。
docker run -d --name tb-pg -e POSTGRES_PASSWORD=postgres \ -e POSTGRES_DB=thingsboard -p 5432:5432 postgres:16
  1. 运行安装器:建表、写入系统基础数据。
export NON_PRODUCTION_USE=true JAR=application/target/thingsboard-4.4.0.1-SNAPSHOT-boot.jar java -cp $JAR -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \ -Dspring.profiles.active=install org.springframework.boot.loader.launch.PropertiesLauncher

为什么这样写:NON_PRODUCTION_USE=true让实例免 license 密钥运行(仅限非生产,带水印、有运行时长限制,定义见 application/src/main/conf/thingsboard.conf)。-Dloader.main=...InstallApplication指定启动入口是安装器而不是服务器;这个参数换个类名就是「装完即跑」的切换方式。脚本入口在 packaging/java/scripts/install/install.sh——注意其中--loadDemo参数已退役,演示数据改到下一步的设置向导里勾选,照着旧教程加它不会有作用。

✅ 验证点:日志出现Started ThingsboardInstallApplication字样,进程正常退出。

  1. 启动服务器
java -cp $JAR -Dloader.main=org.thingsboard.server.ThingsboardServerApplication \ org.springframework.boot.loader.launch.PropertiesLauncher

✅ 验证点:日志最后出现Started ThingsBoard in X seconds(启动耗时几十秒到一两分钟)。此进程保持前台运行,另开终端做下一步。

  1. 完成初始化向导:浏览器打开http://localhost:8080。首次启动不会直接出登录页,而是出Setup 向导:在这里创建系统管理员账号(本实例的 super-admin,建议记住为sysadmin@thingsboard.org),并勾选Load demo data——它会创建演示租户(账号tenant@thingsboard.org/ 密码tenant)、演示规则和一批示例 Dashboard(源码在 application/src/main/data/json/demo/)。勾上它,后面看仪表盘就有现成数据可盯。

✅ 验证点:能成功登录并看到主界面,即部署完成。

一句话概括:构建 → 装库 → 起服 → 向导建 admin,四步走完,http://localhost:8080出登录页就对了。

一句话看懂数据链路

设备 --MQTT:1883--> 传输层(内置于 tb-node) --> 消息队列(默认 in-memory,可切 Kafka) --> 规则引擎(Rule Chain) --> PostgreSQL(实体 + 时序) --> Web 仪表盘:8080

组件职责配置位置/常用端口
MQTT 传输接收设备消息、鉴权(Access Token)MQTT_BIND_PORT,默认1883(TLS 为 8883)
消息队列解耦传输与处理,单进程部署默认 in-memoryTB_QUEUE_TYPE,in-memory或kafka
规则引擎按规则链处理每条消息:过滤、计算、告警、存储rule-engine/源码目录
PostgreSQL存实体与遥测时序数据SPRING_DATASOURCE_URL,默认 5432
Web 控制台设备管理、Dashboard、规则编排端口8080

上图是规则节点的字段引用界面:脚本可以直接取遥测字段做计算。所有参数、端口、默认值集中在 application/src/main/resources/thingsboard.yml,排障时先查这份文件。

完成第一次核心交互

在 Web 里建一台设备:Devices → Add Device → 选MQTT,记下生成的Access Token——它就是你「设备」的登录凭证,用错它连 1883 会被直接拒绝。

写一个最短的设备脚本device.py,向唯一需要记住的主题v1/devices/me/telemetry发布一条遥测:

import json import paho.mqtt.client as mqtt c = mqtt.Client() c.username_pw_set("你的AccessToken") # 用户名填令牌,密码留空 c.connect("localhost", 1883, 60) c.publish("v1/devices/me/telemetry", json.dumps({"temperature": 25.5, "humidity": 60.2}))

为什么这样写:username_pw_set的第一参数就是设备令牌,这是 ThingsBoard 的鉴权约定;v1/devices/me/telemetry是遥测上报主题,payload 必须是 JSON 对象,键名(temperature、humidity)就是后面仪表盘里能引用的指标名。仓库里带了一个可参考的示例 tools/src/main/python/mqtt-send-telemetry.py,可直接改成自己的联调脚本。

python3 device.py

✅ 验证点:脚本无输出即成功——publish 成功不会打印任何东西。回 Web 刷新该设备页面:Latest Telemetry 里出现temperature: 25.5,设备状态变为ACTIVE,说明整条采集链路已打通。

让数据可用

把刚上报的数据放到仪表盘上,最短路径四步:

  1. Dashboards → Add Dashboard,新建一块空白看板;
  2. 进入编辑模式,添加一个Device Alias(设备别名),类型选 Specific Entities,把刚创建的设备加进去。别名的作用是让 Widget 引用「一组设备」而不是写死某个设备 ID,以后换设备只改别名,不用改图表面板;
  3. 从左侧 Widget 库拖入Latest Values(最新值卡片)或时序曲线类 Widget;
  4. 在数据配置里:Data Source 选刚才的别名,Key 填temperature、humidity,保存。

✅ 验证点:保存后卡片显示 25.5 / 60.2;再跑一次device.py(改个数值),Dashboard 会刷新出新读数。

卡住了:速查表

现象常见原因动作(含验证命令)
8080 打不开端口被占用或服务未起完ss -lntp \| grep 8080确认监听;没起完就等日志出现Started ThingsBoard in X seconds
mvn clean install报错JDK 不是 25,或依赖下载被网络中断java -version确认版本;确认后重跑同一构建命令,Maven 会从断点续下
安装器退出、日志有 database 连接异常SPRING_DATASOURCE_URL/USERNAME/PASSWORD与实际 Postgres 不符psql -U postgres -h localhost -l能列出thingsboard库即可,改不对就改这三个环境变量
MQTT 连 1883 被拒Access Token 复制错或含空格在设备详情页重新复制 Token;ss -lntp \| grep 1883确认传输端口在监听
页面停在 Setup 向导sysadmin 还没创建(本版本向导是首次进入才出)按向导填邮箱密码、勾选 demo data 完成初始化即可

往哪深入

  • application/src/main/resources/thingsboard.yml:全部默认参数与端口(1883/8883/5685/8080 都在里面),改行为前先看它。
  • tools/src/main/python/mqtt-send-telemetry.py:仓库自带设备侧 MQTT 示例,可直接改造成你自己的联调脚本。
  • rule-engine/rule-engine-components/:内置规则节点(Switch、Script、Alarm、邮件/短信通知)的实现源码,规则引擎「能拖什么」由这里决定。
  • msa/tb-node/docker/Dockerfile:微服务化部署(tb-node + 各传输服务独立容器)的 Docker 打包入口,后续想把本教程的单进程拆成多服务就从这里看。
  • ui-ngx/src/assets/help/:平台界面内嵌帮助文档的源文件,规则引擎、Widget 编辑器的细节都可以查到。

从设备上报到仪表盘显示,整条链路已经闭环:1883 进、8080 出。下一步建议:在默认规则链上给这条遥测加一个温度告警节点,把平台从「能看」推进到「能反应」。

【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询