From 0aed02050cec0b514dc30b767e211e30e44f369e Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Fri, 11 Jul 2025 15:55:21 +0800 Subject: [PATCH] nice frame work for remote control humidity --- Core/Inc/utilities_def.h | 4 +- LoRaWAN/App/lora_app.c | 7 +- STM32CubeIDE/Release/WLE5CC_NODE_STS.bin | Bin 84276 -> 85016 bytes STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 159456 -> 159580 bytes STS/Core/Inc/yunhorn_sts_sensors.h | 27 +++++-- STS/Core/Src/yunhorn_sts_process.c | 96 ++++++++++++++++++----- 6 files changed, 106 insertions(+), 28 deletions(-) diff --git a/Core/Inc/utilities_def.h b/Core/Inc/utilities_def.h index 7d45540..2f23705 100644 --- a/Core/Inc/utilities_def.h +++ b/Core/Inc/utilities_def.h @@ -110,7 +110,9 @@ typedef enum #if defined(STS_L8) CFG_SEQ_Task_YunhornSTSEventSelfTestProcess, /* Self Function Test Process */ #endif - +#ifdef STS_K1 + CFG_SEQ_Task_YunhornSTSEventRemoteControlSendCMD, +#endif /* USER CODE END CFG_SEQ_Task_Id_t */ CFG_SEQ_Task_NBR } CFG_SEQ_Task_Id_t; diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index a5927c6..096bae6 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -673,9 +673,10 @@ void STS_Sensor_Init(void) #endif #if defined(STS_K1) + //UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventRemoteControlSendCMD), UTIL_SEQ_RFU, STS_YunhornSTSEventRemoteControlSendCMD); - UTIL_TIMER_Create(&YunhornSTSIAQK1ScanTimer, STS_IAQK1ScanPeriod_sec*1000, UTIL_TIMER_PERIODIC, (void*)STS_YunhornSTSEventP7_Process, NULL); - UTIL_TIMER_Start(&YunhornSTSIAQK1ScanTimer); + UTIL_TIMER_Create(&YunhornSTSIAQK1ScanTimer, STS_IAQK1ScanPeriod_sec*1000, UTIL_TIMER_PERIODIC, (void*)STS_YunhornSTSEventP7_Process, NULL); + UTIL_TIMER_Start(&YunhornSTSIAQK1ScanTimer); #endif @@ -1988,6 +1989,8 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context) appHeartBeatDataPort = YUNHORN_STS_T6_LORA_APP_HTBT_PORT; #elif defined(STS_L8) appHeartBeatDataPort = YUNHORN_STS_L8_LORA_APP_HTBT_PORT; +#elif defined(STS_K1) + appHeartBeatDataPort = YUNHORN_STS_K1_LORA_APP_HTBT_PORT; #endif #if defined(STS_L8)||defined(O6)||defined(O2)||defined(O6T)||defined(O1L)||defined(T6) // for keeping sync with webApp for state/lampbar color, in case failure of uplink message diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin b/STM32CubeIDE/Release/WLE5CC_NODE_STS.bin index c14f03e14571e8cf3fe0c34bcc2f445f0313bcff..b046c87e3034dde3ec86a510c6627b643dab65f7 100644 GIT binary patch delta 8550 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 delta 7986 zcmb6;d3+Sb(p|GhCfDwUBjhA|yJdne{5@XO1)c5qM4P>u)@B6*)k8ksB7Hik3he z6wv7q4+X9jKtteRS7_)}fQ>G9n1t}IWU#Zj{HJ*#Y4>M%{G%}Z$I%z53SIh z;!fw%XuSg}XrumozcZ5A(ce)h=r5EB1wudZq(m1R3bw2-U*_T%~x~c$Fdfsqdgj= z2P;cvqjEo@EDA$=DQ^IFDmiHHoiqAp7$9JFA>#*Z`azl*OiI3vhA~KuX}Ui zW~s!BJ~}Mf%(eUI<f>8D@fEtw zS_F&e8LK67p3EOs+}|q^IMP#8lWyXgWok_~Lk_j4$8vA@>D=_Jx;-+7)}4`wIl~ww zaN>({2J$CmL$iTdYbCb&Dni)U7O&b4#`mQSgjuT+cXR}2b2}#{9%JosUd8Q{duKA? z9VQ9$G7e0{s1oz2lAbs&4f_<}3;`uS9pmu%{jvJ0-ao)hnf?~(xPa~dmTAP!W2D2T z!ag{UBD5*kzgi<^(7KGY#0r15pb?CMN}MTc%C8#5MF_#)#BHStAhZ zADww-5JJ(5|K*z?Hdi!Rc*^g^NLzGNEq?2xd}dCp)ia@o%vSZKgR1c4WzFp&PL-HI zr(~vaVt_uFIhZ>n(-$(cMn4hA=}Tu$Y;7kb;%G>Vrbe^hU;=6o4|#f1oohz-b%?pZ zXSF=qtQNSvk%C@aM?;4sIhYhpDKoTChoy&<)0qabP%_vdIia422PD0?!5>+z7hm#6 z+R?7ExLKT0FTUtk+*5r-kk#*&jYCI< zR!f{X9$_l&7+PuO#P<}{KJ@x?oY<~p2!+82d@E%L%=;>_OQNa6zUG>}n};W)z4cCS z&^Q51EQrm0yrJdE<{_BcY5_1T`Luj^Iy^-e4Nrr0bnEbx$ohABLk%XiIG=tvJf(l3 z*C?dTR*P<54!(v%c@sKcK`o~GIa67JQDFX1i!t=Btf3j(0&FqF z`opVs#mtyRhN6egQ&pn*j;!VM2^P`tGW#?I(@`WXw_?(X!z{H;&!?jdFYi#GfIUt67(>K!%Vm80{>Z6zPZiGX%&?7ZS%sbR^mn zgVG+U^g5{G$2uIDO(ABzc-^D5VBIiVg$4E3>NVmXnY4-ZTRfU9pj$lZEJBGn${r=C zaKtYqeKptI{&T%eFMjY2F-M{t-_$66EM4lxa)KU==(BhbdIoo8;}FDS5#}PSM|e;} zjEfLsc*ZL3vu_bm#n-naVoaDPRtMscVl!J20QA8ij6i)L8huvk*NXRg)WXEW#N5C4 zwc;}pGbO5eo?dKv$1pC+j%m;A5!XqOs;#n{tBhiKT%NlNv90Nn2{YwRZOEI}U5ahXY^@>13tjNndhbU|oKTJ+``Q6~RQ@ z5dfjN&1eTRXVjsMBzZ7ex6+qrPpFP{yi!)sVZy#QeK9C)^YQ3?@nLQDFP$23d_axW zw)+&AC-kgdMoi7V8#fFBF;atFCmvGHVMMHI%paV{oDjq#fDcEArdRU^4N5_ZO&x<| z%tIQ2=`)+gkF11wbk@kxCDlq~aI;g{zrc|uqfQ;dIi_o!AQCR3gR`rGk%Od7c);tz^v7YT{3;BV6g5Z+&o$IRVaF2rmq(a9_5nNZ2vTe2gPdikHMxB z_a0}lHQ@A%aQuY`I}t`AK=;Z7@-E1rV2%Eplr!xxk z`cIVau#>GUkMM-DoLN#uUnv||RxD5Xw|qsGpc8ZDP^{7#@fSIC$NM)z%-m*tmc{E} zGofZ-tlcCqEhB1KQR{1&N`=Nr;c|(+q?&9o3ln<0OZDP7PqDrD7QWIm%03GDjK22K zo&tNpE$t&b`S$!^d+GHJ*?Ms(ts52JnB*B=!zz+ad`%gO6f^rJWe8Ggq_!&=NbyK* z#qfYpBl-eqcD4^L^QMkX#f6e4vu8wb-R<@y+leV=l}5bNYaWZ1+Cv>?Ok=(Ht7OC= zZS{l)4_j<~yU}ljBSFv47zz9X2rnSCkEH#Ia=6QzsZdnhnBmPaDsGL3EppseM01c2 zNURVtJ}$`rfqZX!zaW2AV&#Fghk2jF{y!n#+s*~~^Z)Aa^|1Cc5)lvj2jVmhI89OR zZ;y5Kx0B=vwLPm>)RlvoY{|k!HA7-gl}BgS;ZoDtSsd!h^|<*)*dy6og$SHsm4qjY zzPh^w6Sl3C@DJju*-FP1TOuBldUrp)cqNN)Z6-OF(G zUPM*{8PZ8sft5SOS;;9LSLF^bNr}9c zM4pn8CThg9UTQ2E)p*6{>W;7zv%9-)6{H_L6|UWXnuu%sd%K4Td%7ju3kt>nKOJBA zPxKnAL;}(i5ezNFJlLL8yP=tFA3E{xxZHK(e8q?d0S888jmP3pXU2RTW2e#(_9Ia_0Jd7CTPSsCn**O2Hk482Y?DJCHd@ops) zpALltD{Yi;)OVw&hBIm~V|3y?9~V5pzq}p@8}J<*ETlzoD;^%tlB*ly9WLMX8^p}g zL2YN1YrLx_NAvYrM7)>lqPm3*d?W?P(God2oFO-0lD=z%K%0*3xE2z^#^H6O$4-68A`UGGXDq z>B zpquJ3wnbJqnd=1EJyoJVS3D9uI2p!sZ51! z7}88lD1Ii~aFq(PVX%yEW(j2*1$@6E;2RLXhLDe|_w`Zqy(%j-(_gA`;TxJ%J$-t5 z4dM4y5#BYn7hmkdO!g-{+b7%ozuIo}^<{dU)&JIKd@Sv(PE1?w#Z6_V>^^||XhU#! zj1+t1UfC`$Sk~R>zd><7P6v*?i_7u4mXEE4!ROJ~>j+Ia2{w@dI0@z@=EX@x^xK*y zuGm9o+7H2xR9{;Mm+AercXJOE(X+K*t7Z2%iM~0mWauJUKi2PlPuAgcnZlk&0@j)B zQaG_4YdYe0-zA4J86L*{?%C8dep>8;fQ)qtj0E5FG7#gID&QF=^x5(8VISh{Mob&a zC;I02?eLRp(gZyROX#dgQ@Bdm_2#4m&XA9pXmRXt+!6B2nSgtEfPOz^CETFXrzXJ< z^!}-x`qlnkg>xZ4p~5mc{Wcfua7F$l1x)Mld}ncNcYGegpFZozDL*^&)kPLjr79Oe z^-_1hz0x&h+I<>0MnAbTJ#x21;`f%_{6c*p;C{&kceSgy5}BTu`71Y8riW$?G33Zv zA=9y=ZijZ)X}>#DrdMXwa%g(NJ#*m{ed(UN;bp4avlQmJmd-8$_{eo|&fUPp`dzxY zcLL0(3+9dGDt)du=S2gw(UXpN*zdaR_zIwdzB@lLrrFaJ&sl%#QW>w~lAePr_-_ak zbLq|b-*a=u(6b9txxbB}+`>oTEPZTYB^zVmeTi$N5aCN{OV+j!+qK#0i-L&u-uGV$u5JkDVj zn;PO~=HiQfqqFNv(@x52^jEu|Sl6QL1DV8!S#NgThW$^-Hl#o6nt(JWO?@mJq(9X^ zmREWxBhfF681ALR8`9xifw4+hyiH74rMb&YkkPC(88YrB*`` zcKk}>v%6HxuX!^4dZ|%o368cSC`y#6w!y3m4~nJ-MH-prHw=Ma>FkD-f#(7tg3ECa zjvS$K{jyen8prOWI~#JNS_4|l{oXgeh0-_Z#fDt&wJ|h$*TO;oaJd0` zc3B3O7;tHqYXPfYQ+W`k$#%G zawQye?OeH&gYRk4{Rg=*9@mxowc4=KM#4Xiu(gqT8!O;>*O;bEmD=Y9yf9st!<}!W zyVgAfE!6bL-(fO7$GB1-eG%ej%M-fUMJCT}pS2LzfvhOMlO|%jy4LmW`i&6xY+%yA z+85u_-nP!Qc0(S-i{4PK^on8D0-kUuV(@$|5>@Fn0v`7dwDa)}PHm%`H+};Sy5xz2 zT$G0nesVE9;CkxGDWF^P2;o!K6aMO2!nduXzdf~9n{2}mNE==G^c*wI9GlE$sePLv*NnGc*Jzk#D?NB3)@6S8Q;vzR zzrUG_Wa1_qC@-EEvt7@A5YN2iI`mOoIKv;GzDLCs+g!uG-W7#B{rvLeumPpO_pm&v zbPc;w1Lj|m{s!Skgc!e~kSp4e+qZ?;1Vt{K1SK*!pcT#fBLHrLAEcd4~6VEdgm*WjKKReYNV1gmh} zt@4=gNj%rw*AXPsp~%Xc?e6u&MC#fR}|C#^2Bj7i(RWdtJPdyx$9=&JuWP- z9KRvT5K6bchqo3Eq2&_(<3yWR0sNE2ty&J|GB>p@R>Ls}`x(bc9S!`P(XBaJn9OlM zSG2C@@eToII-d!JZT(EKc=kq14G3GcfS2{HqrzajR{JvEtHo5do;ASdTp!~+(jR7U zra-H109*oYWQp_UK)9rh!3qCb(fWNfe9C3imf%4Vzy1Fl^JN@&4#G^7*C8xJco5;y z66e`iSPl=iPKbj#fLB`E;=#f}OY8YW7zZ(%@U|XregY&p8b8hw@a%VoeBBKmXITb8%-S^ect?0!j8I>-t_)7yQ77S)*)iLn;^c-w zK8L!ahQVL{9P_zhkji1(@nI0n@R!42v6hX4bj@%W#`ISYhqZmORxS&|09sokvmqD4 zwxZ$-2=A6SYjU6(nw>NUOu8rW;P@wOs&c-U136A92U0_i;~fF9{O116nU)J9LSO1* zKXcxj3n{R{`2?cS6@Aj(&bD0mj60Frx-k#z8s|>u|G3cYpXRTOXw`8$# z+P%w-a~CdI($KoQ7}7LAoS&4!q=5_YE<}r80>{{ACgP2_1|nOt%iuGJzP0T^l(V)+ zid&;AAWYTxG%ggtBk=fX_Pci=t?H$-_ad$CrE^-4*7VZ3?;(x+eG}<$q{o#{o~lCM;jIAD_DTcNk%VM2CMyvc9cw6^5~THv z9zP{31LX#!XH-s}(7(v}aTVk@Ud5GsI0X31p}-GitGYk%XAloH0KZ!Y{Ij^AM-K#k z4a(m|`99R0jyN0PGSc56TtuDo2mb5Oq^Cy%Uy3*sAsy+TQ14&_@FT+T zLN6J@`B#(ig(&ROwr;G3Z-FcRr*nP{bYduq?Qna-`E7*XiLehL@B(31(xiO{;RkLf oyz}8Q7?egXpy={W{AfZ*L70TV)Yz}|MZ#wzfA|&WZ+6J|Z}L!X`v3p{ diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index 1178950a2d3fe505e87cd4ca146ca79001d654bb..d4f1b6bc98c6ac602b4412553b0ad63e1f91c676 100644 GIT binary patch delta 39566 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 bv+Cg43pMHmIVSY}R9X578vT!k68if;910*h diff --git a/STS/Core/Inc/yunhorn_sts_sensors.h b/STS/Core/Inc/yunhorn_sts_sensors.h index d955f3e..ffb690f 100644 --- a/STS/Core/Inc/yunhorn_sts_sensors.h +++ b/STS/Core/Inc/yunhorn_sts_sensors.h @@ -98,13 +98,15 @@ typedef struct uint8_t SleepStatus; } STS_PRESENCE_SENSOR_Event_Status_t; -enum sts_iaq_alert { - STS_ALERT_HUMIDITY_NORMAL=0, - STS_ALERT_HUMIDITY_HIGH, - STS_ALERT_HUMIDITY_LOW, - STS_ALERT_TEMP_HIGH, - STS_ALERT_TEMP_LOW, -}; +//#define STS_ALERT_NORMAL 0x00 // (1) WELCOME MESSAGE, NORMAL +#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 +#define STS_ALERT_FULL_OCCUPY 0x08 // (3) FULL OCCUPIED, +#define STS_ALERT_CLEAN_IN_PROGRESS 0x10 // (4) CLEAN IN PROGRESS, +#define STS_ALERT_OTHER1 0x20 +#define STS_ALERT_OTHER2 0x40 + typedef struct { float temperature; /*!< in degC */ @@ -482,7 +484,18 @@ typedef struct STS_OO_SensorStatusDataTypeDef } STS_OO_SensorStatusDataTypeDef; +#ifdef STS_K1 +typedef struct service_period_per_day { + uint8_t enable_mask; // enable this time slot or not day of week, + // 0x1f= 0b0001 1111 ---> day1 to day5 of week + // 0x60= 0b0110 0000 ---> day6 5o day 7 of week + uint8_t start_hour; // start hour 00--23 in 24hour + uint8_t start_minute; // start minute 00--59 + uint8_t end_hour; // end hour 00-23 in 24 hour + uint8_t end_minute; // end minute 00--60 +} t_service_period_per_day; +#endif /** * @brief Store/Write/Flash Configuration in RW RAM */ diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c index 76a1814..4d4f65c 100644 --- a/STS/Core/Src/yunhorn_sts_process.c +++ b/STS/Core/Src/yunhorn_sts_process.c @@ -57,9 +57,21 @@ volatile uint8_t sts_hall1_read=0,sts_hall2_read=0; volatile uint8_t last_sts_hall1_read, last_sts_hall2_read; iaq_sensor_t iaq_sensor_data; iaq_sensor_alert_t iaq_sensor_alert={28.0, 5.0, 65.0, 20.0}; -uint8_t sts_alert_id=0, prev_alert_id=0; +volatile bool sts_rc_in_service_period=false; +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}, + {0,0,0,0,0}, + {0,0,0,0,0} +}; + + static int STS_IAQ_Generate_Alert(void); +static bool STS_Check_Service_Period(void); #endif + #if defined(STS_L8) #include "app_tof.h" #include "sts_lamp_bar.h" @@ -664,7 +676,31 @@ void STS_YunhornSTSEventP6_Process(void) PME_OFF; } - +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"); + break; + case 1: + APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #1 \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"); + break; + case 3: + APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #3 \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"); + break; + case 5: + APP_LOG(TS_OFF, VLEVEL_M, "\r\n ======================\n\n RF CMD_BUTTON #6 \n\n======================\r\n"); + break; + default: + break; + } +} /* * STS P7 Process, Detection IAQ Sensors * air quality and odor level sensors @@ -680,14 +716,28 @@ void STS_YunhornSTSEventP7_Process(void) //STS_RF_Show_pic(cause_wet_floor); if (prev_alert_id != sts_alert_id) { - APP_LOG(TS_OFF, VLEVEL_M, "\r\n Projector Show Caution Wet floor \r\n"); + + APP_LOG(TS_OFF, VLEVEL_M, "\r\n Projector Show \n\t Caution\n\t Wet floor> \r\n"); prev_alert_id = sts_alert_id; + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + STS_YunhornRCRFSendCMD(1); } } else { - APP_LOG(TS_OFF, VLEVEL_M, "\r\n Projector Show Caution Wet floor \r\n"); + if ((prev_alert_id != sts_alert_id)) + { + + APP_LOG(TS_OFF, VLEVEL_M, "\r\n Projector Show \n\t\n\t Prince Walls Hospital> \r\n"); + prev_alert_id = sts_alert_id; + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + STS_YunhornRCRFSendCMD(0); + } + } + #endif } @@ -722,22 +772,29 @@ static int STS_IAQ_Generate_Alert(void) APP_LOG(TS_OFF, VLEVEL_M, "\r\n Get Temp and Humidity Error, code=%02x \r\n", eterr); } - if (iaq_sensor_data.humidity >= iaq_sensor_alert.humidity_high) + if ((int)iaq_sensor_data.humidity >= (int)iaq_sensor_alert.humidity_high) { - return 1; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n*** Measured Humidity=%2d (%), threshold %2d (%) \r\n", + (int)iaq_sensor_data.humidity, (int)iaq_sensor_alert.humidity_high); + sts_alert_id = STS_ALERT_HUMIDITY_HIGH; - } else if (iaq_sensor_data.humidity < iaq_sensor_alert.humidity_high) - { + return 1; + + } else if ((int)iaq_sensor_data.humidity < (int)iaq_sensor_alert.humidity_high) + { + APP_LOG(TS_OFF, VLEVEL_M, "\r\n*** Measured Humidity=%2d (%), threshold %2d (%) \r\n", + (int)iaq_sensor_data.humidity, (int)iaq_sensor_alert.humidity_high); + sts_alert_id = STS_ALERT_HUMIDITY_NORMAL; return 0; - } + } #endif return 0; } - +/* static void OnSelfMeasureEnvironmentEvent(void *context) { @@ -745,9 +802,12 @@ static void OnSelfMeasureEnvironmentEvent(void *context) if (sts_rc_in_service_period == true) { - if ((sensor_data.humidity >= sts_wet_humidity_threshold) ) // wet floor condition + APP_LOG(TS_OFF, VLEVEL_M, "\r\n*** Humidity=%2d (%), threshold %2d (%) \r\n", iaq_sensor_data.humidity, iaq_sensor_alert.humidity_high); + + if ((iaq_sensor_data.humidity >= iaq_sensor_alert.humidity_high) ) // wet floor condition { - APP_LOG(TS_OFF, VLEVEL_M, "\r\n*** Humidity=%2d (%), over threshold %2d (%), start WET FLOOR PICTURE \r\n", sensor_data.humidity, sts_wet_humidity_threshold); + + APP_LOG(TS_OFF, VLEVEL_M, "\r\n*** Show *** \r\n"); sts_rf_cmd_pic |= STS_RF_SHOW_PIC_WET_FLOOR; @@ -755,7 +815,7 @@ static void OnSelfMeasureEnvironmentEvent(void *context) } else { // non wet floor situation, so just display welcome message or other messages, instead of wet floor - APP_LOG(TS_OFF, VLEVEL_M, "\r\n*** Humidity=%2d (%), less than threshold %2d (%), Power Off projector\r\n", sensor_data.humidity, sts_wet_humidity_threshold); + APP_LOG(TS_OFF, VLEVEL_M, "\r\n*** Shut-off *** \r\n"); sts_rf_cmd_pic &= ~STS_RF_SHOW_PIC_WET_FLOOR; @@ -763,14 +823,14 @@ static void OnSelfMeasureEnvironmentEvent(void *context) } - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_STS_RemoteControlButtonEvent), CFG_SEQ_Prio_0); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRemoteControlSendCMD), CFG_SEQ_Prio_0); } else { // not in service period, just power off projector in case it's still on if (sts_rf_cmd_status != STS_RF_PROJECTOR_POWER_OFF) { sts_rf_cmd_status = STS_RF_PROJECTOR_POWER_OFF; sts_rf_cmd_pic = STS_RF_SHOW_PIC_DARK; - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_STS_RemoteControlButtonEvent), CFG_SEQ_Prio_0); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRemoteControlSendCMD), CFG_SEQ_Prio_0); } else { // already power off, do nothing just return return; @@ -778,7 +838,7 @@ static void OnSelfMeasureEnvironmentEvent(void *context) } } - +*/ static bool STS_Check_Service_Period(void) { @@ -793,7 +853,7 @@ static bool STS_Check_Service_Period(void) { if (rc_service_period[i].enable_mask) { - if ((time_now.tm_hour >= rc_service_period[i].start_hour) && (time_now.tm_minute < rc_service_period[i].end_hour)) + if ((time_now.tm_hour >= rc_service_period[i].start_hour) && (time_now.tm_min < rc_service_period[i].end_hour)) { 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; @@ -802,7 +862,7 @@ static bool STS_Check_Service_Period(void) } sts_rc_in_service_period = sts_rc_in_service_period_try; - return + return sts_rc_in_service_period_try; } /* * STS P8 Process, Detection ETR Sensors, Water flow sensors, pulse counting