UpLinks channels

Hello everybody ,

I was just wondering how does the end_device chooses a channel to send uplinks .

Is it specified in the JoinAccept or is it always random depending on the availability of each channel ?


Devices are supposed to randomly choose an uplink channel to use, among the channels it knows of.

Each LoRaWAN region has some fixed channels. Every compliant device will support at least these channels. Some regions like US915, AU915 and CN470, cannot have additional channels defined. Other regions, may have additional channels defined by the LoRa network operator - so as long as they fit within the local RF regulations.

So how do devices know of these additional channels?

  • Via an out-of-band mechanism: the channels could be pre-configured at the factory.
  • Via MAC commands like NewChannelReq, sent by the LoRa Network Server (LNS).
  • Via the CFList, sent as part of the Join Accept message during OTAA.

I see , thank you for your reply .
I’m a bit confused because , as you can see here in a JoinAccept message , there is nothing about channels or CFList

yet the end_device used channel 1 for Join_request and channel 0 for sending data

Also , in the gateway profile , only channel 0 is enabled

And this is what the network server configuration file says about channels

Before the node interacts with the LNS, it can only operate with the information that it has. Since you are using EU868, this means it supports at least the 3x default channels (868.1, 868.3 and 868.5MHz) and you will probably see the JOIN REQUEST appearing on these channels.

Network server configuration: this allows you to define additional channels, alongside the fixed channels for your region.

I recall that channels mentioned in “gateway profile” do something else: Gateway-profile enabled channels / LoRa Server extra channels - ChirpStack Network Server - ChirpStack Community Forum
Looks like it is for configuring the channels supported by the gateway. When the channels are configured manually via local_conf.json etc (i.e. the classic Semtech UDP Packet Forwarder is used), this section has no effect.

As for the CFList not appearing: I’m not sure why it didn’t appear for you, if the LNS was configured correctly to support additional channels.