diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 25efab1..565a790 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -713,6 +713,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) HAL_Delay(50); } takelowTime=true; + } else if (!sts_pir_state) { @@ -733,6 +734,8 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) } } + + OnSensorPIR1StateChanged(); #endif //OnSensor3StateChanged(); //OnSensorPIR1StateChanged(); diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin b/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin index f152181..ec6b209 100644 Binary files a/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin and b/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin differ diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index 229e673..fb439a8 100644 Binary files a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf and b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf differ diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c index 330b365..ecb8e27 100644 --- a/STS/Core/Src/yunhorn_sts_process.c +++ b/STS/Core/Src/yunhorn_sts_process.c @@ -2198,6 +2198,7 @@ void YunhornSTSDurationCheckTimer(void) //if (sts_o7_sensorData.event_sensor1_duration > (sts_occupancy_overtime_threshold_in_10min*60)) //for debug if (sts_o7_sensorData.event_sensor1_duration > fhmos_cfg.th_occupancy_overstay_15sec*15) { + fhmos_data.state_occupancy = STS_FHMOS_OCCUPANCY_OVERSTAY; sts_o7_sensorData.over_stay_state = 1; sts_o7_sensorData.over_stay_duration = sts_o7_sensorData.event_sensor1_duration; over_threshold = TRUE; @@ -2217,6 +2218,7 @@ void YunhornSTSDurationCheckTimer(void) sts_o7_sensorData.event_sensor1_duration =0; sts_o7_sensorData.over_stay_state = 0; + fhmos_data.state_occupancy = STS_FHMOS_OCCUPANCY_NO_OCCUPY; } // to be defined later for SOS threshold TODO XXXX @@ -2227,6 +2229,7 @@ void YunhornSTSDurationCheckTimer(void) if (sts_o7_sensorData.event_sensor2_duration > fhmos_cfg.th_occupancy_overstay_15sec*15) { sts_o7_sensorData.over_stay_state = 1; + fhmos_data.state_sos_alarm = STS_FHMOS_SOS_ALARM_BUTTON_PUSHED; // 2024-07-15 update, no overwrite sensor1 duration value //sts_o7_sensorData.over_stay_duration = sts_o7_sensorData.event_sensor2_duration; // @@ -2236,10 +2239,11 @@ void YunhornSTSDurationCheckTimer(void) } else { sts_o7_sensorData.event_sensor2_duration =0; + fhmos_data.state_sos_alarm = STS_FHMOS_SOS_ALARM_BUTTON_RESET; // OR NORMAL TODO XXX //sts_o7_sensorData.over_stay_state = 0; } - +#ifdef RSS_MOTION if (sts_rss_result==STS_RESULT_MOTION) { sts_o7_sensorData.event_sensor3_motion_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_motion_start_time; @@ -2254,7 +2258,7 @@ void YunhornSTSDurationCheckTimer(void) sts_o7_sensorData.event_sensor3_motion_duration =0; //sts_o7_sensorData.occupancy_over_stay_state = 0; } - +#endif /* STS_PRESENCE_NONE=0, STS_PRESENCE_FALL, @@ -2335,7 +2339,7 @@ void YunhornSTSDurationCheckTimer(void) sts_lamp_bar_color = STS_RED_DARK; //sts_lamp_bar_flashing_color; } - fhmos_data.state_occupancy = 2; + fhmos_data.state_occupancy = STS_FHMOS_OCCUPANCY_OVERSTAY; sensor_data_ready = 1; UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); @@ -2370,12 +2374,19 @@ void OnSensor1StateChanged(void) sts_o7_sensorData.event_sensor1_start_time = sensor_event_time.Seconds; sts_o7_sensorData.event_sensor1_duration = 0; //APP_LOG(TS_OFF, VLEVEL_M, "Door Closed ---Timer start: %u\r\n",sts_o7_sensorData.event_sensor1_start_time ); + fhmos_data.state_occupancy = STS_FHMOS_OCCUPANCY_NORMAL; + fhmos_data.state_fall = STS_FHMOS_FALL_STATE_NORMAL; + fhmos_data.state_human_movement = STS_FHMOS_HUMAN_MOVEMENT_NORMAL; } else if (sts_hall1_read==STS_Status_Door_Open) { sts_o7_sensorData.event_sensor1_start_time = 0; sts_o7_sensorData.event_sensor1_stop_time = sensor_event_time.Seconds; //sts_o7_sensorData.event_sensor1_duration = 0; sts_o7_sensorData.over_stay_state = 0; + fhmos_data.state_occupancy = STS_FHMOS_OCCUPANCY_NO_OCCUPY; + fhmos_data.state_fall = STS_FHMOS_FALL_STATE_NO_OCCUPY; + fhmos_data.state_human_movement = STS_FHMOS_HUMAN_MOVEMENT_NO_OCCUPY; + } } @@ -2393,6 +2404,9 @@ void OnSensor2StateChanged(void) sts_o7_sensorData.event_sensor2_stop_time = 0; sts_o7_sensorData.event_sensor2_duration = 0; APP_LOG(TS_OFF, VLEVEL_L, "SOS PushDown ---Timer start: %u\r\n",sts_o7_sensorData.event_sensor2_start_time ); + + fhmos_data.state_sos_alarm = STS_FHMOS_SOS_ALARM_BUTTON_PUSHED; + }else if (sts_hall2_read==STS_Status_SOS_Release) { sts_o7_sensorData.event_sensor2_start_time = 0; @@ -2401,6 +2415,7 @@ void OnSensor2StateChanged(void) sts_o7_sensorData.event_sensor2_stop_timestamp = time_stamp; //sts_o7_sensorData.over_stay_state = 0; //sts_o7_sensorData.event_sensor2_duration = 0; + fhmos_data.state_sos_alarm = STS_FHMOS_SOS_ALARM_BUTTON_NORMAL; } } @@ -2541,20 +2556,31 @@ void OnSensorRSS3CStateChanged(void) void OnSensorPIR1StateChanged(void) { SysTime_t sensor_event_time = SysTimeGetMcuTime(); + #if 0 - if ((sensor_event_time.Seconds - last_sts_rss_time_stamp) < 3 ) //less than 3 seconds ... return for flipping filter + static uint32_t motionless_tick = sensor_event_time.Seconds - last_sts_pir_time_stamp; + if ((motionless_tick) < 3 ) { return ; } + else if((motionless_tick >= short_duration) && (motionless_tick < long_duration)) + { + + } else if ((motionless_tick >= long_duration)) + { + + } #endif if (sts_pir_result == STS_RESULT_MOTION) { sts_o7_sensorData.event_sensor3_motion_start_time = sensor_event_time.Seconds; sts_o7_sensorData.event_sensor3_motion_duration = 0; + fhmos_data.state_PIR = STS_FHMOS_HUMAN_MOVEMENT_NORMAL; } else if (sts_pir_result == STS_RESULT_NO_MOTION) { sts_o7_sensorData.event_sensor3_motion_stop_time = sensor_event_time.Seconds; //sts_o7_sensorData.event_sensor3_motion_duration = 0; + fhmos_data.state_PIR = STS_FHMOS_HUMAN_MOVEMENT_MOTIONLESS_SHORT; }