This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Thread Network RSSI

Hello,

I developed a Thread network starting off from SDK for Thread 4.1 multiprotocol example. In my application I send data over MQTT-SN with a period of 1 second (packet size is about 100 bytes).
It happens frequently that a packet requires retransmissions due to missing publication acknowledge. I think the reason is related to poor network connection.

I measured RSSI using Thread CLI (commands "scan" and "scan energy").
Here are the RSSi values considering different distances between Thread node and Border Router:

- 1cm distance: RSSI is about -30dB.
- 1m distance: RSSI is about -60dB.
- 3m distance: RSSI is about -70dB.

I wonder if these values are a bit too low to not have loss of data. I also set radio power on the node to 8dB using thread API otPlatRadioSetTransmitPower().
Is there any way to improve this behavior?


Also, is there any way I can increase radio power on the NCP connected to the Raspberry Pi (Border Router)?

Thanks!

  • There are different layers of ACKing. As you can see there is a default network Ack, and a Publish Ack. The difference is that the Publish Ack is from a different layer in the stack, and I don't think it is possible to disable this. 

    If you would have had 3 nodes, A, B and C. Let us say that A sends a message to C, and the routing is via B. The message requires an application Ack.

    If everything works as intended, then A will send the message to B, and B will Ack it. Then B will send it to C and C will Ack it. Then C will send a Publish Ack back to A. It will start by sending this from C to B, and B will Ack that message. Then B will forward that message to A, and A would Ack it. 

    If at any point a packet is dropped, it would be retransmitted, as long as it doesn't pick up the Ack. However, if the message is lost between B and C, then A would wait for 5000ms, and if it didn't receive the Publish Ack before that, it would retransmit the original message to C (via B).

    Hopefully, that didn't confuse more than it explained.

    Best regards,

    Edvin

Related