fix pm fan speed

This commit is contained in:
reaw 2024-02-09 10:11:44 +07:00
parent b01540a4ce
commit 733ed54f9b
3 changed files with 52 additions and 23 deletions

View file

@ -17,18 +17,35 @@ void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCar
this->outputCallbackHandle = this->outputCard->registerChangeCallback(bindedHandlePWMChange);
this->climateCallbackHandle = this->climateCard->registerChangeCallback(bindedHandleACChange);
this->user_mode = 1; // initialized to cool by default
this->pm_fan_speed = 10;
this->ac_fan_speed = 0;
this->ac_mode = 0;
this->ac_temperature = 25;
this->lightLevelRow1 = 0;
this->lightLevelRow2 = 0;
this->lightLevelRow3 = 0;
this->lightLevelRow4 = 0;
this->time_since_last_screen_update = 0;
this->registerTouchCallback(bindedHandleTouch);
this->reset();
delay(1000);
// TODO : Will the light be on or off when the system is started?, You need to jump to its respective page
// first jump to main then if no activity jump to standby
this->jumpToPage(1); // change this back later to 2
this->jumpToPage(2); // change this back later to 2
delay(100);
this->updateAirPurifierState();
this->updateACState();
this->updateLightGroupStatePageDashboard();
this->updateLightGroupStatePageStandby();
this->outputCard->setValue(6,pm_fan_speed);
this->outputCard->setValue(5,0);
this->outputCard->setValue(1,0);
this->outputCard->setValue(2,0);
this->outputCard->setValue(3,0);
this->outputCard->setValue(4,0);
// this->climateCard->setTemperature(ac_temperature);
// this->climateCard->setFanSpeed(ac_fan_speed);
// this->climateCard->setMode(ac_mode);
}
void ISEDisplay::loop()
{
@ -43,13 +60,18 @@ void ISEDisplay::loop()
if (current_time - this->time_since_last_screen_update > 120000)
{
// jump to standby page if there is no activity for 2 minutes
this->jumpToPage(1);
if(this->currentPage != 1){
this->jumpToPage(1);
ESP_LOGI("ISEDisplay", "Jumping to standby page");
}
ESP_LOGI("ISEDisplay", "No activity for 2 minutes & currently at standby page");
}
}
void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type)
{
ESP_LOGD("ISEDisplay", "Touch detected on page %d, component %d, touch type %d", page, component, touch_type);
time_since_last_screen_update = millis(); // update time since last activity
if (page == PAGE_STANDBY)
{
switch (component)
@ -81,7 +103,7 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type
case COMPONENT_STANDBY_PM_TOGGLE:
if (touch_type != TOUCH_TYPE_RELEASE)
break;
togglePM();
togglePMStandby();
break;
default:
break;
@ -90,12 +112,7 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type
else if (page == PAGE_DASHBOARD)
{
u_int8_t pm_fan_speed = 0;
u_int8_t fan_speed = 0;
u_int8_t lightLevelRow1 = 0;
u_int8_t lightLevelRow2 = 0;
u_int8_t lightLevelRow3 = 0;
u_int8_t lightLevelRow4 = 0;
switch (component)
{
@ -188,10 +205,10 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type
case COMPONENT_AC_FAN_SPEED:
if (touch_type != TOUCH_TYPE_RELEASE)
break;
fan_speed = this->climateCard->getFanSpeed();
ac_fan_speed = this->climateCard->getFanSpeed();
// We have auto, low, mid, high right?, that's 0,1,2,3 a modulo operation of 3 only gives 0,1,2
// mod 4 should fixed it
this->climateCard->setFanSpeed((fan_speed + 1) % 4);
this->climateCard->setFanSpeed((ac_fan_speed + 1) % 4);
updateACState();
break;
case COMPONENT_AC_TEMP_DOWN_BUTTON:
@ -215,16 +232,20 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type
if (touch_type != TOUCH_TYPE_RELEASE)
break;
pm_fan_speed = this->outputCard->getValue(6);
if (pm_fan_speed >= 0 && pm_fan_speed <= 20)
this->outputCard->setValue(5, (pm_fan_speed - 1));
ESP_LOGI("ISEDisplay", "Current PM fan speed: %d", pm_fan_speed);
if (pm_fan_speed >=1 && pm_fan_speed <= 20)
this->outputCard->setValue(6, (pm_fan_speed - 1));
ESP_LOGI("ISEDisplay", "New PM fan speed: %d", pm_fan_speed);
updateAirPurifierState();
break;
case COMPONENT_PM_FAN_SPEED_INCREASE:
if (touch_type != TOUCH_TYPE_RELEASE)
break;
pm_fan_speed = this->outputCard->getValue(6);
if (pm_fan_speed >= 0 && pm_fan_speed <= 20)
this->outputCard->setValue(5, (pm_fan_speed + 1));
ESP_LOGI("ISEDisplay", "Current PM fan speed: %d", pm_fan_speed);
if (pm_fan_speed >= 0 && pm_fan_speed <= 19)
this->outputCard->setValue(6, (pm_fan_speed + 1));
ESP_LOGI("ISEDisplay", "New PM fan speed: %d", pm_fan_speed);
updateAirPurifierState();
break;
default:
@ -368,14 +389,14 @@ void ISEDisplay::updateTempOutside(float temp_outside)
// change temp_outside to int then display
u_int8_t temp_outside_int = (u_int8_t)temp_outside;
this->takeSerialMutex();
this->displayAdapter->printf("temp_outside.txt=\"%d\"", temp_outside_int);
this->displayAdapter->printf("temp_outside.txt=%d", temp_outside_int);
this->sendStopBytes();
this->giveSerialMutex();
}
void ISEDisplay::updatePMoutside(u_int16_t pm25_outside)
{
this->takeSerialMutex();
this->displayAdapter->printf("pm_outside.txt=\"%d\"", pm25_outside);
this->displayAdapter->printf("pm_outside.txt=%d", pm25_outside);
this->sendStopBytes();
this->giveSerialMutex();
// TODO : use remotevar to get PM2.5 data from appdaemon and update the display
@ -652,7 +673,7 @@ void ISEDisplay::updateAirPurifierState()
{
// Get the state
bool state = this->outputCard->getState(5);
uint8_t fan_speed = this->outputCard->getState(6);
pm_fan_speed = this->outputCard->getValue(6);
// Send the state to the display
this->takeSerialMutex();
@ -664,9 +685,9 @@ void ISEDisplay::updateAirPurifierState()
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->displayAdapter->print("pm_speed.val=");
this->displayAdapter->print(pm_fan_speed);
//this->displayAdapter->print("\"");
this->sendStopBytes();
this->displayAdapter->print("pm_speed.pco=");
@ -788,9 +809,9 @@ void ISEDisplay::updateACState()
updateACfanSpeed();
this->displayAdapter->print("ac_temp.txt=\"");
this->displayAdapter->print("ac_temp.val=");
this->displayAdapter->print(temperature);
this->displayAdapter->print("\"");
//this->displayAdapter->print("\"");
this->sendStopBytes();
this->giveSerialMutex();

View file

@ -45,7 +45,15 @@ class ISEDisplay : public ESPMegaDisplay {
uint8_t outputCallbackHandle;
uint8_t climateCallbackHandle;
uint8_t user_mode;
uint8_t ac_mode;
uint8_t ac_fan_speed;
uint8_t ac_temperature;
uint8_t pm_fan_speed;
uint8_t time_since_last_screen_update;
u_int8_t lightLevelRow1;
u_int8_t lightLevelRow2;
u_int8_t lightLevelRow3;
u_int8_t lightLevelRow4;
void updateuserACmode();