Let's have a look @ some other setup.
Location: Vienna, close to center.
Acks: Not used.
Receiver: Orange Pi Zero with custom Gateway Hat with noise filtering (using mains power) with RFM69HW
Sender: Custom battery powered nodes with RFM69W
Same Radio settings as above, but sensitivity: -110 dBm
I have measured packet loss from 5 sender devices over a time window of ~ 16,5 hours.
Device | Received | Missed | Packet Loss %
A | 2000 | 28 | 1,38%
B | 1978 | 27 | 1,35%
C | 2002 | 45 | 2,20%
D | 1970 | 26 | 1,30%
E | 2000 | 25 | 1,23%
A 2nd test showed similar results ranging from 0,91% to 1,74%.
I repeated the same test, this time, with a battery powered node as receiver - just to make sure it has nothing to do with noise on the power line.
The results were even slightly worse: ranging from 1,3% to 2,41% packet loss.
Using the gateway as receiver again, I changed radio settings (BR 76,8 kbps, BW 125kHz, Whitening, changing sync word etc) but the figures were still not better.
So what happend when reducing sensitivity to -90 dBm? Still no substantial improvement.
Because RFM69 libraries are broken by design in a 2nd manner. It has to do with the way the transceiver works when listening for packets. It goes through multiple stages.
The problem is: If you only wait for "Payload Ready" the receiver can be caught in the wrong stage, just at the very moment when your sender is transmitting the message - in this case the receiver will miss the packet, because it was waiting for the end of the packet of the "wrong" sender.
This is the reason for the packet loss.
After fixing this error by introducing timeouts, I have achieved the following figure:
Received | Missed | Packet Loss %
2745 | 7 | 0,25%
Same environment, same receiver, one the the same senders, same message frequency.
Before I had missed packets every hour. At maximum I would have 1 hour without missed packets. Now 5-6 hours can pass without a single missed packet. All figures are without ACKs/retransmissions.