Spreading factor is changing with time, even though there are no changes in the firmware

I’m using feather M0 with RFM95 node, and Pi3+IMST gateway. I’m measuring the voltage and current of a solar photovoltaic system - voltage divider circuit for voltage, and ACS712 sensor for current. I’ve modified the example sketch ‘ttn-otaa-feather-us915-dht22’ of the LoRaWAN LMIC library accordingly, with the following key changes related to ADR and spreading factor.

LMIC_setLinkCheckMode(0); //disable the ADR
LMIC_setDrTxpow(DR_SF7,14); //SF is set to 7

The sketch is working fine, have been collecting the data. But surprisingly the SF was changed from (the original) SF7 to SF9 and then to SF11, even though there were no changes in the firmware loaded onto the endnode. Currently it is at SF11. In terms of time on air, it changed from 120ms (SF7) to 905ms (SF11). I’m especially worried that it is exceeding TTN fair usage policy, and my data collection will be halted now.

Just wondering why SF is changing when no changes are made in the firmware. Do I’ve to make any changes in the sketch? Any insights will be highly appreciated.

SF is supposed to change when Adaptive Data Rate (ADR) is used.

Using OTAA very strongly implies ADR, to the degree to which I’m not even sure if the spec would allow not using it. (The reverse is not true - ADR does not require OTAA, except that some older versions of LMiC assume so and get fatally stuck if you try to do ADR without OTAA)

Larger spreading factors do indeed mean slower transmission and thus longer packets. This typically points to needing to make more optimal decisions about what information you send, how it is encoded, and how often.

Also keep in mind that the SF for receive windows (especially RX2) will often by different than the uplink SF. As the downlink is also typically sent at 500 KHz bandwidth it is in most cases four times as fast as an uplink using the same SF number would be.

And I think that even without ADR enabled, some LoRaWAN implementations might try to change settings when a confirmed uplink was sent but no confirmation was received?