开源 LoRaWAN Network Server 项目 | ChirpStack 学习笔记

从 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


开源 LoRaWAN Network Server 项目 | ChirpStack 学习笔记

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

上一篇 2019年4月19日
下一篇 2019年4月19日

相关推荐