使用教程

简介

本程序基于Python语言开发,能够模拟LoRa终端及网关收发LoRaWAN数据包的功能,用于LoRa服务器的正确性测试。

安装

本程序支持Python 3.6+版本,跨平台。建议采用 pipenv 管理依赖环境。

  1. 确保机器中已安装Python > 3.6,且pip已升级至最新版本。(升级pip:pip install --upgrade pip

  2. 建议安装 pipenv

pip install pipenv
  1. 在一个空目录下创建新的虚拟环境:

pipenv --python 3
  1. 修改 Pipfile 文件,将 pypi 源改为国内镜像以提高访问速度,例如,清华源 https://pypi.tuna.tsinghua.edu.cn/simple

  2. 安装本程序:

pipenv install lora-mote-emulator

至此,本程序已正确安装至虚拟环境中。

使用方法

本程序包含一个可执行脚本 mote ,可以通过 mote -h 查看完整帮助信息

usage: mote [-h] [-v version] [-c CONFIG] [--model MODEL]
    {join,app,pull,mac,rejoin,info,abp,create} ...

Tool to emulate LoRa mote (a.k.a end-device) and Gateway, supported command
list: ['join', 'app', 'pull', 'mac', 'rejoin', 'info', 'abp', 'create']

optional arguments:
    -h, --help              show this help message and exit
    -v version, --version version
                            Choose LoRaWAN version, 1.0.2 or 1.1(default)
    -c CONFIG, --config CONFIG
                            Specify the directory of config files, default './config'
    --model MODEL         Specify the directory to save the model file, default './models'

Supported commands:
    {join,app,pull,mac,rejoin,info,abp,create}
    join                Send join request.
    app                 Send application data.
    pull                Send PULL_DATA.
    mac                 Send MACCommand.
    rejoin              Send rejoin request.
    info                Show information of current mote.
    abp                 Initialize mote in ABP mode.
    create              Handle configurations.

网关准备

1. 在初次使用程序时,需要运行 mote create [-c config_dir] 来创建默认配置文件, 包括 device.json , gateway.json, config.json, abp.json-c 为可选参数, 用于指定配置文件生成的目录,默认为 ./config

  1. 修改配置文件的内容,其中:

    • config.json 中包含目标服务器的IP地址及端口号,日志层级,超时时间等;

    • gateway.json 中包含网关的标识符(Extended Unique Identifier, EUI);

    • device.json 中包含终端的详细信息,包括 DevEUI , JoinEUI 以及两个根密钥 AppKey , NwkKey ;

    • abp.json 如果终端采用个性化激活(Activation by Personalization, ABP)模式入网,则需要修改本配置文件,其中包括设备激活所需的所有字段信息,例如各种会话密钥、终端网络地址等;

  2. 在开始发送终端消息前,必须先通过网关的 PULL_DATA 注册网关的IP地址到服务器( 重要 : 部分LoRaWAN服务的实现要求网关定期发送 PULL_DATA 保持连通性,因此,当无法收到下行数据时,可以尝试 重新发送 PULL_DATA 消息)。 PULL_DATA 发送命令如下:

mote pull
  1. 当产生如下日志时,表明收到了服务器返回的 PULL_ACK 消息,后续可以进行终端的相关操作。

INFO - PULL ACK -

终端命令

本程序支持的LoRaWAN上行消息包括:

  • Join Request ,

  • Confirmed Uplink ,

  • Unconfirmed Uplink ,

  • Rejoin Request ,

  • MACCommand ,

下行消息包括:

  • Join Accept ,

  • Confirmed Downlink ,

  • Unconfirmed Downlink

激活

首先,终端需要入网后才能继续使用,入网有两种模式,即**空口入网(Over-the-air Activation, OTAA)** 和**ABP**模式。

OTAA

OTAA是指终端和服务器以协商的方式完成入网,建立会话,并生成各类会话密钥。其过程如下:

  1. 首先需要在LoRaWAN服务器上注册应用及终端EUI,以及两个根密钥;

  2. 修改 device.json 文件对应字段;

  3. 运行 mote pull

  4. 运行 mote join -n ,其中可选参数 -n 表示建立全新的会话,覆盖以前的终端;

  5. 当返回日志中显示 INFO - Join Accept (MIC verified) 表示收到了 Join Accept 消息且经过了消息完整性码(Message Integrity Code, MIC)校验。此时终端入网成功,可以正常发送上行应用数据。

ABP

ABP是指直接在服务器和终端侧将会话字段预设,然后直接进行通信对方式。其过程如下:

  1. 首先需要在LoRaWAN服务器上设置终端激活模式为ABP,并设置好会话字段;

  2. 修改 abp.json 配置文件各个对应字段;

  3. 运行 mote abp ,将打印出终端信息,表示已设置成功,可以进行应用数据发送;

上下行应用数据

终端激活成功后,可以实现上下行数据发送接收。下行数据只能在发送 上行数据之后 才能接收到。上行应用数据命令如下:

mote app [-au] [-f fopts] [msg]

其中,可选参数 -a 表示将上行数据的 ACK 比特位置位, -u 表示发送 Unconfirmed Uplink-f fopts 表示应用数据中包含 FOpts (MACCommands), msg 为实际需要发送的字符串,将由 UTF-8 编码,例如:

mote app -au -f 01 hello_world

表示发送 Unconfirmed Uplink 消息, ACK 比特位置位,包含 FOpts 0x01 ,应用消息为字符串 hello_world

根据不同的LoRaWAN服务器实现,终端可能收到不同的下行消息,也可能收不到回复( Unconfirmed Uplink )。本程序将等待一定时间( config.jsontimeout 字段)后超时停止。

当收到下行消息时,命令行将显示 INFO - Downlink MACPayload (MIC verified),并显示该消息中的关键字段。

重新入网请求

本程序支持发送三类 Rejoin Request 请求(LoRaWAN Version 1.1.0新增),请求格式如下:

mote rejoin {0,1,2}

服务器若同意请求,则返回 Join Accept 消息。

MACCommand

本程序支持通过 FRMPayload 发送 MACCommand 命令,即 FPorts = 0 ,请求格式如下:

mote mac [-au] [cmd]

其中,可选参数 -au 作用和应用消息一致; [cmd] 表示实际发送的MACCommand指令的十六进制字符串形式。例如,发送 0x01 ,则采用如下命令:

mote mac 01

查看终端信息

查看终端信息采用 mote info 即可。