Impossible JOIN on Objenious Network

Hello,

I have two devices Wifi Lora V2 and HTCC-AB02A with the same issue of joining.
I try to join to the Objenious network (https://objenious.com/) French operator EU868.
I have the message repeatly “JOINING” … .

When I try on TTN network with exactly the same program it works perfectly (of course I remove registration from TTN before to test on Objenious).

Any help will be appreciate

The configuration I have for my Wifi Lora V2:
build_flags =
-D REGION_EU868
-D ACTIVE_REGION=LORAMAC_REGION_EU868
-D LoRaWAN_DEBUG_LEVEL=0

I use the default program OTAA_OLED:
/*

  • HelTec Automation™ LoRaWAN 1.0.2 OTAA example use OTAA, CLASS A
  • Function summary:
    • use internal RTC(150KHz);
    • Include stop mode and deep sleep mode;
    • 15S data send cycle;
    • Informations output via serial(115200);
    • Only ESP32 + LoRa series boards can use this library, need a license
  • to make the code run(check you license here: http://www.heltec.cn/search );
  • You can change some definition in “Commissioning.h” and “LoRaMac-definitions.h”
  • HelTec AutoMation, Chengdu, China.
  • 成都惠利特自动化科技有限公司
  • https://heltec.org
  • support@heltec.cn

*this project also release in GitHub:
*https://github.com/HelTecAutomation/ESP32_LoRaWAN
*/

#include <ESP32_LoRaWAN.h>
#include “Arduino.h”

/*license for Heltec ESP32 LoRaWan, quary your ChipID relevant license: http://resource.heltec.cn/search */
uint32_t license[4] = {0x0E506D33, 0xED763A11, 0x269C6784, 0x4D213E5C};

/* OTAA para*/

uint8_t DevEui[] = { VALUES }; // pour OTAA connexion
uint8_t AppEui[] = { VALUES };
uint8_t AppKey[] = { VALUES };

/* ABP para*/
uint8_t NwkSKey[] = { [VALUES };
uint8_t AppSKey[] = { [VALUES] };
uint32_t DevAddr = ( uint32_t )0x007e6ae1;

/LoraWan channelsmask, default channels 0-7/
uint16_t userChannelsMask[6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 };

/LoraWan Class, Class A and Class C are supported/
DeviceClass_t loraWanClass = CLASS_A;

/the application data transmission duty cycle. value in [ms]./
uint32_t appTxDutyCycle = 15000;

/OTAA or ABP/
bool overTheAirActivation = true;

/ADR enable/
bool loraWanAdr = true;

/* Indicates if the node is sending confirmed or unconfirmed messages */
bool isTxConfirmed = true;

/* Application port */
uint8_t appPort = 2;

/*!

  • Number of trials to transmit the frame, if the LoRaMAC layer did not
  • receive an acknowledgment. The MAC performs a datarate adaptation,
  • according to the LoRaWAN Specification V1.0.2, chapter 18.4, according
  • to the following table:
  • Transmission nb | Data Rate
  • ----------------|-----------
  • 1 (first) | DR
  • 2 | DR
  • 3 | max(DR-1,0)
  • 4 | max(DR-1,0)
  • 5 | max(DR-2,0)
  • 6 | max(DR-2,0)
  • 7 | max(DR-3,0)
  • 8 | max(DR-3,0)
  • Note, that if NbTrials is set to 1 or 2, the MAC will not decrease
  • the datarate, in case the LoRaMAC layer did not receive an acknowledgment
    */
    uint8_t confirmedNbTrials = 8;

/*LoraWan debug level, select in arduino IDE tools.

  • None : print basic info.
  • Freq : print Tx and Rx freq, DR info.
  • Freq && DIO : print Tx and Rx freq, DR, DIO0 interrupt and DIO1 interrupt info.
  • Freq && DIO && PW: print Tx and Rx freq, DR, DIO0 interrupt, DIO1 interrupt, MCU sleep and MCU wake info.
    */
    uint8_t debugLevel = LoRaWAN_DEBUG_LEVEL;

/LoraWan region, select in arduino IDE tools/
LoRaMacRegion_t loraWanRegion = ACTIVE_REGION;

static void prepareTxFrame( uint8_t port )
{
appDataSize = 4;//AppDataSize max value is 64
appData[0] = 0x00;
appData[1] = 0x01;
appData[2] = 0x02;
appData[3] = 0x03;
}

// Add your initialization code here
void setup()
{
if(mcuStarted==0)
{
LoRaWAN.displayMcuInit();
}
Serial.begin(115200);
while (!Serial);
SPI.begin(SCK,MISO,MOSI,SS);
Mcu.init(SS,RST_LoRa,DIO0,DIO1,license);
deviceState = DEVICE_STATE_INIT;
}

// The loop function is called in an endless loop
void loop()
{
switch( deviceState )
{
case DEVICE_STATE_INIT:
{
LoRaWAN.init(loraWanClass,loraWanRegion);
break;
}
case DEVICE_STATE_JOIN:
{
LoRaWAN.displayJoining();
LoRaWAN.join();
break;
}
case DEVICE_STATE_SEND:
{
LoRaWAN.displaySending();
prepareTxFrame( appPort );
LoRaWAN.send(loraWanClass);
deviceState = DEVICE_STATE_CYCLE;
break;
}
case DEVICE_STATE_CYCLE:
{
// Schedule next packet transmission
txDutyCycleTime = appTxDutyCycle + randr( -APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND );
LoRaWAN.cycle(txDutyCycleTime);
deviceState = DEVICE_STATE_SLEEP;
break;
}
case DEVICE_STATE_SLEEP:
{
LoRaWAN.displayAck();
LoRaWAN.sleep(loraWanClass,debugLevel);
break;
}
default:
{
deviceState = DEVICE_STATE_INIT;
break;
}
}
}

Here are the logs in debug mode, what is strange is that the device is always sending information ? I mean as the joining should wait a response and never stops to send messages.

ESP32 MCU init...
ESP32 MCU inited OK!

LoRaWAN EU868 Class A start!

joining…
TX on freq 868100000 Hz at DR 5
DIO0:TX Done
RX on freq 868100000 Hz at DR 5
DIO1:RX Timeout
RX on freq 869525000 Hz at DR 0
DIO1:RX Timeout
TX on freq 868500000 Hz at DR 5
DIO0:TX Done
RX on freq 868500000 Hz at DR 5
DIO1:RX Timeout
RX on freq 869525000 Hz at DR 0
DIO1:RX Timeout
TX on freq 868500000 Hz at DR 5
DIO0:TX Done
RX on freq 868500000 Hz at DR 5
DIO1:RX Timeout
RX on freq 869525000 Hz at DR 0
DIO1:RX Timeout
TX on freq 868500000 Hz at DR 5
DIO0:TX Done
RX on freq 868500000 Hz at DR 5
DIO1:RX Timeout
RX on freq 869525000 Hz at DR 0
DIO1:RX Timeout
TX on freq 868500000 Hz at DR 5
DIO0:TX Done
RX on freq 868500000 Hz at DR 5
DIO1:RX Timeout
RX on freq 869525000 Hz at DR 0
DIO1:RX Timeout
TX on freq 868300000 Hz at DR 5
DIO0:TX Done
RX on freq 868300000 Hz at DR 5
DIO1:RX Timeout
RX on freq 869525000 Hz at DR 0
DIO1:RX Timeout
TX on freq 868300000 Hz at DR 5
DIO0:TX Done
RX on freq 868300000 Hz at DR 5
DIO1:RX Timeout
RX on freq 869525000 Hz at DR 0
DIO1:RX Timeout
TX on freq 868300000 Hz at DR 4
DIO0:TX Done
RX on freq 868300000 Hz at DR 4
DIO1:RX Timeout
RX on freq 869525000 Hz at DR 0
DIO1:RX Timeout
TX on freq 868300000 Hz at DR 5
DIO0:TX Done

I don’t know if this link can help : https://www.wiki.dragino.com/index.php?title=Connection_to_Objenious
They explain this :
The reason of fail to join Objenious is that our end node use RX2DR=3 for join. this is the default setting for TTN and many LoRaWAN servers.

Objenious uses RX2DR=0 for Join, when Objenious sends a Join Accept, due to RX2DR different, the end node can not receive the Join Accept message from Objenious so keep joining.

Some of End Nodes already support the change on RX2DR for OTAA join, in this case, use need to write AT+RX2DR=0. Please contact Dragino support for more info if the product doesn’t support it.

How can I check all is good on my device ?

I checked and I need to be in SF9 for RX2 do you think I need to change something for appPort and/or Channels ?

Thanks

So TTN and many LoRaWAN servers use for RX2DR = 3 (SF9) Objenious on the contrary use RX2DR = 0 (SF12). What i don’t understand is that OTAA have, for me, to adapt even if ttn-otaa.ino is designed for ttn use ?

What do I have to adapt for it working ? Thanks a lot for your help

1 Like

I have the same problem with my HTCC-AB02S and the helium network (especially BOBCAT hotspots)

I downgraded the Arduino Cubecell Boards software to version 1.0.0 and its working as it should

However I would appreciate to have a properly working LoraWAN in the next version, as software like this dont work on the old libs…

Please fix it thank you.

Hello, did someone already successful on joining Objenious LORAWan ? with heltec products?

Hello Vincent, did you solve your issue ?
I have the same type of problem when trying to connect to AWS IoT

Hello,

We change Objenious to Orange and it works as is for us. The issue was coming from the operator Objenious and we prefer stopping with them.

Regards

Hello,

Thank you for you reply.
Please note that I solved my problem (not with objenious but with my own semtech comaptible gateway) and perhaps it could help you :

There was an error in the regionEU868.c library.

According to Semtech, 7th parameter of the Radio.SetTxConfig function, should be set to 8 when using LoRa (and 5 when using FSK), as follow (in bold)

if( txConfig->Datarate == DR_7 )
{ // High Speed FSK channel
modem = MODEM_FSK;
Radio.SetTxConfig( modem, phyTxPower, 25000, bandwidth, phyDr * 1000, 0, 5, false, true, 0, 0, false, 3000 );
}
else
{
modem = MODEM_LORA;
Radio.SetTxConfig( modem, phyTxPower, 0, bandwidth, phyDr, 1, 8, false, true, 0, 0, false, 3000 );
}

In the Heltec library it was set to 16 (necessary when using some Heltec gateways).

Since this modification, my Heltec devices connect immediately !

I understood the problem because (by chance and before giving up, disgusted) I have found a new Heltec library where this parameter is not hardcoded, but replaced by LORAWAN_PREAMBLE_LENGTH, and I defined :
#define LORAWAN_PREAMBLE_LENGTH 8 in LoRaMac.h in order to test : bingo it worked.

It seems like this parameter will be settable in the Arduino Environment in the future, I have already done the modification, tell me if you are interested.

Regards
Frederic - Toulouse

merci beaucoup Frédéric !!

Vincent - Bidart

Bonjour,

Avec plaisir,

Frédéric - Toulouse