For quite some time the consensus on the forum seems to be that the design of network-level LoRaWAN confirmed uplinks is broken, as the network would not send an ACK if it detects a retry. So, if the first acknowledgement for a confirmed uplink is somehow not received by the device, and the network would not send an ACK for subsequent retries, then the device will transmit the very same confirmed uplink again and again, hopefully giving up at some point.
However, some basic tests seem to show all works fine for me. Using confirmed uplinks on SF9 with an LMIC ABP node for EU868, non-ADR, while erroneously not setting LMIC.dn2Dr = DR_SF9
, nicely forces LMIC to retry the uplink as it will never receive the ACK in RX2 then. (TTN is likely to use RX2 for uplinks that use SF9 or worse, and indeed does in the test below.) But MQTT shows that TTN is also nicely sending the ACKs for each of the repeated uplinks.
Am I missing something? Does it matter that I am not using ADR in this test? Maybe also setting an application-level downlink changes things? Is the LoRaWAN specification wrong, but does TTN V2 implement it better than specified? Could things be different for other regions on TTN? Should I not blindly trust the MQTT messages but get an SDR receiver running to ensure the gateway is indeed transmitting the downlink?
Click below for the JSON payloads of the MQTT messages, and some more details.
1st try, 868.5 MHz, payload CQ==, uplink counter 1
This does not include is_retry
in the MQTT payload:
{
"app_id": "arjanvanb-app-testing",
"dev_id": "arjanvanb-heltec-dr-testing",
"hardware_serial": "008F5B4F83EDA082",
"port": 9,
"counter": 1,
"confirmed": true,
"payload_raw": "CQ==",
"metadata": {
"time": "2020-10-21T15:24:24.571157853Z",
"frequency": 868.5,
"modulation": "LORA",
"data_rate": "SF9BW125",
"airtime": 164864000,
"coding_rate": "4/5",
"gateways": [
{
"gtw_id": "arjanvanb-gw-1",
"timestamp": 3231208652,
"time": "2020-10-21T15:24:24Z",
"channel": 0,
"rssi": -93,
"snr": 8.5,
"rf_chain": 0
}
]
}
}
1st ACK, RX2, 869.525 MHz, port 0, downlink counter 0
The downlink counter being zero, it’s somehow suppressed in the JSON payload of the MQTT API below. However, decoding the payload shows FCnt = 0 and FCtrl has its ACK bit set.
{
"payload": "YBcTASYgAAD1oPvr",
"message": {
"app_id": "arjanvanb-app-testing",
"dev_id": "arjanvanb-heltec-dr-testing",
"port": 0
},
"gateway_id": "arjanvanb-gw-1",
"config": {
"modulation": "LORA",
"data_rate": "SF9BW125",
"airtime": 144384000,
"frequency": 869525000,
"power": 27
}
}
2nd try, 867.1 MHz, same payload, same uplink counter 1
Below, is_retry
is now included and set to true:
{
"app_id": "arjanvanb-app-testing",
"dev_id": "arjanvanb-heltec-dr-testing",
"hardware_serial": "008F5B4F83EDA082",
"port": 9,
"counter": 1,
"confirmed": true,
"is_retry": true,
"payload_raw": "CQ==",
"metadata": {
"time": "2020-10-21T15:24:41.095941199Z",
"frequency": 867.1,
"modulation": "LORA",
"data_rate": "SF9BW125",
"airtime": 164864000,
"coding_rate": "4/5",
"gateways": [
{
"gtw_id": "arjanvanb-gw-1",
"timestamp": 3247684956,
"time": "2020-10-21T15:24:40Z",
"channel": 0,
"rssi": -83,
"snr": 11.75,
"rf_chain": 0
}
]
}
}
2nd ACK, RX2, 869.525 MHz, port 0, downlink counter 1
{
"payload": "YBcTASYgAQAY8AQi",
"message": {
"app_id": "arjanvanb-app-testing",
"dev_id": "arjanvanb-heltec-dr-testing",
"port": 0
},
"gateway_id": "arjanvanb-gw-1",
"config": {
"modulation": "LORA",
"data_rate": "SF9BW125",
"airtime": 144384000,
"counter": 1,
"frequency": 869525000,
"power": 27
}
}
3rd try, 867.3 MHz, same payload, same uplink counter 1
{
"app_id": "arjanvanb-app-testing",
"dev_id": "arjanvanb-heltec-dr-testing",
"hardware_serial": "008F5B4F83EDA082",
"port": 9,
"counter": 1,
"confirmed": true,
"is_retry": true,
"payload_raw": "CQ==",
"metadata": {
"time": "2020-10-21T15:24:57.716178026Z",
"frequency": 867.3,
"modulation": "LORA",
"data_rate": "SF10BW125",
"airtime": 288768000,
"coding_rate": "4/5",
"gateways": [
{
"gtw_id": "arjanvanb-gw-1",
"timestamp": 3264285164,
"time": "2020-10-21T15:24:57Z",
"channel": 0,
"rssi": -74,
"snr": 9.75,
"rf_chain": 0
}
]
}
}
3rd ACK, RX2, 869.525 MHz, port 0, downlink counter 2
{
"payload": "YBcTASYgAgDpAYjM",
"message": {
"app_id": "arjanvanb-app-testing",
"dev_id": "arjanvanb-heltec-dr-testing",
"port": 0
},
"gateway_id": "arjanvanb-gw-1",
"config": {
"modulation": "LORA",
"data_rate": "SF9BW125",
"airtime": 144384000,
"counter": 2,
"frequency": 869525000,
"power": 27
}
}
@cslorabox, help?