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 还需 5432 | ss -lntp \| grep -E '8080\|1883\|5432' |
| 设备脚本 | Python 3 + paho-mqtt(用来模拟设备) | python3 -m pip show paho-mqtt |
一句话自检结论:JDK 版本不对会直接构建失败,PostgreSQL 连不上会安装失败,先确认这两项再动手。
启动计划:从零到登录页
- 克隆仓库
git clone https://gitcode.com/GitHub_Trending/th/thingsboard cd thingsboard- 构建源码
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为准)。
- 准备 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- 运行安装器:建表、写入系统基础数据。
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字样,进程正常退出。
- 启动服务器
java -cp $JAR -Dloader.main=org.thingsboard.server.ThingsboardServerApplication \ org.springframework.boot.loader.launch.PropertiesLauncher✅ 验证点:日志最后出现Started ThingsBoard in X seconds(启动耗时几十秒到一两分钟)。此进程保持前台运行,另开终端做下一步。
- 完成初始化向导:浏览器打开
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-memory | TB_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,说明整条采集链路已打通。
让数据可用
把刚上报的数据放到仪表盘上,最短路径四步:
- Dashboards → Add Dashboard,新建一块空白看板;
- 进入编辑模式,添加一个Device Alias(设备别名),类型选 Specific Entities,把刚创建的设备加进去。别名的作用是让 Widget 引用「一组设备」而不是写死某个设备 ID,以后换设备只改别名,不用改图表面板;
- 从左侧 Widget 库拖入Latest Values(最新值卡片)或时序曲线类 Widget;
- 在数据配置里: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),仅供参考