wip, good human movement, occupancy, sos button

This commit is contained in:
Yunhorn 2024-12-04 22:25:20 +08:00
parent 969a892d33
commit 3884a7a8e8
4 changed files with 33 additions and 4 deletions

View File

@ -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();

View File

@ -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;
}