As ADR needs downlinks, and downlinks are very expensive, it’s highly optimized:
- Scheduling a downlink after 20 uplinks would indeed make TTN piggy-back ADR on such scheduled downlink, if the node needs to change its settings.
- When the node is sending on SF12 and changes are needed but no downlink is scheduled, ADR will force a downlink after 20 messages.
- Regardless if changes are needed it will also schedule a downlink, to be sent within the next 32 messages, when a message was received that has its
ADRACKReq bit set, which the node should request when it has sent 64 messages without getting any response from the server.
So, when no changes are needed, one might not get any ADR soon.
No, the node decides: https://www.thethingsnetwork.org/wiki/LoRaWAN/ADR
To see if your node’s packets even request ADR, paste a full packet into an online LoRaWAN packet decoder, and see if
FCtrl.ADR is set. (Of course, that needs a full LoRaWAN packet, not just the application payload.)
And yes, ADR downlinks are shown in, at least, the gateway traffic page as empty downlinks (which can be expanded to show their trace details), below showing a size of 17 and 22 bytes:
Above, the node was erroneously not expecting the downlink in RX2 to occur at SF9 (11:55:38, 17 bytes) and apparently ignored it, and kept using SF12 (11:57:42). So, in the next try, TTN repeated the ADR in RX2 at SF12, and also told the node to use SF9 for RX2 in the future (11:57:43, 22 bytes). After that, the node changed from SF12 to using SF8 (12:04:01) and from then on would be using SF9 for RX2.
If your node’s traffic is received by multiple gateways, TTN will select the gateway for the downlink, so you might not see it in the Traffic of your own gateway.