I have an arduino MKRWAN-1310 which I connect to the arduino iot cloud via the TTN. Nothing sophisticated, yet, I have the standard setup which comes out of the Arduino configurator. I added an alive counter and a downlink channel with loopback to test. It seems that I am quite away from the nearest gateway.
My observation is:
Device is indoors -> no connection established
Device is outdoors -> connection established with up- and downlink
Go back indoors -> connection still works with up- and downlink
Reset the device -> no connection established
go back outdoors -> connection established.
When looking at the TTN console, I sometimes saw the join-request join-accept loop.
Similar observation at bad weather conditions. Yesterday it was raining. uplink and downlink worked. When I power cycled the device, the connection was dead and established after the rain was over.
I understand that rain dampens the radio waves. But then i would have expected a full connection breakdown.
Is there any difference between "first connection setup" and "normal data exchange"? Do I need a stronger signal for establishing the connection?
My nearest gateway (where connection works flawlessly once established) is 500m away.
Meanwhile I know a bit more.
In TTN console, I really could see that for establishing the connection, a weaker spreading factor (7) is used. When connection is established, the messages are sent with spreading factor (12) which gives much better signal quality (at longer airtime).
See this thread: MKRWAN / ArduinoIoTCloud change spreading factor for OTAA
The initial TTN join request might well be set to SF7, this is more airtime friendly for the Gateway.
However if SF7 fails then the node should, in time, attempt to join at SF8,SF9 etc.
If the node can join at SF7, not sure why it shifts to SF12. If the packets are received OK at SF7, which clearly they must be, then they are received OK. There is no 'better quality' reception in LoRa, it either works or it does not.