LoRa和LoRaWAN区别
- LoRa contains only the link layer protocol and is perfect to be used in P2P communications between nodes. LoRa modules are a little cheaper that the LoRaWAN ones.
- LoRaWAN includes the network layer too so it is possible to send the information to any Base Station already connected to a Cloud platform. LoRaWAN modules may work in different frequencies by just connecting the right antenna to its socket.
LoRaWan低功耗
LoRa实现低功耗,对设备规定了三类通讯方式。
LoRaWAN Classes:
- Class A 双向终端设备:支持Class A的终端设备在双向传输中每一次终端设备uplink传输后会有两个短的downlink接收窗口。这个传输时间间隙通过终端设备基于自身传输需要一个随机时间基础上微小的变化确定(ALOHA型协议)。Class A是为超低功耗终端设备系统只需要终端发送了一次uplink传输后服务器马上downlink传输的应用。来自服务器的任何downlink通信必须等到下一次计划的uplink。
- Class B 绑定接收时隙的双向终端设备:支持 Class B的终端设备拥有更多的接收时隙。在Class A随机接收窗口上增加,Class B设备在计划时间里打开额外的接收窗口。来自gateway的指令让终端设备在计划时间里打开接收窗口接收时间同步信标(time synchronized Beacon)。这样能让服务器知道终端设备在监听中。
- Class C 拥有最大接收时隙的双向终端设备:支持Class C的终端设备有一个几乎一直开启接收的窗口,只有传输中的时候才关闭。对比Class A或Class B终端设备将使用更多的电量来运行Class C,但是服务器到终端设备的通信Class C提供最低的延迟。
注意:更高的类别支持低类别的所有功能。所有支持LoRaWAN的终端设备都必须支持Class A。
LoRaWAN的通信安全
一般通过对数据进行加密来保证通信安全,而LoRaWAN提供了多层数据加密。
如下图虽然MAC Layer包含了Application Layer的数据,但MAC Layer和Application Layer使用独立的密钥分别加密,即使MAC Layer可以看到Application Layer的数据,看到的也是加密后的数据。
LoRaWAN中用的密钥主要有:
NwkKey/(NwkSEncKey/ SNwkSIntKey/ FNwkSIntKey)
节点根据NwkKey生成(NwkSEncKey/ SNwkSIntKey/ FNwkSIntKey),LoRaWAN使用(NwkSEncKey/ SNwkSIntKey/ FNwkSIntKey)加密/解密MAC层(MAC Layer)的数据。
- FNwkSIntKey:节点上行数据时,节点使用FNwkSIntKey计算上行数据的MIC校验码;
- SNwkSIntKey:节点收到云端下行的数据后,节点使用SNwkSIntKey验证下行数据的完整性
- NwkSEncKey:用来加密/解密 MAC commands
AppKey/AppSKey
节点根据AppKey生成AppSKey,并使用AppSKey加密/解密应用层数据
LoRaWAN节点的实现
LoRaWAN节点的实现请参考Semtech提供的示例代码:https://github.com/Lora-net/LoRaMac-node
LoRaWAN网关的实现
LoRaWAN网关和LoRaWAN节点的通信
网关需要接收节点数据,以及发送数据给节点,网关通过操作网关上的LoRa芯片实现,示例代码见 https://github.com/Lora-net/lora_gateway
LoRaWAN网关和LoRaWAN Server的通信
网关需要把节点数据上报给云端的LoRaWAN Server,以及接收云端下行给节点的数据。
网关作为节点和云端Server的转发中转站,网关不解析节点数据,也没有业务逻辑,网关起到透传的作用,所以LoRaWAN标准只规定了节点和云端Server之间的通信协议,并没有规定网关和云端Server之间的通信协议。但是网关和云端Server要通信,还是要有通信协议的,目前常用的通信协议是semtech公司定制的packet_forwarder( https://github.com/Lora-net/packet_forwarder/blob/master/PROTOCOL.TXT)。
packet_forwarder使用UDP通信,网关中需要提前配置云端的UDP Server地址和端口。
- 网关上报数据给云端:网关发送PUSH_DATA命令上报数据给云端
- 网关接收云端下行的数据:网发发送PULL_DATA询问云端是否有下行数据;由于UDP是无连接的,云端LoRaWAN Server只有在收到网关PULL_DATA命令时才可以知晓网关IP,但是公网中的NAT会很快淘汰网关的IP,所以网关必须定时发送PULL_DATA,否则云端无法下行数据给网关。
基于packet_forwarder的使用示例见 https://github.com/Lora-net/packet_forwarder 。
开源的LoraWan Server
当前开源的LoraWan Server主要有三个:
其中chirpStack和ttn是Golang实现,lorawan-server是Erlang实现。
ChirpStack(https://www.chirpstack.io/)是一个开源的LoRaWAN Server实现,基于非常宽松的MIT协议,ChirpStack之前叫loraserver(https://www.loraserver.io/),作者说是LoRa被Semtech注册为商标了,所以在2019年11月份改名为ChirpStack。
LoRa Network中使用到的ID识别信息
- DevEUI - 64 bit end-device identifier, EUI-64 (unique)
- DevAddr - 32 bit device address (non-unique)
- AppEUI - 64 bit application identifier, EUI-64 (unique)
- GatewayEUI - 64 bit gateway identifier, EUI-64 (unique)
入网方式
Over-the-Air Activation (OTAA)
空中激活(OTAA)是与The Things Network连接的首选且最安全的方式。 设备通过网络执行连接过程,在此过程中分配了动态的DevAddr,并与设备协商了安全密钥。
Activation by Personalization (ABP)
在某些情况下,您可能需要在设备中对DevAddr和安全密钥进行硬编码。 这意味着通过个性化(ABP)激活设备。 该策略可能看起来更简单,因为您跳过了加入过程,但是它具有一些与安全性有关的缺点。
连接到TTN
在TTN中注册LoRa网关
在TTN中创建并激活帐户,在 console 页面中选择“Gateway”。
如下图所示填写HT-M01信息并完成添加。
- Gateway EUI -- HT-M01网关的唯一ID;
- I'm using the legacy packet forwarder -- 必须选择;
- Frequency Plan -- 必须匹配HT-M01中的LoRa频段配置(
global_conf.json
); - Router -- 必须使用TTN系统分配的默认Router.
连接TTN
在HT-M01网关中,需要配置网关ID、服务器地址和端口。
不同区域的路由器地址:
https://www.thethingsnetwork.org/docs/gateways/packet-forwarder/semtech-udp.html#router-addresses
Linux(树莓派)中的HT-M01
在global_conf.json
中确定参数:
nano /home/pi/lora/packet_forwarder/lora_pkt_fwd/global_conf.json
配置网关ID、服务器地址、端口。在global_conf.json
的末尾,进行以下更改:
“gateway_ID”: “XXXXXXXXXXXXXXXX”, /*Your gateway ID, 16 characters*/ “server_address”: “router.cn.thethings.network”, /*The router addresses need matach your region*/ “serv_port_up”: 1700, “serv_port_down”: 1700,
ctrl + O
保存, ctrl + X
退出,在树莓派中重启服务:
sudo systemctl restart lrgateway
Windows中的HT-M01
勾选Use a cloud network
,填写正确的 server address
, 保持 Port
默认值1700
点击OK
, 然后点击 Start Packet Forwarder
。
查看网关状态,它正在运行:
连接到ChirpStack服务器
ChirpStack 是目前最流行的LoRa服务器开源项目,广泛应用于许多领域,也是私有LoRa服务器的最佳选择。
- ChirpStack 安装指南: https://www.chirpstack.io/overview/
- ChirpStack 支持论坛: https://forum.chirpstack.io/
ChirpStack网桥
有件事需要注意! ChirpStack需要一个名为Gateway Bridge
的特殊服务,它将LoRa® Packet Forwarder协议转换为ChirpStack网络服务器通用数据格式(JSON和Protobuf)。
Gateway Bridge
服务可以在树莓派或ChirpStack服务器上运行。我们建议安装在树莓派。
安装LoRa-gateway-bridge:
wget https://artifacts.loraserver.io/downloads/lora-gateway-bridge/lora-gatewaybridge_2.5.1_armhf.deb #下载支持Raspberry Pi Zero_W版本的LoRa-gateway-bridge软件包 dpkg -i lora-gateway-bridge_2.5.1_armhf.deb #安装LoRa-gateway-bridge sudo systemctl start lora-gateway-bridge #启动LoRa-gateway-bridge sudo systemctl enable lora-gateway-bridge #将LoRa-gateway-bridge设置为开机启动
安装 ChirpStack Gateway Bridge可以参考 https://www.chirpstack.io/gateway-bridge/install/debian
启动 ChirpStack Gateway Bridge:
sudo systemctl start chirpstack-gateway-bridge
在ChirpStack中注册LoRa网关
如下图所示填写HT-M01信息并完成添加。
- Gateway ID -- HT-M01网关的唯一ID。
连接ChirpStack服务器
在HT-M01网关中,需要配置网关ID、服务器地址和端口。
Linux(树莓派)中的HT-M01
在global_conf.json
中确定参数:
nano /home/pi/lora/packet_forwarder/lora_pkt_fwd/global_conf.json
配置网关ID、服务器地址、端口。在global_conf.json
的末尾,进行以下更改:
“gateway_ID”: “XXXXXXXXXXXXXXXX”, /*Your gateway ID, 16 characters*/ “server_address”: “router.eu.thethings.network”, /*The router addresses need matach your region*/ “serv_port_up”: 1700, “serv_port_down”: 1700,
ctrl + O
保存, ctrl + X
退出,在树莓派中重启服务:
sudo systemctl restart lrgateway
Windows中的HT-M01
填写正确的ID
、 server address
,保持 Port
默认值1700
点击OK
, 然后点击 Start Packet Forwarder
。
查看网关状态,它正在运行。