LoRaWAN介绍19 Server开源
“UNIX很简单,但需要有一定天赋的人才能理解这种简单。”–Dennis Ritchie
LoRa Server是一个开源的LoRaWAN Server。它能完成Server最主要的任务:处理来自1个或多个GW的上行RF数据包,调度最优的GW回复下行RF数据包。
1 整体架构
很明显,LoRa Server基本遵循LoRaWAN对Server的4层架构,它们的对应关系如下。
loraserver <=> NS (Network Server)
lora-app-server <=> AS (Application Server)
lora-controller <=> NC (Network Controller)
application <=> CS (Customer Server)
LoRaWAN规定GW和NS的接口协议是JSON,而本项目使用的是MQTT格式,因此它设计了一个 lora-gateway-bridge 层,它负责JSON和MQTT的转换。
2 实现LoRaWAN功能
2.1 支持类别
Class |
支持 |
说明 |
A |
√ |
完全支持Class-A,NS采用poll方式从AS获取下行RF数据包,这样可以支持最低速率下最大应用数据的发送。 |
B |
– |
不支持 |
C |
– |
不支持 |
2.2 确认报文
支持确认报文(ConfirmedFrame)。如果是下行确认报文,LoRaServer将在队列中缓存该数据包,直到End Node回复ACK为止。
2.3 节点入网
支持ABP(Activation By Personalization)和OTAA(Over The Air Activation)。
ABP:application server提供End Node的Addr和Key给LoRa Server;
OTAA:LoRa Server回复join-accept给End Node,并通知application server.
2.4 ADR
支持ADR(Adaptive Data Rate,速率自适应),这需要End Nodes设置ADR interval和margin。
ADR interval:设置End Nodes发送多少个上行RF数据包后,重新计算速率和发射功率。
margin:调整ADR的无线信号强度余地,默认推荐值为5dB。
2.5 NC接口
提供LoRa Server管理无线网络的能力,它通过MAC命令获取或设置End Nodes的网络参数和射频性能。
2.6 RX窗口
支持调整RX1和RX2窗口的空中速率和延时。
2.7 帧计数器
ABP入网模式的End Nodes有一个问题,一旦设备重启后,FCnt的值将归零;NS接收该报文后,会发现FCnt小于或等于上一个报文,将会拒绝接收该报文。LoRa Server解决了这个问题,它放宽了对FCnt的检测。
2.8 支持频段
目前支持的地区和频段包括:
地区 |
AS |
AU |
CN |
CN |
EU |
EU |
KR |
RU |
US |
起 |
923 |
915 |
470 |
779 |
433 |
863 |
920 |
864 |
902 |
止 |
928 |
510 |
787 |
780 |
923 |
869 |
928 |
3 环境与配置
现代服务器的环境依赖较多,特别提出的是,因为免费和UNIX文化,绝大部分服务器都部署在UNIX / Linux机器上,而非我们常见的Window。
LoRa Server的环境如下:
语言=Go
系统=Linux,已经在 Debian / Ubuntu上测试和运行;
中间件=MQTT broker、Redis datastore;
软件=LoRa Server,需要编译和运营。
配置上述环境是一件“繁琐”的工作,为此,该项目强烈推荐使用Docker,打包上述应用和依赖包,生成在不同Linux平台上可移植的容器件。
另外,applicationserver需要用户自行实现,它与AS的API接口为“api/as/as.proto”。所有API都由基于Go语言的gRPC框架实现,包括:
api/ns/ns.proto: network-server interface
api/as/as.proto: application-server interface
api/nc/nc.proto: network-controller interface
用户可以在启动loraserver时,添加参数来取得不同的配置,这包括:
NetID、Band、Dwell Time、Repeater Compatibility、Redis Connection String。
您的留言或需求: