最近在研究一些 LoRaWAN 新功能时又翻到了这个项目,发现一些新特性在这个项目中已经实现了,惊讶作者 brocaar 的效率之高。这一两年也陆续收到不少朋友对于这个项目的问题,索性我自己就着手记录一些笔记,帮助自己,也看看能否帮助到其他一些朋友。
从 17 年接触 LoRa 的时候,就听说了 LoRa Server 这个开源项目(19年11月改名叫 ChirpStack),国内相当多的厂家都在使用这个 Stack。它可能是最有影响力的 LoRaWAN 服务器开源项目。
我的大神同事毫不吝啬对这个开源项目的赞美,“你要是说 b 哥后面没有一个团队在帮他开发,打死我也不信。”
同时我还对另一个开源 NS 项目 The Things Network LoRaWAN Stack V3 进行了研究,从使用和代码等角度对该 Stack 进行了分析,详细可点此查看。
ChirpStack project 是 LoRaWAN 服务器端的一个开源项目,包含了 LoRaWAN 服务器端所涉及的 NS、AS、GS、GEO Server 等一系列软件。它的组件完整,功能强大,是个值得学习的好项目。
1 开发环境搭建
1.1 使用 Docker-Compose 快速部署 ChirpStack 项目
这篇笔记介绍如何使用 Docker-Compose 快速部署 ChirpStack 项目,主要是对官方 docker 快速教程的实践,增加了一些易错点的记录。
本篇笔记介绍开发所需的几个基础依赖工具。
本篇笔记介绍如何进行几个组件的源码编译,对实际编译过程中的一些问题也做了记录。
编译之后,这篇笔记介绍如何进行必要的配置,并让几个组件运行起来,包含实践过程一些小问题的解决记录。
2 Stack 使用
WebUI 上可以方便地创建一个基础应用所需的网关、应用、设备等信息,完成 DEMO 应用创建。
2.2 使用 Packet Forwarder 让网关接入
2.3 LoRaWAN 节点接入
WEB 创建完毕,搭建一套网关和节点测试下。
LoRa App Server 提供了两类 API 接口,其中 RESTful JSON API 提供了一个 console,在AS地址的基础上使用 /api 即可访问,罗列了 API 端点和文档介绍,测试起来非常方便。
对 API 使用的 JWT 方案进行进一步的学习,学习其数据结构,使用编解码操作加深对 JWT 的理解。
上一节熟悉了 RESTful JSON API,并且用它进行了下行数据,但它无法接收上行数据。这里就得启用 MQTT,本篇笔记介绍该项目中 MQTT 的集成能力,演示如何使用 MQTT 工具进行数据上下行。
应用如何根据 AS 提供的北向 API 进行开发呢? 那么多的 API 都是怎么使用,这篇笔记梳理了主要API的调用逻辑。
这一节笔记学习了一个强大的功能 JS 编解码函数,可以灵活将设备的原始数据转化为 JSON 格式数据。同时学习了必要的 JS 语法,并做了上下行的demo示例,供朋友们参考。
3 Application Server 源码分析
当我们讨论源码分析时,我们具体要分析什么呢?最基础的是摸清具体实现脉络,帮助我们在以后使用中快速定位源码;主体脉络清晰之后再按需分析其中的组件;最后应该尽量抽象出作者的一些编程思路(组件选型的考量、利用到的语言特性),通过对优秀源码的分析,努力提高我们的编码水平。
App Server 和大家关系最紧密,因此首先拿 App Server 分析。这里先按照数据流来梳理脉络,接着对一些独立组件再进行分析。
3.1 数据流
AS 对外开放了 MQTT 端口
3.2 北向接口
在 AS 的北向,AS 提供了 gRPC 与 RESTful 两种接口。
grpc 服务端 /lora-app-server/internal/api/external/application.go
AS 提供了一套 RESTFul 和 gRPC API。
3.3 南向通信
在 AS 的南向,AS 是采用 gRPC 与 NS 进行交互。
3.4 节点数据处理
在 AS 的内部,核心功能是对节点数据进行处理。
3.5 应用集成
在 AS 外侧,提供了丰富的应用集成组件,实现了更多强大的功能。
3.x Web UI
go + react
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