Lorawan ABP Frame counts
-
Hi Everyone !
I send data from Pycom to cloud through Lorawan ABP. But whenever I send I have to reset the frame counts. So I need to know how to change the Frame counts in ABP pycom ?
Thank you in Advance.
-
@harish-kumar Well, you're not sleeping, so you shouldn't need to nvram_save/restore, but you're re-creating the LoRa object (twice!) in your loop, using two different modes (raw LoRa and LoRaWAN), and re-joining each time, so no wonder your frame counters get re-initialised.
I'm really not sure you can use the current LoRa stack like this to achieve what you want. I'm quite certain it would require some extensive changes to the stack, especially if you really want to maintain true LoRaWAN compatibility (i.e. including ADR, MAC commands, etc.).
-
Hi @robert-hh Thanks for you reply. I got it now.
-
@jcaron Thanks for your reply. This is my code. I mean like saying whenever I go to TTN console, previous data are stored there, so I have to reset the frame counts to see my new data.
from network import LoRa
import socket
import binascii
import structwhile True:
lora = LoRa(mode=LoRa.LORA, region=LoRa.EU868, sf = 7, frequency = 868500000) # create a raw LoRa socket s = socket.socket(socket.AF_LORA, socket.SOCK_RAW) s.setblocking(True) # get any data received... data = s.recv(64) print(data) lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.EU868, sf = 12) # create an ABP authentication params dev_addr = struct.unpack(">l", binascii.unhexlify('26010000'))[0] nwk_swkey = binascii.unhexlify('9A51C4DD083444A24000000000000000') app_swkey = binascii.unhexlify('7DF13A7CD2B2AA078000000000000000') # join a network using ABP (Activation By Personalization) lora.join(activation=LoRa.ABP, auth=(dev_addr, nwk_swkey, app_swkey)) # create a LoRa socket s = socket.socket(socket.AF_LORA, socket.SOCK_RAW) # set the LoRaWAN data rate s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5) # make the socket blocking # (waits for the data to be sent and for the 2 receive windows to expire) s.setblocking(True) # send some data s.send(data) print('data sent')
-
@harish-kumar In order to get proper frame counts through resets, you have to use lora.nvram_save() to save the Lora communication parameters before a shutdown and use lora.nvram_restore() to retrieve these on the next startup. That restores also also the session keys, so you do not need to join again after a successful nvram_restore(). See https://docs.pycom.io/chapter/firmwareapi/pycom/network/lora.html
For testing, you can also disable in both the TTN or Loriot console the sequence number checking.
-
@harish-kumar Why do you need to reset the frame counters? Or do you mean they are reset instead of increasing?
Are you using deep sleep? If so, are you using
nvram_save
/nvram_restore
? Please share your code and clarify what you currently get and what you want to get.