TLDR;
Chirpstack do not send LoRaWan Ack if it failed to send data to http when integration is configured.
But, my understanding is that LoRaWan Ack must be sent if LoRaWan NS have received LoRaWan ConfirmedDataUp , Meaning that device has send correctly the data to the network server.
Failed to send to any “integration” must be managed by an application level ack.
=======================
I’m currently using chirpstack 4.0.2 on docker.
I have an application with an http integration and devices that are sending regularly confirmedDataUp.
It work fine but I found recently that when http request (from http integration) receive an error code, then no LoRaWan ack is sent on Downlink.
For testing purpose, I have set up another application with a single device sending uplink every two minutes and I can confirm that:
- LoRaWan Donwnlink ACK are not sent as soon as i disable http endpoint.
- LoRaWanDownlink ACK are sent as soon as I reenable endpoint.
This is the last event logged in chirpstack when it fails (This fail was made on purpose, simulating maintenance on http endpoint server)
ERROR up{deduplication_id=ccc0e62b-3d55-445f-b9ad-7a1622132354}: chirpstack::uplink::data: Handle uplink error error=error sending request for url (http://xxx.yyyy.zz:pppp/decode/api/v1/devices?event=up): error trying to connect: tcp connect error: Connection refused (os error 111
In some cases it could be problematic because I got some devices that will rejoin if several LoRaWan downlink ack are missing, meaning that somehow, device could not reach NS.
I didn’t see anything about this on forum. I think Chirpstack consider that LoRaWan must not send LoRaWan Ack if message is not received at the end by Http application server.
But, my understanding is that LoRaWan Ack must be sent if LoRaWan NS have received LoRaWan ConfirmedDataUp, Meaning that device has send correctly the data to the network server.
However, LoRaWan Ack must be always sent if NS has received confirmedDataUp from a device (if gateways/channels/DC available for DL is available)
Thanks in advance if you have some workaround / solution to this problem