3、ThingsBoard MQTT接入基础:设备配置与访问令牌、使用MQTT客户端发送遥测数据、在仪表盘查看数据
好,咱们进入实战环节。这一章我会带你亲手走一遍完整的流程——从ThingsBoard上创建设备,拿到那把叫「访问令牌」的钥匙,然后用MQTT客户端把数据发上去,最后在仪表盘里看到数据跳动。整个过程我大概跑了不下五十次,踩过的坑都会跟你交代清楚。
3.1 设备配置与访问令牌
在ThingsBoard里,每个设备都有一个唯一的身份凭证。这个凭证就是访问令牌(Access Token)。说白了,它就是设备的「密码」。MQTT客户端连接时带上这个令牌,平台才知道你是谁、允许你发什么数据。
核心概念:访问令牌是一个字符串,由ThingsBoard自动生成,也可以手动修改。它直接绑定到设备上,一个设备一个令牌,不能共用。
3.1.1 创建设备并获取令牌
登录你的ThingsBoard实例,进入「设备」页面。点击右上角的「+」号,选择「添加新设备」。我习惯把设备名称写得有意义一些,比如temperature_sensor_01,方便后期管理。
- 填写设备名称,比如「教室温度传感器」。
- 标签可以留空,或者填个备注。
- 点击「添加」。
设备创建成功后,点击它的名字进入详情页。在「凭据」选项卡里,你就能看到访问令牌了。它长这样:
YOUR_DEVICE_ACCESS_TOKEN
我的习惯:我会把令牌复制出来,存到一个本地文本文件里。但注意,别把它提交到Git仓库!我在项目里见过有人把令牌硬编码到代码里然后上传到GitHub,结果被爬虫扫到,数据全被篡改了。
3.1.2 令牌的安全管理
访问令牌一旦泄露,任何人都可以冒充你的设备发送数据。所以,我建议你:
- 生产环境中使用环境变量或配置文件存储令牌。
- 定期轮换令牌(ThingsBoard支持手动更新)。
- 如果怀疑令牌泄露,立刻在设备详情页点击「更新凭据」。
我曾经踩过的坑:有一次我把令牌写死在代码里,结果换了台电脑部署,忘了改令牌,导致设备一直连不上。排查了半天才发现是令牌不对。从那以后,我所有项目都用配置文件来管理令牌。
3.2 使用MQTT客户端发送遥测数据
拿到令牌后,我们就可以用MQTT客户端往ThingsBoard发数据了。这里我推荐两个工具:MQTTX(图形化)和mosquitto_pub(命令行)。新手先用MQTTX,直观一些。
3.2.1 连接参数
ThingsBoard的MQTT接入点默认是1883端口(非加密),或者8883端口(TLS加密)。我们先用非加密的来测试。连接时需要设置:
| 参数 | 值 |
|---|---|
| Broker地址 | 你的ThingsBoard服务器IP或域名 |
| 端口 | 1883 |
| Client ID | 任意字符串,建议用设备名 |
| 用户名 | 留空 |
| 密码 | 留空 |
嗯,这里要注意:ThingsBoard的MQTT认证不是靠用户名密码,而是靠访问令牌。令牌要放在MQTT的密码字段里。很多新手会搞混,把令牌填到用户名里,结果连不上。
3.2.2 发送遥测数据
连接成功后,我们需要往特定的主题发布数据。遥测数据的主题格式是:
v1/devices/me/telemetry
数据格式必须是JSON。比如我们要发送温度和湿度:
{
"temperature": 25.6,
"humidity": 68.2
}
在MQTTX里,你只需要选择「发布」模式,填入主题和JSON内容,点击发送即可。如果你用命令行,命令是这样的:
mosquitto_pub -d -h your_thingsboard_ip -p 1883 \
-t "v1/devices/me/telemetry" \
-u "YOUR_DEVICE_ACCESS_TOKEN" \
-m '{"temperature":25.6,"humidity":68.2}'
关键点:这里的-u参数填的是访问令牌,而不是用户名。这是ThingsBoard的特殊设计,别搞反了。
3.2.3 验证数据是否到达
发送成功后,你可以回到ThingsBoard的设备详情页,点击「最新遥测」选项卡。如果看到刚才发送的temperature和humidity值,说明数据已经成功入库了。
我刚开始学的时候,经常发了数据但看不到,后来发现是JSON格式写错了——比如键名用了单引号,或者末尾多了逗号。ThingsBoard对JSON格式要求很严格,多一个逗号都不行。
我的调试技巧:如果数据没显示,先检查MQTT客户端有没有报错。如果客户端显示已发送,但ThingsBoard没收到,大概率是令牌不对或者主题写错了。我会用mosquitto_sub订阅一下v1/devices/me/telemetry主题,看看能不能收到自己发的消息,这样能快速定位问题。
3.3 在仪表盘查看数据
数据到了平台,下一步就是可视化。ThingsBoard的仪表盘功能非常强大,我们只需要拖拽组件就能看到数据实时变化。
3.3.1 创建仪表盘
在左侧菜单栏找到「仪表盘」,点击「+」号创建新仪表盘。给它起个名字,比如「教室环境监控」。创建后进入编辑模式。
3.3.2 添加卡片组件
在编辑模式下,点击右下角的「+」号,选择「卡片」->「最新值卡片」。然后配置数据源:
- 在「数据」选项卡中,点击「添加数据源」。
- 选择我们刚才创建的设备「教室温度传感器」。
- 在「键」字段中,输入
temperature(注意大小写要和发送时一致)。 - 点击「确定」。
同样的方法,再添加一个湿度卡片。保存后退出编辑模式,你就能看到两个卡片分别显示温度和湿度的最新值了。
3.3.3 添加时序图
如果想看数据的变化趋势,可以添加一个时序图组件:
- 在编辑模式下,添加「图表」->「时序图」。
- 数据源选择设备,键分别添加
temperature和humidity。 - 在「外观」选项卡中,可以设置线条颜色、是否显示图例等。
保存后,你再用MQTT客户端发送几组不同的数据,比如:
{"temperature":26.1,"humidity":67.5}
{"temperature":26.8,"humidity":66.9}
{"temperature":27.3,"humidity":66.2}
你会看到时序图上的曲线在实时更新。嗯,这种感觉很爽,数据从传感器一路流到仪表盘,中间没有任何卡顿。
注意:时序图默认只显示最近一小时的数据。如果你想看更长时间范围,可以在组件设置里调整时间窗口。我一般设置为「最近24小时」,这样能看出昼夜变化规律。
3.4 本章小结
这一章我们走完了MQTT接入的完整链路:从创建设备、获取令牌,到用MQTT客户端发送遥测数据,最后在仪表盘上看到数据。整个过程其实就三步,但每一步都有细节需要注意。
我个人觉得,最难的部分反而不是技术本身,而是理解ThingsBoard的认证机制——它用访问令牌代替了传统的用户名密码。一旦你理解了这一点,后面所有操作都会很顺畅。
下一章我们会深入MQTT的更多特性,比如RPC调用和属性上报。到时候你会发现,ThingsBoard的MQTT接口设计得非常巧妙,很多功能都是通过不同的主题来实现的。
课后练习:试着用命令行工具发送一组包含三个字段的JSON数据(比如温度、湿度、光照),然后在仪表盘上创建一个新的卡片来显示光照值。如果遇到问题,先检查JSON格式,再检查令牌和主题。
好,今天就到这里。有什么问题欢迎在课程群里讨论,我看到都会回复。