Skip to content

This is a device (mote) emulator for LoRaWAN protocol(1.0 & 1.1). Completely realized by Python 3.6

License

Notifications You must be signed in to change notification settings

Xiao-Di/lora-mote-emulator

 
 

Repository files navigation

LoRa Mote Emulator

version python license

This is a useful tool to test LoRa server.

To emulate end devices (a.k.a. Motes in LoRaWAN™ protocol)

Support LoRaWAN™ 1.0.2 & 1.1 protocol

Using Gateways from Semtech™

System Requirements

  • Ubuntu
  • Python(>=3.6, mandatory)

Installtion

PYPI

  • Use pip to install lora-mote-emulator:

    pip install lora-mote-emulator
    

MANUALLY

  • Use pip to install pipenv:

    pip install pipenv
    
  • Clone this repo into a directory:

    git clone https://github.com/houluy/lora-mote-emulator.git
    
  • Use pipenv to create a virtual Python environment and install all the dependencies:

    pipenv install
    
  • Build the project:

    python -m build
    

Here, if there is not Python 3.6 in your system, a warning will occur, and no package will be installed. It is perfect to install Python 3.6 from source. Otherwise, remove the Pipfile.lock and redo the above command.

  • Enter the virtual environment by pipenv shell
  • Run mote -h to see the help message

Usage

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.

Tutorial

  • First, we need to create configuration files by command mote create [-c ./config]. Mote will generate required config template JSON files in the ./config directory (default). In the directory, several JSON config files are included.
  • config.json: Basic configurations.
  • gateway.json: Gateway EUI.
  • device.json: Device parameters for OTAA mode.
  • abp.json: Device parameters for ABP mode.

OTAA

  • Modify device infomation in device.json copied. An example:

    {
        "Device": {
            "JoinEUI": "0000000000000000",
            "DevEUI": "0000000000000000"
        },
        "RootKeys": {
            "AppKey": "00000000000000000000000000000000",
            "NwkKey": "00000000000000000000000000000000"
        }
    }
    

NOTE: If you want to emulate LoRaWAN 1.0 device, first set JoinEUI equal to AppEUI and set NwkKey equal to AppKey.

ABP

  • Modify device activation information in abp.json. An example:

    {
        "deveui": "0000000000000000",
        "joineui": "0000000000000000",
        "devaddr": "00000000",
        "appkey": "00000000000000000000000000000000",
        "nwkkey": "00000000000000000000000000000000",
        "nwksenckey": "00000000000000000000000000000000",
        "snwksintkey": "00000000000000000000000000000000",
        "fnwksintkey": "00000000000000000000000000000000",
        "appskey": "00000000000000000000000000000000",
        "fcntup": 0,
        "version": "1.1"
    }
    
  • Currently, five kinds of message is supported: pull data, join request, rejoin request, confirmed (or unconfirmed) data up (with or without FOpts) and MAC Commands in FRMPayload field:

NOTE: Always remember to mote pull to keep the gateway alive in server.

mote info
mote pull
mote abp
mote join [-n]
mote rejoin 'rejointyp' (0, 1, 2)
mote app 'message' (uplink message, will be encoded by UTF-8) [-auf]
mote mac 'command' (MAC Commands in FRMPayload field)

Here is the example step of interaction with ChirpStack:

mote pull
mote join -n
mote app helloworld -f 0302
mote main.py mac 0302

Contribution

This repo is hosted on https://github.com/houluy/lora-motes-emulator and under MIT license, any contribution or suggestion is welcome. Just open an issue or send a pull request.

About

This is a device (mote) emulator for LoRaWAN protocol(1.0 & 1.1). Completely realized by Python 3.6

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 98.3%
  • Smarty 1.7%