If ADR is meant to optimise datarate, how are payload size and dwell limits taken into account?

artichoke
Wed, 05 Nov 2025 10:27:05 +0000
End Devices (Nodes)

Hi,
I’m wondering if someone could help me the understand the purpose of ADR.

Currently, my node (Radiolib-based, AU915 FSB2) joins fine on ADR at SF10. ADR is enabled, and link quality is good. After join, I send a larger payload (currently ~19 bytes). This fails and radiolib throws RADIOLIB_ERR_DWELL_TIME_EXCEEDED.
Now, I understand why this is, because from the debug output, I can see it is trying to send at SF10, and in my region, the airtime of 19 bytes on this datarate will exceed the 400ms duty cycle limit.

From my understanding, it’s the LNS’s job to send ADR commands (if enabled) to change the DR if the conditions are appropriate. But if the LNS has no way of knowing the size of my next payload, and the node must treat ADR commands as authoritative (i.e. can’t pick the next best DR based on payload size), what is the purpose of ADR unless your payloads are always under 11 bytes?

And if the LNS sent no ADR command with it’s downlink, why is radiolib trying to use SF10?

I get that there is an easy fix to this, to simply override the datarate manually, but I want to know if ADR is only meant to optimise link budgets with very small payloads, or if I am just using it wrong.

Thanks,
Nikolai

5 posts - 3 participants