Who is sending the ACK? Your own code, or the LMIC library? Please show us your changes.
If your own code is sending it, then for regular uplinks I’ve always seen LMIC postpone the transmission until a channel became available, without any additional hacks. So I guess it’s in the LMIC code?
As an aside, maybe the application shouldn’t care how soon your device acknowledges. You could even wait for the next uplink, emphasis mine:
4.3.1.2 Message acknowledge bit and acknowledgement procedure (ACK in FCtrl)
When receiving a confirmed data message, the receiver shall respond with a data frame that has the acknowledgment bit (ACK) set. If the sender is an end-device, the network will send the acknowledgement using one of the receive windows opened by the end-device after the send operation. If the sender is a gateway, the end-device transmits an acknowledgment at its own discretion.
…
Note: To allow the end-devices to be as simple as possible and have as few states as possible it may transmit an explicit (possibly empty) acknowledgement data message immediately after the reception of a data message requiring a confirmation. Alternatively the end-device may defer the transmission of an acknowledgement to piggyback it with its next data message.
And making all other code stop by using delay
might not be a great idea either? Finally, as you’re new to TTN, be sure to read Fair Use Policy explained. Welcome!