4、LoRaWAN设备接入ThingsBoard(基础篇):ChirpStack与ThingsBoard集成原理、HTTP集成配置、设备数据流转测试
4.1 集成原理:两个系统怎么“对话”
说实话,我第一次做ChirpStack和ThingsBoard对接时,也琢磨了半天——这两个系统到底怎么通信?
其实原理很简单。ChirpStack负责管理LoRaWAN网络,它收到设备上报的数据后,需要把数据“转发”给ThingsBoard。转发的方式就是HTTP请求。
我习惯把ChirpStack比作“快递员”,ThingsBoard是“收件人”。快递员(ChirpStack)把包裹(设备数据)送到收件人(ThingsBoard)手里,收件人拆包、登记、展示。
具体流程是这样的:
- LoRaWAN设备 通过网关上报数据到ChirpStack
- ChirpStack 解析LoRaWAN协议,提取有效载荷
- ChirpStack 通过HTTP集成,把数据POST到ThingsBoard的API
- 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数据、提取有效信息。到时候,你的仪表盘就能显示真正的温度、湿度、电压值了。