From 4b9409207f849f937827c6b8cecf4bcd782a12f8 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Tue, 26 Nov 2024 15:21:41 +0800 Subject: [PATCH] wip --- Core/Inc/sts_lamp_bar.h | 7 ++ LoRaWAN/App/lora_app.c | 18 ++--- STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 275772 -> 275832 bytes STM32CubeIDE/Release/makefile | 1 + STM32CubeIDE/Release/sources.mk | 1 + STS/Core/Inc/yunhorn_sts_sensors.h | 66 +++++++++++++--- STS/Core/Src/yunhorn_sts_process.c | 66 +++++++++------- STS/TOF/App/app_tof.c | 96 ++++++++++++++--------- hk_as923_decoder.js | 85 +++++++++++++++++++- 9 files changed, 251 insertions(+), 89 deletions(-) diff --git a/Core/Inc/sts_lamp_bar.h b/Core/Inc/sts_lamp_bar.h index 89edc9b..e57dae5 100644 --- a/Core/Inc/sts_lamp_bar.h +++ b/Core/Inc/sts_lamp_bar.h @@ -64,6 +64,13 @@ enum sts_lamp_color { STS_REDGREEN=0x45, // RED/GREEN FLASH 'E' STS_BLUEGREEN=0x46 // BLUE/GREEN FLASH 'F' }; + +#define STS_VACANT_COLOR STS_BLUE +#define STS_OCCUPY_COLOR STS_GREEN +#define STS_FALL_SUSPICIOUS_COLOR STS_YELLOW +#define STS_FALL_CONFIRMED_COLOR STS_RED +#define STS_HUMAN_MOVEMENT_MOTIONLESS_COLOR STS_YELLOW +#define STS_OCCUPANCY_OVERSTAY_COLOR STS_RED /* enum sts_oo_work_mode { STS_NETWORK_MODE = 0, // 0 NETWORK MODE diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 695c363..19f9056 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -67,9 +67,9 @@ volatile uint8_t sts_data_buf[LORAWAN_APP_DATA_BUFFER_MAX_SIZE]={0x0}; extern volatile uint8_t fhmos_fall, fhmos_human_movement, fhmos_occupancy, fhmos_sos_alarm; extern volatile uint32_t fhmos_fall_counter; // extern volatile uint32_t sts_low_threshold, sts_high_threshold, sts_occupancy_threshold; -extern volatile sts_fhmos_sensor_data_t sts_fhmos_data; -extern volatile sts_fhmos_sensor_config_t sts_fhmos_cfg; -extern volatile sts_fhmos_sensor_ambient_height_t sts_fhmos_bg; +extern volatile sts_fhmos_sensor_data_t fhmos_data; +extern volatile sts_fhmos_sensor_config_t fhmos_cfg; +extern volatile sts_fhmos_sensor_ambient_height_t fhmos_bg; // volatile LmHandlerAppData_t sts_app_data={ 0, 0, sts_data_buf }; extern volatile uint8_t sts_hall1_read, sts_hall2_read; // Above hall1_read == reed_hall_result, hall2_read == emergency_button extern volatile uint8_t sts_hall3_read, sts_hall4_read; @@ -867,7 +867,7 @@ static void SendTxData(void) #elif defined(STS_M1) sts_r_sensor_data_t sts_m1_sensor_data={0}; #elif defined(STS_L8) - sts_fhmos_sensor_data_t sts_fhmos_data={0}; + sts_fhmos_sensor_data_t fhmos_data={0}; #elif defined(STS_XX) #endif @@ -901,7 +901,7 @@ static void SendTxData(void) #endif #ifdef STS_L8 - STS_FHMOS_sensor_read(&sts_fhmos_data); + STS_FHMOS_sensor_read(&fhmos_data); #endif #ifdef VL53LX @@ -1072,10 +1072,10 @@ static void SendTxData(void) #if defined(L8) AppData.Buffer[i++] = 4; - AppData.Buffer[i++] = sts_fhmos_data.fall_state; - AppData.Buffer[i++] = sts_fhmos_data.human_movement_state; - AppData.Buffer[i++] = sts_fhmos_data.occupancy_state; - AppData.Buffer[i++] = sts_fhmos_data.sos_alarm_state; + AppData.Buffer[i++] = fhmos_data.state_fall; + AppData.Buffer[i++] = fhmos_data.state_human_movement; + AppData.Buffer[i++] = fhmos_data.state_occupancy; + AppData.Buffer[i++] = fhmos_data.state_sos_alarm; //(uint8_t)((sts_l8_sensor_data.tof_range_presence_state & 0xFF)); diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index 1aa043116e1b286e203e7223b763a0471e681ad2..9c0b852e2929a027d79806e29cbfb6cc5daa81fa 100644 GIT binary patch delta 54403 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 z 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 k8J@-}tVs4Y30wR{C?5*+IJ! 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 range_distance) - sts_fhmos_bg.h2cm[i] += ((uint32_t)sts_sensor_install_height - range_distance); - if (abs(sts_fhmos_bg.h2cm[i])<100){ - sts_fhmos_bg.maskoff[i] = 0; + fhmos_bg.h2cm[i] += ((uint32_t)sts_sensor_install_height - range_distance); + if (abs(fhmos_bg.h2cm[i])<100){ + fhmos_bg.maskoff[i] = 0; } else { - sts_fhmos_bg.maskoff[i] = 1; - sts_mask_bitmap[i/8] |= 1<<(7-i%8); - } + fhmos_bg.maskoff[i] = 1; + } + sts_mask_bitmap[(uint8_t)(i/8)] |= (fhmos_bg.maskoff[i])<<(7-i%8); if (i%8==0) printf("\r\n"); - printf("|%4d %4d ", range_distance, sts_fhmos_bg.h2cm[i]); + printf("|%4d %4d ", range_distance, fhmos_bg.h2cm[i]); } else { - sts_fhmos_bg.h2cm[i] += 0; + fhmos_bg.h2cm[i] += 0; //printf(" .%d. ", i); } @@ -215,7 +221,7 @@ void STS_LMZ_Ambient_Height_Scan_Process(void) for (i=0; i<64; i++) { if (i%8==0) printf("\r\n"); - printf("|%d ", (uint8_t)sts_fhmos_bg.maskoff[i]); + printf("|%d ", (uint8_t)fhmos_bg.maskoff[i]); } for (i=0; i<8; i++) printf("%02X\r\n",sts_mask_bitmap[i]); @@ -462,43 +468,57 @@ static void print_result(RANGING_SENSOR_Result_t *Result) //int32_t roi_distance =(uint32_t)(Result->ZoneResult[j + k].Distance[l]); int32_t roi_distance =(uint32_t)center_range_distance/4; + /* state tree */ - if ((roi_distance < sts_high_threshold) && (roi_distance > (sts_high_threshold - sts_fhmos_cfg.sts_head_level_height_threshold_cm*10))) // TODO XXX + if ((roi_distance < sts_high_threshold) && (roi_distance > (sts_high_threshold - fhmos_cfg.th_head_level_height_cm*10))) // TODO XXX { - printf("\r\n roi_distance =%d -----[high=%4d Head Level =%d \r\n", roi_distance, sts_high_threshold, (sts_high_threshold- sts_fhmos_cfg.sts_head_level_height_threshold_cm*10)); + printf("\r\n Suspicious Fall state: roi_distance =%d -----[high=%4d mm Head Level =%d mm\r\n", roi_distance, sts_high_threshold, 10*fhmos_cfg.th_head_level_height_cm); - sts_fhmos_data.fall_state = 1; - sts_fhmos_data.human_movement_state = 1; + fhmos_data.state_fall = 1; + fhmos_data.state_human_movement = 1; - fhmos_fall = 1; - fhmos_human_movement = 1; fhmos_fall_counter ++; // TODO XXX Timer for confirmation if ((fhmos_fall_counter >60)&& (fhmos_fall_counter < 200)) { printf("\r\n Fall state --- Yellow \r\n"); fhmos_fall =2; - sts_lamp_bar_color = STS_YELLOW; + sts_lamp_bar_color = STS_FALL_SUSPICIOUS_COLOR; + fhmos_data.state_changed_fall = STS_FHMOS_FALL_STATE_POTENTIAL; } else if (fhmos_fall_counter >= 200) { printf("\r\n Fall state --- Red \r\n"); fhmos_fall =3; - sts_lamp_bar_color = STS_RED; + sts_lamp_bar_color = STS_FALL_CONFIRMED_COLOR; + fhmos_data.state_changed_fall = STS_FHMOS_FALL_STATE_CONFIRMED; } } else if ((roi_distance > sts_low_threshold)&&(roi_distance < sts_occupancy_threshold)) { - printf("\r\n rio distance =%d, low =%d occupy=%d \r\n", roi_distance, sts_low_threshold, sts_occupancy_threshold); - //fhmos_occupancy = 1; - sts_fhmos_data.occupancy_state = 1; - if (prev_occupy_state != sts_fhmos_data.occupancy_state) - sts_lamp_bar_color = STS_GREEN; - } else { - sts_fhmos_data.occupancy_state = 0; - if (prev_occupy_state != sts_fhmos_data.occupancy_state) - sts_lamp_bar_color = STS_BLUE; + fhmos_fall_counter = 0; + fhmos_fall = 0; + fhmos_human_movement = 1; + + printf("\r\nNormal Occupy state: rio distance =%d, low =%d occupy=%d \r\n", roi_distance, sts_low_threshold, sts_occupancy_threshold); + //fhmos_occupancy = STS_FHMOS_OCCUPANCY_NORMAL; + fhmos_data.state_occupancy = STS_FHMOS_OCCUPANCY_NORMAL; + if (fhmos_data.prev_occupancy != fhmos_data.state_occupancy) + { + sts_lamp_bar_color = STS_OCCUPY_COLOR; + } + + }else + { + fhmos_data.state_occupancy = STS_FHMOS_OCCUPANCY_NO_OCCUPY; + fhmos_fall_counter =0; + fhmos_data.state_human_movement =STS_FHMOS_HUMAN_MOVEMENT_NO_OCCUPY; + fhmos_data.state_fall = STS_FHMOS_FALL_STATE_NO_OCCUPY; + + if (fhmos_data.prev_occupancy != fhmos_data.state_occupancy) + sts_lamp_bar_color = STS_VACANT_COLOR; } - prev_occupy_state = sts_fhmos_data.occupancy_state; + + fhmos_data.prev_occupancy = fhmos_data.state_occupancy; @@ -682,10 +702,10 @@ static void print_result(RANGING_SENSOR_Result_t *Result) void STS_FHMOS_sensor_read(sts_fhmos_sensor_data_t *sts_data) { //uint8_t fhmos_fall=0, fhmos_human_movement=0, fhmos_occupancy=0, fhmos_sos_alarm=0; - sts_data->occupancy_state = sts_fhmos_data.occupancy_state|fhmos_occupancy; - sts_data->fall_state = sts_fhmos_data.fall_state|fhmos_fall; - sts_data->human_movement_state =sts_fhmos_data.human_movement_state|fhmos_human_movement; - sts_data->sos_alarm_state = sts_fhmos_data.sos_alarm_state|fhmos_sos_alarm; + sts_data->state_occupancy = fhmos_data.state_occupancy; + sts_data->state_fall = fhmos_data.state_fall; + sts_data->state_human_movement = fhmos_data.state_human_movement; + sts_data->state_sos_alarm = fhmos_data.state_sos_alarm; } diff --git a/hk_as923_decoder.js b/hk_as923_decoder.js index e463e1f..27fd380 100644 --- a/hk_as923_decoder.js +++ b/hk_as923_decoder.js @@ -4,7 +4,7 @@ // - variables contains the device variables e.g. {"calibration": "3.5"} (both the key / value are of type string) // The function must return an object, e.g. {"temperature": 22.5} // -// Yunhorn SmarToilets Sensor R20241119A01 +// Yunhorn SmarToilets Sensor R20241126A01 // function Decode(fPort, data, variables) { @@ -848,7 +848,7 @@ function Decode(fPort, data, variables) { data.sts_verion = bytes[3]; data.sts_hw_ver = bytes[4]; data.battery_level = bytes[5]; - if ((bytes[6] === 0x04)) { // report sensor install height + if ((bytes[6] === 0x0C)) { // report sensor install height and bitmap data.sts_sensor_chip_model_type_ID = (bytes[7] << 8 | bytes[8]); if ((bytes[7] === 0xF0) && (bytes[8] === 0x0C)) { data.sts_sensor_chip_model_type = "VL53L8X"; @@ -862,7 +862,88 @@ function Decode(fPort, data, variables) { data.sts_sensor_install_height = (bytes[9] << 8 | bytes[10]); data.sts_sensor_install_height_unit = "mm"; + //data.maskoff_bitmap= String.fromCharCode(bytes[11])+String.fromCharCode(bytes[12])+String.fromCharCode(bytes[13])+String.fromCharCode(bytes[14])+String.fromCharCode(bytes[15])+String.fromCharCode(bytes[16])+String.fromCharCode(bytes[17])+String.fromCharCode(bytes[18]); + + var mmm = bytes[11]; + var con = 0x30; + var matrix0 = " [ "; + for (i = 0; i < 8; i++) { + con += ((mmm >> i) & 0x01); + matrix0 += (String.fromCharCode(con) + "__"); + con = 0x30; + } + data.matrix01 = matrix0; + mmm = bytes[12]; + var con = 0x30; + var matrix0 = " [ "; + for (i = 0; i < 8; i++) { + con += ((mmm >> i) & 0x01); + matrix0 += (String.fromCharCode(con) + "__"); + con = 0x30; + } + data.matrix02 = matrix0; + + mmm = bytes[13]; + var con = 0x30; + var matrix0 = " [ "; + for (i = 0; i < 8; i++) { + con += ((mmm >> i) & 0x01); + matrix0 += (String.fromCharCode(con) + "__"); + con = 0x30; + } + data.matrix03 = matrix0; + mmm = bytes[14]; + var con = 0x30; + var matrix0 = " [ "; + for (i = 0; i < 8; i++) { + con += ((mmm >> i) & 0x01); + matrix0 += (String.fromCharCode(con) + "__"); + con = 0x30; + } + data.matrix04 = matrix0; + + mmm = bytes[15]; + var con = 0x30; + var matrix0 = " [ "; + for (i = 0; i < 8; i++) { + con += ((mmm >> i) & 0x01); + matrix0 += (String.fromCharCode(con) + "__"); + con = 0x30; + } + data.matrix05 = matrix0; + + mmm = bytes[16]; + var con = 0x30; + var matrix0 = " [ "; + for (i = 0; i < 8; i++) { + con += ((mmm >> i) & 0x01); + matrix0 += (String.fromCharCode(con) + "__"); + con = 0x30; + } + data.matrix06 = matrix0; + + mmm = bytes[17]; + var con = 0x30; + var matrix0 = " [ "; + for (i = 0; i < 8; i++) { + con += ((mmm >> i) & 0x01); + matrix0 += (String.fromCharCode(con) + "__"); + con = 0x30; + } + data.matrix07 = matrix0; + + mmm = bytes[18]; + var con = 0x30; + var matrix0 = " [ "; + for (i = 0; i < 8; i++) { + con += ((mmm >> i) & 0x01); + matrix0 += (String.fromCharCode(con) + "__"); + con = 0x30; + } + data.matrix08 = matrix0; + } + else if ((bytes[6] === 0x58)) { data.sts_Test_Result = "### Motion Sensor Not Detected ###"; } else if ((bytes[6] === 0x0E)) //result length, 10 rss bytes, 4 distance bytes