# lora-mote-emulator **Repository Path**: lucima/lora-mote-emulator ## Basic Information - **Project Name**: lora-mote-emulator - **Description**: This is a device (mote) emulator for LoRaWAN protocol(1.0 & 1.1). Completely realized by Python 3.6 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-18 - **Last Updated**: 2022-02-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 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(TM)| protocol) *Support* |LoRaWAN(TM)| *1.0.2 & 1.1 protocol* **Using Gateways from** |Semtech(TM)| .. |LoRaWAN(TM)| unicode:: LoRaWAN U+2122 .. |Semtech(TM)| unicode:: Semtech U+2122 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. .. |version| image:: https://img.shields.io/badge/LoRaWAN-1.1-orange.svg?style=plastic .. |python| image:: https://img.shields.io/badge/Python-3.6%2C3.7-blue.svg?style=plastic&logo=python .. |license| image:: https://img.shields.io/badge/License-MIT-red.svg?style=plastic