4、LoRaWAN设备接入ThingsBoard(基础篇):ChirpStack与ThingsBoard集成原理、HTTP集成配置、设备数据流转测试

4.1 集成原理:两个系统怎么“对话”

说实话,我第一次做ChirpStack和ThingsBoard对接时,也琢磨了半天——这两个系统到底怎么通信?

其实原理很简单。ChirpStack负责管理LoRaWAN网络,它收到设备上报的数据后,需要把数据“转发”给ThingsBoard。转发的方式就是HTTP请求。

我习惯把ChirpStack比作“快递员”,ThingsBoard是“收件人”。快递员(ChirpStack)把包裹(设备数据)送到收件人(ThingsBoard)手里,收件人拆包、登记、展示。

具体流程是这样的:

  1. LoRaWAN设备 通过网关上报数据到ChirpStack
  2. ChirpStack 解析LoRaWAN协议,提取有效载荷
  3. ChirpStack 通过HTTP集成,把数据POST到ThingsBoard的API
  4. ThingsBoard 接收数据,存入数据库,更新仪表盘

你想想看,整个过程没有复杂的中间件,就靠一个HTTP请求搞定。这也是为什么我推荐初学者先从HTTP集成入手——简单、直观、容易排查问题。

核心要点:ChirpStack的HTTP集成本质上是一个“数据转发器”。它把LoRaWAN报文转换成JSON格式,然后通过HTTP POST发送到ThingsBoard的REST API端点。

4.2 HTTP集成配置:一步步来

配置过程不复杂,但有几个坑。我踩过,所以给你指出来。

4.2.1 在ChirpStack中创建HTTP集成

登录ChirpStack控制台,找到你的应用(Application),然后进入“Integrations”选项卡。

点击“Create Integration”,选择“HTTP”。你会看到这样的配置界面:

配置项 说明 我的建议值
Event Endpoint URL ThingsBoard接收数据的URL http://你的ThingsBoardIP:8080/api/v1/设备令牌/telemetry
Headers 自定义HTTP头 一般不需要额外添加
Marshaler 数据序列化方式 JSON(默认)

嗯,这里要注意。Event Endpoint URL里的“设备令牌”是什么?

设备令牌是ThingsBoard中每个设备唯一的凭证。你需要在ThingsBoard里先创建设备,然后复制它的访问令牌。

小技巧:我习惯在ThingsBoard中创建设备时,把设备名设置成和ChirpStack中的设备EUI一致。这样后期排查问题时,一眼就能对上号。

4.2.2 在ThingsBoard中准备接收端

登录ThingsBoard,进入“设备”页面,点击“+”创建设备。

创建设备后,点击设备进入详情页,找到“访问令牌”并复制。这个令牌就是ChirpStack配置里要用的。

举个例子,假设我的设备令牌是 abc123xyz,ThingsBoard的IP是 192.168.1.100,那么Event Endpoint URL就是:

http://192.168.1.100:8080/api/v1/abc123xyz/telemetry

为什么用 /telemetry 这个路径?因为ThingsBoard的REST API规定,设备上报遥测数据就用这个端点。说白了,这就是ThingsBoard的“收件箱地址”。

4.2.3 配置数据格式

ChirpStack默认会把LoRaWAN报文封装成JSON,结构大概是这样:

{
  "applicationID": "1",
  "applicationName": "my-app",
  "deviceName": "24e124128b000001",
  "devEUI": "24e124128b000001",
  "rxInfo": [...],
  "txInfo": {...},
  "adr": true,
  "fCnt": 10,
  "fPort": 2,
  "data": "AQIDBA=="
}

注意看,data字段是Base64编码的。ThingsBoard收到这个JSON后,需要解码才能得到真正的传感器数据。

我在项目中遇到过一个问题:设备上报的温度值是25.3,但ThingsBoard仪表盘显示的是乱码。后来发现是Base64解码没做。所以,你需要在ThingsBoard的规则链里加一个解码节点。

避坑指南:我曾经因为忘记配置规则链,导致数据在ThingsBoard里显示为Base64字符串,排查了整整两个小时。记住:ChirpStack发过来的数据是Base64编码的,ThingsBoard不会自动解码!

4.3 设备数据流转测试:验证你的配置

配置完了,怎么知道它通不通?我一般分三步测试。

4.3.1 第一步:检查ChirpStack日志

在ChirpStack的“Integrations”页面,有一个“Events”标签页。这里会显示每次HTTP请求的结果。

如果看到 200 OK,说明ChirpStack成功把数据发给了ThingsBoard。

如果看到 401 Unauthorized,说明设备令牌不对。回去检查一下。

如果看到 404 Not Found,说明URL写错了。大概率是IP或端口不对。

4.3.2 第二步:检查ThingsBoard设备遥测

登录ThingsBoard,进入设备详情页,点击“最新遥测”标签。

如果能看到数据,说明集成成功了。如果看不到,可能是规则链没配置好。

我习惯在规则链里加一个“Log”节点,把接收到的原始数据打印出来。这样能快速定位问题。

4.3.3 第三步:用Postman模拟测试

有时候设备不在手边,或者不想等设备上报。这时候可以用Postman模拟ChirpStack发送数据。

请求方式:POST
URL:http://你的ThingsBoardIP:8080/api/v1/设备令牌/telemetry
Body(JSON):

{
  "temperature": 25.3,
  "humidity": 68.5
}

如果返回 200 OK,说明ThingsBoard的API是通的。这时候再去排查ChirpStack那边的问题。

经验之谈:我每次做集成测试,都会先用Postman验证ThingsBoard的API是否正常。这一步能帮你快速区分是“ChirpStack的问题”还是“ThingsBoard的问题”。省时省力。

4.4 常见问题与解决方案

做集成时,有几个问题反复出现。我列出来,你遇到了可以直接查。

问题 可能原因 解决方案
ChirpStack显示200,但ThingsBoard没数据 规则链未配置或配置错误 检查规则链,确保有“Save Timeseries”节点
ThingsBoard收到数据但显示乱码 Base64未解码 在规则链中添加“Script”节点,解码Base64
HTTP请求返回401 设备令牌错误 重新复制ThingsBoard中的设备令牌
设备上线但ChirpStack无事件 设备未激活或网关未连接 检查设备状态和网关连接

说白了,HTTP集成是ChirpStack和ThingsBoard对接最基础的方式。虽然简单,但足够应对大部分场景。等你熟悉了这个流程,再去尝试MQTT集成、Kafka集成,会轻松很多。

下一章,我会带你深入规则链,教你如何解码LoRaWAN数据、提取有效信息。到时候,你的仪表盘就能显示真正的温度、湿度、电压值了。