The LoRa Developer Forum is now in read-only mode and new content will not be added. If you require technical support related to LoRa, please contact our experts here. For sales enquiries, please contact us here.

FORUM

LoRaWAN duty cycle

Hi,

I would like to expose a problem I have observed with the LoRaWAN stack. My stack was downloaded from the LoRaMac-Node github (version 4.4.5 of 14/10/2020).

The problem I have is the apparition of return code LORAMAC_STATUS_DUTYCYCLE_RESTRICTED when trying to join the network. This error always appears when sending the 13th Join request message (no Join Accept message transmitted from the network). This message is sent around 4 hours after the last successfully transmitted Join message. Duty cycle restriction should not appears at that stage.

Did someone has ever seen this kind of issue ?

Here is the code to transmit Join request :

LoRaMacStatus_t mac_status;
static Mlmereq_t mlmeReq ;

mlmeReq.Type = MLME_JOIN;
mlmeReq.Req.Join.Datarate = 0; // SF12
mac_status = LoRaMacMlmeRequest(&mlmeReq);

Thank you for helping

The LoRaWAN specifies a back-off algorithm for the JoinReq uplinks.
This back-off algorithm is similar to a DutyCycle restriction.

Please refer to chapter “7 Retransmissions back-off” of the LoRaWAN® 1.0.3 Specification document.

Thank you for this reply !

A question more… here is the join sequence I have :

00> Debug module init
00> 00:00:00:00:000 : MAIN -> Initialization…

00> 00:00:00:00:092 : LOW_POW -> Join request… #1
00> 00:00:03:22:699 : LOW_POW -> Join request… #2

00> 00:00:15:33:661 : LOW_POW -> Join request… #3
00> 00:00:19:05:789 : LOW_POW -> Join request… #4

/////// end of first hour

00> 00:01:17:07:578 : LOW_POW -> Join request… #5
00> 00:01:20:37:953 : LOW_POW -> Join request… #6

00> 00:05:16:59:695 : LOW_POW -> Join request… #7
00> 00:05:20:31:812 : LOW_POW -> Join request… #8

00> 00:09:14:29:457 : LOW_POW -> Join request… #9
00> 00:09:18:00:610 : LOW_POW -> Join request… #10

/////// end of next ten hours (11 hours)

00> 00:13:11:29:634 : LOW_POW -> Join request… #11
00> 00:13:14:46:652 : LOW_POW -> Join request… #12

00> 00:17:09:24:059 : LOW_POW -> Join request… #13 : DC restricted error

I get the “DC restricted error” after the first 11 hours. I am in the case were I can transmit 8.7 seconds per 24 hours (LoRaWAN spec 1.0.3 chapter 7 as you mentionned).

A join is 23 bytes long. At SF12, it will have a duration of 1.483s. 3 Join request is 4.4s < 8.7s. If the stack manages the 8.7s limit “as an aggregated time”, I should not be blocked.

So my question is how is managed the limitation into the stack ? Or maybe I’m wrong somwhere ?

Thanks for your feedback

The observed behavior looks normal.

With current implementation of the duty-cycle/back-off management algorithm we could end up violating the ETSI recommendations. In order to ensure that we never violate the regulations we have decided to reduce the observation window by 2.