# 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