diff --git a/src/lora/lorawan.c b/src/lora/lorawan.c index 6a369e7..ec612bc 100644 --- a/src/lora/lorawan.c +++ b/src/lora/lorawan.c @@ -14,7 +14,9 @@ LOG_MODULE_REGISTER(lorawan_class_a); extern bool relais_state; const static struct device *lora_dev; static struct lorawan_join_config join_cfg; +static uint8_t dev_eui[8]; static uint8_t app_key[] = LORAWAN_APP_KEY; +static uint8_t join_eui[] = LORAWAN_APP_EUI; static void dl_callback(uint8_t port, uint8_t flags, int16_t rssi, int8_t snr, uint8_t len, const uint8_t *hex_data) @@ -46,6 +48,20 @@ struct lorawan_downlink_cb downlink_cb = { void init_lorawan() { + + /* set dev eui from MCU-ID (UID) of STM32WL */ + uint32_t uid_l = HAL_GetUIDw0(); + uint32_t uid_h = HAL_GetUIDw1(); + + dev_eui[0] = (uid_h >> 24) & 0xFF; + dev_eui[1] = (uid_h >> 16) & 0xFF; + dev_eui[2] = (uid_h >> 8) & 0xFF; + dev_eui[3] = (uid_h) & 0xFF; + dev_eui[4] = (uid_l >> 24) & 0xFF; + dev_eui[5] = (uid_l >> 16) & 0xFF; + dev_eui[6] = (uid_l >> 8) & 0xFF; + dev_eui[7] = (uid_l) & 0xFF; + int err; lora_dev = DEVICE_DT_GET(DT_ALIAS(lora0)); @@ -69,8 +85,9 @@ void init_lorawan() lorawan_register_downlink_callback(&downlink_cb); join_cfg.mode = LORAWAN_ACT_OTAA; + join_cfg.dev_eui = dev_eui; + join_cfg.otaa.join_eui = join_eui; join_cfg.otaa.app_key = app_key; - join_cfg.otaa.dev_nonce = sys_rand16_get(); } void join_network_otaa() @@ -79,8 +96,6 @@ void join_network_otaa() while (lorawan_join(&join_cfg) < 0) { LOG_ERR("lorawan_join_network failed: %d, retrying..", ret); - // use another dev nonce - join_cfg.otaa.dev_nonce = sys_rand16_get(); k_sleep(K_MSEC(5000)); } LOG_INF("Succesfully joined network over OTAA"); diff --git a/src/lora/lorawan.h b/src/lora/lorawan.h index 57ead51..f9e9dc2 100644 --- a/src/lora/lorawan.h +++ b/src/lora/lorawan.h @@ -7,9 +7,11 @@ #define LORAWAN_APP_KEY {0x71, 0x5A, 0x39, 0xB2, 0x86, 0xC3, \ 0x37, 0xA3, 0xC4, 0xF0, 0x78, 0xF9, \ 0x0F, 0x33, 0x07, 0x7D} +#define LORAWAN_APP_EUI {0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, \ + 0x0F, 0x0F} #define RETRY_DELAY K_MSEC(1000) -#define SEND_INTERVALL K_SECONDS(20) +#define SEND_INTERVALL K_MINUTES(5) void init_lorawan();