diff --git a/src/lora/lorawan.c b/src/lora/lorawan.c index 0207027..405da79 100644 --- a/src/lora/lorawan.c +++ b/src/lora/lorawan.c @@ -24,7 +24,7 @@ static uint8_t app_key[] = LORAWAN_APP_KEY; static uint8_t join_eui[] = LORAWAN_APP_EUI; /* ABP keys and address */ -static uint32_t dev_addr = LORAWAN_DEV_ADDR; +static uint8_t dev_addr[] = LORAWAN_DEV_ADDR; static uint8_t nwks_key[] = LORAWAN_NWKS_KEY; static uint8_t apps_key[] = LORAWAN_APPS_KEY; @@ -308,14 +308,14 @@ void join_network_otaa() void join_network_abp() { LOG_INF("Starting ABP activation..."); - LOG_INF("DevAddr: 0x%08X", dev_addr); + LOG_INF("DevAddr: 0x%02X%02X%02X%02X", dev_addr[0], dev_addr[1], dev_addr[2], dev_addr[3]); LOG_HEXDUMP_INF(nwks_key, 16, "NwkSKey: "); LOG_HEXDUMP_INF(apps_key, 16, "AppSKey: "); /* Configure ABP parameters */ join_cfg.mode = LORAWAN_ACT_ABP; join_cfg.dev_eui = dev_eui; - join_cfg.abp.dev_addr = dev_addr; + join_cfg.abp.dev_addr = (dev_addr[0] << 24) | (dev_addr[1] << 16) | (dev_addr[2] << 8) | dev_addr[3]; join_cfg.abp.nwk_skey = nwks_key; join_cfg.abp.app_skey = apps_key; @@ -327,7 +327,7 @@ void join_network_abp() } LOG_INF("✓ Successfully activated LoRaWAN network via ABP"); - printk("Device 0x%08X activated via ABP\n", dev_addr); + printk("Device 0x%02X%02X%02X%02X activated via ABP\n", dev_addr[0], dev_addr[1], dev_addr[2], dev_addr[3]); } void send_data_packet(char *data, uint8_t data_len) @@ -354,7 +354,7 @@ void send_data_packet(char *data, uint8_t data_len) else { LOG_INF("✓ Data packet sent successfully!"); - LOG_INF("DevAddr: 0x%08X, Port: %d, Length: %d bytes", dev_addr, LORAWAN_PORT, data_len); + LOG_INF("DevAddr: 0x%02X%02X%02X%02X, Port: %d, Length: %d bytes", dev_addr[0], dev_addr[1], dev_addr[2], dev_addr[3], LORAWAN_PORT, data_len); break; } diff --git a/src/lora/lorawan.h b/src/lora/lorawan.h index d75d1cc..e372a18 100644 --- a/src/lora/lorawan.h +++ b/src/lora/lorawan.h @@ -4,13 +4,13 @@ #define LORAWAN_PORT 2 /* ABP Configuration */ -#define LORAWAN_DEV_ADDR {0x01, 0x94, 0xC6, 0x5F} -#define LORAWAN_NWKS_KEY {0x26, 0x8F, 0xDA, 0x93, 0x3F, 0x4C, \ - 0xAE, 0xBF, 0x96, 0xA3, 0x0F, 0xE7, \ - 0x60, 0x27, 0xA4, 0x1E} -#define LORAWAN_APPS_KEY {0x40, 0x80, 0x09, 0xCA, 0x1D, 0x9F, \ - 0xE2, 0xB8, 0x22, 0xF4, 0x68, 0x4D, \ - 0x76, 0x33, 0x13, 0x00} +#define LORAWAN_DEV_ADDR {0x01, 0x9D, 0x28, 0xDF} +#define LORAWAN_NWKS_KEY {0x4C, 0xF3, 0xD2, 0xF5, 0x6C, 0x5C, \ + 0x45, 0xA6, 0x78, 0x81, 0xD7, 0xBA, \ + 0x91, 0x61, 0x65, 0x11} +#define LORAWAN_APPS_KEY {0x41, 0x5F, 0x07, 0xCF, 0x5B, 0xA6, \ + 0xE6, 0x30, 0xC4, 0xC3, 0xEB, 0x9C, \ + 0x7E, 0x71, 0x8C, 0x5D} /* OTAA Configuration (backup) */ #define LORAWAN_APP_KEY {0x71, 0x5A, 0x39, 0xB2, 0x86, 0xC3, \ diff --git a/src/main.c b/src/main.c index d8c6e7d..2f8d676 100644 --- a/src/main.c +++ b/src/main.c @@ -42,8 +42,20 @@ int main(void) temp = get_stable_value_sht4x(SENSOR_CHAN_AMBIENT_TEMP); printk("hum: %d.%02d%%\n", (int)humidity, (int)(humidity * 100) % 100); printk("temp: %d.%02d °C\n", (int)temp, (int)(temp * 100) % 100); + /* Try MLX sensor with stable measurement (10 samples) */ floor_temp = get_stable_value_mlx90614(MLX90614_IR_TEMP_ADDR); - printk("floor_temp: %d.%02d °C\n", (int)floor_temp, (int)(floor_temp * 100) % 100); + if (mlx90614_sensor_available) + { + LOG_INF("MLX stable measurement: %d.%02d °C", (int)floor_temp, (int)(floor_temp * 100) % 100); + } + else + { + LOG_WRN("MLX sensor not available"); + } + + printk("floor_temp: %d.%02d °C (available: %s)\n", + (int)floor_temp, (int)(floor_temp * 100) % 100, + mlx90614_sensor_available ? "YES" : "NO"); /* Set relais based on temperature if not manually overridden */ if (!relais_manual_override) diff --git a/src/sensors/mlx90614.c b/src/sensors/mlx90614.c index b613a91..9301cb1 100644 --- a/src/sensors/mlx90614.c +++ b/src/sensors/mlx90614.c @@ -76,9 +76,10 @@ static float read_mlx_object_temp(void) float get_stable_value_mlx90614(uint8_t target_addr) { - // Früher Ausstieg wenn Sensor nicht verfügbar + // Test ob Sensor verfügbar ist + request_sensor_data_mlx90614(target_addr); if (!mlx90614_sensor_available) { - LOG_DBG("MLX90614 not available, returning 0.0"); + LOG_INF("MLX90614 not available, returning 0.0"); return 0.0; } diff --git a/src/sensors/sensor_utils.c b/src/sensors/sensor_utils.c index c66ae42..89bbba4 100644 --- a/src/sensors/sensor_utils.c +++ b/src/sensors/sensor_utils.c @@ -7,12 +7,12 @@ LOG_MODULE_REGISTER(sensor_utils); float get_stable_sensor_value(sensor_read_func_t read_func, float outlier_threshold) { - const int MAX_SAMPLES = 5; + const int MAX_SAMPLES = 10; float measurements[MAX_SAMPLES]; int valid_count = 0; - // Sammle bis zu 5 Messungen - for (int i = 0; i < MAX_SAMPLES && valid_count < 3; i++) { + // Sammle bis zu 10 Messungen + for (int i = 0; i < MAX_SAMPLES && valid_count < 7; i++) { if (i > 0) { k_sleep(K_MSEC(500)); // Pause gegen Selbsterhitzung } @@ -66,8 +66,8 @@ float get_stable_sensor_value(sensor_read_func_t read_func, float outlier_thresh if (filtered_count > 0) { float result = sum / filtered_count; - LOG_INF("Stable sensor value: %.2f (filtered %d/%d samples)", - result, filtered_count, valid_count); + LOG_INF("Stable sensor value: %d.%02d (filtered %d/%d samples)", + (int)result, (int)(result * 100) % 100, filtered_count, valid_count); return result; } diff --git a/src/sensors/sht4x.c b/src/sensors/sht4x.c index 7b45f3e..9c11441 100644 --- a/src/sensors/sht4x.c +++ b/src/sensors/sht4x.c @@ -50,7 +50,7 @@ float get_value_from_current_sample_sht4x(enum sensor_channel sensor) if (sensor_channel_get(sht, sensor, &value) == 0) { result = sensor_value_to_double(&value); const char* sensor_name = (sensor == SENSOR_CHAN_AMBIENT_TEMP) ? "temperature" : "humidity"; - LOG_DBG("SHT4X %s value: %.2f", sensor_name, result); + LOG_DBG("SHT4X %s value: %d.%02d", sensor_name, (int)result, (int)(result * 100) % 100); } else { const char* sensor_name = (sensor == SENSOR_CHAN_AMBIENT_TEMP) ? "temperature" : "humidity"; LOG_ERR("Can't read SHT4X %s from sample!", sensor_name); diff --git a/zephyr/prj.conf b/zephyr/prj.conf index c3b75a9..84bef49 100644 --- a/zephyr/prj.conf +++ b/zephyr/prj.conf @@ -10,6 +10,9 @@ CONFIG_SHT4X=y CONFIG_LORA=y CONFIG_LORAWAN=y CONFIG_LORAMAC_REGION_EU868=y + +# LoRaWAN Frame Counter persistence +CONFIG_LORAWAN_NVM_SETTINGS=y CONFIG_MAIN_STACK_SIZE=4096 CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096 CONFIG_LOG_DEFAULT_LEVEL=3