I have long suspected that setting is_router true causes the node to start missing messages. I can’t put my finger on why because the code for router mode seems to only affect power states. This weekend B8b8 and I ran a gauntlet of tests which proves that my suspicions are true.
Here is our mesh diagram.
All nodes are T-Beams with v1.2.30 on USB power. CF3 has a dummy load in place of the antenna. It has enough PCB leakage to connect with CF1 but not BN*. I can prove this by looking at the CF3 debug screen and all of BN* nodes have a hop limit of 2 meaning CF1 decremented the messages.
CF1 is set is_router true. BN6 (left) sent 8 messages in quick succession. CF3 (right) received 4 messages.
We repeated this test a few times to make sure it was repeatable. In this test, CF3 (right) only received 1 of the 8 messages. BN2 (center) received all of the messages from BN6 (left).
As a sanity check, I replaced the dummy load on CF3 with an antenna so BN6 (left) can talk direct to CF3 (right). All tests came though.
I then replaced the dummy load to CF3 (right) and set CF1 to is_router false. All test messages came though and I verified that hop limit on incoming messages was 2.
We repeated the test a few times to make sure it was consistent. Sometimes the messages came out of order, and a lot of times the ack timed out because we were sending messages quickly, but there were no dropped messages when router mode was turned off.