Tutorials

Introduction

lora-mote-emulator is developed by Python. It can emulate LoRa motes (a.k.a end-devices) and LoRa Gateways to send and receive LoRaWAN packages. It can be mainly utilized to test LoRaWAN servers.

Installation

lora-mote-emulator supports Python 3.6+, and is distributed via Pypi. Therefore, we can directly use pip to install this program. Meanwhile, pipenv is recommended to manage virtual environments.

1. Make sure Python > 3.6 is installed on the machine, and pip is upgraded to the latest version. To upgrade pip, use pip install --upgrade pip .

  1. Install pipenv:

pip install pipenv
  1. Create a new virtual environment in an empty directory:

pipenv --python 3
  1. Install lora-mote-emulator:

pipenv install lora-mote-emulator

Now, the emulator is installed successfully.

Usage

The emulator includes an executable mote, thus, mote -h can show the help message

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.

Prepare gateway

1. At the very beginning, we need to create configuration files. Run mote create [-c config_dir] to generate configuration files at directory config_dir ( ./config in default). The configuration files include device.json, gateway.json, config.json, and abp.json.

  1. Modify the content of each configuration file:

  • config.json includes the server’s IP address and port number, log level and timeout, etc.

  • gateway.json includes the gateway’s extended unique identifier (EUI),

  • device.json includes the detailed parameters of mote, i.e., DevEUI, JoinEUI and two root keys, i.e., AppKey and NwkKey,

  • abp.json includes required fields if mote is activated via Activation by Personalization (ABP) mode.

3. Before mote sending message, the gateway needs to register the IP address to server via PULL_DATA message. ( Note: Some LoRaWAN servers may require gateways to send PULL_DATA periodically to keep-alive. Therefore, if we get nothing from servers, we can send a PULL_DATA first, then re-try the message. To send a PULL_DATA message, use following command:

mote pull

4. If INFO - PULL ACK - logs, it means a PULL_ACK message is received from server. Since then, mote can send real LoRaWAN messages.

Mote commands

All the supported LoRaWAN uplink message types are as follows:

  • Join Request ,

  • Confirmed Uplink ,

  • Unconfirmed Uplink ,

  • Rejoin Request ,

  • MACCommand ,

Downlink message types include:

  • Join Accept ,

  • Confirmed Downlink ,

  • Unconfirmed Downlink

Activation

First of all, the mote needs to be activated before using. There are two modes of activations, i.e., Over-the-air Activation (OTAA), and ABP.

OTAA

OTAA stands for the activation by which mote need to negotiate with server to establish session and generate various session keys. To activate mote in OTAA mode, do the following:

  1. Register application and mote EUI (JoinEUI and DevEUI), and the two root keys,

  2. Modify device.json config file,

  3. Run mote pull ,

  4. Run mote join -n , where -n option means to establish brand new session which may override the old one.

  5. When the log shows INFO - Join Accept (MIC verified) , it means that a Join Accept message is received and the message integrity code (MIC) is verified. Now the mote has been activated, and can be used to send application messages.

ABP

ABP mode means that the session parameters are preset in both server and mote sides, making them able to communicate directly. The process is shown as follows:

  1. Set the activation mode to be ABP on LoRaWAN server, and set all the session parameters,

  2. Modify abp.json file on all fields,

  3. Run mote abp. If the mote information is printed, the ABP activation succeeds.

Rejoin request

Our program supports to send all three types of Rejoin Request (New in LoRaWAN Version 1.1.0), e.g.:

mote rejoin {0,1,2}

If server agrees the request, it will reply with Join Accept message.

MACCommand

mote can send MACCommand via FRMPayload field, i.e. FPorts = 0. The command is as follow:

mote mac [-au] [cmd]

where -au act the same as in app , and [cmd] stands for the actual commands (in hex string form) that needs to be sent. For example, to send 0x01 , use:

mote mac 01

Check mote information

Use mote info to display the information of current mote.