详解LoRaWAN服务器ChirpStack:连接物联网的关键

2023-10-15 07:20

本文主要是介绍详解LoRaWAN服务器ChirpStack:连接物联网的关键,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


文章目录

  • LoRaWan协议
  • 什么是ChirpStack 有什么用
  • 开源的LoRaWan Server
  • 搭建ChirpStack
    • 认识下各个组件
      • chirpstack v3
        • chirpstack-network-server
        • chirpstack-application-server
        • chirpstack-gateway-bridge
        • postgresql
        • redis
        • mosquitto
        • 部署说明
      • chirpstack v4
        • chirpstack
        • chirpstack-gateway-bridge-eu868
        • postgres
        • redis
        • mosquitto
        • 部署说明
    • 组件间的关系
    • 部署
  • ChirpStack Application Server模块功能
    • Organizations
    • Organization users
    • Organization API keys
    • Service-profiles
    • Device-profiles
    • Gateways
    • Applications
    • Devices

LoRaWan协议

LoRaWAN(长程广域网,Long Range Wide Area Network)是一种低功耗、广域覆盖的无线通信协议,专为物联网(IoT)应用而设计。它采用低功耗、长距离通信技术,使得设备可以在低功耗条件下远距离传输数据,适用于各种用例,如智能城市、农业、工业自动化、环境监测等。它基于LoRa调制技术来实现的。
这里稍微介绍下概念,由于本文主要介绍LoRaWan服务器,LoRaWan协议偏向设备传输层面,下篇文章讲到LoRaWan网关接入LoRaWan服务器的时候会再讲解LoRaWan协议。

什么是ChirpStack 有什么用

ChirpStack是一个开源的物联网(IoT)网络服务器,它提供了LoRaWAN协议的网络服务器功能。
具体来说,ChirpStack是一个LoRaWAN网络服务器,用于管理和控制连接到LoRaWAN网络的终端设备、网关和应用程序。它允许用户建立、操作和维护自己的LoRaWAN网络,以支持各种物联网应用,如智能城市、农业、工业自动化和环境监测等。
后面随着ChirpStack体系搭建起来,会讲解诸如应用创建、网关注册、设备注册、安全认证等各项功能,你便能对ChirpStack的作用有更深刻的理解。

开源的LoRaWan Server

当前开源的LoRaWan Server主要有:

  • chirpstack
  • lorawan-server
  • ttn

其中chirpStackttn是Golang实现,lorawan-server是Erlang实现。

搭建ChirpStack

ChirpStack体系包括chirpstack-network-serverchirpstack-application-serverchirpstack-gateway-bridgepostgresqlredismosquitto
上面是ChirpStack v3的组件,到ChirpStack v4已经将chirpstack-network-serverchirpstack-application-server合并起来变成chirpstack

认识下各个组件

chirpstack v3

chirpstack-network-server

ChirpStack网络服务器是LoRaWAN网络中的核心组件,负责处理网关接收到的设备的上行链路数据以及调度下行链路数据,即处理设备的注册和数据传输。它是整个LoRaWAN网络的中央协调器。
https://github.com/brocaar/chirpstack-network-server

chirpstack-application-server

ChirpStack应用服务器是用于管理LoRaWAN应用的组件。它负责处理设备数据、解码Payload、处理应用逻辑、提供API以与应用程序集成(支持通过Web界面或API与应用服务器交互)等。
https://github.com/brocaar/chirpstack-application-server

chirpstack-gateway-bridge

ChirpStack网关桥接器是用于将网关传输的数据转发到ChirpStack网络服务器的组件,可以将LoRa网关传输来的LoRa数据包转发器协议转换成ChirpStack网络服务器通用的数据格式(JSON和Protobuf)。它充当网关和网络服务器之间的中间件。

LoRa网关的数据是加密的,我们在LoRa gateway log里不能具体看到数据样式,此时ChirpStack网关桥接器就可以将这种数据包转换成ChirpStack识别的数据格式,这也有利于用户的可观性。

chirpstack-gateway-bridge有两种部署方式,一种是内置在网关内,另一种是ChirpStack网络服务一样和部署在服务器上。

https://www.chirpstack.io/gateway-bridge/

postgresql

ChirpStack使用了PostgreSQL数据库来存储ChirpStack的各种数据,包括设备注册信息、设备数据等。

redis

用于存储ChirpStack的临时数据和缓存信息。

mosquitto

Mosquitto是一个MQTT协议的代理服务器,用于处理设备和ChirpStack组件之间的通信。它允许LoRaWAN网关和ChirpStack服务之间的消息传递。

在LoRaWAN网关的数据包转发器配置可以选择MQTT for Chirpstack协议,给予其MQTT Broker Address MQTT Broker Port即可与ChirpStack服务进行通讯,即LoRaWAN网关与ChirpStack服务之间的通讯可以通过MQTT协议来传输。

部署说明

以上chirpstack v3组件的链接是组件项目开发版使用的
chirpstack v3的提供了docker部署版:https://github.com/chirpstack/chirpstack-docker/tree/v3
docker-compose.yml如下:

version: "3"services:chirpstack-network-server:image: chirpstack/chirpstack-network-server:3volumes:- ./configuration/chirpstack-network-server:/etc/chirpstack-network-serverdepends_on:- postgresql- mosquittochirpstack-application-server:image: chirpstack/chirpstack-application-server:3ports:- 8080:8080 #访问该端口即可访问到chirpstack的web界面volumes:- ./configuration/chirpstack-application-server:/etc/chirpstack-application-serverdepends_on:- chirpstack-network-serverchirpstack-gateway-bridge:image: chirpstack/chirpstack-gateway-bridge:3ports:- 1700:1700/udp #将容器内的1700/udp端口映射到主机的1700/udp端口,用于接收来自LoRaWAN网关的数据。volumes:- ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridgedepends_on: - mosquittopostgresql:image: postgres:9.6-alpineenvironment:- POSTGRES_PASSWORD=rootvolumes:- ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d- postgresqldata:/var/lib/postgresql/dataredis:image: redis:5-alpinevolumes:- redisdata:/datamosquitto:image: eclipse-mosquitto:2ports:- 1883:1883 #将容器内的1883端口映射到主机的1883端口,用于MQTT通信。volumes: - ./configuration/eclipse-mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.confvolumes:postgresqldata:redisdata:

chirpstack v4

chirpstack

ChirpStack v4是ChirpStack的最新版本,它包括网络服务器、应用服务器和设备管理。它是一个综合的LoRaWAN解决方案,允许您构建和管理LoRaWAN网络。

合并了ChirpStack v3的chirpstack-network-server和chirpstack-application-server,因此不需要在chirpstack-application-server上配置指定chirpstack-network-server了

https://github.com/chirpstack/chirpstack

chirpstack-gateway-bridge-eu868

同chirpstack v3
https://github.com/chirpstack/chirpstack-gateway-bridge

postgres

同chirpstack v3

redis

同chirpstack v3

mosquitto

同chirpstack v3

部署说明

以上chirpstack v4组件的链接是组件项目开发版使用的
chirpstack v4的提供了docker部署版:https://github.com/chirpstack/chirpstack-docker/tree/v4
docker-compose.yml如下:

version: "3"services:chirpstack:image: chirpstack/chirpstack:4.0.0-test.12command: -c /etc/chirpstackrestart: unless-stoppedvolumes:- ./configuration/chirpstack:/etc/chirpstack- ./lorawan-devices:/opt/lorawan-devicesdepends_on:- postgres- mosquitto- redisports:- 8080:8080chirpstack-gateway-bridge-eu868:image: chirpstack/chirpstack-gateway-bridge:3ports:- 1700:1700/udpvolumes:- ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridgedepends_on: - mosquittopostgres:image: postgres:11-alpinevolumes:- ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d- postgresqldata:/var/lib/postgresql/dataenvironment:- POSTGRES_PASSWORD=rootredis:image: redis:6-alpinevolumes:- redisdata:/datamosquitto:image: eclipse-mosquitto:2ports:- 1883:1883volumes: - ./configuration/eclipse-mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.confvolumes:postgresqldata:redisdata:

组件间的关系

68747470733a2f2f7777772e6368697270737461636b2e696f2f7374617469632f696d672f6772617068732f6172636869746563747572652e646f742e706e67 (1).png
如图所示
LoRa Gateway可通过两种方式与ChirpStack交互,一种是在LoRa Gateway内置的ChirpStack Gateway Bridge转换数据格式并通过MQTT协议与MQTT broker交互,另一种是在服务器上单独部署ChirpStack Gateway Bridge,LoRa Gateway通过UDP协议与ChirpStack Gateway Bridge交互,ChirpStack Gateway Bridge再将转换完的数据与MQTT broker交互。这样子,ChirpStack Network Server即可直接与MQTT broker通过发布订阅消息来间接与LoRa Gateway实现通讯。
ChirpStack Application Server与ChirpStack Network Server之间通过gRPC远程调用协议进行交互,例如接收ChirpStack Network Server收集的上行数据,向ChirpStack Network Server下行payload。
ChirpStack Application Server可与其他外部组件集成,例如与外部MQTT broker集成,将数据发送到该MQTT broker上,通过HTTP的方式将数据通过POST请求发送到用户配置的端点的接口上,将数据写入时序数据库InfluxDB和关系型数据库PostgreSQL等。

更多集成详细可参考:https://www.chirpstack.io/docs/chirpstack/integrations/index.html

部署

这里使用chirpstack v3。
克隆chirpstack v3仓库文件下来

git clone -b v3 https://github.com/chirpstack/chirpstack-docker.git

image.png

cd chirpstack-docker
docker-compose up -d

image.png
查看运行状态,运行中

docker-compose ps

image.png
打开部署服务器的ip 8080端口,进入ChirpStack应用程序服务器Web界面,默认账号密码都是admin
登录后,我们可以看到如下画面:
image.png
首先,添加chirpstack网络服务器,方便我们后续上行接收和下行数据。
由于部署的组件在同一docker网络下,则chirpstack应用服务器可以通过容器名chirpstack-network-server访问到chirpstack网络服务器。
image.png
此时,网络服务器默认使用的频段是EU868,我们可以进入目录文件configuration/chirpstack-network-server/chirpstack-network-server.toml

chirpstack-network-server.toml用于确保网络服务器正确运行并与其他组件协同工作。根据你的需求和所使用的LoRaWAN频段,进行相应的配置调整等。

修改网络服务器接收的频段配置:
例如中国大陆使用的频段为CN_470_510

[postgresql]
dsn="postgres://chirpstack_ns:chirpstack_ns@postgresql/chirpstack_ns?sslmode=disable" #这一部分配置了与PostgreSQL数据库的连接信息,包括数据库连接字符串(DSN),用户名和密码等。ChirpStack Network Server使用PostgreSQL来存储和管理网络服务器的数据。[redis]
url="redis://redis:6379" #这一部分配置了与Redis数据库的连接信息,包括Redis的URL。Redis通常用于缓存和存储临时数据,以提高性能和响应速度。[network_server]
net_id="000000" #这一部分包含网络服务器的一般设置,如网络标识符(Net ID)。Net ID用于标识LoRaWAN网络的唯一标识符。[network_server.band]
name="CN_470_510" #这里指定了LoRaWAN的频段或带宽[network_server.network_settings] #这一部分包含了有关网络设置的信息,如额外的通道配置
#额外的通道(extra_channels)被配置为特定的频率范围和数据速率范围# [[network_server.network_settings.extra_channels]]# frequency=867100000# min_dr=0# max_dr=5# [[network_server.network_settings.extra_channels]]# frequency=867300000# min_dr=0# max_dr=5# [[network_server.network_settings.extra_channels]]# frequency=867500000# min_dr=0# max_dr=5# [[network_server.network_settings.extra_channels]]# frequency=867700000# min_dr=0# max_dr=5# [[network_server.network_settings.extra_channels]]# frequency=867900000# min_dr=0# max_dr=5[network_server.gateway.backend.mqtt]
server="tcp://mosquitto:1883" #这一部分配置了与MQTT(消息队列遥测传输)后端的连接信息。ChirpStack Network Server使用MQTT与网关通信,以接收来自网关的设备数据。[join_server.default]#这里指定了默认的加入服务器(Join Server)的地址。加入服务器用于管理设备的入网和安全性。在这个例子中,加入服务器的地址是一个HTTP地址,用于与ChirpStack应用服务器通信。
server="http://chirpstack-application-server:8003"

ChirpStack Application Server模块功能

Organizations

组织下管理着users、Service-profiles、Device-profiles、Gateways、Application等模块,不同的组织管理着各自的这些模块,说白了就是不同的组织下的应用分类、设备集合、网关等相互隔离,自个管着自个的数据。
例如现在有几家不同的企业承接了A园区的所有智慧厕所,A园区的技术团队掌管着这个ChirpStack服务器,A园区的管理员就可以为这几家不同的企业分别创建他们的Organization,例如有三家企业,分别为A-1、A-2、A-3
image.png
我们切换到不同的企业的Organization下,就可以看到他们所管理的网关、设备、用户等。

Organization users

每个组织可以添加自己的账号,并赋予权限。
image.png

Organization API keys

通过添加这个API key,我们可以在服务器上调用chirpstack应用服务的接口。

Service-profiles

在创建Device-profilesGatewaysApplications时,需要先有Service-profiles。
Service-profiles可以理解为用户和网络服务器之间的一个协同约定,通过Service-profiles可以配置启动的功能,例如启动网络地理定位等,还可以调节允许的数据速率、设备状态请求频率等。我的理解是通过这个配置文件,可以开启/限制来自网络数据的某些功能/特征。

Device-profiles

设备配置文件,定于了接入网络服务器的设备所需的功能和参数,这些元信息由终端设备制造商提供。
主要包括:
MAC version:终端设备支持的LoRaWAN版本
ADR算法:控制设备数据速率
LoRaWAN Regional Parameters revision:设备支持的区域参数规范的修订
MaxEIRP :终端设备支持的最大 EIRP
等等
image.png
我们重点是需要关注以下参数:

JOIN-设备加入网络的方式:
设备需要加入网络服务器,与服务建立通道后才能支持数据的上行下行。
OTAA
设备通过发送入网请求(Join)给网络服务器,该消息包含设备EUI和AppKey等信息来向网络服务器验证自己的身份,验证通过后,网络服务器会为设备分配设备标识符(DevAddr)和应用会话密钥(Application Session Key)等信息用于加密和解密设备和服务器之间的通信,完成后设备与网络服务器之间即建立会话。(AppKey需要在Device配置,接下来会讲到)
image.png
ABP
设备无需入网请求,设备通过和网络服务器之间预设配置会话参数的方式来与网络服务器进行通信。设备在制造商生产和部署前会进行配置好设备地址(DevAddr)、网络会话密钥(NwkSKey)和应用会话密钥(AppSKey)等会话参数为与网络服务器直接建立通信会话(这些DevAddr NwkSKey AppSKey需要在Device配置,接下来会讲到)。
另外需要指定制造商预设的LoRaWAN频段,例如923, 923, 923, 923, 924, 924, 924, 924
image.png

终端的工作模式:
Class A
终端不上报数据,服务器就无法主动进行下行传输,要求应用在终端上传数据的很短时间内进行服务器的下行传输,服务在其他时间进行的下行传输都得等终端的下一次上行。这是最省电的通信方式,也是默认的通信方式,但接收机会最少。
Class B
Class B在Class A基础上添加了时间同步和额外接收端口,设备除了会在按固定的接收端口等待网络服务器的响应外,还会再预定的时间间隔内打开额外的接收端口。
image.png
Class C
基本一直打开着接收端口,只在发送时短暂关闭。意味着设备可以实时接收网络服务器的下行消息,但也会以牺牲功耗为代价。
image.png

Gateways

这个即对应LoRa网关,例如承包园区公厕的企业在现场安装了LoRa网关来建立覆盖感应器通讯网络,那他们可以在Gateways上面创建一个虚拟的网关代表他们在现场对应的网关,并通过gatewayId与网络服务器上报的现场的gateway联系起来,可以检测网关活跃状态、接收/传送数据包数量、位置自发现’帧等信息。
image.png
image.png

Applications

Application可以用来管理不同设备集合,例如承包园区智慧公厕的几家企业,肯定是分别做不同的洗手间工程,那么每个企业(相当于每个Organization)可以在其Applications下创建不同的Application分别代表当前企业承接哪些洗手间,例如A-1企业为他承包的toilets1、toilets2创建了名字为toilets1、toilets2的Application,两个Application分别代表两个洗手间。
image.png

Devices

这个Device即是在平台上模拟的对应现场的设备/感应器。
image.png
创建后,当选择的device-profile为OTAA模式时,需要填写Application Key,设备入网的时候,也会上传一个Application Key,如果设备的Application Key与我们在这里给它配置的Application Key一致的话,则设备会通过信赖,为设备分配相关参数,与网络服务器建立会话。
image.png
当选择的device-profile为ABP模式时,需要添加Device address、Network session key、Application session key,这个设备产商出厂时会写入设备中,需由设备厂商提供,然后往这里配置。
image.png

至此,LoRaWAN服务器ChirpStack服务平台相关配置工作已做完。将在下一章分享LoRaWAN网关接入ChirpStack服务器ChirpStack服务器集成SpringBoot服务形成一个基本的IOT数据链路体系。

这篇关于详解LoRaWAN服务器ChirpStack:连接物联网的关键的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/216227

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

mac中资源库在哪? macOS资源库文件夹详解

《mac中资源库在哪?macOS资源库文件夹详解》经常使用Mac电脑的用户会发现,找不到Mac电脑的资源库,我们怎么打开资源库并使用呢?下面我们就来看看macOS资源库文件夹详解... 在 MACOS 系统中,「资源库」文件夹是用来存放操作系统和 App 设置的核心位置。虽然平时我们很少直接跟它打交道,但了

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字