I migrated a (working) device from V2 to V3, changing the key in V2 so the device can’t join the V2 network. It successfully joins V3, but fails to uplink data, with the error in the console “Link ADR rejection received.”
I note in the JSON that two “acks” are true, this leads me to think that the node acknowledged and did not reject the ADR request.
"data": {
"@type": "type.googleapis.com/ttn.lorawan.v3.MACCommand.LinkADRAns",
"data_rate_index_ack": true,
"tx_power_index_ack": true
},
Does the V3 implementation use different data rates than V2 did (for the US band plan)?
Is there a packet decoding tool that will enable the decoding of the ADR requests and acks (perhaps the Wireshark decoder is nearly ready)?
The device in question uses the Adafruit Feather M0 LoRa module with code built in the Arduino IDE with the MCCI LoRaWAN LMIC library version 3.1.0 (supports LoRaWAN 1.0.2/1.0.3 Class A devices) and works fine on V2, and while it joins V3, it cannot uplink data successfully, it appears.
The Feather board is just for prototyping. My colleague is porting the functions of this project to a different module based on an ST Micro SOC, using the libraries provided by ST, and is also experiencing ADR issues, though in his case, the module only operates at the slowest data rates, despite being in the same room as the V3 gateway.
Interestingly, the stack enqueues two separate ADR requests, both within the same second (timestamps are identical to the second) and it’s not clear why it doesn’t simply choose to enqueue a single request with the settings it really wants. The first request is:
"data": {
"@type": "type.googleapis.com/ttn.lorawan.v3.MACCommand.LinkADRReq",
"data_rate_index": 2,
"channel_mask": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"channel_mask_control": 7,
"nb_trans": 1
},
and the second one is:
"data": {
"@type": "type.googleapis.com/ttn.lorawan.v3.MACCommand.LinkADRReq",
"data_rate_index": 2,
"channel_mask": [
false,
false,
false,
false,
false,
false,
false,
false,
true,
true,
true,
true,
true,
true,
true,
true
],
"nb_trans": 1
},
The first request seems to tell the module that it cannot use any frequencies at all, and the second one indicates that half of them are usable. Does this lend any insight?