110 lines
4.0 KiB
Markdown
110 lines
4.0 KiB
Markdown
LoRa/LoRaWAN Time on Air calculator
|
|
===================================
|
|
|
|
(28-Aug-2020) Python2 has sunset already. For Python3, toa.py has been added. Don't worry. lorawan_toa.py is not changed for backward compatibility.
|
|
|
|
A calculator of the time on air (ToA) of LoRa/LoRaWAN PHY frame in Python.
|
|
|
|
This script refers to the section 4.1.1.6. LoRa Packet Structure,
|
|
[SX1276/77/78/79 Datasheet rev.5][http://www.semtech.com/images/datasheet/sx1276.pdf].
|
|
|
|
The default parameters of the equation is based on LoRaWAN AS923
|
|
in the LoRaWAN regional parameters v1.1.
|
|
|
|
## Note
|
|
|
|
The default value of Explicit Header is enable.
|
|
It is guessed from the PHY frame format
|
|
though there is no explit text in the LoRaWAN specification.
|
|
|
|
The value of LowDataRateOptimization is set automatically
|
|
when the symbol duration exceeds 16ms.
|
|
Because the datasheet requires that it must be used
|
|
when the symbol duration exceeds 16ms.
|
|
This is the case below:
|
|
|
|
- SF=12 and 11 in 125 kHz.
|
|
- SF=12 in 250 kHz.
|
|
|
|
You can disable this feature by the --disable-auto-ldro option.
|
|
The LDRO is disabled by default if you disable the auto LDRO.
|
|
If you want to enable the LDRO, you can specify the --enable-ldro option.
|
|
|
|
In the downlink stream, the CRC at the tail of the PHY frame is not used.
|
|
To calculate the ToA for the downlink stream,
|
|
the --downlink option should be specified.
|
|
|
|
## Usage
|
|
|
|
```
|
|
usage: toa.py [-h] [--band-width NUMBER] [--disable-auto-ldro] [--enable-ldro]
|
|
[--disable-eh] [--downlink] [--disable-crc] [--cr NUMBER]
|
|
[--preamble NUMBER] [--duty-cycle NUMBER] [-v] [-d]
|
|
SF SIZE
|
|
|
|
LoRa Time on Air calculator.
|
|
|
|
positional arguments:
|
|
SF Spreading Factor. It should be from 7 to 12.
|
|
SIZE PHY payload size in byte. Remember that PHY payload
|
|
(i.e. MAC frame) is consist of MHDR(1) + MAC payload +
|
|
MIC(4), or MHDR(1) + FHDR(7) + FPort(1) + APP + MIC(4).
|
|
For example, SIZE for Join Request is going to be 23.
|
|
If the size of an application message (APP) is 12, SIZE
|
|
is going to be 25.
|
|
|
|
optional arguments:
|
|
-h, --help show this help message and exit
|
|
--band-width NUMBER bandwidth in kHz. default is 125 kHz.
|
|
--disable-auto-ldro disable the auto LDRO and disable LDRO.
|
|
--enable-ldro This option is available when the auto LDRO is
|
|
disabled.
|
|
--disable-eh disable the explicit header.
|
|
--downlink disable the CRC field, which is for the LoRaWAN
|
|
downlink stream.
|
|
--disable-crc same effect as the --downlink option.
|
|
--cr NUMBER specify the CR value. default is 1 as LoRaWAN does.
|
|
--preamble NUMBER specify the preamble. default is 8 for AS923.
|
|
--duty-cycle NUMBER specify the duty cycle in percentage. default is 1 %.
|
|
-v enable verbose mode.
|
|
-d increase debug mode.
|
|
```
|
|
|
|
## Examples
|
|
|
|
with the -v option, it shows the ToA as well as the related information.
|
|
below example, it show detail information in SF 12, 64 bytes of PHY payload,
|
|
125 kHz bandwidth, preamble 8.
|
|
|
|
% python toa.py 12 64 -v
|
|
PHY payload size : 16 Bytes
|
|
MAC payload size : 11 Bytes
|
|
Spreading Factor : 7
|
|
Band width : 125 kHz
|
|
Low data rate opt. : disable
|
|
Explicit header : enable
|
|
CR (coding rate) : 1 (4/5)
|
|
Symbol Rate : 976.562 symbol/s
|
|
Symbol Time : 1.024 msec/symbol
|
|
Preamble size : 8 symbols
|
|
Packet symbol size : 38 symbols
|
|
Preamble ToA : 12.544 msec
|
|
Payload ToA : 38.912 msec
|
|
Time on Air : 51.456 msec
|
|
Duty Cycle : 1 %
|
|
Min span of a cycle : 5 sec
|
|
Max Frames per day : 16791 frames
|
|
|
|
without the -v option, it simply shows the ToA.
|
|
|
|
% python toa.py 12 64
|
|
2793.472
|
|
|
|
## graph_as923.py
|
|
|
|
It makes a set of figures about Time on Air and PHYPayload size,
|
|
especially LoRaWAN AS923 using matlib like below.
|
|
|
|

|
|
|