Configure the Adeunis RF LoraWAN Demonstrator

When testing or experimenting with LoRa, a test device that can send/receive LoRa packets on demand is a real value It allows you to test the network functionality and coverage. The Adeunis RF LoRaWAN Demonstrator is such test device. It can send and receive LoRa packets, has a built-in accelerometer and GPS and rechargeable battery. THis post explains how to configure the LoRaWAN demonstrator and add it to a network server.

When using a LoRa test-device, the parameters need to be set manually before the device can send data. How to set these parameters completely depends on the type of chip that is used in the device. Most of the times this information can be found in the documentation but I found it often difficult to translate the raw info to hands-on usable information so I decided to figure everything out and write a post about it.

After configuring the necessary parameters in the device, they need to match with the device added to the network server in your LoRa network before it will accept data sent by this device. For this post, I will use Actility TPW (ThingPark Wireless) Device Manager

About the Adeunis RF LoraWAN Demonstrator

 

Equipment list

Before you are able to configure the Adeunis RF LoraWAN Demonstrator you need the following equipment:

  • Adeunis RF LoraWAN Demonstrator:
  • USB cable
  • Terminal emulator to send the commands to the test device
  • LoRa gateway in the range of the Adeunis RF LoraWAN Demonstrator
  • Network server (Actility TPW)

Network Diagram

Connection to the Adeunis RF LoraWAN Demonstrator

  1. Connect the module to a PC. The device will create a new serial device (COMx on Windows and /dev/ttyACMx on Linux)
  2. Open a terminal session to the serial device/port with the following parameters: bitrate: 115200, 8 bits, no parity, 1 stop bit, no flow control.
    Commands need to be terminated with <CR><LF> and the device does not echo back send commands by default.
    After connecting to the device, and turning it on, you should instantly receive information regarding the test packets sent out.
    For example:

    [jensd@testdev ~]$ python -m serial.tools.miniterm -e -p /dev/ttyACM1 -b 115200
    --- Miniterm on /dev/ttyACM1: 115200,8,N,1 ---
    --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    
    *** CYCLE START ***
    AdrAckCount:-64
    FCtrl:ADR
    FCnt:0
    TxPay=40640A0004800000018E190100FFFF
    TxMicPay=47A187ED
    StartTx/C0/F=868100000/SF12/BW125
    StartRx1/C0/F=868100000/SF12/BW125
    ReceiveRx1/0
    StartRx2/F=869525000/SF12/BW125
    ReceiveRx2/0
    *** CYCLE END ***
    
    *** CYCLE START ***
    ...
  3. After you have ensured that you can communicate with the device, you can start the configuration by entering the configuration mode. This can be done by entering the following key sequence: \F\F\F\F+++ The device will respond with CM to confirm that you have entered Configuration Mode:
    \F\F\F\F+++CM
  4. After configuring the device as explained below, you can leave configuration mode by sending ATO. This will restart the test cycle and sending LoRa packets:
    ATO
    O
    
    *** CYCLE START ***
    ...

Configure the device for ABP

  1. Enter Configuration Mode:
    \F\F\F\F+++CM
    ATT63 PROVIDER
    O
  2. To set the NwkSKey you need to set 4 variables in a row. The O is the response of the device to confirm it has accepted the value set:
    For example, to set a NwkSKey to 12345678123456781234567812345678:

    ATS222=12345678
    O
    ATS223=12345678
    O
    ATS224=12345678
    O
    ATS225=12345678
    O
  3. To set the AppSKey you need to set 4 variables in a row. The O is the response of the device to confirm it has accepted the value set:
    For example, to set a AppSKey to 12345678123456781234567812345678:

    ATS216=12345678
    O
    ATS217=12345678
    O
    ATS218=12345678
    O
    ATS219=12345678
    O
  4. Set the DevAddr:
    ATS281=04000A64
    O
  5. Set the device to use ABP (0=ABP, 1=OTAA)
    ATS221=0
    O
  6. Save the settings in the device:
    AT&W
    O
  7. Leave configuration mode:
    ATO
    O

Configure the device for OTAA

  1. Enter Configuration Mode:
    \F\F\F\F+++CM
    ATT63 PROVIDER
    O
  2. To set the AppKey, you need to set 4 variables in a row. The O is the response of the device to confirm it has accepted the value set.
    For example to set the AppKey to 12345678123456781234567812345678

    ATS216=12345678
    O
    ATS217=12345678
    O
    ATS218=12345678
    O
    ATS219=12345678
    O
  3. To set the AppEUI, you need to set 2 variables in a row. The O is the response of the device to confirm it has accepted the value set.
    For example to set the AppEUI to: FEDCBA9876543210

    ATS214=FEDCBA98
    O
    ATS215=76543210
    O
  4. Set the device to use OTAA (0=ABP, 1=OTAA)
    ATS221=1
    O
  5. Save the settings in the device:
    AT&W
    O
  6. Leave configuration mode:
    ATO
    O

 

Add the device to the Actility TPW Device Manager for ABP

  1. Log in to the TPW Device Manager
  2. In the “Add Devices” section, click “Create”:
  3. Fill in the required information as configured the device above for ABP:
  4. Click “Create”

Add the device to the Actility TPW Device Manager for OTAA

  1. Log in to the TPW Device Manager
  2. In the “Add Devices” section, click “Create”:
  3. Fill in the required information as configured the device above for OTAA:
  4. Click “Create”

Send Data

The device is immediately joining the network and start to send data, depending on what was configured as explained above.

You can track what the device is sending and receiving from the serial connection.

For example:

*** CYCLE START ***
AdrAckCount:-35
FCtrl:ADR
FCnt:29
TxPay=40640A0004801D00018E1E1E000CDB
TxMicPay=95E51390
StartTx/C2/F=868500000/SF12/BW125
StartRx1/C2/F=868500000/SF12/BW125
ReceiveRx1/0
StartRx2/F=869525000/SF12/BW125
ReceiveRx2/0
*** CYCLE END ***

*** CYCLE START ***
AdrAckCount:-62
FCtrl:ADR
FCnt:44
TxPay=40640A0004802C0001AE1E2D010CDB
TxMicPay=BA48BFC4
StartTx/C0/F=868100000/SF12/BW125
StartRx1/C0/F=868100000/SF12/BW125
ReceiveRx1/30/ValidRx
FCtrl:
FCnt:3
RxLoRaPay=60640A000400030000C0B1D5E498D7480F09A3BDF85DB833FA811C7A9B46
!ReplayConf
RxMacPay=03111F00010705B85E8450070688668450
ProcessFportMac
RxMAC=3/LinkADRReq/SF11/P=14dBm/R=1/C=C0-C1-C2-C3-C4
RxMAC=7/NewChannelReq/F=867500001/SF12/SF11/SF10/SF9/SF8/SF7/E
RxMAC=7/NewChannelReq/F=867700001/SF12/SF11/SF10/SF9/SF8/SF7/E
*** CYCLE END ***
NACK/C0/868100000Hz/-98dBm/-2dB

Troubleshoot

Check if the base station receives the LoRa data over radio from the RN2483.

This information should be available in the TRACE.log from the Actility LRR running on a base station which is in the range of the RN2483.

Example of received uplink and downlink data:

12:58:57.160 (6449) [../lgw_x8.c:879] PKT RECV tms=013043482 tus=155780756 status=CRCOK sz=19 freq=867300000 delay=149 mod=0x01 bdw=BW125 spf=SF12 ecc=CC4/5 channel=5 nam='LC5' G2
12:58:57.160 (6449) [../lgw_x8.c:897] rf0: valid=1 finetime=0 timestamp=000000000 chip=0 chan=1 snr=2.000000 rssi_chan=-89.000000 rssi_sig=0.000000 rssi_sig_std=0
12:58:57.160 (6449) [../lgw_x8.c:897] rf1: valid=1 finetime=0 timestamp=000000000 chip=1 chan=1 snr=3.750000 rssi_chan=-84.000000 rssi_sig=0.000000 rssi_sig_std=0
12:58:57.160 (6449) [../lgw_x8.c:946] PKT RECV data='40640a0004802b00016fcad867283060f1abfb' seq=43 devaddr=04000a64
12:58:57.160 (7795) [../main.c:2666] packet sent to LRC=0 lrrid=68ba4776 by order rssi=-84.000000 snr=3.750000

12:58:57.419 (7795) [../main.c:1887] MACLORA SEND seq=2 ack=0 devaddr=04000a64 w=0 major=0 minor=3 len=30 tmoa=1482.752000ms flg='RDY' deveui=0018b20000000a64/2
12:58:57.419 (7795) [../main.c:1930] MAC SEND trip=474 avtrip=0 dvtrip=0 mxtrip=0 long delay postpone=451 in MainQ
12:58:57.870 (7795) [../lgw_gen.c:946] LGW DELAY postponed=474/925 rqtdelay=1000 delay=75 busydur=0
12:58:57.925 (6449) [../lgw_x8.c:1164] PKT SEND tms=013044312/979 status=3 sz=30 left=0 freq=867300000 mod=0x01 bdw=BW125 spf=SF12 ecc=CC4/5 pr=8 nocrc=1 ivp=1 pw=17
12:58:57.925 (6449) [../lgw_x8.c:1187] LGW DELAY tmao request=1631ms + sched=75ms
12:58:57.925 (6449) [../lgw_x8.c:1230] PKT SEND async dur=1482.751953ms diff=980ms data='60640a0004000200009666150cc2110f75fa4bf8a4279df3b0be05874130' seq=2 devaddr=04000a64
12:58:57.925 (7795) [../main.c:1658] PKT SEND INDIC deveui=0018b20000000a64 fcnt=2 deliv=1 c1=0 c2=0 rtt=474
12:58:57.925 (7795) [../main.c:2662] indic sent to LRC=0 lrrid=68ba4776 by order

Once you see that the gateway received the packet and forwarded it to the LRC, we can further troubleshoot using the Wireless logger:

Incoming data seen in the wLogger:

MAC data sent back by the LRC to the device in wLogger:

From the Device Manager, you should also see more information:

Decoding the payload

The data sent by the LoRaWAN Demonstrator and returned to your application server by Actility TPW is not really in a human readable format.

An example of the JSON data sent after the LoRaWAN Demonstrator sent a message to Actility TPW:

{"DevEUI_uplink": {"Time": "2017-10-05T14:48:21.944+02:00","DevEUI": "0018B20000000A64","FPort": "1","FCntUp": "2","ADRbit": "1","MType": "2","FCntDn": "3","payload_hex": "ae1a03010cd8","mic_hex": "9c00ea40","Lrcid": "00000201","LrrRSSI": "-93.000000","LrrSNR": "6.750000","SpFact": "12","SubBand": "G1","Channel": "LC3","DevLrrCnt": "2","Lrrid": "68BA4776","Late": "0","LrrLAT": "50.824699","LrrLON": "3.304996","Lrrs": {"Lrr": [{"Lrrid": "68BA4776","Chain": "0","LrrRSSI": "-93.000000","LrrSNR": "6.750000","LrrESP": "-93.832695"},{"Lrrid": "080E0F48","Chain": "0","LrrRSSI": "-99.000000","LrrSNR": "2.500000","LrrESP": "-100.937759"}]},"CustomerID": "100000778","CustomerData": {"alr":{"pro":"LORA/Generic","ver":"1"}},"ModelCfg": "0","DevAddr": "04000A64"}}

To extract the real information from the above JSON, and more importantly, to extract the values from the payload, you can use the following Python snippet:

import json

#extract details regarding LoRa device
lora_deveui=json_data['DevEUI_uplink']['DevEUI']
lora_payload=json_data['DevEUI_uplink']['payload_hex']
lora_fport=json_data['DevEUI_uplink']['FPort']
lora_devaddr=json_data['DevEUI_uplink']['DevAddr']

#find flags in first byte
#temperature
tmp_present=int(lora_payload[0:2],16)&128
#acceleration detected
acl_detect=int(lora_payload[0:2],16)&64
#button pressed
btn_pressed=int(lora_payload[0:2],16)&32
#GPS info
gps_present=int(lora_payload[0:2],16)&16
#F up count
fup_present=int(lora_payload[0:2],16)&8
#F down count
fdw_present=int(lora_payload[0:2],16)&4
#battery (mV)
bat_present=int(lora_payload[0:2],16)&2
#SNR/RSSI
sig_present=int(lora_payload[0:2],16)&1

#offset becomes 8 when GPS data is present
offset=0
event="interval"

if bool(tmp_present):
	temperature=int(lora_payload[2:4],16)
	print "temperature: %s",temperature
	
if bool(acl_detect):
	event="motion"
	
if bool(btn_pressed):
	event="button"
	
if bool(gps_present):
	print "GPS location sent"
	offset=8
	
if bool(fup_present):
	print "up count:"+str(int(lora_payload[4+offset:6+offset],16))

	if bool(fdw_present):
	print "down count:"+str(int(lora_payload[6+offset:8+offset],16))

if bool(bat_present):
	battery=str(int(lora_payload[8+offset:10+offset],16))+str(int(lora_payload[10+offset:12+offset],16))
	print "battery: %s mV",battery

if bool(sig_present):
	print "RSSI:"+str(int(lora_payload[12+offset:14+offset],16))
	print "SNR:"+str(int(lora_payload[14+offset:16+offset],16)) 

print "event type: %",event

As you can see in the above code snippet, the first byte in the hex payload contains a flag that indicates the contents of the rest of the payload (lines 9-25).

The next part of the code, starting from line 31, is extracting the rest of the data from the hex payload and converts it to human readable values.

Documentation

For more information and background on the Adeunis RF LoraWAN Demonstrator:

5 thoughts on “Configure the Adeunis RF LoraWAN Demonstrator

  1. Hi Jens,
    How / where can I obtain the Dev EUI address form the Adeunis RF tester device? in case I choose for the OTAA config.

    Regards,
    Arnold

    • Hi Arnold,

      The DevEUI is hardcoded in the device and is chosen/provided by the manufacturer (Adeunis). Normally, at least with the two test device I got, there should be a sticker on the back of the device that shows the S/N. This is equal to the DevEUI.

  2. Hi Jens,

    Thanks for your instruction. But, I still have one problem, after I added the device to the Actility TPW Device Manager for ABP, I still cannot the sending data. I checked the steps and it should be ok. Could you give me some suggestions?

  3. Hi,

    i have the same setup as you do, but i have a wierd problem, if the GW is near the Device it joins fine.

    if the GW is far away it never joins, even though i see the join accept on the TPW. and i have a good RSSI and SNR.

    is there a way to see if the packet reached the device?

    thanks.

  4. Hello jens
    I was reading the manual and i saw that you can scheduled confirmed and unconfirmed uplinks.
    I tried it, however i cannot configure a timing to send those uplinks and it send it really fast (one oplink every 3 seconds or less). Is there a way to modify it?

Leave a Reply

Your email address will not be published. Required fields are marked *