I have a great local dev LoRaServer working for months. I’m still developing so I always used OTAA join without problems.
Recently I’ve moved to ABP and noticed that I’ve trouble with it.
I’m using an Arduino MKRWAN 1300 board (already tried a issue there, but it seems that it’s a problem on my side) and after ABP join (that has no outcome) I cannot send any uplink message, so I guess something is going wrong with the join (as with OTAA I can send seemlessly).
I’ve searched through forum and I found no subjects about this simple problem, so probably is something on my premise that I have to investigate.
What I do
When testing, I register the board by an OTAA join, then I use the generated keys (“NwkSKey”, “AppSKey” and “DevAddr” from web LoRa App Server interface, storing them in the board’s persistent memory) to try further ABP join. There the problem.
Is something wrong in these steps? How could I gather more clues about what’s going on?
ABP devices don’t need to join, they are already provisioned with everything they need. So when using ABP just start send uplinks immediately, not join requests: if your device is well configured in loraserver (i.e., eui and keys match) you’ll get the messages.
Indeed, there is no such process in LoRaWan as an ABP join, however it seems that some node software (mis)uses the term to mean programmatically configuring the node with the static or “personalized” details necessary to just transmit.
One likely guess is a mixup with the keys or device address. Endianness shouldn’t really apply to the keys but it can kind of get apply to the device address, so there’s a potential there to get the bytes comprising the value ordered backwards when moving it between systems.
Another could be that after starting up the node is probably starting from an FCount of 0, while the server has previously seen higher numbers. Unless FCount checks are disabled in the server it will drop these packets.
Do you see indications in the gateway raw traffic page that something has been transmitting?
Ok, maybe I should have quoted the “join” word. Arduino’s library indeed uses “joinABP” for ABP activation, I got so used to the terminology that didn’t care much about it. But yes, you are right, the “join” word for ABP is misleading.
Anyway, right now I’m out from office so I cannot test your hints, but I’ll do it on Thursday and I’ll let you know. Thank you so far.
Actually the gateway was receiving the packets, so I investigated further and found the forum thread
that gave me all the clues to debug and get to the solution.
In my case it was a frame counter issue: OTAA join resets the frame counters, whereas ABP activation does not (of course). So I had to set the FCU (Frame Counter Uplink) on the Arduino client (to server counter shown in “Device > Activation” +1) before sending the packet, so that server validates and accepts it.