LoRa Basics Station 是 LoRa® 数据包转发器的实现。LoRa 数据包转发器是在基于 LoRa 的网关(带或不带 GPS)主机上运行的程序。
它可以通过安全的 IP 链路将集中器(上行链路)接收的射频数据包转发到 LoRaWAN® 网络服务器 (LNS),也可以通过相同的安全 IP 将 LNS(下行链路)发送的射频数据包传输到一个或多个设备。另外,它可以发送用于网络内时间协调器件的信标信号。这些信标可以在整个网络上与 GPS 同步传输。
#为什么选择 LoRa Basics Station?
在 LoRaWAN 网络中,网关是 LoRaWAN 网络服务器 (LNS) 的物理层 (PHY) 接口。它侦听无线电频谱的某些部分,使用 LoRa 调制从传感器发出的信号中解码出有效的 LoRaWAN 数据包,并将其转发给 LNS。同时也将 LoRaWAN 数据包从 LNS 向下传输到传感器,作为 LoRa 调制信号。
LoRa Basics Station 是 LoRaWAN 网关软件的实现,在处理数据包流、管理频谱接入和 LNS 回程连接等方面提供了核心功能。为了在大量网关上安全、可靠和高效地完成这些任务,Station 定义了两个后端协议:
- LNS 协议是主要数据层,通过安全的 WebSocket 提供低延迟的双向通信通道。此协议涵盖了负载平衡和集中式配置管理的各个方面。
说明:
- 文档和协议定义可参见链接。
- 网关软件实现可参见链接。
#LoRa Basics Station 可以做什么?
LoRa Basics Station 可完成与 LoRaWAN A、B 和 C 级的基本数据包转发功能有关的所有任务。此外,Station 还具有多种功能,使其特别适用于重视集中配置管理和远程检查功能的大规模网关部署。Station 的架构使得它可以轻松接入不同平台,甚至嵌入式系统。CUPS 和 LNS 协议的基本功能是可扩展的,并助力编排更复杂的使用场景,包括配置管理、时间保持、远程检查和干预等。
- 支持常见的无线电硬件参考设计
v1.5(单个 sx1301,通过 SPI + FPGA,用于 LBT)
v2(多个 sx1301s,通过 SPI + DSP,用于精细的时间戳)
Picocell(与 v1.5 类似,但通过 USB 并降低了功耗 – USB 加密狗)
Corecell(单个 sx1302,通过 SPI)
- 精益架构
资源节约型设计 - 适用于嵌入式应用
最小的第三方依赖性,以实现最佳的可移植性
通过丰富的运行时参数集,可实现低等级的微调
- 全面支持 Linux 主机
守护进程模式
灵活记录、日志文件轮替和裁切
主机/从机设置,用于多无线电操作
- 安全的防火墙友好型 TCP/IP 通信
无需 ingress 连接
通过 TLS 证书或 HTTP 令牌标头进行身份验证
- LNS 协议
集中式无线电参数管理
远程系统命令和可选的交互式 shell
灵活的健康和状态报告机制
GPS 时间推断
时间传递(方便室内 B 级用例)
- CUPS 协议
具有回滚功能的连接凭据事务性更新
具有 ECDSA 签名的安全固件更新交付
#LoRa Basics Station 是如何构建的?
Figure 1: LoRa Basics Station 系统概述
编译的 Station 二进制文件是在网关主机平台操作系统的用户空间中执行的应用。上图说明了 Station 如何与其他系统组件进行交互。
在左侧,是网关无线电硬件及其与网关主机平台的接口,平台通常通过诸如 SPI 之类的串行接口进行连接。Station 建立在硬件抽象层 (HAL) 库的基础上,该库由 Semtech 提供,适用于不同网关无线电硬件参考设计,以与无线电硬件进行交互。
在右侧,是 Station 期望的后端服务及其相应的协议 LNS 和 CUPS。与这些服务的连接通常是通过基于 IP 的网络建立的。这使得可以在广泛用于万维网且已经验证的协议栈上构建 CUPS 和 LNS 协议,即用于传输的 HTTP 和 WebSockets 以及用于安全的 TLS。
中心框是在操作系统 (OS) 内运行 Station 进程的网关主机平台。该框分为 Station 的高级模块化组件,为不同系统组件提供不同接口:
- RAL:适用于不同 HAL 的无线电抽象层
- SYS:适用于不同操作系统(Linux、FreeRTOS 等)的系统抽象层
- NET:建立在 mbedTLS 之上的网络抽象层
以下是LoRa Basics Station 软件架构更详细的视图。
Figure 2: LoRa Basics Station 软件架构
在上图中:RAL、SYS 和 mbedTLS 模块组成硬件指定适配层,为系统组件提供适用于可移植核心实现的统一接口。在编译时,可以选择 RAL 和 SYS 层,并将结果对象与 mbedTLS 库静态链接。
可移植核心是围绕异步协作多任务运行时 (AIO) 构建的无依赖 C 模块,包含 Station 的所有核心功能:LoRa 数据包处理、数据包缓冲、下行链路队列管理、频谱接入管理、协议解析 (JSON)、协议状态逻辑 (CUPS/LNS)、时间同步等。
此架构可实现:
易于移植:将 Station 移植到新的 HAL 的工作仅限于对 RAL 模块的更改。将 Station 移植到新的主机平台上的工作仅限于对 SYS 模块的更改。
易于测试:可以通过使用组件替换 HAL 块来完成与硬件无关的测试,该组件可通过远程过程调用 (RPC) 将对 RAL 的 HAL API 调用转换为测试工具。LoRa Basics Station 回归测试使用了这种方法。
Station 构建环境使我们能够设置编译时选项,从而生成适用于目标环境的理想 Station 可执行文件。这些选项在 setup.gmk 中被归为高级标识符平台和变体。在构建过程中,会自动提取、编译和链接依赖项。
#LoRa Basics Station 如何工作?
#LNS 协议
假设通过 tc.uri 对 LNS 连接进行了正确的配置,Station 将与其连接,并在一开始便将自己通告给服务端点。服务端点以最终的 WebSocket 连接端点响应,且 Station 使用相同的凭据立即进行连接。在向最终连接端点通告自己之后,Station 会收到一个来自 LNS 的配置对象,至少包含频率计划和有网关在其中运行的区域环境。
在应用了频率计划并启动了无线电之后,网关处于稳定状态,在此期间它可以交换许多消息。每当无线电对有效的 LoRaWAN 帧进行解调时,该帧将直接转发到 LNS。另外,LNS 可以通过网关将下行链路数据传输到终端设备。如果成功发送了下行链路数据,LNS 将收到确认。如果 LNS 连接意外终止,则所有接收到的上行链路数据将缓冲,直到重新建立连接。
#CUPS 协议
CUPS 协议是 Station 内的一个独立引擎。它使用带有 JSON 编码主体的 HTTP POST 向 CUPS 端点声明其当前的配置状态。CUPS 服务器使用此信息来决定是否需要更新,并通过包含新凭据集的八位字节流做出响应(适用于 CUPS 端点或 LNS 端点,或者二者皆适用)。空响应表示无需更新。
在该响应中,CUPS 可以选择附加已签署的可执行文件 blob。该可执行文件的格式与协议本身无关,但应与网关主机平台能够应用的格式匹配。对于嵌入式主机平台或可执行文件脚本,它可以是完整的固件映像;对于基于 Linux 的主机系统,它可以是自动提取的存档文件。为了检查可执行文件的签名,可以通过将多个公共 ECDSA 签名密钥放入 sig-{0,1,2,…}.key 文件中进行配置。
CUPS 并非专为全面的网关管理器设计打造。相反,其底层基元为最基本的管理任务提供了一种简单统一的方法:凭据管理和安全的远程固件更新。
#LoRa Basics Station 的安全性如何?
为了确保基于 IP 的后端连接的安全性,LoRa Basics Station 依赖于万维网中日常使用的知名概念。针对给定连接的身份验证模式取决于是否存在连接定义文件 {tc,cups}.{uri,trust,key,crt} 及其内容。
#无身份验证
当服务端点 URL 专门声明纯文本连接时,不使用身份验证:
- .uri:ws://...(适用于 tc.uri)或 http://...(适用于 cups.uri)
如果安全性已经由操作系统通过 IPsec 在网络层上实现,或者如果安全性通过防火墙和网络隔离建立(所有主机都可信),则这很有用。如果通过因特网建立的网关连接没有 IPsec,应始终使用以下身份验证方法之一。
#服务器和客户端身份验证
如果服务端点 URL 被声明为安全连接,则启用双向认证:
- .uri:wss://...(适用于 tc.uri)或 https://...(适用于 cups.uri)
通过证书颁发机构 (CA) 检查服务器的真实性。CA 证书必须在 *.trust 文件中提供。
- .trust:服务器 CA 的可信证书(PEM 或 DER 编码的 X509 证书)
Stations 根据是否存在 *.key 和 *.crt 文件提供两种用于建立客户端身份验证的选项:
客户端令牌身份认证 [*.key]
- .key:包含服务器客户端身份验证信息的有效 HTTP 标头(例如,身份验证:...rn)
客户端证书身份验证 [*.crt, *.key]
- .crt:客户端证书(PEM 或 DER 编码的 X509 证书)
- .key:私钥(PEM 或 DER 编码的 x509 密钥)
提示:调试网关 TLS 设置的一个好方法是通过将环境变量 STATION_TLSDBG 设置在详细级别 1(最低)和 4(最高)之间执行 Station。
#如何以Basics Station模式将网关连接至TTNv3?
#登录TTN v3
1、登录TTN网站。
Figure 4: 登录TTN网站
2、输入用户名以及登录密码,单击“Submit”。若未注册账号,单击“Register”,根据提示注册TTN账号。
#注册网关
1、单击“Register a gateway”。
Figure 5: 注册新网关
2、填写参数,单击“Create gateway”。
Figure 6: 配置参数
#生成Token
TTNv3支持TLS服务器身份验证和客户端令牌,这需要信任文件和密钥文件来配置网关以将其成功连接到网络。
1、在“Gateways”页签中,单击已注册的网关,进入网关页面。
Figure 7: 进入已注册网关
2、在左侧导航树中,单击“API keys”。
Figure 8: 进入API keys
3、单击“Add API key”。
- Name:输入密钥名称
- Rights:选择“Grant individual rights”。在多选选项中,选中“ Link as Gateway to a Gateway Server for traffic exchange, i.e. write uplink and read downlink”。
Figure 9: 配置API keys参数
4、单击“Create API key”。将会弹出以下对话框。
Figure 10: 保存API keys
注意:切记将密钥复制保存至.txt文件中,对话框关闭后将无法查看或复制密钥信息。
5、密钥复制保存后,单击“I have copied the key”。
#配置网关
1、登录网关Web管理平台。具体操作可参考对应网关的《快速入门指南》手册。
2、在“LoRa Network > Network Settings ”的“LoRa Network Settings ”页面中,配置“Mode”选项为“Basics Station”。
Figure 11: 切换模式
3、单击“Switch mode”,模式切换成功后,“Basics Station Configuration”参数配置页面将会显示。连接网关至TTNv3,必须配置以下参数:
- Server:选择LNS Server。
- URI:The Things Stack服务器地址。该示例中,将网关连接至“European”集群,所以链接为
- wss://eu1.cloud.thethings.network。
- Port:LNS Server使用端口为8887,填入8887。
- Authentication Mode:选择“TLS Server Authentication And Client Token”。
- trust:使用“Let's Encrypt ISRG ROOT X1”信任证书。查看和下载证书。
- token:此处为生成的Token。输入时,以“Authorization: ”开始。如:Authorization: YOUR_API_KEY
注意:请注意”Authorization:“ 与“YOUR_API_KEY”之间存在一个空格。
Figure 12: 配置网关参数
4、单击“Save & Apply”,保存设置。在TTN界面可以看到网关以“Basics Station”模式连接至TTNv3。
Figure 13: 在TTNv3中网关已在线