improved service period check

This commit is contained in:
Yunhorn 2025-07-11 19:37:30 +08:00
parent 0027a4d285
commit abd78f5156
4 changed files with 59 additions and 17 deletions

View File

@ -99,6 +99,16 @@ typedef struct
} STS_PRESENCE_SENSOR_Event_Status_t;
//#define STS_ALERT_NORMAL 0x00 // (1) WELCOME MESSAGE, NORMAL
#define STS_PROJECTOR_CMD_POWER_OFF 4
#define STS_PROJECTOR_CMD_POWER_ON 1
#define STS_PROJECTOR_CMD_PIC_FIRST 2
#define STS_PROJECTOR_CMD_PIC_NEXT 3
#define STS_PROJECTOR_CMD_PIC_1 5
#define STS_PROJECTOR_CMD_PIC_2 6
#define STS_PROJECTOR_CMD_PIC_3 7
#define STS_PROJECTOR_CMD_PIC_4 8
#define STS_ALERT_HUMIDITY_NORMAL 0x01 // (1) WELCOME MESSAGE, NORMAL
#define STS_ALERT_HUMIDITY_HIGH 0x02 // (2) CAUTION WET FLOOR
#define STS_ALERT_TEMP_HIGH 0x04
@ -106,6 +116,17 @@ typedef struct
#define STS_ALERT_CLEAN_IN_PROGRESS 0x10 // (4) CLEAN IN PROGRESS,
#define STS_ALERT_OTHER1 0x20
#define STS_ALERT_OTHER2 0x40
typedef struct
{
uint8_t rc_dev_eui[3]; // address 20bit, 3 bytes
uint8_t rc_dev_button_num;
uint8_t rc_dev_button_cmd[16]; // button cmd, 4 bits
char rc_dev_button_name[16][20]; // button name
uint8_t rf_dev_power_state; // controlled RF projector power state
uint8_t rf_dev_slide_id; // controlled RF projector slide id
} remote_control_sensor_t;
typedef struct
{

View File

@ -62,7 +62,7 @@ uint8_t sts_alert_id=STS_ALERT_HUMIDITY_NORMAL, prev_alert_id=0;
t_service_period_per_day rc_service_period[4]={
{1,6,30,12,00},
{1,13,00, 18,00},
{1,13,00, 19,30},
{0,0,0,0,0},
{0,0,0,0,0}
};
@ -679,23 +679,24 @@ void STS_YunhornSTSEventP6_Process(void)
void STS_YunhornRCRFSendCMD(uint8_t rf_cmd)
{
switch (rf_cmd) {
case 0:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #0 \n\n======================\r\n");
case STS_PROJECTOR_CMD_POWER_OFF:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #0 POWER OFF \n\n======================\r\n");
break;
case 1:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #1 \n\n======================\r\n");
case STS_PROJECTOR_CMD_POWER_ON:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #1 POWER ON\n\n======================\r\n");
break;
case 2:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #2 \n\n======================\r\n");
case STS_PROJECTOR_CMD_PIC_FIRST:
case STS_PROJECTOR_CMD_PIC_1:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #2 PIC-#1 WELCOME\n\n======================\r\n");
break;
case 3:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #3 \n\n======================\r\n");
case STS_PROJECTOR_CMD_PIC_2:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #3 PIC-#2 CAUTION WET FLOOR\n\n======================\r\n");
break;
case 4:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #5 \n\n======================\r\n");
case STS_PROJECTOR_CMD_PIC_3:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #5 PIC-#3 FULL OCCUPIED\n\n======================\r\n");
break;
case 5:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #6 \n\n======================\r\n");
case STS_PROJECTOR_CMD_PIC_4:
APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #6 PIC-#4 CLEAN IN PROGRESS \n\n======================\r\n");
break;
default:
break;
@ -710,7 +711,8 @@ void STS_YunhornSTSEventP7_Process(void)
APP_LOG(TS_OFF, VLEVEL_M, "\r\n P7 Testing Process\r\n");
#if defined(STS_K1)
if (STS_Check_Service_Period())
{
if (STS_IAQ_Generate_Alert())
{
//STS_RF_Show_pic(cause_wet_floor);
@ -738,6 +740,14 @@ void STS_YunhornSTSEventP7_Process(void)
}
}
else if (prev_alert_id != STS_ALERT_HUMIDITY_NORMAL)
{
sts_alert_id = STS_ALERT_HUMIDITY_NORMAL;
prev_alert_id = sts_alert_id;
STS_YunhornRCRFSendCMD(STS_PROJECTOR_CMD_POWER_OFF);
}
#endif
}
@ -845,24 +855,35 @@ static bool STS_Check_Service_Period(void)
struct tm time_now={0};
SysTime_t UnixEpoch = SysTimeGet();
UnixEpoch.Seconds -= 18; /*removing leap seconds*/
UnixEpoch.Seconds += 3600 * 8; /*adding 8 hours GMT+8 */
SysTimeLocalTime(UnixEpoch.Seconds, &time_now);
bool sts_rc_in_service_period_try = false;
APP_LOG(TS_OFF, VLEVEL_M, "\r\n Current Time: %2d:%2d \r\n", time_now.tm_hour, time_now.tm_min);
for (uint8_t i=0; i<4; i++)
{
if (rc_service_period[i].enable_mask)
{
if ((time_now.tm_hour >= rc_service_period[i].start_hour) && (time_now.tm_min < rc_service_period[i].end_hour))
APP_LOG(TS_OFF, VLEVEL_M, "\r\n Service Period #%i : Start: %2d:%2d Till %2d:%2d \r\n",
i,rc_service_period[i].start_hour, rc_service_period[i].start_minute,
rc_service_period[i].end_hour, rc_service_period[i].end_minute);
if (((time_now.tm_hour*60+time_now.tm_min) >= (rc_service_period[i].start_hour*60+rc_service_period[i].start_minute))
&& ((time_now.tm_hour*60+time_now.tm_min) < (rc_service_period[i].end_hour*60+rc_service_period[i].end_minute)))
{
if ((time_now.tm_min >= rc_service_period[i].start_minute) && (time_now.tm_min < rc_service_period[i].end_minute))
sts_rc_in_service_period_try = true;
}
APP_LOG(TS_OFF,VLEVEL_M, "\r\n ------ In Service Period %d state: %d \r\n", i, (sts_rc_in_service_period_try)?1:0);
}
}
sts_rc_in_service_period = sts_rc_in_service_period_try;
return sts_rc_in_service_period_try;
APP_LOG(TS_OFF,VLEVEL_M, "\r\n ------ In Service Period: %d \r\n", (sts_rc_in_service_period)?1:0);
return sts_rc_in_service_period;
}
/*
* STS P8 Process, Detection ETR Sensors, Water flow sensors, pulse counting