From f0bdfe0d039865278b0a310393e9138164e16e9e Mon Sep 17 00:00:00 2001 From: reaw55 <58457329+reaw55@users.noreply.github.com> Date: Sat, 3 Feb 2024 05:48:59 +0700 Subject: [PATCH] WIP, light should 'work' hopefully --- ise-display/ise-display-prod.HMI | Bin 37446253 -> 37446253 bytes src/codebook.txt | 10 +- src/ise_display.cpp | 409 ++++++++++++++++++++++++++++++- src/ise_display.hpp | 35 ++- 4 files changed, 432 insertions(+), 22 deletions(-) diff --git a/ise-display/ise-display-prod.HMI b/ise-display/ise-display-prod.HMI index 023ab66b8b6405a36ba2b0ad78056807ee593bcb..c48e4e72569c13ec194c1bc67f1fe36dd914dd6b 100644 GIT binary patch delta 2722 zcmd7S4n^5y2L7+uhyW-QC?CU>CTRN3jbPySo(?ySuwvY_YpI_jTr+|G{_W z`n_vrtq;$KH7nvsM7#*K$=B)Z8SLkDMR8pD6FlBoG^wL)*Iv1*)U4|G@4HgW*WnY@ z;c$lDbvE}3ZV=5UV~TKpN32QOf0x6{k;}L3|3~>}=@Z~cq&;V7&uEcxJToj=?-S_f z3i5L~m4}L=JXKWX73Syip8Py4GSb`cFPJ0H?Fw>hP`3tkYf!fab!$+!26el<-OvAq z1EFr$i2hc@idr!%ZY8Xwm9o-S#>!ebD{mF7qE)iWR>i7XHLGqltftkn+E&NvT0N_8 z4XmLxvc}fLnp!h!ZY`{(wX)XM#@bptYi}K_qjj>**2TJ7H|uUatf%#|-sWq5*2nr< zKkIJ;Y@iLY!8XK(+OVzuDZ)K3^vE6@mL}Z4Oi;+fmHr7shVAvA6_(~lz$K56Hr)fZ zhOPV^Fw-MQS3?a~ZZ$%URDsIWC^cFIsWED-8mGpq32LI6q$aB=YO0#1g4J|2L(Nnn zYL=R<=BT-9o|>-~sD)~gTCA3+rD~a4u2!g(YL!~8)~K~=om#IpsEulq+N`#yP_x>b$z3E~-oF zvbv(Ks%z@Hx}k2WTk5vDqwcDE>b`oQ9;!#`u?kmD)Km3LJy$Q(OZ7^WliSzNzo(hx)00so(04iX5M%k8`pD4~PPu5EZ<@8=^sUhygJn7Q}`) z5EpzP9>j+PkPs3m8b}N2AU$M&jF1U3Ll(#i*&sXQfSiyE zazh@-3;7^F6o7(I2ns_HCZ`;12;X9NaJhMnWJMjDpb+1Y=+nZcET>$4SQfO?1TMq01m<-I1ESNC>(?1Z~{)kDL4&h;4GYj z^Kbz!!X>y2SKumKgX?euZo)0N4R_!!+=Kh@03O04cnsn21fIe(cn&Y%CA@;y5CL!C zExd#G@Bu!;C-@9s;46HC@9+bD!Y}v@e<0GS=g&h6CwM><@Pw$~1>O)1qC*Ub39%qH z#DTcr1Mwg}B!GmF2oi$}l0Z^O2FW1>q=ZzE8qz>oNC)X517w6ukQuT-R>%g~AqV7y fT#y^`KwiiP`Jn(5ghEglia=41{d)d9D!%&%jpe*L delta 2706 zcmd7SRdZEI6o%oPC{ECWySqbhcXxN!1a}T(L4e@F-Q5EOcXxLuIDz0!=6k1R{sX(} zeRl8KeX%aOI^t+Vya=_~-{Eiz32-<)92YNy1Uvka_Gr_kXRgXMs<{34TrKMF=If=8 z(0h(%-XWfGd^4s9ALbTolAD_&@`6|1T>fqT-^x2n@8NEV^v^A{N3^Iop5IR#S{oSP z3<_{Ml)Lg!p2|ykhXpu&Ccg-ait-8g3+4!PIfGmp)TKdP8q}phT^iJ-L0wKC*NeYl zL#WF+vY!<(KPzg*thkl1l2*z}TNx{B<*d9_u!>g6Dq9t+YSpZ|)v%gY%W7L4t84YF zzBRCh*2o%L6KiVCthu$Yme$HzTN`U@?X10Zu#VQrI$Ia(YTc~6^{}4S%ls|CdRrgs zYyGUh4X}YW$OhXG8@g>+ig3?gn_9bvr3oKaI%rn+@58r+`Slr@&^t&+L5)x@HByaI zfy&fqHAV%gv1*(euY%PCHBn7clhqV8RZUYNYPy=CW~y0gwwj~ns(EU@TA&uHMQX8H zqL!*Wn(8&Z+b2g1V?Ksmtn$x~i_J>*|KOscxy;>W;dr z?y39gfqJMOsmJPx3Rh3nGxc1(P%qUh^;*4A5$dgary|vR^+A19pVVjdMSWG@)OYnm z{ZzlyZ}mq-1!w8)n5@7ZJirsYz#DuZ8bpT}5EEiSY={GK!588|d`JKZArT}7CnSNS zkPMPT3P=g5AT^|cw2%(cLk7qQnIJP{fvk`XvO^BY3ArFQ7TJvn_?^@V=W9|pic z7zBf12n>Z`FdRmJ3r4~y2n2)CFb0BPER2Kk5DXJwB20qGFa@T* zU@pvq`LF;M!Xj7CS+4QpU6tb_Hi0XD)W*bG}>D}=%}*bX}&40ggU z*bRGNFYJT;Z~zX%Avg?2;3yn}<8T5_!YMcnXW%THgY$3!F2W_a3|HVPT!ZUy18%}C zxD9vUF5H9r@BkjdBX|r?ARL~;Gk6X!;3d3**YE}+;4Qp^NO%t);3Is3&+rAl!Z-L1 zKj0_)g5U55q8z&Z+_i9kJ9vO6c!4+gKs1OBF(4+yg4hrT;({;4gZPjD5<((K3{FS_ zNg){|hZK+!QbB4+18E^0q=yWU5i&t$$O2g*8)SzZkP~u2ZpZ_9As^(20#FbNL18EY Ne(nc!{kd0&{0CNuwzvQQ diff --git a/src/codebook.txt b/src/codebook.txt index 8ffe208..185405b 100644 --- a/src/codebook.txt +++ b/src/codebook.txt @@ -103,17 +103,17 @@ picture id: 36 light-master-off-p 37 light-master-on 38 light-master-on-p -39 light-level-1 -40 light-level-2 -41 light-level-3 -42 light-level-4 +39 light-level-0 +40 light-level-1 +41 light-level-2 +42 light-level-3 object id: 0 main 1 ac_temp (number) -2 pm_fan (number 0-20) +2 pm_speed (number 0-20) 3 ac_sw 4 ac_mode 5 ac_speed diff --git a/src/ise_display.cpp b/src/ise_display.cpp index e264f01..84399e3 100644 --- a/src/ise_display.cpp +++ b/src/ise_display.cpp @@ -34,6 +34,7 @@ ISEDisplay(HardwareSerial* adapter); auto bindedHandleTouch = std::bind(&ISEDisplay::handleTouch, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); this->outputCallbackHandle = this->outputCard->registerChangeCallback(bindedHandlePWMChange); this->climateCallbackHandle = this->climateCard->registerChangeCallback(bindedHandleACChange); + this->user_mode = 1; // set to cool by default this->registerTouchCallback(bindedHandleTouch); this->reset(); delay(1000); @@ -46,8 +47,195 @@ ISEDisplay(HardwareSerial* adapter); } +void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type){ + if (page == PAGE_STANDBY){ + switch (component) + { + case COMPONENT_STANDBY_OPEN_ALL_TOGGLE: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + this->jumpToPage(2); + break; + case COMPONENT_STANDBY_LIGHT_TOGGLE: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + updateLightGroupStatePageStandby(); + break; + case COMPONENT_STANDBY_AC_TOGGLE: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + this->climateCard->setMode(this->climateCard->getMode() == 0 ? 1 : 0); + // need fix + break; + case COMPONENT_STANDBY_PM_TOGGLE: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + this->outputCard->setState(5, !this->outputCard->getState(5)); + break; + default: + break; + } + } + + else if (page == PAGE_DASHBOARD){ + switch (component) + { + case COMPONENT_LIGHT_MASTER_BUTTON: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + updateLightGroupStatePageDashboard(); + break; + case COMPONENT_LIGHT_ROW1_LEVEL0_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 0); + break; + case COMPONENT_LIGHT_ROW1_LEVEL1_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 1); + break; + case COMPONENT_LIGHT_ROW1_LEVEL2_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 2); + break; + case COMPONENT_LIGHT_ROW1_LEVEL3_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 3); + break; + case COMPONENT_LIGHT_ROW2_LEVEL0_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 0); + break; + case COMPONENT_LIGHT_ROW2_LEVEL1_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 1); + break; + case COMPONENT_LIGHT_ROW2_LEVEL2_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 2); + break; + case COMPONENT_LIGHT_ROW2_LEVEL3_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 3); + break; + case COMPONENT_LIGHT_ROW3_LEVEL0_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 0); + break; + case COMPONENT_LIGHT_ROW3_LEVEL1_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 1); + break; + case COMPONENT_LIGHT_ROW3_LEVEL2_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 2); + break; + case COMPONENT_LIGHT_ROW3_LEVEL3_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 3); + break; + case COMPONENT_LIGHT_ROW4_LEVEL0_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 0); + break; + case COMPONENT_LIGHT_ROW4_LEVEL1_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 1); + break; + case COMPONENT_LIGHT_ROW4_LEVEL2_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 2); + break; + case COMPONENT_LIGHT_ROW4_LEVEL3_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 3); + break; + case COMPONENT_AC_TOGGLE_BUTTON: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + this->climateCard->setMode(this->climateCard->getMode() == 0 ? 1 : 0); + // need fix + break; + case COMPONENT_AC_MODE: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + this->climateCard->setMode(this->climateCard->getMode() == 0 ? 1 : 0); + // need fix + break; + case COMPONENT_AC_FAN_SPEED: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + uint8_t fan_speed = this->climateCard->getFanSpeed(); + this->climateCard->setFanSpeed((fan_speed + 1)%3); + break; + case COMPONENT_AC_TEMP_DOWN_BUTTON: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + this->climateCard->setTemperature(this->climateCard->getTemperature() - 1); + break; + case COMPONENT_AC_TEMP_UP_BUTTON: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + this->climateCard->setTemperature(this->climateCard->getTemperature() + 1); + break; + case COMPONENT_PM_TOGGLE_BUTTON: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + this->outputCard->setState(5, !this->outputCard->getState(5)); + break; + case COMPONENT_PM_FAN_SPEED_DECREASE: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + uint8_t pm_fan_speed = this->outputCard->getState(6); + if (pm_fan_speed >= 0 && pm_fan_speed <= 20) + this->outputCard->setState(5, (pm_fan_speed - 1)); + break; + case COMPONENT_PM_FAN_SPEED_INCREASE: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + uint8_t pm_fan_speed = this->outputCard->getState(6); + if (pm_fan_speed >= 0 && pm_fan_speed <= 20) + this->outputCard->setState(5, (pm_fan_speed + 1)); + break; + default: + break; + } + + } + else{ + return; + } +} +void ISEDisplay::handlePWMChange(uint8_t pin, bool state, uint16_t value){ + if (pin >= 1 && pin <= 4) + { + // Light + updateLightGroupStatePageDashboard(); + updateLightGroupStatePageStandby(); + } + else if (pin == 0) + { + // Air Purifier + updateAirPurifierState(); + } +} void ISEDisplay::updateDateTimeText(rtctime_t time){ this->takeSerialMutex(); // Send the time to the display @@ -76,35 +264,234 @@ void ISEDisplay::updatePMinside(float pm25_inside){ } -void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type){ - -} - -void ISEDisplay::handlePWMChange(uint8_t pin, bool state, uint16_t value){ - -} - void ISEDisplay::setPMstate(bool is_pm_on, uint8_t pm_fan_speed){ } void ISEDisplay::setACstate(uint8_t ac_fan_speed, uint8_t ac_mode, uint8_t ac_temperature){ - + updateACState(); } void ISEDisplay::setLightLevel(uint8_t row, uint8_t level){ - + for (uint8_t i = 1; i <= 4; i++) { + if(row == i) + this->outputCard->setState(row, level); + } } -void ISEDisplay::updateLightGroupState(){ +void ISEDisplay::updateLightGroupStatePageStandby(){ + // Calculate the state + bool state = calculateLightGroupState(); + // Send the state to the display + this->takeSerialMutex(); + + this->displayAdapter->print("s_light_toggle.pic="); + this->displayAdapter->print(state ? COMPONENT_STANDBY_LIGHT_PIC_ON : COMPONENT_STANDBY_LIGHT_PIC_OFF); + this->sendStopBytes(); + this->displayAdapter->print("s_light_toggle.pic2="); + this->displayAdapter->print(state ? COMPONENT_STANDBY_LIGHT_PIC_ON_PRESSED : COMPONENT_STANDBY_LIGHT_PIC_OFF_PRESSED); + this->sendStopBytes(); + + this->giveSerialMutex(); } +void ISEDisplay::updateLightGroupStatePageDashboard(){ + // Calculate the state + bool state = calculateLightGroupState(); + // Send the state to the display + this->takeSerialMutex(); + + this->displayAdapter->print("light_master.pic="); + this->displayAdapter->print(state ? COMPONENT_LIGHT_MASTER_ON : COMPONENT_LIGHT_MASTER_OFF); + this->sendStopBytes(); + this->displayAdapter->print("light_master.pic2="); + this->displayAdapter->print(state ? COMPONENT_LIGHT_MASTER_ON_PRESSED : COMPONENT_LIGHT_MASTER_OFF_PRESSED); + this->sendStopBytes(); + + for (uint8_t i = 1; i <= 4; i++) { + u_int8_t state = this->outputCard->getState(i); + switch (state) + { + case 0: + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print(".pic="); + this->displayAdapter->print(COMPONENT_LIGHT_LEVEL_0); + this->sendStopBytes(); + break; + case 1: + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print(".pic="); + this->displayAdapter->print(COMPONENT_LIGHT_LEVEL_1); + this->sendStopBytes(); + break; + case 2: + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print(".pic="); + this->displayAdapter->print(COMPONENT_LIGHT_LEVEL_2); + this->sendStopBytes(); + break; + case 3: + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print(".pic="); + this->displayAdapter->print(COMPONENT_LIGHT_LEVEL_3); + this->sendStopBytes(); + break; + default: + break; + } + } + + this->giveSerialMutex(); +} +bool ISEDisplay::calculateLightGroupState() { + // Check if all lights are on + bool lightOn = false; + for (uint8_t i = 1; i <= 4; i++) { + if (this->outputCard->getState(i) != 0) { + lightOn = true; + break; + } + } + return lightOn; +} void ISEDisplay::updateAirPurifierState(){ + // Get the state + bool state = this->outputCard->getState(5); + uint8_t fan_speed = this->outputCard->getState(5); + // Send the state to the display + this->takeSerialMutex(); + this->displayAdapter->print("pm_sw.pic="); + this->displayAdapter->print(state ? COMPONENT_PM_TOGGLE_PIC_ON : COMPONENT_PM_TOGGLE_PIC_OFF); + this->sendStopBytes(); + + this->displayAdapter->print("pm_sw.pic2="); + this->displayAdapter->print(state ? COMPONENT_PM_TOGGLE_PIC_ON_PRESSED : COMPONENT_PM_TOGGLE_PIC_OFF_PRESSED); + this->sendStopBytes(); + + this->displayAdapter->print("pm_speed.txt=\""); + this->displayAdapter->print(fan_speed); + this->displayAdapter->print("\""); + this->sendStopBytes(); + + this->displayAdapter->print("pm_speed.pco="); + this->displayAdapter->print(state ? 34486 : 33841); + this->sendStopBytes(); + + this->giveSerialMutex(); } void ISEDisplay::updateACState(){ + // Get the state + uint8_t mode = this->climateCard->getMode(); + if(mode == 0){ + + } + uint8_t fan_speed = this->climateCard->getFanSpeed(); + uint8_t temperature = this->climateCard->getTemperature(); + + this->takeSerialMutex(); + + // Send the state to the display + if (mode == 0 ){ + + + this->displayAdapter->print("ac_temp.pco="); + this->displayAdapter->print(33841); + this->sendStopBytes(); + + this->displayAdapter->print("ac_temp.pic="); + this->displayAdapter->print(COMPONENT_AC_STATUS_OFF); + this->sendStopBytes(); + + } + else{ + this->displayAdapter->print("ac_temp.pco="); + this->displayAdapter->print(34486); + this->sendStopBytes(); + + this->displayAdapter->print("ac_temp.pic="); + this->displayAdapter->print(COMPONENT_AC_STATUS_ON); + this->sendStopBytes(); + + user_mode = mode; + } + this->displayAdapter->print("ac_sw.pic="); + this->displayAdapter->print(mode != 0 ? COMPONENT_AC_TOGGLE_PIC_ON : COMPONENT_AC_TOGGLE_PIC_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_sw.pic2="); + this->displayAdapter->print(mode != 0 ? COMPONENT_AC_TOGGLE_PIC_ON_PRESSED : COMPONENT_AC_TOGGLE_PIC_OFF_PRESSED); + this->sendStopBytes(); + switch (user_mode) + { + case 1: + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_AC_MODE_COOL_PIC); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_AC_MODE_COOL_PIC_PRESSED); + this->sendStopBytes(); + break; + case 2: + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_AC_MODE_FAN_PIC); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_AC_MODE_FAN_PIC_PRESSED); + this->sendStopBytes(); + break; + default: + break; + } + switch (fan_speed) + { + case 0: + this->displayAdapter->print("ac_fan.pic="); + this->displayAdapter->print(COMPONENT_AC_FAN_MODE_AUTO_PIC); + this->sendStopBytes(); + this->displayAdapter->print("ac_fan.pic2="); + this->displayAdapter->print(COMPONENT_AC_FAN_MODE_AUTO_PIC_PRESSED); + this->sendStopBytes(); + break; + case 1: + this->displayAdapter->print("ac_fan.pic="); + this->displayAdapter->print(COMPONENT_AC_FAN_MODE_HIGH_PIC); + this->sendStopBytes(); + this->displayAdapter->print("ac_fan.pic2="); + this->displayAdapter->print(COMPONENT_AC_FAN_MODE_HIGH_PIC_PRESSED); + this->sendStopBytes(); + break; + case 2: + this->displayAdapter->print("ac_fan.pic="); + this->displayAdapter->print(COMPONENT_AC_FAN_MODE_MID_PIC); + this->sendStopBytes(); + this->displayAdapter->print("ac_fan.pic2="); + this->displayAdapter->print(COMPONENT_AC_FAN_MODE_MID_PIC_PRESSED); + this->sendStopBytes(); + break; + case 3: + this->displayAdapter->print("ac_fan.pic="); + this->displayAdapter->print(COMPONENT_AC_FAN_MODE_LOW_PIC); + this->sendStopBytes(); + this->displayAdapter->print("ac_fan.pic2="); + this->displayAdapter->print(COMPONENT_AC_FAN_MODE_LOW_PIC_PRESSED); + this->sendStopBytes(); + break; + default: + break; + } + + this->displayAdapter->print("ac_temp.txt=\""); + this->displayAdapter->print(temperature); + this->displayAdapter->print("\""); + this->sendStopBytes(); + + this->giveSerialMutex(); } diff --git a/src/ise_display.hpp b/src/ise_display.hpp index 91168d8..f7c201c 100644 --- a/src/ise_display.hpp +++ b/src/ise_display.hpp @@ -6,6 +6,27 @@ #include +/* +tentetive pin mapping + +1-4 Lights + 1: row 1 + 2: row 2 + 3: row 3 + 4: row 4 + +5: Air Purifier status (on/off) +6: Air Purifier fan speed (0-20) + +lights have 4 states +0: off +1: low +2: mid +3: high + +*/ + + // Touch Types #define TOUCH_TYPE_PRESS 1 #define TOUCH_TYPE_RELEASE 0 @@ -172,10 +193,10 @@ #define COMPONENT_LIGHT_MASTER_ON_PRESSED 38 //light level component -#define COMPONENT_LIGHT_LEVEL_1 39 -#define COMPONENT_LIGHT_LEVEL_2 40 -#define COMPONENT_LIGHT_LEVEL_3 41 -#define COMPONENT_LIGHT_LEVEL_4 42 +#define COMPONENT_LIGHT_LEVEL_0 39 +#define COMPONENT_LIGHT_LEVEL_1 40 +#define COMPONENT_LIGHT_LEVEL_2 41 +#define COMPONENT_LIGHT_LEVEL_3 42 @@ -235,7 +256,6 @@ class ISEDisplay : public ESPMegaDisplay { void handleTouch(uint8_t page, uint8_t component, uint8_t touch_type); void handlePWMChange(uint8_t pin, bool state, uint16_t value); - void setPMstate(bool is_pm_on, uint8_t pm_fan_speed); void setACstate(uint8_t ac_fan_speed, uint8_t ac_mode, uint8_t ac_temperature); void setLightLevel(uint8_t row, uint8_t level); @@ -245,8 +265,11 @@ class ISEDisplay : public ESPMegaDisplay { ClimateCard *climateCard; uint8_t outputCallbackHandle; uint8_t climateCallbackHandle; + uint8_t user_mode; - void updateLightGroupState(); + void updateLightGroupStatePageDashboard(); + void updateLightGroupStatePageStandby(); void updateAirPurifierState(); void updateACState(); + bool calculateLightGroupState(); }; \ No newline at end of file