赞
踩
LoRaWAN(长程广域网,Long Range Wide Area Network)是一种低功耗、广域覆盖的无线通信协议,专为物联网(IoT)应用而设计。它采用低功耗、长距离通信技术,使得设备可以在低功耗条件下远距离传输数据,适用于各种用例,如智能城市、农业、工业自动化、环境监测等。它基于LoRa调制技术来实现的。
这里稍微介绍下概念,由于本文主要介绍LoRaWan服务器,LoRaWan协议偏向设备传输层面,下篇文章讲到LoRaWan网关接入LoRaWan服务器的时候会再讲解LoRaWan协议。
ChirpStack是一个开源的物联网(IoT)网络服务器,它提供了LoRaWAN协议的网络服务器功能。
具体来说,ChirpStack是一个LoRaWAN网络服务器,用于管理和控制连接到LoRaWAN网络的终端设备、网关和应用程序。它允许用户建立、操作和维护自己的LoRaWAN网络,以支持各种物联网应用,如智能城市、农业、工业自动化和环境监测等。
后面随着ChirpStack体系搭建起来,会讲解诸如应用创建、网关注册、设备注册、安全认证等各项功能,你便能对ChirpStack的作用有更深刻的理解。
当前开源的LoRaWan Server主要有:
其中chirpStack
和ttn
是Golang实现,lorawan-server
是Erlang实现。
ChirpStack体系包括chirpstack-network-server
、chirpstack-application-server
、chirpstack-gateway-bridge
、postgresql
、redis
、mosquitto
上面是ChirpStack v3的组件,到ChirpStack v4已经将chirpstack-network-server
和chirpstack-application-server
合并起来变成chirpstack
ChirpStack网络服务器是LoRaWAN网络中的核心组件,负责处理网关接收到的设备的上行链路数据以及调度下行链路数据,即处理设备的注册和数据传输。它是整个LoRaWAN网络的中央协调器。
https://github.com/brocaar/chirpstack-network-server
ChirpStack应用服务器是用于管理LoRaWAN应用的组件。它负责处理设备数据、解码Payload、处理应用逻辑、提供API以与应用程序集成(支持通过Web界面或API与应用服务器交互)等。
https://github.com/brocaar/chirpstack-application-server
ChirpStack网关桥接器是用于将网关传输的数据转发到ChirpStack网络服务器的组件,可以将LoRa网关传输来的LoRa数据包转发器协议转换成ChirpStack网络服务器通用的数据格式(JSON和Protobuf)。它充当网关和网络服务器之间的中间件。
LoRa网关的数据是加密的,我们在LoRa gateway log里不能具体看到数据样式,此时ChirpStack网关桥接器就可以将这种数据包转换成ChirpStack识别的数据格式,这也有利于用户的可观性。
chirpstack-gateway-bridge有两种部署方式,一种是内置在网关内,另一种是ChirpStack网络服务一样和部署在服务器上。
https://www.chirpstack.io/gateway-bridge/
ChirpStack使用了PostgreSQL数据库来存储ChirpStack的各种数据,包括设备注册信息、设备数据等。
用于存储ChirpStack的临时数据和缓存信息。
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:3 volumes: - ./configuration/chirpstack-network-server:/etc/chirpstack-network-server depends_on: - postgresql - mosquitto chirpstack-application-server: image: chirpstack/chirpstack-application-server:3 ports: - 8080:8080 #访问该端口即可访问到chirpstack的web界面 volumes: - ./configuration/chirpstack-application-server:/etc/chirpstack-application-server depends_on: - chirpstack-network-server chirpstack-gateway-bridge: image: chirpstack/chirpstack-gateway-bridge:3 ports: - 1700:1700/udp #将容器内的1700/udp端口映射到主机的1700/udp端口,用于接收来自LoRaWAN网关的数据。 volumes: - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge depends_on: - mosquitto postgresql: image: postgres:9.6-alpine environment: - POSTGRES_PASSWORD=root volumes: - ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d - postgresqldata:/var/lib/postgresql/data redis: image: redis:5-alpine volumes: - redisdata:/data mosquitto: image: eclipse-mosquitto:2 ports: - 1883:1883 #将容器内的1883端口映射到主机的1883端口,用于MQTT通信。 volumes: - ./configuration/eclipse-mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf volumes: postgresqldata: redisdata:
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 v3
https://github.com/chirpstack/chirpstack-gateway-bridge
同chirpstack v3
同chirpstack v3
同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.12 command: -c /etc/chirpstack restart: unless-stopped volumes: - ./configuration/chirpstack:/etc/chirpstack - ./lorawan-devices:/opt/lorawan-devices depends_on: - postgres - mosquitto - redis ports: - 8080:8080 chirpstack-gateway-bridge-eu868: image: chirpstack/chirpstack-gateway-bridge:3 ports: - 1700:1700/udp volumes: - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge depends_on: - mosquitto postgres: image: postgres:11-alpine volumes: - ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d - postgresqldata:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=root redis: image: redis:6-alpine volumes: - redisdata:/data mosquitto: image: eclipse-mosquitto:2 ports: - 1883:1883 volumes: - ./configuration/eclipse-mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf volumes: postgresqldata: redisdata:
如图所示
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
cd chirpstack-docker
docker-compose up -d
查看运行状态,运行中
docker-compose ps
打开部署服务器的ip 8080端口,进入ChirpStack应用程序服务器Web界面,默认账号密码都是admin
登录后,我们可以看到如下画面:
首先,添加chirpstack网络服务器,方便我们后续上行接收和下行数据。
由于部署的组件在同一docker网络下,则chirpstack应用服务器可以通过容器名chirpstack-network-server
访问到chirpstack网络服务器。
此时,网络服务器默认使用的频段是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"
组织下管理着users、Service-profiles、Device-profiles、Gateways、Application等模块,不同的组织管理着各自的这些模块,说白了就是不同的组织下的应用分类、设备集合、网关等相互隔离,自个管着自个的数据。
例如现在有几家不同的企业承接了A园区的所有智慧厕所,A园区的技术团队掌管着这个ChirpStack服务器,A园区的管理员就可以为这几家不同的企业分别创建他们的Organization,例如有三家企业,分别为A-1、A-2、A-3
我们切换到不同的企业的Organization下,就可以看到他们所管理的网关、设备、用户等。
每个组织可以添加自己的账号,并赋予权限。
通过添加这个API key,我们可以在服务器上调用chirpstack应用服务的接口。
在创建Device-profiles
、Gateways
、Applications
时,需要先有Service-profiles。
Service-profiles可以理解为用户和网络服务器之间的一个协同约定,通过Service-profiles可以配置启动的功能,例如启动网络地理定位等,还可以调节允许的数据速率、设备状态请求频率等。我的理解是通过这个配置文件,可以开启/限制来自网络数据的某些功能/特征。
设备配置文件,定于了接入网络服务器的设备所需的功能和参数,这些元信息由终端设备制造商提供。
主要包括:
MAC version:终端设备支持的LoRaWAN版本
ADR算法:控制设备数据速率
LoRaWAN Regional Parameters revision:设备支持的区域参数规范的修订
MaxEIRP :终端设备支持的最大 EIRP
等等
我们重点是需要关注以下参数:
JOIN-设备加入网络的方式:
设备需要加入网络服务器,与服务建立通道后才能支持数据的上行下行。
OTAA
设备通过发送入网请求(Join)给网络服务器,该消息包含设备EUI和AppKey等信息来向网络服务器验证自己的身份,验证通过后,网络服务器会为设备分配设备标识符(DevAddr)和应用会话密钥(Application Session Key)等信息用于加密和解密设备和服务器之间的通信,完成后设备与网络服务器之间即建立会话。(AppKey需要在Device配置,接下来会讲到)
ABP
设备无需入网请求,设备通过和网络服务器之间预设配置会话参数的方式来与网络服务器进行通信。设备在制造商生产和部署前会进行配置好设备地址(DevAddr)、网络会话密钥(NwkSKey)和应用会话密钥(AppSKey)等会话参数为与网络服务器直接建立通信会话(这些DevAddr NwkSKey AppSKey需要在Device配置,接下来会讲到)。
另外需要指定制造商预设的LoRaWAN频段,例如923, 923, 923, 923, 924, 924, 924, 924
终端的工作模式:
Class A
终端不上报数据,服务器就无法主动进行下行传输,要求应用在终端上传数据的很短时间内进行服务器的下行传输,服务在其他时间进行的下行传输都得等终端的下一次上行。这是最省电的通信方式,也是默认的通信方式,但接收机会最少。
Class B
Class B在Class A基础上添加了时间同步和额外接收端口,设备除了会在按固定的接收端口等待网络服务器的响应外,还会再预定的时间间隔内打开额外的接收端口。
Class C
基本一直打开着接收端口,只在发送时短暂关闭。意味着设备可以实时接收网络服务器的下行消息,但也会以牺牲功耗为代价。
这个即对应LoRa网关,例如承包园区公厕的企业在现场安装了LoRa网关来建立覆盖感应器通讯网络,那他们可以在Gateways上面创建一个虚拟的网关代表他们在现场对应的网关,并通过gatewayId与网络服务器上报的现场的gateway联系起来,可以检测网关活跃状态、接收/传送数据包数量、位置自发现’帧等信息。
Application可以用来管理不同设备集合,例如承包园区智慧公厕的几家企业,肯定是分别做不同的洗手间工程,那么每个企业(相当于每个Organization)可以在其Applications下创建不同的Application分别代表当前企业承接哪些洗手间,例如A-1企业为他承包的toilets1、toilets2创建了名字为toilets1、toilets2的Application,两个Application分别代表两个洗手间。
这个Device即是在平台上模拟的对应现场的设备/感应器。
创建后,当选择的device-profile为OTAA模式时,需要填写Application Key,设备入网的时候,也会上传一个Application Key,如果设备的Application Key与我们在这里给它配置的Application Key一致的话,则设备会通过信赖,为设备分配相关参数,与网络服务器建立会话。
当选择的device-profile为ABP模式时,需要添加Device address、Network session key、Application session key,这个设备产商出厂时会写入设备中,需由设备厂商提供,然后往这里配置。
至此,LoRaWAN服务器ChirpStack服务平台相关配置工作已做完。将在下一章分享LoRaWAN网关接入ChirpStack服务器
、ChirpStack服务器集成SpringBoot服务
形成一个基本的IOT数据链路体系。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。