从 17 年接触 LoRa 的时候,就听说了 LoRa Server 这个开源项目(19年11月改名叫 ChirpStack),国内相当多的厂家都在使用这个 Stack。它可能是最有影响力的 LoRaWAN 服务器开源项目。
我的大神同事毫不吝啬对这个开源项目的赞美,“你要是说 b 哥后面没有一个团队在帮他开发,打死我也不信。”
同时我还对另一个开源 NS 项目 The Things Network LoRaWAN Stack V3 进行了研究,从使用和代码等角度对该 Stack 进行了分析,详细可点此查看。
0.1 概览
ChirpStack project 是 LoRaWAN 服务器端的一个开源项目,包含了 LoRaWAN 服务器端所涉及的 NS、AS、GS、GEO Server 等一系列软件。它的组件完整,功能强大,是个值得学习的好项目。
0.1.1 ChirpStack 组件功能介绍
1 开发环境搭建
1.1 使用 Docker-Compose 快速部署 ChirpStack 项目
这篇笔记介绍如何使用 Docker-Compose 快速部署 ChirpStack 项目,主要是对官方 docker 快速教程的实践,增加了一些易错点的记录。
1.2 基础依赖工具准备
本篇笔记介绍开发所需的几个基础依赖工具。
1.3 源码编译安装
本篇笔记介绍如何进行几个组件的源码编译,对实际编译过程中的一些问题也做了记录。
1.4 配置运行
编译之后,这篇笔记介绍如何进行必要的配置,并让几个组件运行起来,包含实践过程一些小问题的解决记录。
2 Stack 使用
2.1 使用 WebUI 创建 DEMO 应用
WebUI 上可以方便地创建一个基础应用所需的 关、应用、设备等信息,完成 DEMO 应用创建。
2.2 使用 Packet Forwarder 让 关接入
2.3 LoRaWAN 节点接入
WEB 创建完毕,搭建一套 关和节点测试下。
2.4 使用 RESTful JSON API
LoRa App Server 提供了两类 API 接口,其中 RESTful JSON API 提供了一个 console,在AS地址的基础上使用 /api 即可访问,罗列了 API 端点和文档介绍,测试起来非常方便。
2.4.1 JSON web-tokens 的使用
对 API 使用的 JWT 方案进行进一步的学习,学习其数据结构,使用编解码操作加深对 JWT 的理解。
2.5 使用 MQTT 工具进行数据上下行测试
上一节熟悉了 RESTful JSON API,并且用它进行了下行数据,但它无法接收上行数据。这里就得启用 MQTT,本篇笔记介绍该项目中 MQTT 的集成能力,演示如何使用 MQTT 工具进行数据上下行。
2.6 WebUI 中 Rest API 的调用逻辑分析
应用如何根据 AS 提供的北向 API 进行开发呢那么多的 API 都是怎么使用,这篇笔记梳理了主要API的调用逻辑。
2.7 JS编解码函数的使用
这一节笔记学习了一个强大的功能 JS 编解码函数,可以灵活将设备的原始数据转化为 JSON 格式数据。同时学习了必要的 JS 语法,并做了上下行的demo示例,供朋友们参考。
2.8 应用集成 InfluxDB
2.8.1 ChirpStack 容器连接本机 InfluxDB 容器的一个典型问题处理
2.9 使用 Grafana 做 LoRa 数据展现
为了对 LoRaWAN 系统中的节点和 关的指标进行可视化观察,ChirpStack 可以在应用集成中配置将数据的收发存储到 InfluxDB,再通过 Granfana 进行可视化观察。
3 Application Server 源码分析
App Server 和大家关系最紧密,因此首先拿 App Server 分析。这里先按照数据流来梳理脉络,接着对一些独立组件再进行分析。
3.1 数据流
3.1.1 初始化流程
3.1.2 上行数据流
3.1.3 下行数据流
3.1.4 MQTT 上下行流程
AS 对外开放了 MQTT 端口
3.2 北向接口
在 AS 的北向,AS 提供了 gRPC 与 RESTful 两种接口。
3.2.1 北向 gRPC API
grpc 服务端 /lora-app-server/internal/api/external/application.go
3.2.2 北向 RESTful API
AS 提供了一套 RESTFul 和 gRPC API。
3.2.3 北向 API 鉴权组件
3.3 南向通信
在 AS 的南向,AS 是采用 gRPC 与 NS 进行交互。
3.3.1 AS 与 NS 的交互流程
3.4 节点数据处理
在 AS 的内部,核心功能是对节点数据进行处理。
3.4.1 节点 Payload 加解密
3.4.2 JavaScript 编解码组件
3.5 应用集成
在 AS 外侧,提供了丰富的应用集成组件,实现了更多强大的功能。
3.5.1 集成组件 Http
3.5.2 集成组件 InfuluxDB
3.5.3 集成组件 Prometheus 监控
3.x Web UI
3.x.1 Web-interface 组件分析
go + react
3.x.2 swagger 界面分析
go + swagger
4 Network Server 源码分析
Network Server 是一个典型的 NS,是本项目最核心的组件。
de-duplication of received LoRaWAN frames
Authentication
LoRaWAN mac-layer (and mac-commands)
Communication with the ChirpStack Application Server
Scheduling of downlink frames
5 LoRa Gateway Bridge 源码分析
北向通信
ChirpStack Gateway Bridge is a service which converts LoRa? Packet Forwarder protocols into a ChirpStack Network Server common data-format (JSON and Protobuf). T
南向接口 backend
- Semtech UDP Packet Forwarder
- Basic Station Packet Forwarder
集成组件 Integrations
- Generic MQTT broker
- GCP Cloud IoT Core MQTT Bridge
- Azure IoT Hub MQTT Bridge
END

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!