3、ThingsBoard MQTT接入基础:设备配置与访问令牌、使用MQTT客户端发送遥测数据、在仪表盘查看数据

好,咱们进入实战环节。这一章我会带你亲手走一遍完整的流程——从ThingsBoard上创建设备,拿到那把叫「访问令牌」的钥匙,然后用MQTT客户端把数据发上去,最后在仪表盘里看到数据跳动。整个过程我大概跑了不下五十次,踩过的坑都会跟你交代清楚。

3.1 设备配置与访问令牌

在ThingsBoard里,每个设备都有一个唯一的身份凭证。这个凭证就是访问令牌(Access Token)。说白了,它就是设备的「密码」。MQTT客户端连接时带上这个令牌,平台才知道你是谁、允许你发什么数据。

核心概念:访问令牌是一个字符串,由ThingsBoard自动生成,也可以手动修改。它直接绑定到设备上,一个设备一个令牌,不能共用。

3.1.1 创建设备并获取令牌

登录你的ThingsBoard实例,进入「设备」页面。点击右上角的「+」号,选择「添加新设备」。我习惯把设备名称写得有意义一些,比如temperature_sensor_01,方便后期管理。

  1. 填写设备名称,比如「教室温度传感器」。
  2. 标签可以留空,或者填个备注。
  3. 点击「添加」。

设备创建成功后,点击它的名字进入详情页。在「凭据」选项卡里,你就能看到访问令牌了。它长这样:

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 添加卡片组件

在编辑模式下,点击右下角的「+」号,选择「卡片」->「最新值卡片」。然后配置数据源:

  1. 在「数据」选项卡中,点击「添加数据源」。
  2. 选择我们刚才创建的设备「教室温度传感器」。
  3. 在「键」字段中,输入temperature(注意大小写要和发送时一致)。
  4. 点击「确定」。

同样的方法,再添加一个湿度卡片。保存后退出编辑模式,你就能看到两个卡片分别显示温度和湿度的最新值了。

3.3.3 添加时序图

如果想看数据的变化趋势,可以添加一个时序图组件:

  1. 在编辑模式下,添加「图表」->「时序图」。
  2. 数据源选择设备,键分别添加temperaturehumidity
  3. 在「外观」选项卡中,可以设置线条颜色、是否显示图例等。

保存后,你再用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格式,再检查令牌和主题。

好,今天就到这里。有什么问题欢迎在课程群里讨论,我看到都会回复。