Network Interference and Channel Selection

851 views
Skip to first unread message

Michael Simpson

unread,
Apr 15, 2021, 11:34:24 PM4/15/21
to openthread-users

I have ongoing reliability issues with my Thread network. Sometimes it works great and sometime it is very poor. My site is in India and I am in New Zealand so getting packet traces from site is not feasible.

My neighbor table reports pretty healy RSI figures.

> neighbor table

| Role | RLOC16 | Age | Avg RSSI | Last RSSI |R|D|N| Extended MAC     |

+------+--------+-----+----------+-----------+-+-+-+------------------+

|   R  | 0x1000 |  35 |      -61 |       -74 |1|1|1| ee75f27115b3b73e |

|   R  | 0x5400 |  10 |      -46 |       -46 |1|1|1| 1259d3d093fa70e4 |

|   R  | 0xec00 |  24 |      -53 |       -55 |1|1|1| 56d57cca7193daa9 |


Done


I am wondering interference is my problem and wanting to explore selection of the channel.

I elected to use channel 15 because it was the default channel otbr-web used in it "Form" page.  Is there anything behind using channel 15 or are all channels 11 - 26 equally valid?

I read in the Openthread CLI documentation that there is a "channel monitor" command  which can display occupancy how busy each channel is?

When I try to run this from ot-ctl on my BorderRouter, I get
> channel monitor
Error 7: InvalidArgs

So it looks like this is not enabled on the otbr-agent. Can I enable OPENTHREAD_CONFIG_CHANNEL_MONITOR_ENABLE and rebuild the otbr-agent to run this from ot-ctl and get an idea what my site is like for selecting which channel to use? Can you confirm I don't need to rebuild the RCP to enable this?  Is this parameter used by the otbr-agent, ot-ctl or RCP?

I am thinking if I enable this on my otbr, and then form my network with the dataset channel parameter set to the quietest channel, my REEDs (which don't start up with a complete dataset), should be able to join the network formed by my otbr RCP as the Leader.

Am I on the right track here or misunderstanding how this works and wasting my time?

Thanks


Michael Simpson

unread,
Apr 15, 2021, 11:39:05 PM4/15/21
to openthread-users
Sorry clicked Post prematurely.

My application is retail petrol stations, with REEDs mounted in the pumps.

When it works well all my pump REEDs work well. When I have a problem with CoAP message timeouts, all my REEDs are affected. 

So I am suspecting interference where my OTBR - RCP is located in the sale office where there is WIFI 
Thanks


Jonathan Hui

unread,
Apr 16, 2021, 12:50:04 AM4/16/21
to Michael Simpson, openthread-users
On Thu, Apr 15, 2021 at 8:34 PM Michael Simpson <michae...@gmail.com> wrote:

I am wondering interference is my problem and wanting to explore selection of the channel.

I elected to use channel 15 because it was the default channel otbr-web used in it "Form" page.  Is there anything behind using channel 15 or are all channels 11 - 26 equally valid?

I read in the Openthread CLI documentation that there is a "channel monitor" command  which can display occupancy how busy each channel is?

When I try to run this from ot-ctl on my BorderRouter, I get
> channel monitor
Error 7: InvalidArgs

So it looks like this is not enabled on the otbr-agent. Can I enable OPENTHREAD_CONFIG_CHANNEL_MONITOR_ENABLE and rebuild the otbr-agent to run this from ot-ctl and get an idea what my site is like for selecting which channel to use? Can you confirm I don't need to rebuild the RCP to enable this?  Is this parameter used by the otbr-agent, ot-ctl or RCP?

You can enable the channel monitor feature by enabling the CHANNEL_MONITOR build flag - see examples/README.md.

No changes are required on RCP or ot-ctl.

I am thinking if I enable this on my otbr, and then form my network with the dataset channel parameter set to the quietest channel, my REEDs (which don't start up with a complete dataset), should be able to join the network formed by my otbr RCP as the Leader.

Am I on the right track here or misunderstanding how this works and wasting my time?

If interference is truly the issue, then channel monitor can help. Channel monitor works by periodically cycling through each channel and sampling the energy on the channel. Because the device is leaving the network's operational channel to perform this sample, the channel monitor has to spread samples out and aggregate them over time. 

You mentioned that your REEDs are either all working well or all not working well. This could also point to an issue in the RCP itself.

--
Jonathan Hui

Michael Simpson

unread,
Apr 16, 2021, 2:51:34 AM4/16/21
to openthread-users
Hi Jonathan

Thanks for your help.

I edited the file  ../ot-br-posix/third_party/openthread/repo/examples/common-switches.mk (see file attached) and set the following switches to 1

CHANNEL_MONITOR     ?= 1  

DIAGNOSTIC          ?= 1

CHANNEL_MONITOR  seem to control: 

ifeq ($(CHANNEL_MONITOR),1)

COMMONCFLAGS                   += -DOPENTHREAD_CONFIG_CHANNEL_MONITOR_ENABLE=1

endif

I then rebuilt the border-router from my /ot-br-posix directory running: sudo script/update

See trace capture attached.

The date stamp in my /usr/sbin updated from my otrb-web, otbr-agent and ot-ctl files.  

I restarted otbr-agent    sudo service otbr-agent restart.

My border-router is working fine, but neither the diagnostic or channel monitor commands work or show in the help menu.

> channel

23

Done

> channel monitor

Error 7: InvalidArgs

> diagnostic

Error 35: InvalidCommand

>


OTBR Rebuild.txt
common-switches.mk

Jonathan Hui

unread,
Apr 16, 2021, 10:38:25 AM4/16/21
to Michael Simpson, openthread-users
The ot-br-posix setup script uses CMake to build OpenThread. You can specify the build options in third_party/openthread/CMakeLists.txt.

--
Jonathan Hui



--
You received this message because you are subscribed to the Google Groups "openthread-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openthread-use...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openthread-users/9f547e0d-6788-4ce9-80a4-577d72a7e30dn%40googlegroups.com.

Michael Simpson

unread,
Apr 17, 2021, 2:52:05 AM4/17/21
to openthread-users
Hi Jonathan
Sorry I don't understand what I am supposed to do.

Have I edited the correct file to enable CHANNEL_MONITOR  and DIAGNOSTIC?

Can you please give me the command line on how to use cmake build OpenThread in context with the above.

Thanks
Michael

Jonathan Hui

unread,
Apr 19, 2021, 2:58:25 PM4/19/21
to Michael Simpson, openthread-users
You need to add the following lines to third_party/openthread/CMakeLists.txt:

set(OT_CHANNEL_MONITOR ON CACHE BOOL "enable joiner" FORCE)
set(OT_DIAGNOSTIC ON CACHE BOOL "enable joiner" FORCE)

Then run ./script/update

--
Jonathan Hui



Michael Simpson

unread,
Apr 19, 2021, 9:50:28 PM4/19/21
to openthread-users
Thanks Jonathan
All going now
Cheers

Konrad Derda

unread,
Apr 20, 2021, 9:14:10 AM4/20/21
to openthread-users
Hello,
Two comments regarding the problem you have described:
1. What is the OT revision that you use? The following change introduced around a month ago changed the default max number of MAC retransmissions to 15, which slightly improves the communication, if you use the previous default version (3) the number of dropped packets will be higher.

2. If you would like to use channel monitoring please note that in order to switch channels automatically you have to enable the OT_CHANNEL_MANAGER feature - it uses data provided by the channel monitor to determine whether there is any "better" channel. Channel manager uses the pending datasets to propagate channel switch over a network, please verify changes "on your desk" before deploying software to your products - broken or incomplete pending datasets can totally break the communication between devices. 

Best regards
Konrad Derda

Michael Simpson

unread,
Apr 21, 2021, 2:35:41 AM4/21/21
to openthread-users
Hi Konrad
Are you from Silabs?
The reason I ask is that in the project configurator, Openthread defaults to Version 1.1 and Thread 1.2 features default to off.
I would like to know if Silabs think it is safe to switch to their release of thread 1.2 and its features?

I wanted to use channel monitoring to get an idea if any of the channels are "busy" in my local environment. ot-ctl reports that they are all quiet.

Following on from Jonathans advice, another thing which is common to all the REEDs coms link dropping is the RCP and Border-Router.

On my host application I am using Californium CoAP through the wpan0 network provided by the Border-Router. I have found that Californimum occasionally reports "No mesh address found" which is what happens if I stop otbr-agent to bring down the Border-Router.  It only goes down about once every 1-2 hours for a few seconds and then comes back up again. I am running some tests to find out if it is related to how busy the wpan0 network traffic gets.

I am also running a task which monitors "ifconfig" to see wpan0 drops out. I might expand this to monitor the border-router's RLOC using ot-ctl.

My questions are, is there anything known to cause this to occur, and are there any logs from otbr-agent which can report any errors to help me track down what might be happening. Is there a switch to activate the logs and where are they placed?

Konrad Derda

unread,
Apr 21, 2021, 5:46:42 PM4/21/21
to openthread-users
Hello,
I am not a Silicon Labs employee and I cannot speak on behalf of them.


The reason I ask is that in the project configurator, Openthread defaults to Version 1.1 and Thread 1.2 features default to off.
OpenThread repositories have moved to Thread 1.2  version enabled by default (https://github.com/openthread/openthread/pull/6281), if you use some kind of SDK I think it would be the best to consult it with its maintainers.

Thread specification defines Network Diagnostics module that can be built in for your REEDs so they can receive queries from your Border Router. Maybe it could somehow help you also. It would be a good first step to determine if communication between other devices is stable when Border Router is down.

and are there any logs from otbr-agent which can report any errors to help me track down what might be happening
You should be able to read logs with 'cat /var/log/syslog | grep otbr'.
 
Best regards
Konrad Derda

Sébastien Parent-Charette

unread,
Apr 22, 2021, 11:00:04 AM4/22/21
to openthread-users
Hi Michael, Konrad,

Well, I am a Silicon Labs employee and I can provide some clarification on the points brought up by Michael previously.

1) The reason I ask is that in the project configurator, Openthread defaults to Version 1.1 and Thread 1.2 features default to off.
The reason our OT release in the GSDK (3.1.x) defaults to Thread 1.1 specs is that Thread 1.2 specs are still in alpha for that GSDK release. Therefore, while many things are implemented and working some features are not fully supported yet. I recommend you check the release notes for more details. You can find them here [1.1.2.0, pdf; 2021-04-07]. More specifically, check section 7.2 [pdf] for details on enabling OT 1.2 and its status.

2) I would like to know if Silabs think it is safe to switch to their release of thread 1.2 and its features?
The next big release of the GSDK (3.2) is coming soon and will include Thread 1.2 specs fully supported (i.e.: production level quality/ready).

Sincerely,
Reply all
Reply to author
Forward
0 new messages