---- add presence normal related defines

This commit is contained in:
Yunhorn 2024-07-15 16:22:37 +08:00
parent 3feaffc5c2
commit 409f4ff2cb
6 changed files with 44 additions and 18 deletions

View File

@ -83,9 +83,10 @@ function Decode(fPort, data, variables) {
} }
// select only one below // select only one below
// For NC(Normal Closed states // For NC(Normal Closed states
// data.Sensor1_Door_Contact_Open = bytes[3]===0?"Door Closed":"Door Open"; data.Sensor1_Door_Contact_Open = bytes[3] === 0 ? "Door Closed" : "Door Open";
// For NC(Normal Closed states // For NC(Normal Closed states
data.Sensor1_Door_Contact_Open = bytes[3] === 1 ? "Door Closed" : "Door Open"; //data.Sensor1_Door_Contact_Open = bytes[3]===1?"Door Closed":"Door Open";
data.Sensor2_Motion_Detected = bytes[4] === 0 ? "No Motion" : "Motion Detected"; data.Sensor2_Motion_Detected = bytes[4] === 0 ? "No Motion" : "Motion Detected";
data.Sensor3_Emergency_Button = bytes[5] === 0 ? "Alarm Push Down" : "No Alarm, Released"; data.Sensor3_Emergency_Button = bytes[5] === 0 ? "Alarm Push Down" : "No Alarm, Released";
@ -97,7 +98,7 @@ function Decode(fPort, data, variables) {
data.Unconcious_State = bytes[11]; data.Unconcious_State = bytes[11];
switch (bytes[12]) { switch (bytes[12]) {
case 0x0: case 0x0:
data.Fall_Down_Detected_State = "Presence_None"; data.Fall_Down_Detected_State = "Presence_Normal";
break; break;
case 0x01: case 0x01:
data.Fall_Down_Detected_State = "Presence_Fall_Down"; data.Fall_Down_Detected_State = "Presence_Fall_Down";
@ -117,6 +118,8 @@ function Decode(fPort, data, variables) {
} }
data.OverStay_Detected_State = (bytes[13] == 0x0) ? "No" : "Yes"; data.OverStay_Detected_State = (bytes[13] == 0x0) ? "No" : "Yes";
data.OverStay_Duration_in_Seconds = (bytes[14] << 8 | bytes[15]); data.OverStay_Duration_in_Seconds = (bytes[14] << 8 | bytes[15]);
data.No_Movement_Duration_in_Seconds = (bytes[16] << 8 | bytes[17]);
data.Unconcious_Duration_in_Seconds = (bytes[16] << 8 | bytes[17]);
} }
return { "Yunhorn_SmarToilets_data": data }; return { "Yunhorn_SmarToilets_data": data };
} }

View File

@ -181,6 +181,8 @@ typedef struct STS_OO_SensorStatusDataTypeDef
uint32_t over_stay_duration; // sensor 1, door lock or door contact, time lenght of overstay in seconds uint32_t over_stay_duration; // sensor 1, door lock or door contact, time lenght of overstay in seconds
uint16_t occupancy_duration; // sensor 3, motion detection duration uint16_t occupancy_duration; // sensor 3, motion detection duration
uint32_t fall_laydown_duration; // sensor 3, fall down not rise up duration uint32_t fall_laydown_duration; // sensor 3, fall down not rise up duration
uint32_t no_movement_duration;
uint32_t unconcious_duration;
uint8_t occupancy_over_stay_state; // uint8_t occupancy_over_stay_state; //
uint8_t battery_Pct; /* % of battery two digits, 88% (00-99)% */ uint8_t battery_Pct; /* % of battery two digits, 88% (00-99)% */
uint8_t dutycycletimelevel; /* level=0,255 */ uint8_t dutycycletimelevel; /* level=0,255 */
@ -197,6 +199,12 @@ typedef struct STS_OO_SensorStatusDataTypeDef
uint32_t event_sensor3_fall_start_time; uint32_t event_sensor3_fall_start_time;
uint32_t event_sensor3_fall_stop_time; uint32_t event_sensor3_fall_stop_time;
uint32_t event_sensor3_fall_duration; uint32_t event_sensor3_fall_duration;
uint32_t event_sensor3_no_movement_start_time;
uint32_t event_sensor3_no_movement_stop_time;
uint32_t event_sensor3_no_movement_duration;
uint32_t event_sensor3_unconcious_start_time;
uint32_t event_sensor3_unconcious_stop_time;
uint32_t event_sensor3_unconcious_duration;
uint32_t event_sensor4_start_time; uint32_t event_sensor4_start_time;
uint32_t event_sensor4_stop_time; uint32_t event_sensor4_stop_time;
uint32_t event_sensor4_duration; uint32_t event_sensor4_duration;
@ -208,7 +216,7 @@ typedef struct STS_OO_SensorStatusDataTypeDef
enum sts_presence_fall_detection_type { enum sts_presence_fall_detection_type {
STS_PRESENCE_NONE=0, STS_PRESENCE_NORMAL=0,
STS_PRESENCE_FALL, STS_PRESENCE_FALL,
STS_PRESENCE_RISING, STS_PRESENCE_RISING,
STS_PRESENCE_LAYDOWN, STS_PRESENCE_LAYDOWN,

View File

@ -291,7 +291,7 @@ void STS_Combined_Status_Processing(void)
switch(sts_fall_rising_detected_result) switch(sts_fall_rising_detected_result)
{ {
case STS_PRESENCE_NONE: case STS_PRESENCE_NORMAL:
//do nothing //do nothing
break; break;

View File

@ -123,9 +123,9 @@ volatile uint8_t detected_hs_zone=0;;
volatile uint16_t motion_count=0, motion_feature_count=0; volatile uint16_t motion_count=0, motion_feature_count=0;
static acc_detector_presence_result_t sts_motion_dataset[DEFAULT_MOTION_DATASET_LEN]; static acc_detector_presence_result_t sts_motion_dataset[DEFAULT_MOTION_DATASET_LEN];
static STS_PRESENCE_Motion_Featuer_t sts_motion_feature[DEFAULT_MOTION_FEATURE_LEN]; static STS_PRESENCE_Motion_Featuer_t sts_motion_feature[DEFAULT_MOTION_FEATURE_LEN];
volatile uint8_t sts_fall_rising_detected_result = STS_PRESENCE_NONE; volatile uint8_t sts_fall_rising_detected_result = STS_PRESENCE_NORMAL;
volatile uint8_t sts_fall_rising_detected_result_changed_flag =0; volatile uint8_t sts_fall_rising_detected_result_changed_flag =0;
volatile uint8_t last_sts_fall_rising_detected_result= STS_PRESENCE_NONE; volatile uint8_t last_sts_fall_rising_detected_result= STS_PRESENCE_NORMAL;
volatile float last_average_presence_distance; volatile float last_average_presence_distance;
volatile uint16_t sts_fall_rising_pattern_factor1=0, sts_fall_rising_pattern_factor2=0; volatile uint16_t sts_fall_rising_pattern_factor1=0, sts_fall_rising_pattern_factor2=0;
volatile uint16_t sts_roc_acc_standard_variance=0; volatile uint16_t sts_roc_acc_standard_variance=0;
@ -528,7 +528,7 @@ int sts_presence_rss_fall_rise_detection(void)
} }
//APP_LOG(TS_OFF, VLEVEL_L,"Second Half, Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count); //APP_LOG(TS_OFF, VLEVEL_L,"Second Half, Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count);
uint8_t thiscnt= motion_detected_count; //uint8_t thiscnt= motion_detected_count;
if (motion_detected_count++ == 10) { if (motion_detected_count++ == 10) {
motion_detected_count=0; motion_detected_count=0;
@ -782,13 +782,13 @@ void STS_YunhornCheckStandardDeviation(void)
{ {
sts_fall_rising_detected_result = STS_PRESENCE_LAYDOWN; sts_fall_rising_detected_result = STS_PRESENCE_LAYDOWN;
} else { } else {
sts_fall_rising_detected_result = STS_PRESENCE_NONE; sts_fall_rising_detected_result = STS_PRESENCE_NORMAL;
} }
} }
last_sts_fall_rising_detected_result = sts_fall_rising_detected_result; last_sts_fall_rising_detected_result = sts_fall_rising_detected_result;
last_average_presence_distance = average_presence_distance; last_average_presence_distance = average_presence_distance;
#if 0 #if 0
if (sts_fall_rising_detected_result != STS_PRESENCE_NONE) if (sts_fall_rising_detected_result != STS_PRESENCE_NORMAL)
{ {
STS_FallDetection_LampBarProcess(); STS_FallDetection_LampBarProcess();
} }

View File

@ -501,13 +501,14 @@ void STS_PRESENCE_SENSOR_Init_Send_Data(void)
sts_o7_sensorData.state_sensor4_on_off = 0x0; sts_o7_sensorData.state_sensor4_on_off = 0x0;
sts_o7_sensorData.rss_presence_distance = 0x0; sts_o7_sensorData.rss_presence_distance = 0x0;
sts_o7_sensorData.rss_presence_score = 0x0; sts_o7_sensorData.rss_presence_score = 0x0;
sts_o7_sensorData.fall_state = STS_PRESENCE_NONE; sts_o7_sensorData.fall_state = STS_PRESENCE_NORMAL;
sts_o7_sensorData.fall_speed = 0x0; sts_o7_sensorData.fall_speed = 0x0;
sts_o7_sensorData.fall_gravity = 0x0; sts_o7_sensorData.fall_gravity = 0x0;
sts_o7_sensorData.over_stay_state = 0x0; sts_o7_sensorData.over_stay_state = 0x0;
sts_o7_sensorData.over_stay_duration = 0x0; sts_o7_sensorData.over_stay_duration = 0x0;
sts_o7_sensorData.unconscious_state = 0x0; sts_o7_sensorData.unconscious_state = 0x0;
sts_o7_sensorData.unconscious_duration = 0x0; sts_o7_sensorData.unconscious_duration = 0x0;
sts_o7_sensorData.no_movement_duration = 0x0;
sts_o7_sensorData.event_sensor1_start_time = 0x0; sts_o7_sensorData.event_sensor1_start_time = 0x0;
sts_o7_sensorData.event_sensor1_duration = 0x0; sts_o7_sensorData.event_sensor1_duration = 0x0;
@ -549,6 +550,10 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
sensor_data->over_stay_state = sts_o7_sensorData.over_stay_state; sensor_data->over_stay_state = sts_o7_sensorData.over_stay_state;
sensor_data->over_stay_duration = sts_o7_sensorData.event_sensor1_duration; sensor_data->over_stay_duration = sts_o7_sensorData.event_sensor1_duration;
// no_movement or unconcious duration
sensor_data->unconscious_duration = sts_o7_sensorData.event_sensor3_unconcious_duration;
sensor_data->no_movement_duration = sts_o7_sensorData.event_sensor3_no_movement_duration;
APP_LOG(TS_OFF,VLEVEL_L,"\r\n ... Over Stay Duration=%u Sec\r\n", sensor_data->over_stay_duration); APP_LOG(TS_OFF,VLEVEL_L,"\r\n ... Over Stay Duration=%u Sec\r\n", sensor_data->over_stay_duration);
sensor_data->fall_state = sts_fall_rising_detected_result; sensor_data->fall_state = sts_fall_rising_detected_result;
@ -609,6 +614,7 @@ void STS_PRESENCE_SENSOR_Init(void)
sts_o7_sensorData.over_stay_state = 0; sts_o7_sensorData.over_stay_state = 0;
sts_o7_sensorData.over_stay_duration = 0; sts_o7_sensorData.over_stay_duration = 0;
sts_o7_sensorData.unconscious_duration = 0; sts_o7_sensorData.unconscious_duration = 0;
sts_o7_sensorData.no_movement_duration = 0;
sts_o7_sensorData.unconscious_state = 0; sts_o7_sensorData.unconscious_state = 0;
STS_SENSOR_Power_ON(0); STS_SENSOR_Power_ON(0);
@ -951,7 +957,7 @@ void OnSensor3BStateChanged(void)
#endif #endif
switch (sts_fall_rising_detected_result) switch (sts_fall_rising_detected_result)
{ {
case STS_PRESENCE_NONE: case STS_PRESENCE_NORMAL:
sts_o7_sensorData.event_sensor3_motion_stop_time = sensor_event_time.Seconds; sts_o7_sensorData.event_sensor3_motion_stop_time = sensor_event_time.Seconds;
break; break;
@ -967,13 +973,16 @@ void OnSensor3BStateChanged(void)
break; break;
case STS_PRESENCE_LAYDOWN: case STS_PRESENCE_LAYDOWN:
case STS_PRESENCE_UNCONSCIOUS:
sts_o7_sensorData.fall_laydown_duration = 0;
break; break;
case STS_PRESENCE_STAYSTILL: case STS_PRESENCE_STAYSTILL:
case STS_PRESENCE_NO_MOVEMENT: case STS_PRESENCE_NO_MOVEMENT:
case STS_PRESENCE_UNCONSCIOUS:
sts_o7_sensorData.event_sensor3_no_movement_start_time = sensor_event_time.Seconds;
sts_o7_sensorData.event_sensor3_unconcious_start_time = sensor_event_time.Seconds;
sts_o7_sensorData.event_sensor3_unconcious_duration = 0;
sts_o7_sensorData.event_sensor3_no_movement_duration = 0;
sts_o7_sensorData.fall_laydown_duration = 0;
break; break;
default: default:

View File

@ -957,6 +957,8 @@ static void SendTxData(void)
AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_state)&0xff; //13 occupancy over time or not AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_state)&0xff; //13 occupancy over time or not
AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_duration>>8)&0xff; //14 occupancy over stay duration MSB AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_duration>>8)&0xff; //14 occupancy over stay duration MSB
AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_duration)&0xff; //15 occupancy over stay duration LSB AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_duration)&0xff; //15 occupancy over stay duration LSB
AppData.Buffer[i++] = (uint8_t)(sensorData.no_movement_duration>>8)&0xff; //16 occupancy over stay duration LSB
AppData.Buffer[i++] = (uint8_t)(sensorData.no_movement_duration)&0xff; //17 occupancy over stay duration LSB
} }
uint8_t ich= (sts_lamp_bar_color>>4 & 0x0f); uint8_t ich= (sts_lamp_bar_color>>4 & 0x0f);
uint8_t icl= (sts_lamp_bar_color & 0x0f); uint8_t icl= (sts_lamp_bar_color & 0x0f);
@ -1154,7 +1156,7 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context)
} }
// to be defiend later for SOS threshold TODO XXXX // to be defined later for SOS threshold TODO XXXX
if (STS_Status_SOS_Pushdown==sts_hall2_read) if (STS_Status_SOS_Pushdown==sts_hall2_read)
{ {
sts_o7_sensorData.event_sensor2_duration = current_time.Seconds - sts_o7_sensorData.event_sensor2_start_time; sts_o7_sensorData.event_sensor2_duration = current_time.Seconds - sts_o7_sensorData.event_sensor2_start_time;
@ -1194,11 +1196,12 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context)
STS_PRESENCE_STAYSTILL STS_PRESENCE_STAYSTILL
*/ */
switch (sts_fall_rising_detected_result){ switch (sts_fall_rising_detected_result){
case STS_PRESENCE_NONE: case STS_PRESENCE_NORMAL:
sts_o7_sensorData.fall_state = 0; sts_o7_sensorData.fall_state = 0;
sts_o7_sensorData.fall_laydown_duration=0; sts_o7_sensorData.fall_laydown_duration=0;
sts_o7_sensorData.unconscious_state =0; sts_o7_sensorData.unconscious_state =0;
sts_o7_sensorData.unconscious_duration =0; sts_o7_sensorData.unconscious_duration =0;
sts_o7_sensorData.no_movement_duration =0;
break; break;
case STS_PRESENCE_FALL: case STS_PRESENCE_FALL:
sts_o7_sensorData.event_sensor3_fall_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_fall_start_time; sts_o7_sensorData.event_sensor3_fall_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_fall_start_time;
@ -1214,9 +1217,12 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context)
break; break;
case STS_PRESENCE_LAYDOWN: case STS_PRESENCE_LAYDOWN:
break; break;
case STS_PRESENCE_UNCONSCIOUS: case STS_PRESENCE_UNCONSCIOUS:
break;
case STS_PRESENCE_STAYSTILL: case STS_PRESENCE_STAYSTILL:
case STS_PRESENCE_NO_MOVEMENT:
sts_o7_sensorData.event_sensor3_no_movement_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_no_movement_start_time;
sts_o7_sensorData.event_sensor3_unconcious_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_unconcious_start_time;
break; break;
} }