General Properties

本页记录在 MikroTik RouterOS 上设置 LoRaWAN 网关的配置设置,包括天线增益、信道计划、服务器连接和流量转发规则。它解释了如何启用网关、选择频段、配置 LBT 协议,以及通过 /iot/lora 和 /iot/lora/channels 等子菜单管理信道。

通用属性

每个带有支持 LTE 调制解调器的 miniPCI-e 插槽的 RouterBOARD 都可以通过安装 R11e-LR8 或 R11e-LR9 卡用作 LoRaWAN 网关。同时支持 UDP 和 LNS(从 v7.12rc1 测试版本开始)协议。

信息

要使用 LoRa,应安装 IoT 软件包。您可以在 download 页面的 extra packages 归档中找到适用于您设备架构的软件包。

重要: 从 v7.11(稳定版)开始,LoRa 功能被移入 IoT package,可在 download 页面的 extra packages 下获取。单独的 Lora 软件包仍可下载。

使用 IoT 软件包时,LoRa 功能将移至 /iot/lora 子菜单。使用 LoRa 软件包时,LoRa 功能可通过 /lora 子菜单使用。

LoRa 软件包不再是必需的,仅为兼容性原因而保留。

注意: Note:RouterOS 不支持第三方 LoRaWAN 网关卡。

属性

此菜单用于将设置应用到 LoRa 接口。

子菜单: /iot/lora

PropertyDescription
antenna-gain (integer [-128..127]; Default: 0)天线增益,单位为 dBi。此值应等于 setup-antenna-gain 减去 cable-loss。使用 6.5 dBi 天线时,应配置的值为 6.5(不考虑线缆损耗)。网关的输出功率由服务器决定。网关将通过从 server_value(下行消息中接收到的值)中减去 antenna-gain 设置来计算其实际输出功率。
channel-plan (2.4-ghz | as-923 | as-923-2 | as-923-3 | as-923-4 | au-915 | au-915-1 | au-915-2 | custom | eu-868 | in-865 | kr-920 | ru-864 | ru-864-mid | us-915 | us-915-1 | us-915-2 | us-915-3 | us-915-4 | us-915-5 | us-915-6 | us-915-7 | us-915-8; Default: eu-868)各区域的频率计划。
disabled (yes | no; Default: yes)LoRaWAN 网关是否被禁用。
forward (crc-validation | dev-addr-validation | proprietary-traffic; Default: crc-validation)定义应将何种数据包转发到 Network server:crc-validation - 转发具有正确 CRC 的有效数据包。dev-addr-validation - 检查数据包的 DevAddr 是否对应于 NetID,如果不对应,则丢弃该数据包。发生以下顺序:1) 从接收到的 LoRa 数据包中"获取" Dev. Addr 值;2) 将 Dev. Addr 与"有效" Net ID 列表进行"比较";3) 如果 Dev. Addr 没有对应的 Net ID,则不转发该数据包;4) 如果 Net ID 有效、Dev. Addr 范围有效,则转发该数据包。proprietary-traffic - 检查 LoRa 数据包的内容,如果帧的 "type" 为 "proprietary",则不转发该数据包。
gateway-id(string)Gateway ID 或 Gateway EUI 用于向服务器注册网关。
lbt-enabled (yes | no; Default: no)网关是否应使用 LBT(Listen Before Talk,先听后说)协议。
listen-time (integer [0us..4294967295us]; Default: 5000us)在 TX 之前跟踪 RSSI 的时间(以微秒为单位)(当 lbt-enabled=yes 时使用)。
name (string; Default: )LoRaWAN 网关的名称。
network (private | public; Default: public)通信时是否应使用 sync word(network=private)或不使用(network=public)。
rssi-threshold (integer [-32,768 .. 32,767]; Default: -65dBm)用于确定转发器是否可以使用特定信道进行通信的 RSSI 值。如果 RSSI 值低于 rssi-threshold,则可以使用该信道(当 lbt-enabled=yes 时使用)。
servers (list of string; Default: )来自 /iot/lora/servers 部分的服务器名称。
src-address (IP; Default: )如有必要,指定上行数据包的源地址(该地址应与 RB 上配置的地址匹配)。
spoof-gps (bool | lat | long | alt; Default: )设置自定义 GPS 位置。使用 lat、long、alt 指定纬度、经度和海拔值。

信息

一旦选择了服务器并使用 /iot/lora/enable [find] 命令启用了 LoRa 接口,设备将开始作为 LoRaWAN 网关运行。它将开始把 /iot/lora/traffic 选项卡中的 LoRa 载荷转发到已配置的服务器。

信道

本节用于修改与信道/频率相关的设置。

子菜单: /iot/lora/channels

PropertyDescription
bandwidth (200_kHz | 400_kHz | 62.5_kHz | 125_kHz | 250_kHz | 500_kHz; Default: 125_kHz)特定信道的带宽,在使用任何 channel-plan 预设时预定义,但当 channel-plan 设置为 custom 时可以手动更改。
disabled (yes | no; Default: no)禁用或启用该信道。
freq-off (integer [-400000..400000]; Default: )信道相对于无线电中心频率的频率偏移,它可以调整信道频率以避免信道重叠。
radio (radio0 | radio1; Default: )定义哪个无线电使用所选信道。
spread-factor (SF5 | SF6 | SF7 | SF8 | SF9 | SF10 | SF11 | SF12; Default: )定义 type=LoRa 的信道的扩频因子(Spread Factor)。较低的扩频因子意味着更高的数据速率。

要查看当前信道,请执行命令 /iot/lora/channels/print:

/iot/lora/channels/print
Columns: NAME, TYPE, RADIO, FREQ-OFF, BANDWIDTH, FREQ, SPREAD-FACTOR, DATARATE
# NAME       TYPE  RADIO   FREQ-OFF  BANDWIDTH  FREQ   SPREAD-FACTOR  DATARATE
0 gateway-0  MSF   radio1  -400000   125_kHz    868.1                         
1 gateway-0  MSF   radio1  -200000   125_kHz    868.3                         
2 gateway-0  MSF   radio1  0         125_kHz    868.5                         
3 gateway-0  MSF   radio0  -400000   125_kHz    867.1                         
4 gateway-0  MSF   radio0  -200000   125_kHz    867.3                         
5 gateway-0  MSF   radio0  0         125_kHz    867.5                         
6 gateway-0  MSF   radio0  200000    125_kHz    867.7                         
7 gateway-0  MSF   radio0  400000    125_kHz    867.9                         
8 gateway-0  LoRa  radio1  -200000   250_kHz    868.3  SF7                    
9 gateway-0  FSK   radio1  300000    125_kHz    868.8                    50000

信道使用 freq-off 和无线电的 center-freq 频率创建。要查看无线电的中心频率,请使用命令 /iot/lora/radios/print。

要了解每个信道的频率是如何计算的,请查看以下示例:

# NAME       TYPE  RADIO   FREQ-OFF  BANDWIDTH  FREQ   SPREAD-FACTOR  DATARATE
0 gateway-0  MSF   radio1  -400000   125_kHz    868.1                         

radio1 被选择用于信道 #0,并且配置为 center-freq=868500000(868500000 Hz 或 868.5 MHz)。

通过使用频率偏移 freq-off=-400000(-400000 Hz 或 -0.4 MHz),我们定义信道 #0 为 868500000-400000=868100000 Hz 或 868.1 MHz。

信息

要配置自定义信道,请借助以下命令选择 "custom" 信道配置文件:

/iot/lora/set [find] channel-plan=custom

Join EUI

网关会将它接收到的每一个 LoRaWAN 载荷都转发到服务器。这也包括邻近 LoRaWAN 节点的载荷。转发所有内容可能并不理想,例如,它会增加使用的数据量(并直接影响 ISP 套餐费用)。

Join EUI 菜单允许您指定 JOIN EUI 的黑名单或白名单范围,网关应转发(如果是"白名单")或应阻止(如果是"黑名单")。添加范围后,请确保将其应用到服务器设置。

这些过滤器按以下原则工作:

  1. 默认情况下,允许所有内容(除非添加了白名单/黑名单过滤器);

  2. 如果添加了 "blacklist" 过滤器范围,然后附近出现匹配黑名单范围的 JOIN EUI 数据包 → 它将被丢弃;

  3. 如果添加了 "whitelist" 过滤器范围,它的优先级高于 "blacklisted" 过滤器。这意味着如果 "blacklist" 和 "whitelist" 都匹配同一个 JOIN EUI,"whitelist" 优先,数据包将被转发。

您可以借助 RouterOS GUI 找到您的节点使用的 Join EUI。转到 "LoRa" 部分和 "Traffic" 子菜单(仅可通过图形界面使用)。为 LoRaWAN 节点通电后,节点应发送 "Join-request" 数据包。双击它以进行检查:

子菜单: /iot/lora/joineui

PropertyDescription
joineuis (string; Default: )定义 Join EUI 的范围。
logging(yes | no; Default: no)为过滤器功能启用额外日志记录。
name (string; Default: )定义范围的名称。
type (blacklist | whitelist; Default: whitelist)定义过滤器的类型:blacklist(如果范围匹配,则阻止/丢弃数据包)whitelist(如果范围匹配,则转发数据包)

Join EUI 的示例看起来像这样 E0 E1 E2 01 02 03 04 05。它由 HEX 格式的 8 个八位字节组成。

要添加一个阻止所有内容的范围,请添加如下过滤器:

/iot/lora/joineui/add name=block_all joineuis=0000000000000000-ffffffffffffffff type=blacklist logging=yes

要允许特定的单个 Join EUI,请添加如下过滤器:

/iot/lora/joineui/add name=allow_my_node joineuis=E0E1E20102030405-E0E1E20102030405 type=whitelist logging=yes

禁用 LoRa 接口:

/iot/lora/disable [find where ]

将这两个范围应用到您正在使用的 LoRa 服务器,然后再次启用接口:

/iot/lora/servers/set joineui=block_all,allow_my_node [find where address ~ "eu1.cloud.thethings.network"]
/iot/lora/enable [find where ]

结果,我们将只允许 "JOIN EUI=E0 E1 E2 01 02 03 04 05" 节点的载荷被转发,而所有其他可能的 JOIN EUI 将被黑名单规则丢弃。

Network ID

网关会将它接收到的每一个 LoRaWAN 载荷都转发到服务器。这也包括邻近 LoRaWAN 节点的载荷。转发所有内容可能并不理想,例如,它会增加使用的数据量(并直接影响 ISP 套餐费用)。

NetID 菜单允许您指定 NetID 的黑名单或白名单范围,网关应转发(如果是"白名单")或应阻止(如果是"黑名单")。添加列表后,请确保将其应用到服务器设置。

这些过滤器按以下原则工作:

  1. 默认情况下,允许所有内容(除非添加了白名单/黑名单过滤器);

  2. 如果添加了 "blacklist" 过滤器范围,然后数据包的 NetID 匹配黑名单范围 → 它将被丢弃;

  3. 如果添加了 "whitelist" 过滤器范围,它的优先级高于 "blacklisted" 过滤器。这意味着如果 "blacklist" 和 "whitelist" 都匹配同一个 NetID,"whitelist" 优先,数据包将被转发。

NetID 定义了 LoRaWAN Alliance 分配给不同运营商/服务器的设备地址(DevAddr)范围。大多数范围的列表可在 TTN 指南中找到。

DevAddr 在 LoRaWAN 节点与服务器通信完成后由 LoRaWAN 服务器分配给该节点。例如,TTN 将从 26000000 - 27FFFFFF 范围内为您的节点分配一个地址。您可以在 LoRaWAN 服务器仪表盘下找到它,或使用 RouterOS GUI 在 "Traffic" 子菜单下(在 "join-request" 和 "join-accept" 通信完成后)的 Dev Addr 列/字段中找到它。

假设 TTN 为您的节点分配了 26 1B D8 D1 Dev Addr。根据 TTN 指南,它属于 26000000 - 27FFFFFF DevAddr 范围,并且属于 000013 NetID。

子菜单: /iot/lora/netid

PropertyDescription
netids (string; Default: )定义 NetID
logging(yes | no; Default: no)为过滤器功能启用额外日志记录。
name (string; Default: )定义 ID 的名称。
type (blacklist | whitelist; Default: whitelist)定义过滤器的类型:blacklist(如果范围匹配,则阻止/丢弃数据包)whitelist(如果范围匹配,则转发数据包)

要添加一个允许特定 NetID 的过滤器(在此示例中为属于 TTN 的 000013 NetID),请使用命令:

/iot/lora/netid/add name=allow_TTN netids=000013-000013 type=whitelist

要阻止所有其他 NetID,请使用 type=blacklist:

/iot/lora/netid/add name=block_all netids=000000-ffffff type=blacklist

禁用 LoRa 接口:

/iot/lora/disable [find where ]

将这两个范围应用到您正在使用的 LoRa 服务器,然后再次启用接口:

/iot/lora/servers/set netid=block_all,allow_TTN [find where address ~ "eu1.cloud.thethings.network"]
/iot/lora/enable [find where ]

服务器

本节用于添加新服务器设置或修改当前服务器设置。

子菜单: /iot/lora/servers

有一些预定义的服务器可以使用(使用它们需要创建一个 The Things Network 账户):

[admin@MikroTik] /iot/lora/servers/print
Columns: NAME, UP-PORT, DOWN-PORT, ADDRESS
#  NAME              UP-PORT  DOWN-PORT  ADDRESS                                     
0  TTS Cloud (eu1)      1700       1700  eu1.cloud.thethings.industries         
1  TTS Cloud (nam1)     1700       1700  nam1.cloud.thethings.industries        
2  TTS Cloud (au1)      1700       1700  au1.cloud.thethings.industries         
3  TTN V3 (eu1)         1700       1700  eu1.cloud.thethings.network            
4  TTN V3 (nam1)        1700       1700  nam1.cloud.thethings.network           
5  TTN V3 (au1)         1700       1700  au1.cloud.thethings.network          

也可以添加自定义服务器。如果第一个服务器不更改数据包的 "DevAddress" 部分,并且在所有服务器都能够解码该数据包的条件下,向多个服务器的数据转发可以同时进行。

PropertyDescription
address (domain name or IP address; Default: )定义 LoRaWAN Network 服务器地址。
name (string; Default: )定义服务器名称。
protocol (UDP | LNS | CUPS; Default: UDP)指定与 LoRaWAN 服务器通信时使用 UDP、LNS 还是 CUPS 协议。
down-port (integer [0..65535]; Default: 1700)选择 UDP 协议时使用的参数。定义与 LoRaWAN Network 服务器进行下行通信(从服务器到节点)的端口。大多数已知的开源服务器默认使用端口 1700,但如果同一台机器上配置了多个服务器,该端口可能会更改。
up-port (integer [0..65535]; Default: 1700)选择 UDP 协议时使用的参数。定义与 LoRaWAN Network 服务器进行上行通信(从节点到服务器)的端口。大多数已知的开源服务器默认使用端口 1700,但如果同一台机器上配置了多个服务器,该端口可能会更改。
netid(list of string; Default: )选择 UDP 协议时使用的参数。应用过滤器,仅发送匹配已配置 Network ID (Net ID) 过滤器的 LoRaWAN 载荷。
joineui (list of string; Default: )选择 UDP 协议时使用的参数。应用过滤器,仅发送匹配已配置 Join EUI 过滤器的 LoRaWAN 载荷。
port (integer [0..65535]; Default: 8887)选择 LNS 或 CUPS 协议时使用的参数。对于 LNS,定义 WSS (WebSocket) 端口;对于 CUPS,定义 HTTPS 端口。
key (string; Default: ) sensitive选择 LNS 或 CUPS 协议时使用的参数。指定 LoRa Basics Station LNS Authentication Key 或 CUPS API KEY(均在服务器上生成)。
ssl (yes or no; Default: no)选择 LNS 或 CUPS 协议时使用的参数。指定是否使用 SSL(如果服务器支持 TLS 服务器身份验证)。选择此选项时,必须在证书菜单下上传根 SSL 证书。
certificate (list of string; Default: none)选择 LNS 或 CUPS 协议时使用的参数。从证书存储中选择客户端证书(如果服务器等待 TLS 客户端身份验证)。如果服务器不要求 TLS 客户端身份验证,请使用默认的 "none" 设置。
interval(integer [0..65535]; Default: )选择 CUPS 协议时使用的参数。指定 LoRa Basics Station 查询 CUPS 服务器以获取配置更新/更改的间隔。

有一些预配置的 The Things 默认服务器。如果您删除了其中一个并想恢复默认服务器,可以使用命令:

/iot/lora/servers/reset-servers

警告

请注意,重置服务器也会删除所有先前配置的服务器,因此请务必事先"保存"它们。

流量

本节显示由周围节点广播的 LoRa 载荷。

子菜单: /iot/lora/traffic

PropertyDescription
options允许为 traffic 选项卡配置附加选项:crc-errors (yes | no) → 设置为 "no" 可将状态为 "crc error" 的数据包从 traffic 选项卡中丢弃;pckt-limit (10...1024) → 限制 traffic 选项卡的日志列表。
clear清除列表(删除所有条目)。

要查看列表,请使用 print 命令:

[admin@MikroTik] /iot/lora/traffic/print
Columns: TIME, GWID, MSGTYPE, DEVADDR, MVER, FCNT, CRC, TYPE, JOINEUI, DEVEUI
 #  TIME                             GWID  MSGTYPE                DEVADDR      MVER         FCNT  CRC    TY  JOINEUI                  DEVEUI                 
 0  2024-11-08 13:33:28  xxxxxxxxxxxxxxxx  Unconfirmed Data Up    6C B9 XX XX  LoRaWAN R1  59434  Error  Rx                                                  
 1  2024-11-08 13:33:50  xxxxxxxxxxxxxxxx  Rejoin-request                      LoRaWAN R1         Error  Rx                           50 62 9F FE XX XX XX XX
 2  2024-11-08 13:34:09  xxxxxxxxxxxxxxxx  Unconfirmed Data Down  5E 00 XX XX  RFU         41736  Error  Rx                                                  
 3  2024-11-08 13:34:15  xxxxxxxxxxxxxxxx  Rejoin-request                      RFU                Error  Rx                           D9 C2 BD 4B XX XX XX XX
 4  2024-11-08 13:34:55  xxxxxxxxxxxxxxxx  Join-request                        LoRaWAN R1         Error  Rx  A1 AE B1 8A XX XX XX XX  F4 62 81 BE XX XX XX XX

要清除列表(删除所有条目),请执行 clear 命令:

[admin@MikroTik] /iot/lora/traffic/clear

Traffic 选项卡显示 "LoRa" 载荷。一旦使用 /iot/lora/enable [find] 命令启用了 LoRa 接口,列表中的所有载荷将被转换为 TCP/UDP 数据包(取决于您使用的是 UDP 1700 还是 LNS/CUPS 协议)并转发到已配置的服务器。

如果您不希望使用 LoRaWAN 拓扑,并且希望将"原始" LoRa 载荷转发到自己的服务器,则可以选择这样做,使用 MQTT 或 Fetch 以您选择的间隔运行脚本,持续发送数据。

关于如何将 traffic 载荷转换为名为 "traffic" 的变量的基本示例(脚本的第一步):

[admin@MikroTik] > :global traffic;:set traffic [/iot/lora/traffic/print as-value ];put $traffic 
.id=*4f;band=125 kHz;coderate=?/?;counter=890652548;crc=Error;datarate=SF 7;freqhz=868300;gwid=50313xxxxxx;ifcha
in=1;mod=LoRa;msgtype=Proprietary;mver=RFU;rfchain=1;rssi=-116.00;rxcrc=3809;size=213;snr=-12.00;snrmax=-8.25;snrmin=
-14.25;time=2024-11-08 14:39:45;type=Rx

调试

如果您遇到连接问题,请确保启用日志:

/system/logging/add topics=debug,lora

这将启用调试日志记录,帮助您确定潜在问题所在。可以使用以下命令查看日志:

/log/print

成功的连接看起来像这样:

 13:50:33 lora,info gateway-0 forwarder started
 13:50:38 lora,info [LNS] connecting to wss://eu1.cloud.thethings.network:8887/router-info
 13:50:39 lora,info [LNS] eu1.cloud.thethings.network discovered
 13:50:39 lora,info [LNS] eu1.cloud.thethings.network disconnected
 13:50:39 lora,info [LNS] connecting to wss://eu1.cloud.thethings.network:8887/traffic/eui-xxxx
 13:50:39 lora,info [LNS] eu1.cloud.thethings.network configured
 13:50:52 lora,info gateway-0 forwarder is ready

更多日志信息可在我们的 Log 指南中找到。