ChirpStack 笔记

简介

https://www.chirpstack.io/

LoRaWAN®是一种低功耗、广域(LPWA)网络协议,设计用于在区域、国家或全球网络中将电池操作的“事物”无线连接到互联网,并针对物联网的关键需求,如双向通信、端到端安全性、移动性和本地化服务。

ChirpStack 为 LoRaWAN 网络提供开源组件。它们一起形成了一个现成的解决方案,包括用于设备管理的用户友好的 WEB 界面和用于集成的 API。模块化的体系结构使得在现有的基础设施中集成成为可能。所有组件都在MIT许可下许可,并可用于商业目的。提供了以下组件:

  • ChirpStack网关桥:处理与 LoRaWAN 网关的通信。
  • ChirpStack网络服务器:一个 LoRaWAN 网络服务器的实现。
  • ChirpStack应用服务器:一个 LoRaWAN 应用服务器的实现。
  • ChirpStack Gateway OS:在基于树莓派(Raspberry Pi)的 LoRa 网关上运行(完整) ChirpStack栈的 Linux 操作系统。

架构

architecture

LoRaWAN 设备

LoRaWAN设备(上图中未显示)是通过一个或多个 LoRa 网关向 ChirpStack 网络服务器发送数据的设备。例如,这些设备可以是测量空气质量、温度、湿度、位置的传感器…

LoRa®网关

一个 LoRa 网关(通常)同时侦听 8 个或更多的通道,并将接收到的数据(从设备)转发到一个 LoRaWAN 网络服务器(在本例中是 ChirpStack 网络服务器)。运行在 LoRa 网关上负责接收和发送的软件称为包转发器(Packet Forwarder)。常见的实现是 Semtech UDP Packet ForwarderSemtech Basic Station Packet Forwarder.。

ChirpStack 网关桥

ChirpStack 网关桥接器位于数据包转发器和 MQTT 代理之间。它将数据包转发器格式(如Semtech UDP数据包转发器协议)转换为数据格式,由 ChirpStack 组件使用。它还提供与各种云平台的集成,如 GCP 云物联网核心和 Azure 物联网枢纽。

ChirpStack 网络服务器

ChirpStack 网络服务器是一个 LoRaWAN 网络服务器,负责管理网络状态。它具有网络上设备激活的知识,并能够在设备想要加入网络时处理连接请求。

当数据被多个网关接收时,ChirpStack 网络服务器将删除这些重复数据,并将其作为一个有效负载转发到 ChirpStack 应用服务器。

当应用服务器需要将数据发送回设备时,ChirpStack 网络服务器将把这些项目保存在队列中,直到它能够发送到其中一个网关。

ChirpStack应用服务器

ChirpStack 应用服务器是 LoRaWAN 应用服务器,与 ChirpStack 网络服务器兼容。它提供了一个 WEB 界面和 API,用于管理用户、组织、应用、网关和设备。

接收到的上行数据被转发到一个或多个已配置的集成。

终端应用

终端应用程序通过一个已配置的集成接收设备数据。它可以使用 ChirpStack 应用服务器 API 来调度设备的下行有效负载。终端应用程序的目的可能是分析、警报、数据可视化、触发操作……

ChirpStack Application Server

ChirpStack Application Server是一个开源的LoRaWAN®应用服务器,是 ChirpStack 开源 LoRaWAN 网络服务器堆栈的一部分。它负责 LoRaWAN 基础设施的设备“库存”部分,处理连接请求和应用程序有效负载的处理和加密。

它提供了一个可以管理用户、组织、应用程序和设备的网络界面。为了与外部服务集成,它提供了 gRPC 和 RESTful API。

发送 和/或 接收的设备数据可以通过 MQTT、HTTP 或直接写入到 InfluxDB。

有效载荷加密/解密

ChirpStack Application Server 处理应用程序有效负载的加密和解密。它还保存每个设备的应用程序键,并在 OTAA 激活时处理 join-accept。这意味着有效载荷将被解密发送到集成,但在有效载荷被发送到 ChirpStack 网络服务器之前,网络服务器无法访问这些有效载荷。

Web 界面

ChirpStack Application Server 提供了一个 Web 界面 (构建在提供的 RESTful API 之上)。这个 Web 界面可以用来管理用户、组织、应用程序和设备。

用户授权

使用 ChirpStack Application Server,可以授予用户全局的管理员权限,使他们成为组织的管理员,或者为他们分配组织内的仅查看权限。这使得在多租户环境中运行 ChirpStack Application Server 成为可能,在这种环境中,每个组织或团队只能访问他们自己的应用程序和设备。

API

为了与外部服务集成,ChirpStack Application Server 提供了gRPC 和 RESTFul API,公开了与 Web 界面相同的功能。

有效载荷和设备事件

ChirpStack Application Server 提供了不同的方式发送和接收设备负载(例如MQTT, HTTP, InfluxDB,…)。

注意:下行负载也可以通过API进行调度。

网关发现

对于包含多个网关的网络,ChirpStack Application Server 提供了一个特性来测试网关的网络覆盖。通过向每个网关定期发送 “ping”,ChirpStack 应用服务器能够发现这些 ping 被同一网络中的其他网关接收的情况。采集到的数据以地图的形式显示在 Web 界面上。可以为每个 Network Server 启用和配置此功能。

活动的帧日志(frame-logging)

使用 ChirpStack Application Server,可以检查每个网关或设备的所有原始和加密的 LoRaWAN 帧。当打开网关或设备详细信息页面上的 LoRaWAN 帧标签时,将看到实时的所有帧。这也将允许您检查每个 LoRaWAN 帧的(加密)内容。

活动的事件日志(event-logging)

使用 ChirpStack Application Server,可以从 Web 界面检查所有事件,而不需要使用 MQTT 客户端或构建集成。当打开实时事件日志标签上的设备详情,将看到所有实时 uplink,ack,join 和 error 事件。

Startup

certs (optional)

1
2
3
4
5
6
7
8
9
rm -rf certs/ca
mkdir -p certs/ca
cfssl gencert -initca config/ca-csr.json | cfssljson -bare certs/ca/ca

mkdir -p certs/mqtt/server
cfssl gencert -ca certs/ca/ca.pem -ca-key certs/ca/ca-key.pem -config config/ca-config.json -profile server config/mqtt/server/certificate.json | cfssljson -bare certs/mqtt/server/mqtt-server

cp certs/ca/* ~/codebase/oss/chirpstack/mqtt/specs/
cp certs/mqtt/server/* ~/codebase/oss/chirpstack/mqtt/specs/

mosquitto

https://mosquitto.org/

mosquitto mqtt-broker

1
2
3
4
5
6
docker run -it -p 11883:1883 -p 19001:9001 -v ./oss/chirpstack/mqtt/mosquitto.conf:/mosquitto/config/mosquitto.conf -v ./oss/chirpstack/mqtt/specs:/usr/local/certs --name mqtt-broker eclipse-mosquitto

docker exec -it mqtt-broker sh

mosquitto_sub -d -v -h mqtt-broker -p 11883 -t test --cafile /usr/local/certs/ca.pem
mosquitto_pub -d -h mqtt-broker -p 11883 -t test -m hellomqtt --cafile /usr/local/certs/ca.pem

chirpstack-docker

https://github.com/brocaar/chirpstack-docker

docker-compose.yml

chirpstack-application-server.toml

1
2
3
4
cd chirpstack-docker

docker-compose up
docker-compose rm

chirpstack-simulator

Download

1
https://github.com/brocaar/chirpstack-simulator

Build

解决 proxy.golang.org 无法访问

1
go env -w GOPROXY=https://goproxy.cn
1
go build -a -installsuffix cgo -ldflags "-s -w -X main.version=37a7e02" -o build/chirpstack-simulator cmd/chirpstack-simulator/main.go

Startup

chirpstack-simulator.toml (修改配置文件,用于自动创建设备及模拟设备感知数据)

  • jwt_token (Application Server API Keys)
  • service_profile_id (Application Server Service Profile)
1
./build/chirpstack-simulator -c chirpstack-simulator.toml