diff --git a/ise-display/images/main/light/light-button-off-prressed.png b/ise-display/images/main/light/light-button-off-prressed.png index ac98521..a41755a 100644 Binary files a/ise-display/images/main/light/light-button-off-prressed.png and b/ise-display/images/main/light/light-button-off-prressed.png differ diff --git a/ise-display/images/main/light/light-button-off.png b/ise-display/images/main/light/light-button-off.png index 14c7035..1e9ac73 100644 Binary files a/ise-display/images/main/light/light-button-off.png and b/ise-display/images/main/light/light-button-off.png differ diff --git a/ise-display/images/main/light/light-button-on-pressed.png b/ise-display/images/main/light/light-button-on-pressed.png index aa1ebf4..3926c29 100644 Binary files a/ise-display/images/main/light/light-button-on-pressed.png and b/ise-display/images/main/light/light-button-on-pressed.png differ diff --git a/ise-display/images/main/light/light-button-on.png b/ise-display/images/main/light/light-button-on.png index 34703c8..31cc051 100644 Binary files a/ise-display/images/main/light/light-button-on.png and b/ise-display/images/main/light/light-button-on.png differ diff --git a/ise-display/images/main/master-light/master-light-button-off-pressed.png b/ise-display/images/main/master-light/master-light-button-off-pressed.png index 47d7b60..fc2f69e 100644 Binary files a/ise-display/images/main/master-light/master-light-button-off-pressed.png and b/ise-display/images/main/master-light/master-light-button-off-pressed.png differ diff --git a/ise-display/images/main/master-light/master-light-button-off.png b/ise-display/images/main/master-light/master-light-button-off.png index 59130a9..e3528e0 100644 Binary files a/ise-display/images/main/master-light/master-light-button-off.png and b/ise-display/images/main/master-light/master-light-button-off.png differ diff --git a/ise-display/images/main/master-light/master-light-button-on.png b/ise-display/images/main/master-light/master-light-button-on.png index a568e57..56d4bec 100644 Binary files a/ise-display/images/main/master-light/master-light-button-on.png and b/ise-display/images/main/master-light/master-light-button-on.png differ diff --git a/ise-display/images/main/master-light/master-light-button-pressed.png b/ise-display/images/main/master-light/master-light-button-pressed.png index 9fe9920..5cce401 100644 Binary files a/ise-display/images/main/master-light/master-light-button-pressed.png and b/ise-display/images/main/master-light/master-light-button-pressed.png differ diff --git a/ise-display/images/main/toggle-all/toggle-all-off-pressed.png b/ise-display/images/main/toggle-all/toggle-all-off-pressed.png index 2f62fb8..fc6b65a 100644 Binary files a/ise-display/images/main/toggle-all/toggle-all-off-pressed.png and b/ise-display/images/main/toggle-all/toggle-all-off-pressed.png differ diff --git a/ise-display/images/main/toggle-all/toggle-all-on-pressed.png b/ise-display/images/main/toggle-all/toggle-all-on-pressed.png index de9358b..c179c3f 100644 Binary files a/ise-display/images/main/toggle-all/toggle-all-on-pressed.png and b/ise-display/images/main/toggle-all/toggle-all-on-pressed.png differ diff --git a/src/ise_display.cpp b/src/ise_display.cpp index cf74461..caf8422 100644 --- a/src/ise_display.cpp +++ b/src/ise_display.cpp @@ -5,27 +5,28 @@ ISEDisplay::ISEDisplay(HardwareSerial *adapter, const uint8_t *light_array, uint this->row = row; this->column = column; } -// Work left -// TODO : Implement -// debug to work -void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCard, ClimateCard *climateCard_daikin, ClimateCard *climateCard_york, RemoteVariable* pm_switch, RemoteVariable* pm_fan_speed) +void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCard, ClimateCard *climateCard_daikin, ClimateCard *climateCard_york, RemoteVariable *pm_switch, RemoteVariable *pm_fan_speed, RemoteVariable *ac_lock, RemoteVariable *pm_lock) { this->inputCard = inputCard; this->outputCard = outputCard; this->climateCard_daikin = climateCard_daikin; this->climateCard_york = climateCard_york; this->pm_switch = pm_switch; + this->pm_lock = pm_lock; + this->ac_lock = ac_lock; this->remote_pm_fan_speed = pm_fan_speed; auto bindedHandlePWMChange = std::bind(&ISEDisplay::handlePWMChange, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); auto bindedHandleACChange = std::bind(&ISEDisplay::handleACChange, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); 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_daikin->registerChangeCallback(bindedHandleACChange); - //this->climateCallbackHandle = this->climateCard_york->registerChangeCallback(bindedHandleACChange); - this->user_mode = 2; // initialized to cool by default + // this->climateCallbackHandle = this->climateCard_york->registerChangeCallback(bindedHandleACChange); + this->user_mode = 2; // initialized to cool by default + this->ac_lock_state = strcmp(ac_lock->getValue(), "on") == 0;// initialized to get value + this->pm_lock_state = strcmp(pm_lock->getValue(), "on") == 0; // initialized to get value this->pm_fan_speed = 10; - //remote_pm_fan_speed->setValue(pm_fan_speed); + // remote_pm_fan_speed->setValue(pm_fan_speed); this->ac_fan_speed = 0; this->ac_mode = 0; this->ac_temperature = 25; @@ -33,31 +34,24 @@ void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCar this->lightLevelRow2 = 0; this->lightLevelRow3 = 0; this->lightLevelRow4 = 0; + this->time_since_last_ac_change = 0; + this->ac_press_pending = false; // 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(2); // change this back later to 2 delay(100); this->updateAirPurifierState(); + this->updateSystemtoggle(); this->updateACState(); this->updateLightGroupStatePageDashboard(); - // 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); - this->climateCard_daikin->setState(ac_mode, ac_fan_speed, ac_temperature); - if(ac_mode == 3){ - this->climateCard_york->setState(0, ac_fan_speed, ac_temperature); - } - else{ - this->climateCard_york->setState(ac_mode, ac_fan_speed, ac_temperature); + // intialize AC state + if(ac_lock_state == false) + { + setACstate(ac_fan_speed, ac_mode, ac_temperature); // default to off with temp 25 and fan on Auto } } @@ -67,55 +61,82 @@ void ISEDisplay::loop() // If there is data, process the data recieveSerialCommand(); - // Update the time since the last screen update using millis() + // Check if the AC state has been changed + if (ac_press_pending && (millis() - time_since_last_ac_change) > 5000) + { + sendACIRcode(); + ac_press_pending = false; + } - // u_int32_t current_time = millis(); + // Check if the MQTT connection has been lost + static uint32_t last_mqtt_connected_check = 0; + if (last_mqtt_connected_check == 0) + { + last_mqtt_connected_check = millis() + 15000; // Wait 15 seconds before checking + } + static bool first_disconnect = true; + if (millis() - last_mqtt_connected_check > 3000) + { + ESP_LOGD("ISE Display", "Checking MQTT Connection, Connection is %s", this->cards.iot->mqttConnected() ? "true" : "false"); + if (!this->iot->mqttConnected()) + + { + + if (first_disconnect) + { + // When MQTT is disconnected, enter standalone mode + // A/C lock is lifted + // PM lock are lifted + this->ac_lock_state = false; + this->pm_lock_state = false; + first_disconnect = false; + } + } + else + { + if (first_disconnect == false) + { + // When MQTT is connected, exit standalone mode + // In standalone mode, socket contactor is turned off + // A/C lock is set - // if (current_time - this->time_since_last_screen_update > 120000) - // { - // // jump to standby page if there is no activity for 2 minutes - // if(this->currentPage != 1){ - // this->jumpToPage(1); - // ESP_LOGI("ISEDisplay", "Jumping to standby page"); - // } - // } + first_disconnect = true; + this->ac_lock_state = strcmp(ac_lock->getValue(), "on") == 0; + this->pm_lock_state = strcmp(pm_lock->getValue(), "on") == 0; + updateACState(); + updateAirPurifierState(); + } + } + last_mqtt_connected_check = millis(); + } } 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 char buffer[4]; if (page == PAGE_STANDBY) { switch (component) { - case COMPONENT_STANDBY_OPEN_ALL_TOGGLE: + case COMPONENT_OBJ_STANDBY_BTN_OPEN_ALL_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; - // TODO : Should you really jump to page 2 here? should't page jumping be handled reactivly? - // EX. if atleast one light is on, then jump to active page, else jump to standby page - // This will allow page to change correctly when the system is started and when controlled remotely which won't call handleTouch - // time_since_last_screen_update = millis(); + allOn(); this->jumpToPage(2); // the function of the button is to open the dashboard from standby break; - case COMPONENT_STANDBY_LIGHT_TOGGLE: + case COMPONENT_OBJ_STANDBY_BTN_LIGHT_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; - // TODO : So this does nothing? Shouldn't it turn on the lights? - // should turn it on now toggleLightGroupStateStandby(); break; - case COMPONENT_STANDBY_AC_TOGGLE: - // TODO : What's the expexted behavior of standby? Does it enter standby when the lights are all off and ignore the AC - // or does it only enter standby when ac is also off and purifier is off, or is it a timed thing? + case COMPONENT_OBJ_STANDBY_BTN_AC_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; toggleAC(); - break; - case COMPONENT_STANDBY_PM_TOGGLE: + case COMPONENT_OBJ_STANDBY_BTN_PM_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; togglePMStandby(); @@ -124,151 +145,226 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type break; } } - else if (page == PAGE_DASHBOARD) { switch (component) { - case COMPONENT_LIGHT_MASTER_BUTTON: - // TODO : this only update the display to match the light, it doesn't toggle the light. + case COMPONENT_OBJ_DASHBOARD_NUM_AC_TEMP: + break; + case COMPONENT_OBJ_DASHBOARD_BTN_AC_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; - toggleLightGroupState(); + //if ac_lock is true do nothing + if (strcmp(ac_lock->getValue(), "on") == 0) + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; + toggleAC(); break; - // TODOlater : can't this be done better with array lookup? - case COMPONENT_LIGHT_MASTER_LEVEL1_TOUCHPOINT: + case COMPONENT_OBJ_DASHBOARD_BTN_AC_MODE: if (touch_type != TOUCH_TYPE_RELEASE) break; - for (uint8_t i = 1; i <= 4; i++) - { - setLightLevel(i, 1); - } + //if ac_lock is true do nothing + if (strcmp(ac_lock->getValue(), "on") == 0) + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; + changeUserACmode(); break; - case COMPONENT_LIGHT_MASTER_LEVEL2_TOUCHPOINT: + case COMPONENT_OBJ_DASHBOARD_BTN_AC_FAN_SPEED: if (touch_type != TOUCH_TYPE_RELEASE) break; - for (uint8_t i = 1; i <= 4; i++) - { - setLightLevel(i, 2); - } + //if ac_lock is true do nothing + if (strcmp(ac_lock->getValue(), "on") == 0) + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; + ac_fan_speed = this->climateCard_daikin->getFanSpeed(); + // mode= auto, high, mid, low + ESP_LOGI("ISEDisplay", "Current AC fan speed: %d", ac_fan_speed); + ac_fan_speed = (ac_fan_speed + 1) % 4; + ESP_LOGI("ISEDisplay", "New AC fan speed: %d", ac_fan_speed); + setACstate(ac_fan_speed, ac_mode, ac_temperature); break; - case COMPONENT_LIGHT_MASTER_LEVEL3_TOUCHPOINT: + case COMPONENT_OBJ_DASHBOARD_BTN_AC_TEMP_MINUS: if (touch_type != TOUCH_TYPE_RELEASE) break; - for (uint8_t i = 1; i <= 4; i++) - { - setLightLevel(i, 3); - } + //if ac_lock is true do nothing + if (strcmp(ac_lock->getValue(), "on") == 0) + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; + ac_temperature = this->climateCard_daikin->getTemperature() - 1; + setACstate(ac_fan_speed, ac_mode, ac_temperature); break; - case COMPONENT_LIGHT_ROW1_SLIDER: + case COMPONENT_OBJ_DASHBOARD_BTN_AC_TEMP_PLUS: if (touch_type != TOUCH_TYPE_RELEASE) break; - lightLevelRow1 = this->getNumber("light_r1_slide.val"); - toggleSliderLight(1, lightLevelRow1); + //if ac_lock is true do nothing + if (strcmp(ac_lock->getValue(), "on") == 0) + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; + ac_temperature = this->climateCard_daikin->getTemperature() + 1; + setACstate(ac_fan_speed, ac_mode, ac_temperature); break; - case COMPONENT_LIGHT_ROW2_SLIDER: + case COMPONENT_OBJ_DASHBOARD_BTN_PM_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; - lightLevelRow2 = this->getNumber("light_r2_slide.val"); - toggleSliderLight(2, lightLevelRow2); - break; - case COMPONENT_LIGHT_ROW3_SLIDER: - if (touch_type != TOUCH_TYPE_RELEASE) + //if pm_lock is true do nothing + if (strcmp(pm_lock->getValue(), "on") == 0) + ESP_LOGI("ISEDisplay", "PM lock is on, do nothing"); break; - lightLevelRow3 = this->getNumber("light_r3_slide.val"); - toggleSliderLight(3, lightLevelRow3); + togglePM(); break; - case COMPONENT_LIGHT_ROW4_SLIDER: - if (touch_type != TOUCH_TYPE_RELEASE) - break; - lightLevelRow4 = this->getNumber("light_r4_slide.val"); - toggleSliderLight(4, lightLevelRow4); + case COMPONENT_OBJ_DASHBOARD_TXT_PM_INSIDE: break; - case COMPONENT_LIGHT_ROW1_SWITCH: + case COMPONENT_OBJ_DASHBOARD_TXT_PM_OUTSIDE: + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW1: + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW2: + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW3: + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW4: + break; + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW1: if (touch_type != TOUCH_TYPE_RELEASE) break; toggleLightIndividual(1); break; - case COMPONENT_LIGHT_ROW2_SWITCH: + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW2: if (touch_type != TOUCH_TYPE_RELEASE) break; toggleLightIndividual(2); break; - case COMPONENT_LIGHT_ROW3_SWITCH: + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW3: if (touch_type != TOUCH_TYPE_RELEASE) break; toggleLightIndividual(3); break; - case COMPONENT_LIGHT_ROW4_SWITCH: + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW4: if (touch_type != TOUCH_TYPE_RELEASE) break; toggleLightIndividual(4); break; - // TODO : Don't we have fan only mode too? can you really just switch between 0 and 1? - case COMPONENT_AC_TOGGLE_BUTTON: - if (touch_type != TOUCH_TYPE_RELEASE) - break; - toggleAC(); + case COMPONENT_OBJ_DASHBOARD_TIMER_TEN_SEC: break; - case COMPONENT_AC_MODE: - if (touch_type != TOUCH_TYPE_RELEASE) - break; - changeUserACmode(); + case COMPONENT_OBJ_DASHBOARD_VAL_TIME_PAST: break; - case COMPONENT_AC_FAN_SPEED: - if (touch_type != TOUCH_TYPE_RELEASE) - break; - ac_fan_speed = this->climateCard_daikin->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 - ESP_LOGI("ISEDisplay", "Current AC fan speed: %d", ac_fan_speed); - ac_fan_speed = (ac_fan_speed + 1) % 4; - ESP_LOGI("ISEDisplay", "New AC fan speed: %d", ac_fan_speed); - this->climateCard_daikin->setFanSpeed(ac_fan_speed); - this->climateCard_york->setFanSpeed(ac_fan_speed); - // updateACState(); + case COMPONENT_OBJ_DASHBOARD_TIMER_INACTIVE_CHECK: break; - case COMPONENT_AC_TEMP_DOWN_BUTTON: + case COMPONENT_OBJ_DASHBOARD_BTN_SYSTEM_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; - this->climateCard_daikin->setTemperature(this->climateCard_daikin->getTemperature() - 1); - this->climateCard_york->setTemperature(this->climateCard_daikin->getTemperature()); - // updateACState(); + // implement system toggle + // check light on or off + // check ac on or off + // check pm on or off + toggleSystem(); break; - case COMPONENT_AC_TEMP_UP_BUTTON: + case COMPONENT_OBJ_DASHBOARD_BTN_PM_SPEED: if (touch_type != TOUCH_TYPE_RELEASE) break; - this->climateCard_daikin->setTemperature(this->climateCard_daikin->getTemperature() + 1); - this->climateCard_york->setTemperature(this->climateCard_daikin->getTemperature()); - // updateACState(); + // implement pm speed change break; - case COMPONENT_PM_TOGGLE_BUTTON: + case COMPONENT_OBJ_DASHBOARD_BTN_PM_MODE: if (touch_type != TOUCH_TYPE_RELEASE) break; - togglePM(); + // implement pm mode change break; - case COMPONENT_PM_FAN_SPEED_DECREASE: - if (touch_type != TOUCH_TYPE_RELEASE) - break; - pm_fan_speed = (int) atof(remote_pm_fan_speed->getValue()); - ESP_LOGI("ISEDisplay", "Current PM fan speed: %d", pm_fan_speed); - if (pm_fan_speed >= 1 && pm_fan_speed <= 20) - itoa(pm_fan_speed - 1, buffer, DEC); - remote_pm_fan_speed->setValue(buffer); - ESP_LOGI("ISEDisplay", "New PM fan speed: %d", pm_fan_speed); - //updateAirPurifierState(); + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_MASTER_LIGHT: break; - case COMPONENT_PM_FAN_SPEED_INCREASE: + case COMPONENT_OBJ_DASHBOARD_LOGO: + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_PM_LOCK: if (touch_type != TOUCH_TYPE_RELEASE) break; - pm_fan_speed = (int) atof(remote_pm_fan_speed->getValue()); - ESP_LOGI("ISEDisplay", "Current PM fan speed: %d", pm_fan_speed); - if (pm_fan_speed >= 0 && pm_fan_speed <= 19) - itoa(pm_fan_speed + 1, buffer, DEC); - remote_pm_fan_speed->setValue(buffer); - ESP_LOGI("ISEDisplay", "New PM fan speed: %d", pm_fan_speed); - //updateAirPurifierState(); + // toggle_pm_lock(); + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_AC_LOCK: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + // toggle_ac_lock(); + break; + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_MASTER: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + toggleLightGroupState(); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightGroupState(1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightGroupState(2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightGroupState(3); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 3); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 3); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 3); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 3); + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_C_DEGREE: break; default: break; @@ -286,13 +382,13 @@ void ISEDisplay::handlePWMChange(uint8_t pin, bool state, uint16_t value) // NEED to switch case for different page uint8_t current_page = this->currentPage; - - //uint8_t first_pin = *(light_array); - //uint8_t last_pin = *(light_array + 7); + + // uint8_t first_pin = *(light_array); + // uint8_t last_pin = *(light_array + 7); if (current_page == PAGE_STANDBY) { - if (LIGHT_ROW1_COLUMN1 || LIGHT_ROW1_COLUMN2 || LIGHT_ROW2_COLUMN1 || LIGHT_ROW2_COLUMN2 || LIGHT_ROW3_COLUMN1 || LIGHT_ROW3_COLUMN2 || LIGHT_ROW4_COLUMN1 || LIGHT_ROW4_COLUMN2) //change + if (LIGHT_ROW1_COLUMN1 || LIGHT_ROW1_COLUMN2 || LIGHT_ROW2_COLUMN1 || LIGHT_ROW2_COLUMN2 || LIGHT_ROW3_COLUMN1 || LIGHT_ROW3_COLUMN2 || LIGHT_ROW4_COLUMN1 || LIGHT_ROW4_COLUMN2) // change { // Light updateLightGroupStatePageStandby(); @@ -301,7 +397,7 @@ void ISEDisplay::handlePWMChange(uint8_t pin, bool state, uint16_t value) } else if (current_page == PAGE_DASHBOARD) { - if (LIGHT_ROW1_COLUMN1 || LIGHT_ROW1_COLUMN2 || LIGHT_ROW2_COLUMN1 || LIGHT_ROW2_COLUMN2 || LIGHT_ROW3_COLUMN1 || LIGHT_ROW3_COLUMN2 || LIGHT_ROW4_COLUMN1 || LIGHT_ROW4_COLUMN2) //change + if (LIGHT_ROW1_COLUMN1 || LIGHT_ROW1_COLUMN2 || LIGHT_ROW2_COLUMN1 || LIGHT_ROW2_COLUMN2 || LIGHT_ROW3_COLUMN1 || LIGHT_ROW3_COLUMN2 || LIGHT_ROW4_COLUMN1 || LIGHT_ROW4_COLUMN2) // change { // Light updateLightGroupStatePageDashboard(); @@ -330,100 +426,20 @@ void ISEDisplay::updateDateTimeText(rtctime_t time) // TODO : Implement // user remote var // appdeamon -void ISEDisplay::updateWeather(char *weather_string) -{ - // TODO : use remotevar to get weather data from appdaemon and update the display - u_int8_t weather_code = 68; - if (strcmp(weather_string, "fair_day") == 0) - { - weather_code = 63; - } - else if (strcmp(weather_string, "sunny") == 0) - { - weather_code = 63; - } - else if (strcmp(weather_string, "fair_night") == 0) - { - weather_code = 64; - } - else if (strcmp(weather_string, "cloudy") == 0) - { - weather_code = 65; - } - else if (strcmp(weather_string, "clear-day") == 0) - { - weather_code = 66; - } - else if (strcmp(weather_string, "clear-night") == 0) - { - weather_code = 67; - } - else if (strcmp(weather_string, "partlycloudy_day") == 0) - { - weather_code = 68; - } - else if (strcmp(weather_string, "partlycloudy") == 0) - { - weather_code = 68; - } - else if (strcmp(weather_string, "partlycloudy_night") == 0) - { - weather_code = 69; - } - else if (strcmp(weather_string, "heavyrain") == 0) - { - weather_code = 70; - } - else if (strcmp(weather_string, "heavyrainandthunder") == 0) - { - weather_code = 71; - } - else if (strcmp(weather_string, "rainandthunder") == 0) - { - weather_code = 72; - } - else if (strcmp(weather_string, "rain") == 0) - { - weather_code = 73; - } - else if (strcmp(weather_string, "rainy") == 0) - { - weather_code = 73; - } - else if (strcmp(weather_string, "lightrain") == 0) - { - weather_code = 74; - } - else if (strcmp(weather_string, "fog") == 0) - { - weather_code = 75; - } - else - { - weather_code = 68; - } - ESP_LOGI("ISEDisplay", "Updating weather to: %s (%d)", weather_string, weather_code); +// void ISEDisplay::updateTempOutside(float temp_outside) +// { +// // TODO : use remotevar to get PM2.5 data from appdaemon and update the display - if (!this->takeSerialMutex()) - return; - this->displayAdapter->printf("weather_icon.pic=%d", weather_code); - this->sendStopBytes(); - this->giveSerialMutex(); -} -void ISEDisplay::updateTempOutside(float temp_outside) -{ - // TODO : use remotevar to get PM2.5 data from appdaemon and update the display - - // change temp_outside to int then display - u_int8_t temp_outside_int = (u_int8_t)temp_outside; - ESP_LOGI("ISEDisplay", "Updating temperature outside to: %d", temp_outside_int); - if (!this->takeSerialMutex()) - return; - this->displayAdapter->printf("outside_temp.txt=\"%d\"", temp_outside_int); - this->sendStopBytes(); - this->giveSerialMutex(); -} +// // change temp_outside to int then display +// u_int8_t temp_outside_int = (u_int8_t)temp_outside; +// ESP_LOGI("ISEDisplay", "Updating temperature outside to: %d", temp_outside_int); +// if (!this->takeSerialMutex()) +// return; +// this->displayAdapter->printf("outside_temp.txt=\"%d\"", temp_outside_int); +// this->sendStopBytes(); +// this->giveSerialMutex(); +// } void ISEDisplay::updatePMoutside(u_int16_t pm25_outside) { ESP_LOGI("ISEDisplay", "Updating PM2.5 outside to: %d", pm25_outside); @@ -459,28 +475,65 @@ void ISEDisplay::setPMstate(bool is_pm_on, uint8_t pm_fan_speed) char buffer[4]; itoa(pm_fan_speed, buffer, DEC); remote_pm_fan_speed->setValue(buffer); - pm_switch->setValue(is_pm_on ? "1" : "0"); + pm_switch->setValue(is_pm_on ? "on" : "off"); +} + +void ISEDisplay::setPMlockstate(bool is_pm_lock_on) +{ + ESP_LOGI("ISEDisplay", "Setting PM lock state: %d", is_pm_lock_on); + pm_lock->setValue(is_pm_lock_on ? "on" : "off"); +} + +void ISEDisplay::setAClockstate(bool is_ac_lock_on) +{ + ESP_LOGI("ISEDisplay", "Setting AC lock state: %d", is_ac_lock_on); + ac_lock->setValue(is_ac_lock_on ? "on" : "off"); } void ISEDisplay::setACstate(uint8_t ac_fan_speed, uint8_t ac_mode, uint8_t ac_temperature) { - ESP_LOGI("ISEDisplay", "Setting AC state: = fan speed: %d, mode: %d, temperature: %d", ac_fan_speed, ac_mode, ac_temperature); + ESP_LOGI("ISEDisplay", "Setting AC state in memory to: = fan speed: %d, mode: %d, temperature: %d", ac_fan_speed, ac_mode, ac_temperature); - //this->climateCard->setFanSpeed(ac_fan_speed); - ESP_LOGI("ISEDisplay", "AC fan speed set to: %d", ac_fan_speed); - //this->climateCard->setMode(ac_mode); - ESP_LOGI("ISEDisplay", "AC mode set to: %d", ac_mode); - //this->climateCard->setTemperature(ac_temperature); - ESP_LOGI("ISEDisplay", "AC temperature set to: %d", ac_temperature); - this->climateCard_daikin->setState(ac_mode, ac_fan_speed, ac_temperature); - if(ac_mode == 3){ - this->climateCard_york->setState(0, ac_fan_speed, ac_temperature); - } - else{ - this->climateCard_york->setState(ac_mode, ac_fan_speed, ac_temperature); - } - // updateACState(); + this->ac_fan_speed = ac_fan_speed; + this->ac_mode = ac_mode; + this->ac_temperature = ac_temperature; + this->time_since_last_ac_change = millis(); + this->ac_press_pending = true; + + updateACState(); } +void ISEDisplay::sendACIRcode() +{ + uint8_t cur_ac_fan_speed = this->ac_fan_speed; + uint8_t cur_ac_mode = this->ac_mode; + uint8_t cur_ac_temperature = this->ac_temperature; + uint8_t york_temp = cur_ac_temperature; + // this->climateCard->setFanSpeed(ac_fan_speed); + ESP_LOGI("ISEDisplay", "AC fan speed set to: %d", cur_ac_fan_speed); + // this->climateCard->setMode(ac_mode); + ESP_LOGI("ISEDisplay", "AC mode set to: %d", cur_ac_mode); + // this->climateCard->setTemperature(ac_temperature); + ESP_LOGI("ISEDisplay", "AC temperature set to: %d", cur_ac_temperature); + // check if temp is within range of min and max for york if not set an min or max for only york + this->climateCard_daikin->setState(cur_ac_mode, cur_ac_fan_speed, cur_ac_temperature); + if (cur_ac_temperature < YORK_MIN_TEMP) + { + york_temp = YORK_MIN_TEMP; + } + else if (cur_ac_temperature > YORK_MAX_TEMP) + { + york_temp = YORK_MAX_TEMP; + } + if (ac_mode == 3) + { + this->climateCard_york->setState(0, cur_ac_fan_speed, york_temp); + } + else + { + this->climateCard_york->setState(cur_ac_mode, cur_ac_fan_speed, york_temp); + } +} + void ISEDisplay::toggleLightGroupState() { // Get the current group state @@ -492,6 +545,16 @@ void ISEDisplay::toggleLightGroupState() setLightLevel(i, state ? 0 : 3); } } +void ISEDisplay::setLightGroupState(uint8_t level) +{ + // Get the current group state + ESP_LOGI("ISEDisplay", "Current light group state: %d", level); + // Toggle light + for (uint8_t i = 1; i <= 4; i++) + { + setLightLevel(i, level); + } +} void ISEDisplay::toggleLightGroupStateStandby() { // Get the current group state @@ -512,7 +575,27 @@ void ISEDisplay::togglePM() // Toggle the state pm_switch->setValue(state ? "off" : "on"); ESP_LOGI("ISEDisplay", "New PM state: %d", state); - //updateAirPurifierState(); + // updateAirPurifierState(); +} +void ISEDisplay::toggleACLock() +{ + // Get the current group state + bool state = strcmp(ac_lock->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "Current AC lock state: %d", state); + // Toggle the state + ac_lock->setValue(state ? "off" : "on"); + ESP_LOGI("ISEDisplay", "New AC lock state: %d", state); + // updateAirPurifierStateStandby(); +} +void ISEDisplay::togglePMLock() +{ + // Get the current group state + bool state = strcmp(pm_lock->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "Current PM lock state: %d", state); + // Toggle the state + pm_lock->setValue(state ? "off" : "on"); + ESP_LOGI("ISEDisplay", "New PM lock state: %d", state); + // updateAirPurifierStateStandby(); } void ISEDisplay::togglePMStandby() { @@ -522,7 +605,7 @@ void ISEDisplay::togglePMStandby() // Toggle the state pm_switch->setValue(state ? "off" : "on"); ESP_LOGI("ISEDisplay", "New PM state: %d", state); - //updateAirPurifierStateStandby(); + // updateAirPurifierStateStandby(); } void ISEDisplay::toggleAC() { @@ -548,7 +631,7 @@ void ISEDisplay::toggleAC() ESP_LOGI("ISEDisplay", "User mode AFTER: %d", user_mode); setACstate(fan_speed, 0, temperature); } -} +} void ISEDisplay::changeUserACmode() { // Get the current group state @@ -577,8 +660,14 @@ void ISEDisplay::setLightLevel(uint8_t row, uint8_t level) { // Set the light level // this->outputCard->setValue(row, level); - uint8_t primary_pin = *(light_array + 2*(row - 1)); - uint8_t secondary_pin = *(light_array + 2*(row - 1) + 1); + + // only value between 1 and 4 is valid + ESP_LOGI("ISEDisplay", "Setting light level for row %d to %d", row, level); + + uint8_t primary_pin = *(light_array + 2 * (row - 1)); + uint8_t secondary_pin = *(light_array + 2 * (row - 1) + 1); + + ESP_LOGI("ISEDisplay", "Primary pin: %d, Secondary pin: %d", primary_pin, secondary_pin); bool primary = false; bool secondary = false; @@ -588,36 +677,45 @@ void ISEDisplay::setLightLevel(uint8_t row, uint8_t level) case 0: primary = false; secondary = false; + ESP_LOGI("ISEDisplay", "Primary pin is %d, Secondary pin is %d", primary, secondary); break; case 1: primary = false; secondary = true; + ESP_LOGI("ISEDisplay", "Primary pin is %d, Secondary pin is %d", primary, secondary); break; case 2: primary = true; secondary = false; + ESP_LOGI("ISEDisplay", "Primary pin is %d, Secondary pin is %d", primary, secondary); break; case 3: primary = true; secondary = true; + ESP_LOGI("ISEDisplay", "Primary pin is %d, Secondary pin is %d", primary, secondary); break; default: + ESP_LOGE("ISEDisplay", "Invalid light level: %d", level); break; } this->outputCard->setState(primary_pin, primary); this->outputCard->setState(secondary_pin, secondary); + ESP_LOGI("ISEDisplay", "Light level set for row %d", row); } u_int8_t ISEDisplay::getLightLevel(uint8_t row) { u_int8_t lightLevel = 0; - - //lightLevel = this->outputCard->getValue(row); - uint8_t primary_pin = *(light_array + 2*(row - 1)); - uint8_t secondary_pin = *(light_array + 2*(row - 1) + 1); + ESP_LOGI("ISEDisplay", "Getting light level for row %d", row); + // lightLevel = this->outputCard->getValue(row); + // row can only be between 1 and 4 + uint8_t primary_pin = *(light_array + 2 * (row - 1)); + uint8_t secondary_pin = *(light_array + 2 * (row - 1) + 1); + ESP_LOGI("ISEDisplay", "Primary pin: %d, Secondary pin: %d", primary_pin, secondary_pin); bool primary = this->outputCard->getState(primary_pin); bool secondary = this->outputCard->getState(secondary_pin); + ESP_LOGI("ISEDisplay", "Primary pin state: %d, Secondary pin state: %d", primary, secondary); if (primary && secondary) { lightLevel = 3; @@ -634,19 +732,20 @@ u_int8_t ISEDisplay::getLightLevel(uint8_t row) { lightLevel = 0; } - + ESP_LOGI("ISEDisplay", "Light level for row %d is %d", row, lightLevel); return lightLevel; } -//change to light with the assignment +// change to light with the assignment -lightPosition ISEDisplay::getRowCol(uint8_t pin){ +lightPosition ISEDisplay::getRowCol(uint8_t pin) +{ lightPosition position; - //uint8_t row = this->row; - //uint8_t column = this->column; - //const uint8_t *light_array = this->light_array; - // should return the row and column of the light from pin in a row by column array pointer pass from main using pointer arithmetic - for (uint8_t i = 0; i < row*column; i++) + // uint8_t row = this->row; + // uint8_t column = this->column; + // const uint8_t *light_array = this->light_array; + // should return the row and column of the light from pin in a row by column array pointer pass from main using pointer arithmetic + for (uint8_t i = 0; i < row * column; i++) { uint8_t value = *(light_array + i); if (value == pin) @@ -659,7 +758,6 @@ lightPosition ISEDisplay::getRowCol(uint8_t pin){ return position; } - void ISEDisplay::updateLightGroupStatePageStandby() { // Calculate the state @@ -669,11 +767,11 @@ void ISEDisplay::updateLightGroupStatePageStandby() return; this->displayAdapter->print("s_light_toggle.pic="); - this->displayAdapter->print(state ? COMPONENT_STANDBY_LIGHT_PIC_ON : COMPONENT_STANDBY_LIGHT_PIC_OFF); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_ON : COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_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->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_ON_PRESSED : COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_OFF_PRESSED); this->sendStopBytes(); this->giveSerialMutex(); @@ -686,12 +784,12 @@ void ISEDisplay::updateLightGroupStatePageDashboard() if (!this->takeSerialMutex()) return; - this->displayAdapter->print("light_master.pic="); - this->displayAdapter->print(state ? COMPONENT_LIGHT_MASTER_ON : COMPONENT_LIGHT_MASTER_OFF); + this->displayAdapter->print("light_m_sw.pic="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON : COMPONENT_DASHBOARD_PIC_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->displayAdapter->print("light_m_sw.pic2="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON_PRESSED : COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_OFF_PRESSED); this->sendStopBytes(); for (uint8_t i = 1; i <= 4; i++) @@ -703,28 +801,28 @@ void ISEDisplay::updateLightGroupStatePageDashboard() this->displayAdapter->print("light_row"); this->displayAdapter->print(i); this->displayAdapter->print(".pic="); - this->displayAdapter->print(COMPONENT_LIGHT_LEVEL_0); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_ROW_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->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_ROW_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->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_ROW_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->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_3); this->sendStopBytes(); break; default: @@ -750,6 +848,44 @@ bool ISEDisplay::calculateLightGroupState() } return lightOn; } +bool ISEDisplay::calculateAllState() +{ + bool lightState = calculateLightGroupState(); + bool pmState = strcmp(pm_switch->getValue(), "on") == 0; + bool acState = false; + if (ac_mode != 0) + { + acState = true; + } + return lightState || pmState || acState; +} +void ISEDisplay::toggleSystem() +{ + toggleLightGroupState(); + //check for ac lock and pm lock, if lock is on do nothing + if (strcmp(ac_lock->getValue(), "on") == 0) + { + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + } + else + { + toggleAC(); + } + if (strcmp(pm_lock->getValue(), "on") == 0) + { + ESP_LOGI("ISEDisplay", "PM lock is on, do nothing"); + } + else + { + togglePM(); + } +} +void ISEDisplay::allOn() +{ + setLightGroupState(3); + setPMstate(true, pm_fan_speed); + setACstate(ac_mode, ac_fan_speed, ac_temperature); +} void ISEDisplay::toggleLightIndividual(uint8_t row) { @@ -766,48 +902,36 @@ void ISEDisplay::toggleLightIndividual(uint8_t row) // Set the state setLightLevel(row, state); } -void ISEDisplay::toggleSliderLight(uint8_t row, uint8_t lightLevel) +void ISEDisplay::updateSystemtoggle() { - // Get the current state - uint8_t state = 0; + bool state = calculateAllState(); + if (!this->takeSerialMutex()) + return; + this->displayAdapter->print("system_toggle.pic="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_ON : COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_OFF); + this->sendStopBytes(); - if (lightLevel < 10) - { - state = 0; - } - else if (lightLevel < 33) - { - state = 1; - } - else if (lightLevel <= 66) - { - state = 2; - } - else if (lightLevel > 66) - { - state = 3; - } - else - { - state = 0; - } - // Set the state - setLightLevel(row, state); + this->displayAdapter->print("system_toggle.pic2="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_ON_PRESSED : COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_OFF_PRESSED); + this->sendStopBytes(); + + this->giveSerialMutex(); } void ISEDisplay::updateAirPurifierStateStandby() { // Get the state bool state = strcmp(pm_switch->getValue(), "on") == 0; + this->pm_lock_state = strcmp(pm_lock->getValue(), "on") == 0; // Send the state to the display if (!this->takeSerialMutex()) return; this->displayAdapter->print("s_pm_toggle.pic="); - this->displayAdapter->print(state ? COMPONENT_STANDBY_PM_PIC_ON : COMPONENT_STANDBY_PM_PIC_OFF); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_AC_TOGGLE_ON : COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF); this->sendStopBytes(); this->displayAdapter->print("s_pm_toggle.pic2="); - this->displayAdapter->print(state ? COMPONENT_STANDBY_PM_PIC_ON_PRESSED : COMPONENT_STANDBY_PM_PIC_OFF_PRESSED); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_AC_TOGGLE_ON_PRESSED : COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF_PRESSED); this->sendStopBytes(); this->giveSerialMutex(); @@ -815,40 +939,47 @@ void ISEDisplay::updateAirPurifierStateStandby() void ISEDisplay::updateAirPurifierState() { - //check for page - if(currentPage == PAGE_DASHBOARD){ + // check for page + if (currentPage == PAGE_DASHBOARD) + { ESP_LOGI("ISEDisplay", "Updating dashboard"); // Get the state bool state = strcmp(pm_switch->getValue(), "on") == 0; + this->pm_lock_state = strcmp(pm_lock->getValue(), "on") == 0; ESP_LOGI("ISEDisplay", "Updating air purifier state to: %d", state); - pm_fan_speed = (int) atof(remote_pm_fan_speed->getValue()); + pm_fan_speed = (int)atof(remote_pm_fan_speed->getValue()); // Send the state to the display if (!this->takeSerialMutex()) - return; + return; this->displayAdapter->print("pm_sw.pic="); - this->displayAdapter->print(state ? COMPONENT_PM_TOGGLE_PIC_ON : COMPONENT_PM_TOGGLE_PIC_OFF); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_PM_TOGGLE_ON : COMPONENT_DASHBOARD_PIC_PM_TOGGLE_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->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_PM_TOGGLE_ON_PRESSED : COMPONENT_DASHBOARD_PIC_PM_TOGGLE_OFF_PRESSED); this->sendStopBytes(); - this->displayAdapter->print("pm_speed.val="); - this->displayAdapter->print(pm_fan_speed); - // this->displayAdapter->print("\""); + this->displayAdapter->print("pm_lock.pic="); + this->displayAdapter->print(this->pm_lock_state ? COMPONENT_DASHBOARD_PIC_LOCK : COMPONENT_DASHBOARD_PIC_UNLOCK); this->sendStopBytes(); - this->displayAdapter->print("pm_speed.pco="); - this->displayAdapter->print(state ? 34486 : 33841); - this->sendStopBytes(); + // this->displayAdapter->print("pm_speed.val="); + // this->displayAdapter->print(pm_fan_speed); + // // this->displayAdapter->print("\""); + // this->sendStopBytes(); + + // this->displayAdapter->print("pm_speed.pco="); + // this->displayAdapter->print(state ? 34486 : 33841); + // this->sendStopBytes(); this->giveSerialMutex(); } - - else if(currentPage == PAGE_STANDBY){ + + else if (currentPage == PAGE_STANDBY) + { ESP_LOGI("ISEDisplay", "Updating standby"); - updateAirPurifierStateStandby(); + updateAirPurifierStateStandby(); } } void ISEDisplay::handleACChange(uint8_t mode, uint8_t fan_speed, uint8_t temperature) @@ -858,26 +989,72 @@ void ISEDisplay::handleACChange(uint8_t mode, uint8_t fan_speed, uint8_t tempera } void ISEDisplay::updateuserACmode() { + uint8_t mode = this->climateCard_daikin->getMode(); if (!this->takeSerialMutex()) return; ESP_LOGI("ISEDisplay", "updating display user AC mode to: %d", user_mode); switch (user_mode) { case 1: - 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(); + if (mode == 0) + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON_PRESSED); + this->sendStopBytes(); + } break; case 2: - 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(); + if (mode == 0) + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_ON_PRESSED); + this->sendStopBytes(); + } + break; + + case 3: + if (mode == 0) + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_ON_PRESSED); + this->sendStopBytes(); + } break; default: break; @@ -887,42 +1064,93 @@ void ISEDisplay::updateuserACmode() void ISEDisplay::updateACfanSpeed() { uint8_t fan_speed = this->climateCard_daikin->getFanSpeed(); + uint8_t mode = this->climateCard_daikin->getMode(); + this->ac_lock_state = strcmp(ac_lock->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "updating display AC fan speed to: %d", fan_speed); if (!this->takeSerialMutex()) return; switch (fan_speed) { case 0: - this->displayAdapter->print("ac_speed.pic="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_AUTO_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_speed.pic2="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_AUTO_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_ON_PRESSED); + this->sendStopBytes(); + } break; case 1: - this->displayAdapter->print("ac_speed.pic="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_HIGH_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_speed.pic2="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_HIGH_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON_PRESSED); + this->sendStopBytes(); + } break; case 2: - this->displayAdapter->print("ac_speed.pic="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_MID_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_speed.pic2="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_MID_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON_PRESSED); + this->sendStopBytes(); + } break; case 3: - this->displayAdapter->print("ac_speed.pic="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_LOW_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_speed.pic2="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_LOW_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON_PRESSED); + this->sendStopBytes(); + } break; default: break; @@ -936,7 +1164,10 @@ void ISEDisplay::updateACState() // Get the state uint8_t mode = this->climateCard_daikin->getMode(); uint8_t temperature = this->climateCard_daikin->getTemperature(); - if(currentPage != 1){ + this->ac_lock_state = strcmp(ac_lock->getValue(), "on") == 0; + + if (currentPage != 1) + { if (!this->takeSerialMutex()) return; @@ -944,40 +1175,43 @@ void ISEDisplay::updateACState() if (mode == 0) { this->displayAdapter->print("ac_temp.pco="); - this->displayAdapter->print(33841); + this->displayAdapter->print(COMPONENT_COLOR_INACTIVE_GREY); this->sendStopBytes(); - this->displayAdapter->print("ac_temp.pic="); - this->displayAdapter->print(COMPONENT_AC_STATUS_OFF); + this->displayAdapter->print("c_degree.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_DEGREE_C_OFF); this->sendStopBytes(); } else { this->displayAdapter->print("ac_temp.pco="); - this->displayAdapter->print(34486); + this->displayAdapter->print(COMPONENT_COLOR_ACTIVE_BLUE); this->sendStopBytes(); - this->displayAdapter->print("ac_temp.pic="); - this->displayAdapter->print(COMPONENT_AC_STATUS_ON); + this->displayAdapter->print("c_degree.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_DEGREE_C_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->displayAdapter->print(mode != 0 ? COMPONENT_DASHBOARD_PIC_AC_TOGGLE_ON : COMPONENT_DASHBOARD_PIC_AC_TOGGLE_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->displayAdapter->print(mode != 0 ? COMPONENT_DASHBOARD_PIC_AC_TOGGLE_ON_PRESSED : COMPONENT_DASHBOARD_PIC_AC_TOGGLE_OFF_PRESSED); + this->sendStopBytes(); + this->displayAdapter->print("ac_lock.pic="); + this->displayAdapter->print(this->ac_lock_state ? COMPONENT_DASHBOARD_PIC_LOCK : COMPONENT_DASHBOARD_PIC_UNLOCK); this->sendStopBytes(); this->giveSerialMutex(); updateuserACmode(); updateACfanSpeed(); - + if (!this->takeSerialMutex()) return; - + this->displayAdapter->print("ac_temp.val="); this->displayAdapter->print(temperature); // this->displayAdapter->print("\""); @@ -990,16 +1224,15 @@ void ISEDisplay::updateACState() return; this->displayAdapter->print("s_ac_toggle.pic="); - this->displayAdapter->print(mode != 0 ? COMPONENT_STANDBY_AC_PIC_ON : COMPONENT_STANDBY_AC_PIC_OFF); + this->displayAdapter->print(mode != 0 ? COMPONENT_STANDBY_PIC_AC_TOGGLE_ON : COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF); this->sendStopBytes(); this->displayAdapter->print("s_ac_toggle.pic2="); - this->displayAdapter->print(mode != 0 ? COMPONENT_STANDBY_AC_PIC_ON_PRESSED : COMPONENT_STANDBY_AC_PIC_OFF_PRESSED); + this->displayAdapter->print(mode != 0 ? COMPONENT_STANDBY_PIC_AC_TOGGLE_ON_PRESSED : COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF_PRESSED); this->sendStopBytes(); this->giveSerialMutex(); } - ESP_LOGI("ISEDisplay", "display AC state updated"); } diff --git a/src/ise_display.hpp b/src/ise_display.hpp index 74a86fc..4a615b4 100644 --- a/src/ise_display.hpp +++ b/src/ise_display.hpp @@ -2,6 +2,7 @@ #include "ise_display_definitions.hpp" #include +#include #include #include #include @@ -24,11 +25,12 @@ struct lightPosition { class ISEDisplay : public ESPMegaDisplay { public: ISEDisplay(HardwareSerial* adapter, const uint8_t *light_array, uint8_t row, uint8_t column); - void begin(DigitalInputCard* inputCard, DigitalOutputCard* outputCard, ClimateCard* climateCard_daikin, ClimateCard* climateCard_york, RemoteVariable* pm_switch, RemoteVariable* pm_fan_speed); + void begin(DigitalInputCard* inputCard, DigitalOutputCard* outputCard, ClimateCard* climateCard_daikin, ClimateCard* climateCard_york, RemoteVariable* pm_switch, RemoteVariable* pm_fan_speed, RemoteVariable* ac_lock, RemoteVariable* pm_lock); void updateLightGroupStatePageDashboard(); void updateLightGroupStatePageStandby(); void updateAirPurifierState(); void updateAirPurifierStateStandby(); + void updateSystemtoggle(); void updateDateTimeText(rtctime_t time); void updateWeather(char *weather_string); void updateTempOutside(float temp_outside); @@ -54,6 +56,7 @@ class ISEDisplay : public ESPMegaDisplay { DigitalOutputCard *outputCard; ClimateCard *climateCard_daikin; ClimateCard *climateCard_york; + ESPMegaIoT *iot; const uint8_t *light_array; uint8_t row; @@ -61,12 +64,18 @@ class ISEDisplay : public ESPMegaDisplay { RemoteVariable *pm_switch; RemoteVariable *remote_pm_fan_speed; + RemoteVariable *ac_lock; + RemoteVariable *pm_lock; uint8_t outputCallbackHandle; uint8_t climateCallbackHandle; + uint8_t time_since_last_ac_change; uint8_t user_mode; + uint8_t ac_lock_state; + uint8_t pm_lock_state; uint8_t ac_mode; uint8_t ac_fan_speed; uint8_t ac_temperature; + bool ac_press_pending; uint8_t pm_fan_speed; uint8_t time_since_last_screen_update; u_int8_t lightLevelRow1; @@ -78,13 +87,21 @@ class ISEDisplay : public ESPMegaDisplay { void updateuserACmode(); void updateACfanSpeed(); bool calculateLightGroupState(); + bool calculateAllState(); + void toggleSystem(); + void sendACIRcode(); + void setPMlockstate(bool is_pm_lock_on); + void setAClockstate(bool is_ac_lock_on); + void toggleACLock(); + void togglePMLock(); + void allOn(); void toggleLightGroupState(); void toggleLightGroupStateStandby(); void toggleLightIndividual(uint8_t row); - void toggleSliderLight(uint8_t row,uint8_t lightLevel); void togglePM(); void togglePMStandby(); void toggleAC(); + void setLightGroupState(uint8_t level); void toggleACStandby(); void changeUserACmode(); diff --git a/src/ise_display_definitions.hpp b/src/ise_display_definitions.hpp index 4f7783d..f277d47 100644 --- a/src/ise_display_definitions.hpp +++ b/src/ise_display_definitions.hpp @@ -23,6 +23,13 @@ change light assignment 8: row 4 column 2 */ +#define DAIKIN_MAX_TEMP 32 +#define DAIKIN_MIN_TEMP 16 + +#define YORK_MAX_TEMP 30 +#define YORK_MIN_TEMP 18 + + #define LIGHT_ROW1_COLUMN1 10 #define LIGHT_ROW1_COLUMN2 11 #define LIGHT_ROW2_COLUMN1 9 @@ -72,178 +79,457 @@ lights have 4 states #define PAGE_STANDBY 1 #define PAGE_DASHBOARD 2 +//gmov logo size +#define COMPONENT_LOGO_500X500 0 //original size +#define COMPONENT_LOGO_260X260 1 //use for boot page loading +#define COMPONENT_LOGO_140X140 2 //use for standby page logo +#define COMPONENT_LOGO_62X62 3 //use for dashboard page top left logo + +//font +#define COMPONENT_FONT_K2D_SB_24 0 //use for date +#define COMPONENT_FONT_BAIJ_B_32 1 //use for PM +#define COMPONENT_FONT_BAIJ_B_48 2 //use for time +#define COMPONENT_FONT_BAIJ_SB_80 3 //use for AC temperature +#define COMPONENT_FONT_BAIJ_B_40 4 //use for PM + +//color (PCO) +#define COMPONENT_COLOR_ACTIVE_BLUE 7775 +#define COMPONENT_COLOR_INACTIVE_GREY 44405 +#define COMPONENT_COLOR_WHITE 65535 +#define COMPONENT_COLOR_BLACK 0 + + +//-------------BOOT PAGE---------------- +//logo gmov boot +#define COMPONENT_OBJ_BOOT_LOGO 1 + +//boot background +#define COMPONENT_BOOT_BACKGROUND_PIC 0 +#define COMPONENT_BOOT_BACKGROUND_PIC_REFERENCE 1 + +//-------------STANDBY PAGE---------------- +//standby page object id and object name +#define COMPONENT_OBJ_STANDBY_LOGO 1 //logo +#define COMPONENT_OBJ_STANDBY_BTN_OPEN_ALL_TOGGLE 2 //s_open_all +#define COMPONENT_OBJ_STANDBY_BTN_LIGHT_TOGGLE 3 //s_light_toggle +#define COMPONENT_OBJ_STANDBY_BTN_AC_TOGGLE 4 //s_ac_toggle +#define COMPONENT_OBJ_STANDBY_BTN_PM_TOGGLE 5 //s_pm_toggle +#define COMPONENT_OBJ_STANDBY_TXT_TIME 6 //time +#define COMPONENT_OBJ_STANDBY_TXT_DATE 7 //date +#define COMPONENT_OBJ_STANDBY_TIMER_IDLE 8 //idle_timer +#define COMPONENT_OBJ_STANDBY_TXT_PM_OUTSIDE 9 //pm_out +#define COMPONENT_OBJ_STANDBY_TXT_PM_INSIDE 10 //pm_in + +//---------standby page picture id and picture name------------ + +//Standby background +#define COMPONENT_STANDBY_PIC_BACKGROUND 2 +#define COMPONENT_STANDBY_PIC_BACKGROUND_REFERENCE 3 + +//Standby open all toggle +#define COMPONENT_STANDBY_PIC_OPEN_ALL_TOGGLE_OFF 4 +#define COMPONENT_STANDBY_PIC_OPEN_ALL_TOGGLE_OFF_PRESSED 5 +#define COMPONENT_STANDBY_PIC_OPEN_ALL_TOGGLE_ON 6 +#define COMPONENT_STANDBY_PIC_OPEN_ALL_TOGGLE_ON_PRESSED 7 + +//Standby light toggle +#define COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_OFF 8 +#define COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_OFF_PRESSED 9 +#define COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_ON 10 +#define COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_ON_PRESSED 11 + +//Standby AC toggle +#define COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF 12 +#define COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF_PRESSED 13 +#define COMPONENT_STANDBY_PIC_AC_TOGGLE_ON 14 +#define COMPONENT_STANDBY_PIC_AC_TOGGLE_ON_PRESSED 15 + +//Standby PM toggle +#define COMPONENT_STANDBY_PIC_PM_TOGGLE_OFF 16 +#define COMPONENT_STANDBY_PIC_PM_TOGGLE_OFF_PRESSED 17 +#define COMPONENT_STANDBY_PIC_PM_TOGGLE_ON 18 +#define COMPONENT_STANDBY_PIC_PM_TOGGLE_ON_PRESSED 19 + +//-------------DASHBOARD PAGE---------------- +//dashboard page object id and object name + +//AC +#define COMPONENT_OBJ_DASHBOARD_NUM_AC_TEMP 1 //ac_temp +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_TOGGLE 2 //ac_sw +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_MODE 3 //ac_mode +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_FAN_SPEED 4 //ac_speed +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_TEMP_MINUS 5 //ac_minus +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_TEMP_PLUS 6 //ac_plus + +//PM +#define COMPONENT_OBJ_DASHBOARD_BTN_PM_TOGGLE 7 //pm_sw +#define COMPONENT_OBJ_DASHBOARD_TXT_PM_INSIDE 8 //pm_in +#define COMPONENT_OBJ_DASHBOARD_TXT_PM_OUTSIDE 9 //pm_out + +//DECAPRICATED +#define DONTUSE_COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_MASTER 10 //DONT USE THIS D_light_master + +//Light Pic Holder +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW1 11 //light_row1 +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW2 12 //light_row2 +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW3 13 //light_row3 +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW4 14 //light_row4 + +//Light Button +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW1 15 //light_row1_sw +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW2 16 //light_row2_sw +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW3 17 //light_row3_sw +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW4 18 //light_row4_sw + +//Timer +#define COMPONENT_OBJ_DASHBOARD_TIMER_TEN_SEC 19 //time_10sec +#define COMPONENT_OBJ_DASHBOARD_VAL_TIME_PAST 20 //time_past +#define COMPONENT_OBJ_DASHBOARD_TIMER_INACTIVE_CHECK 21 //inactive_check + +//System toggle +#define COMPONENT_OBJ_DASHBOARD_BTN_SYSTEM_TOGGLE 22 //system_toggle + +//PM Button +#define COMPONENT_OBJ_DASHBOARD_BTN_PM_SPEED 23 //pm_speed +#define COMPONENT_OBJ_DASHBOARD_BTN_PM_MODE 24 //pm_mode + +//Light Master Pic Holder +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_MASTER_LIGHT 25 //master_light + +//Logo +#define COMPONENT_OBJ_DASHBOARD_LOGO 26 //small_ise_logo + +//Lock Pic Holder +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_PM_LOCK 27 //pm_lock +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_AC_LOCK 28 //ac_lock + +//Light Master Button +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_MASTER 29 //light_m_sw + +//Light Master Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV1 30 //light_m_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV2 31 //light_m_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV3 32 //light_m_lv3 + +//Light Row1 Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV1 33 //light_row1_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV2 34 //light_row1_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV3 35 //light_row1_lv3 + +//Light Row2 Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV1 36 //light_row2_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV2 37 //light_row2_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV3 38 //light_row2_lv3 + +//Light Row3 Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV1 39 //light_row3_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV2 40 //light_row3_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV3 41 //light_row3_lv3 + +//Light Row4 Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV1 42 //light_row4_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV2 43 //light_row4_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV3 44 //light_row4_lv3 + +//Degree Pic Holder +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_C_DEGREE 45 //c_degree + +//-----------------dashboard page picture id and picture name---------------- + +//Dashboard Background +#define COMPONENT_DASHBOARD_PIC_BACKGROUND_WITH_C 20 +#define COMPONENT_DASHBOARD_PIC_BACKGROUND 21 //use this +#define COMPONENT_DASHBOARD_PIC_BACKGROUND_REFERENCE 22 + +//System Toggle Button +#define COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_OFF 23 +#define COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_OFF_PRESSED 24 +#define COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_ON 25 +#define COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_ON_PRESSED 26 + +//AC Temperature Minus +#define COMPONENT_DASHBOARD_PIC_AC_TEMP_MINUS 27 +#define COMPONENT_DASHBOARD_PIC_AC_TEMP_MINUS_PRESSED 28 + +//AC Temperature Plus +#define COMPONENT_DASHBOARD_PIC_AC_TEMP_PLUS 29 +#define COMPONENT_DASHBOARD_PIC_AC_TEMP_PLUS_PRESSED 30 + +//AC Mode Cool +#define COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_OFF 31 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_OFF_PRESSED 32 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_ON 33 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_ON_PRESSED 34 + +//AC Mode Dry +#define COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_OFF 35 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_OFF_PRESSED 36 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_ON 37 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_ON_PRESSED 38 + +//AC Mode Fan +#define COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF 39 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF_PRESSED 40 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON 41 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON_PRESSED 42 + +//AC Fan Speed Auto +#define COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_OFF 43 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_OFF_PRESSED 44 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_ON 45 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_ON_PRESSED 46 + +//AC Fan Speed High +#define COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF 47 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF_PRESSED 48 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON 49 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON_PRESSED 50 + +//AC Fan Speed Mid +#define COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF 51 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF_PRESSED 52 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON 53 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON_PRESSED 54 + +//AC Fan Speed Low +#define COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF 55 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF_PRESSED 56 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON 57 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON_PRESSED 58 + +//AC Toggle Button +#define COMPONENT_DASHBOARD_PIC_AC_TOGGLE_OFF 59 +#define COMPONENT_DASHBOARD_PIC_AC_TOGGLE_OFF_PRESSED 60 +#define COMPONENT_DASHBOARD_PIC_AC_TOGGLE_ON 61 +#define COMPONENT_DASHBOARD_PIC_AC_TOGGLE_ON_PRESSED 62 + +//PM Toggle Button +#define COMPONENT_DASHBOARD_PIC_PM_TOGGLE_OFF 63 +#define COMPONENT_DASHBOARD_PIC_PM_TOGGLE_OFF_PRESSED 64 +#define COMPONENT_DASHBOARD_PIC_PM_TOGGLE_ON 65 +#define COMPONENT_DASHBOARD_PIC_PM_TOGGLE_ON_PRESSED 66 + +//Light Switch Button +#define COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_OFF 67 +#define COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_OFF_PRESSED 68 +#define COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON 69 +#define COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON_PRESSED 70 + +//Light Row Level +#define COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_0 71 +#define COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_1 72 +#define COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_2 73 +#define COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_3 74 + +//Light Master Switch Button +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_OFF 75 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_OFF_PRESSED 76 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON 77 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON_PRESSED 78 + +//Light Master Level +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_D 79 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_0 80 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_1 81 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_2 82 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_3 83 + +//Lock Pic +#define COMPONENT_DASHBOARD_PIC_LOCK 84 +#define COMPONENT_DASHBOARD_PIC_UNLOCK 85 + +//Degree Pic +#define COMPONENT_DASHBOARD_PIC_DEGREE_C_OFF 86 +#define COMPONENT_DASHBOARD_PIC_DEGREE_C_ON 87 + + + + + + + + + + + + + + + +//-----------------DECAPRICATED---------------- + //boot page //logo gmov boot -#define COMPONENT_LOGO_BOOT 1 -#define COMPONENT_LOGO_BOOT_VID 1 +#define OLD_COMP_LOGO_BOOT 1 +#define OLD_COMP_LOGO_BOOT_VID 1 //boot background -#define COMPONENT_BACKGROUND_BOOT_PIC 43 +#define OLD_COMP_BACKGROUND_BOOT_PIC 43 //standby page object id -#define COMPONENT_LOGO_STANDBY 1 -#define COMPONENT_LOGO_STANDBY_VID 2 +#define OLD_COMP_LOGO_STANDBY 1 +#define OLD_COMP_LOGO_STANDBY_VID 2 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE 2 -#define COMPONENT_STANDBY_LIGHT_TOGGLE 3 -#define COMPONENT_STANDBY_AC_TOGGLE 4 -#define COMPONENT_STANDBY_PM_TOGGLE 5 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE 2 +#define OLD_COMP_STANDBY_LIGHT_TOGGLE 3 +#define OLD_COMP_STANDBY_AC_TOGGLE 4 +#define OLD_COMP_STANDBY_PM_TOGGLE 5 //text -#define COMPONENT_STANDBY_TIME_TXT 6 -#define COMPONENT_STANDBY_DATE_TXT 7 -#define COMPONENT_STANDBY_OUTSIDE_TEMP_TXT 8 +#define OLD_COMP_STANDBY_TIME_TXT 6 +#define OLD_COMP_STANDBY_DATE_TXT 7 +#define OLD_COMP_STANDBY_OUTSIDE_TEMP_TXT 8 -#define COMPONENT_STANDBY_TIMER 9 -#define COMPONENT_STANDBY_WEATHER_ICON 10 +#define OLD_COMP_STANDBY_TIMER 9 +#define OLD_COMP_STANDBY_WEATHER_ICON 10 //standby page picture id -#define COMPONENT_BACKGROUND_PIC 44 -#define COMPONENT_BACKGROUND_REFERENCE_PIC 45 +#define OLD_COMP_BACKGROUND_PIC 44 +#define OLD_COMP_BACKGROUND_REFERENCE_PIC 45 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE_PIC_OFF 46 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE_PIC_OFF_PRESSED 47 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE_PIC_ON 48 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE_PIC_ON_PRESSED 49 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE_PIC_OFF 46 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE_PIC_OFF_PRESSED 47 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE_PIC_ON 48 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE_PIC_ON_PRESSED 49 -#define COMPONENT_STANDBY_AC_PIC_OFF 50 -#define COMPONENT_STANDBY_AC_PIC_OFF_PRESSED 51 -#define COMPONENT_STANDBY_AC_PIC_ON 52 -#define COMPONENT_STANDBY_AC_PIC_ON_PRESSED 53 +#define OLD_COMP_STANDBY_AC_PIC_OFF 50 +#define OLD_COMP_STANDBY_AC_PIC_OFF_PRESSED 51 +#define OLD_COMP_STANDBY_AC_PIC_ON 52 +#define OLD_COMP_STANDBY_AC_PIC_ON_PRESSED 53 -#define COMPONENT_STANDBY_LIGHT_PIC_OFF 54 -#define COMPONENT_STANDBY_LIGHT_PIC_OFF_PRESSED 55 -#define COMPONENT_STANDBY_LIGHT_PIC_ON 56 -#define COMPONENT_STANDBY_LIGHT_PIC_ON_PRESSED 57 +#define OLD_COMP_STANDBY_LIGHT_PIC_OFF 54 +#define OLD_COMP_STANDBY_LIGHT_PIC_OFF_PRESSED 55 +#define OLD_COMP_STANDBY_LIGHT_PIC_ON 56 +#define OLD_COMP_STANDBY_LIGHT_PIC_ON_PRESSED 57 -#define COMPONENT_STANDBY_PM_PIC_OFF 58 -#define COMPONENT_STANDBY_PM_PIC_OFF_PRESSED 59 -#define COMPONENT_STANDBY_PM_PIC_ON 60 -#define COMPONENT_STANDBY_PM_PIC_ON_PRESSED 61 +#define OLD_COMP_STANDBY_PM_PIC_OFF 58 +#define OLD_COMP_STANDBY_PM_PIC_OFF_PRESSED 59 +#define OLD_COMP_STANDBY_PM_PIC_ON 60 +#define OLD_COMP_STANDBY_PM_PIC_ON_PRESSED 61 -#define COMPONENT_REFERENCE_BACKGROUND_PIC 62 +#define OLD_COMP_REFERENCE_BACKGROUND_PIC 62 //dashboard page //dashboard page object id -#define COMPONENT_AC_TOGGLE_BUTTON 3 -#define COMPONENT_AC_MODE 4 -#define COMPONENT_AC_FAN_SPEED 5 -#define COMPONENT_AC_TEMP_DOWN_BUTTON 6 -#define COMPONENT_AC_TEMP_UP_BUTTON 7 +#define OLD_COMP_AC_TOGGLE_BUTTON 3 +#define OLD_COMP_AC_MODE 4 +#define OLD_COMP_AC_FAN_SPEED 5 +#define OLD_COMP_AC_TEMP_DOWN_BUTTON 6 +#define OLD_COMP_AC_TEMP_UP_BUTTON 7 -#define COMPONENT_PM_TOGGLE_BUTTON 8 -#define COMPONENT_PM_FAN_SPEED_DECREASE 9 -#define COMPONENT_PM_FAN_SPEED_INCREASE 10 +#define OLD_COMP_PM_TOGGLE_BUTTON 8 +#define OLD_COMP_PM_FAN_SPEED_DECREASE 9 +#define OLD_COMP_PM_FAN_SPEED_INCREASE 10 -#define COMPONENT_PM_INSIDE_TXT 11 -#define COMPONENT_PM_OUTSIDE_TXT 12 +#define OLD_COMP_PM_INSIDE_TXT 11 +#define OLD_COMP_PM_OUTSIDE_TXT 12 -#define COMPONENT_LIGHT_MASTER_BUTTON 13 -#define COMPONENT_LIGHT_ROW1_PIC_PLACEHOLDER 14 -#define COMPONENT_LIGHT_ROW2_PIC_PLACEHOLDER 15 -#define COMPONENT_LIGHT_ROW3_PIC_PLACEHOLDER 16 -#define COMPONENT_LIGHT_ROW4_PIC_PLACEHOLDER 17 +#define OLD_COMP_LIGHT_MASTER_BUTTON 13 +#define OLD_COMP_LIGHT_ROW1_PIC_PLACEHOLDER 14 +#define OLD_COMP_LIGHT_ROW2_PIC_PLACEHOLDER 15 +#define OLD_COMP_LIGHT_ROW3_PIC_PLACEHOLDER 16 +#define OLD_COMP_LIGHT_ROW4_PIC_PLACEHOLDER 17 -#define COMPONENT_LIGHT_MASTER_LEVEL1_TOUCHPOINT 18 -#define COMPONENT_LIGHT_MASTER_LEVEL2_TOUCHPOINT 19 -#define COMPONENT_LIGHT_MASTER_LEVEL3_TOUCHPOINT 20 +#define OLD_COMP_LIGHT_MASTER_LEVEL1_TOUCHPOINT 18 +#define OLD_COMP_LIGHT_MASTER_LEVEL2_TOUCHPOINT 19 +#define OLD_COMP_LIGHT_MASTER_LEVEL3_TOUCHPOINT 20 -#define COMPONENT_DASHBOARD_TIME_TXT 21 -#define COMPONENT_DASHBOARD_DATE_TXT 22 -#define COMPONENT_DASHBOARD_OUTSIDE_TEMP_TXT 23 +#define OLD_COMP_DASHBOARD_TIME_TXT 21 +#define OLD_COMP_DASHBOARD_DATE_TXT 22 +#define OLD_COMP_DASHBOARD_OUTSIDE_TEMP_TXT 23 -#define COMPONENT_LIGHT_ROW1_SLIDER 24 -#define COMPONENT_LIGHT_ROW2_SLIDER 25 -#define COMPONENT_LIGHT_ROW3_SLIDER 26 -#define COMPONENT_LIGHT_ROW4_SLIDER 27 +#define OLD_COMP_LIGHT_ROW1_SLIDER 24 +#define OLD_COMP_LIGHT_ROW2_SLIDER 25 +#define OLD_COMP_LIGHT_ROW3_SLIDER 26 +#define OLD_COMP_LIGHT_ROW4_SLIDER 27 -#define COMPONENT_LIGHT_ROW1_SWITCH 28 -#define COMPONENT_LIGHT_ROW2_SWITCH 29 -#define COMPONENT_LIGHT_ROW3_SWITCH 30 -#define COMPONENT_LIGHT_ROW4_SWITCH 31 +#define OLD_COMP_LIGHT_ROW1_SWITCH 28 +#define OLD_COMP_LIGHT_ROW2_SWITCH 29 +#define OLD_COMP_LIGHT_ROW3_SWITCH 30 +#define OLD_COMP_LIGHT_ROW4_SWITCH 31 -#define COMPONENT_DASHBOARD_WEATHER_ICON 32 +#define OLD_COMP_DASHBOARD_WEATHER_ICON 32 //dashboard page picture id -#define COMPONENT_DASHBOARD_REFERENCE_BACKGROUND_PIC 0 -#define COMPONENT_DASHBOARD_BACKGROUND_PIC 1 -#define COMPONENT_DASHBOARD_BACKGROUND_VARIANT_PIC 2 +#define OLD_COMP_DASHBOARD_REFERENCE_BACKGROUND_PIC 0 +#define OLD_COMP_DASHBOARD_BACKGROUND_PIC 1 +#define OLD_COMP_DASHBOARD_BACKGROUND_VARIANT_PIC 2 //AC on/off -#define COMPONENT_AC_TOGGLE_PIC_OFF 3 -#define COMPONENT_AC_TOGGLE_PIC_OFF_PRESSED 4 -#define COMPONENT_AC_TOGGLE_PIC_ON 5 -#define COMPONENT_AC_TOGGLE_PIC_ON_PRESSED 6 -#define COMPONENT_AC_TEMP_DOWN_PIC 7 -#define COMPONENT_AC_TEMP_DOWN_PIC_PRESSED 8 -#define COMPONENT_AC_TEMP_UP_PIC 9 -#define COMPONENT_AC_TEMP_UP_PIC_PRESSED 10 +#define OLD_COMP_AC_TOGGLE_PIC_OFF 3 +#define OLD_COMP_AC_TOGGLE_PIC_OFF_PRESSED 4 +#define OLD_COMP_AC_TOGGLE_PIC_ON 5 +#define OLD_COMP_AC_TOGGLE_PIC_ON_PRESSED 6 +#define OLD_COMP_AC_TEMP_DOWN_PIC 7 +#define OLD_COMP_AC_TEMP_DOWN_PIC_PRESSED 8 +#define OLD_COMP_AC_TEMP_UP_PIC 9 +#define OLD_COMP_AC_TEMP_UP_PIC_PRESSED 10 -#define COMPONENT_AC_FAN_MODE_AUTO_PIC 11 -#define COMPONENT_AC_FAN_MODE_AUTO_PIC_PRESSED 12 -#define COMPONENT_AC_FAN_MODE_HIGH_PIC 13 -#define COMPONENT_AC_FAN_MODE_HIGH_PIC_PRESSED 14 -#define COMPONENT_AC_FAN_MODE_MID_PIC 15 -#define COMPONENT_AC_FAN_MODE_MID_PIC_PRESSED 16 -#define COMPONENT_AC_FAN_MODE_LOW_PIC 17 -#define COMPONENT_AC_FAN_MODE_LOW_PIC_PRESSED 18 +#define OLD_COMP_AC_FAN_MODE_AUTO_PIC 11 +#define OLD_COMP_AC_FAN_MODE_AUTO_PIC_PRESSED 12 +#define OLD_COMP_AC_FAN_MODE_HIGH_PIC 13 +#define OLD_COMP_AC_FAN_MODE_HIGH_PIC_PRESSED 14 +#define OLD_COMP_AC_FAN_MODE_MID_PIC 15 +#define OLD_COMP_AC_FAN_MODE_MID_PIC_PRESSED 16 +#define OLD_COMP_AC_FAN_MODE_LOW_PIC 17 +#define OLD_COMP_AC_FAN_MODE_LOW_PIC_PRESSED 18 -#define COMPONENT_AC_MODE_DRY_PIC 19 -#define COMPONENT_AC_MODE_DRY_PIC_PRESSED 20 -#define COMPONENT_AC_MODE_COOL_PIC 21 -#define COMPONENT_AC_MODE_COOL_PIC_PRESSED 22 -#define COMPONENT_AC_MODE_FAN_PIC 23 -#define COMPONENT_AC_MODE_FAN_PIC_PRESSED 24 +#define OLD_COMP_AC_MODE_DRY_PIC 19 +#define OLD_COMP_AC_MODE_DRY_PIC_PRESSED 20 +#define OLD_COMP_AC_MODE_COOL_PIC 21 +#define OLD_COMP_AC_MODE_COOL_PIC_PRESSED 22 +#define OLD_COMP_AC_MODE_FAN_PIC 23 +#define OLD_COMP_AC_MODE_FAN_PIC_PRESSED 24 //pm; air purifier -#define COMPONENT_PM_TOGGLE_PIC_OFF 25 -#define COMPONENT_PM_TOGGLE_PIC_OFF_PRESSED 26 -#define COMPONENT_PM_TOGGLE_PIC_ON 27 -#define COMPONENT_PM_TOGGLE_PIC_ON_PRESSED 28 +#define OLD_COMP_PM_TOGGLE_PIC_OFF 25 +#define OLD_COMP_PM_TOGGLE_PIC_OFF_PRESSED 26 +#define OLD_COMP_PM_TOGGLE_PIC_ON 27 +#define OLD_COMP_PM_TOGGLE_PIC_ON_PRESSED 28 -#define COMPONENT_PM_FAN_SPEED_DECREASE_PIC 29 -#define COMPONENT_PM_FAN_SPEED_DECREASE_PIC_PRESSED 30 -#define COMPONENT_PM_FAN_SPEED_INCREASE_PIC 31 -#define COMPONENT_PM_FAN_SPEED_INCREASE_PIC_PRESSED 32 +#define OLD_COMP_PM_FAN_SPEED_DECREASE_PIC 29 +#define OLD_COMP_PM_FAN_SPEED_DECREASE_PIC_PRESSED 30 +#define OLD_COMP_PM_FAN_SPEED_INCREASE_PIC 31 +#define OLD_COMP_PM_FAN_SPEED_INCREASE_PIC_PRESSED 32 //AC status indicator -#define COMPONENT_AC_STATUS_OFF 33 -#define COMPONENT_AC_STATUS_ON 34 +#define OLD_COMP_AC_STATUS_OFF 33 +#define OLD_COMP_AC_STATUS_ON 34 //light master -#define COMPONENT_LIGHT_MASTER_OFF 35 -#define COMPONENT_LIGHT_MASTER_OFF_PRESSED 36 -#define COMPONENT_LIGHT_MASTER_ON 37 -#define COMPONENT_LIGHT_MASTER_ON_PRESSED 38 +#define OLD_COMP_LIGHT_MASTER_OFF 35 +#define OLD_COMP_LIGHT_MASTER_OFF_PRESSED 36 +#define OLD_COMP_LIGHT_MASTER_ON 37 +#define OLD_COMP_LIGHT_MASTER_ON_PRESSED 38 //light level component -#define COMPONENT_LIGHT_LEVEL_0 39 -#define COMPONENT_LIGHT_LEVEL_1 40 -#define COMPONENT_LIGHT_LEVEL_2 41 -#define COMPONENT_LIGHT_LEVEL_3 42 +#define OLD_COMP_LIGHT_LEVEL_0 39 +#define OLD_COMP_LIGHT_LEVEL_1 40 +#define OLD_COMP_LIGHT_LEVEL_2 41 +#define OLD_COMP_LIGHT_LEVEL_3 42 //weather icon legend -#define COMPONENT_WEATHER_ICON_FAIR_DAY 63 -#define COMPONENT_WEATHER_ICON_FAIR_NIGHT 64 -#define COMPONENT_WEATHER_ICON_CLOUDY 65 -#define COMPONENT_WEATHER_ICON_CLEARSKY_DAY 66 -#define COMPONENT_WEATHER_ICON_CLEARSKY_NIGHT 67 -#define COMPONENT_WEATHER_ICON_PARTLYCLOUDY_DAY 68 -#define COMPONENT_WEATHER_ICON_PARTLYCLOUDY_NIGHT 69 -#define COMPONENT_WEATHER_ICON_HEAVY_RAIN 70 -#define COMPONENT_WEATHER_ICON_HEAVY_RAIN_AND_THUNDER 71 -#define COMPONENT_WEATHER_ICON_RAIN_AND_THUNDER 72 -#define COMPONENT_WEATHER_ICON_RAIN 73 -#define COMPONENT_WEATHER_ICON_LIGHT_RAIN 74 -#define COMPONENT_WEATHER_ICON_FOG 75 +#define OLD_COMP_WEATHER_ICON_FAIR_DAY 63 +#define OLD_COMP_WEATHER_ICON_FAIR_NIGHT 64 +#define OLD_COMP_WEATHER_ICON_CLOUDY 65 +#define OLD_COMP_WEATHER_ICON_CLEARSKY_DAY 66 +#define OLD_COMP_WEATHER_ICON_CLEARSKY_NIGHT 67 +#define OLD_COMP_WEATHER_ICON_PARTLYCLOUDY_DAY 68 +#define OLD_COMP_WEATHER_ICON_PARTLYCLOUDY_NIGHT 69 +#define OLD_COMP_WEATHER_ICON_HEAVY_RAIN 70 +#define OLD_COMP_WEATHER_ICON_HEAVY_RAIN_AND_THUNDER 71 +#define OLD_COMP_WEATHER_ICON_RAIN_AND_THUNDER 72 +#define OLD_COMP_WEATHER_ICON_RAIN 73 +#define OLD_COMP_WEATHER_ICON_LIGHT_RAIN 74 +#define OLD_COMP_WEATHER_ICON_FOG 75 //need to toggle 4 row of light independently and have one master switch that can control all diff --git a/src/main.cpp b/src/main.cpp index 769d5b0..9915a48 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,6 +23,8 @@ RemoteVariable temp_out = RemoteVariable(); RemoteVariable weather = RemoteVariable(); RemoteVariable pm_switch = RemoteVariable(); RemoteVariable pm_fan_speed = RemoteVariable(); +RemoteVariable pm_lock = RemoteVariable(); +RemoteVariable ac_lock = RemoteVariable(); float adc2current(uint16_t adc_val) { return adc_val * 1.0; @@ -45,8 +47,8 @@ const char *mode_names_york[] = {"off", "cool", "fan_only"}; const char *fan_speed_names[] = {"auto", "high", "medium", "low"}; AirConditioner ac_daikin = { - .max_temperature = 30, - .min_temperature = 18, + .max_temperature = DAIKIN_MAX_TEMP, + .min_temperature = DAIKIN_MIN_TEMP, .modes = 4, .mode_names = mode_names_daikin, .fan_speeds = 4, @@ -54,8 +56,8 @@ AirConditioner ac_daikin = { .getInfraredCode = &getInfraredCode_daikin}; AirConditioner ac_york = { - .max_temperature = 30, - .min_temperature = 18, + .max_temperature = YORK_MAX_TEMP, + .min_temperature = YORK_MIN_TEMP, .modes = 3, .mode_names = mode_names_york, .fan_speeds = 4, @@ -121,17 +123,6 @@ void setup() espmega.inputs.setDebounceTime(i,200); } - - // if (clear_fram) - // { - // Serial.print("boot_state.txt=\"Factory Resetting . . .\""); - // sendStopBytes(); - // for (uint16_t i = 0; i < 32768; i++) - // { - // espmega.fram.write8(i, 0); - // } - // esp_restart(); - // } // // ------------ End Factory Reset Routine ------------ @@ -198,14 +189,6 @@ void setup() ct6.bindFRAM(&espmega.fram, 6500); espmega.iot->registerCard(10); - // auto binded_display_update_on_pm25_out = std::bind(&display_update,0,std::placeholders::_1); - // auto binded_display_update_on_pm25_in = std::bind(&display_update,1,std::placeholders::_1); - // auto binded_display_update_on_temp_out = std::bind(&display_update,2,std::placeholders::_1); - // auto binded_display_update_on_weather = std::bind(&display_update,3,std::placeholders::_1); - // auto binded_display_update_on_pm_switch = std::bind(&display_update,4,std::placeholders::_1); - // auto binded_display_update_on_pm_fan_speed = std::bind(&display_update,5,std::placeholders::_1); - - // ------------ Climate Cards Initialization Routine ------------ ESP_LOGD("ISE OS", "Setting up climate cards"); @@ -271,6 +254,9 @@ void setup() weather.registerCallback(&weatherupdatedisplay); pm_switch.registerCallback(&pmswitchupdatedisplay); pm_fan_speed.registerCallback(&pmfanspeedupdatedisplay); + pm_lock.registerCallback(&pmlockupdatedisplay); + ac_lock.registerCallback(&aclockupdatedisplay); + // PM2.5 PPM Remote Variable pm25_out.begin(6, "/aqi/value", espmega.iot, true, "/aqi/request_value"); @@ -286,6 +272,12 @@ void setup() // Air Purifier Fan Speed Remote Variable pm_fan_speed.begin(6, "/pm/fan_speed", espmega.iot, true, "/pm/request_fan_speed"); pm_fan_speed.enableSetValue("/pm/set_fan_speed"); + // Air Purifier Lock Remote Variable + pm_lock.begin(6, "/pm/lock_state", espmega.iot, true, "/pm/request_lock_pm_state"); + pm_lock.enableSetValue("/pm/set_lock_pm_state"); + // Air Conditioner Lock Remote Variable + ac_lock.begin(6, "/ac/lock_state", espmega.iot, true, "/ac/request_lock_ac_state"); + ac_lock.enableSetValue("/ac/set_lock_ac_state"); // ------------ End Remote Variables Initialization Routine ------------ @@ -299,7 +291,7 @@ void setup() // ------------ External Display Initialization Routine ------------ auto bindedGetTime = std::bind(&ESPMegaPRO::getTime, &espmega); - iseDisplay.begin(&espmega.inputs, &espmega.outputs, &climateCard_daikin, &climateCard_york, &pm_switch, &pm_fan_speed); + iseDisplay.begin(&espmega.inputs, &espmega.outputs, &climateCard_daikin, &climateCard_york, &pm_switch, &pm_fan_speed, &pm_lock, &ac_lock); espmega.iot->registerRelativeMqttCallback(&handleMqttMessage); iseDisplay.registerPageChangeCallback(&handlePageChange); // ------------ End External Display Initialization Routine ------------ @@ -315,11 +307,11 @@ void pm25inupdatedisplay(char *value) } void tempoutupdatedisplay(char *value) { - iseDisplay.updateTempOutside(get_temp_out()); + //iseDisplay.updateTempOutside(get_temp_out()); } void weatherupdatedisplay(char *value) { - iseDisplay.updateWeather(weather.getValue()); + //iseDisplay.updateWeather(weather.getValue()); } void pmfanspeedupdatedisplay(char *value) { @@ -331,6 +323,18 @@ void pmswitchupdatedisplay(char *value) iseDisplay.updateAirPurifierState(); ESP_LOGI("PM switch", "toggling PM switch state from: %d to %d", pm_switch.getValue(), !pm_switch.getValue()); } +void pmlockupdatedisplay(char *value) +{ + ESP_LOGI("PM lock", "getting PM lock state from MQTT: %d", pm_lock.getValue()); + iseDisplay.updateAirPurifierState(); + ESP_LOGI("PM lock", "toggling PM lock state from: %d to %d", pm_lock.getValue(), !pm_lock.getValue()); +} +void aclockupdatedisplay(char *value) +{ + ESP_LOGI("AC lock", "getting AC lock state from MQTT: %d", ac_lock.getValue()); + iseDisplay.updateACState(); + ESP_LOGI("AC lock", "toggling AC lock state from: %d to %d", ac_lock.getValue(), !ac_lock.getValue()); +} void loop() { @@ -418,6 +422,20 @@ uint8_t get_pm_fanspeed() return pm_fan_speed_value; } +bool get_pm_lock() +{ + ESP_LOGI("PM lock", "getting PM lock state from MQTT: %d", pm_lock.getValue()); + bool is_pm_lock_on = strcmp(pm_lock.getValue(), "on") == 0; + return is_pm_lock_on; +} + +bool get_ac_lock() +{ + ESP_LOGI("AC lock", "getting AC lock state from MQTT: %d", ac_lock.getValue()); + bool is_ac_lock_on = strcmp(ac_lock.getValue(), "on") == 0; + return is_ac_lock_on; +} + /** * @brief Get the PM switch state from home assistant * @return true if the PM switch is on, false if the PM switch is off @@ -436,6 +454,20 @@ void toggle_pm_switch() pm_switch.setValue(is_pm_switch_on ? "0" : "1"); } +void toggle_ac_lock() +{ + bool is_ac_lock_on = get_ac_lock(); + ESP_LOGI("AC lock", "toggling AC lock state from: %d to %d", is_ac_lock_on, !is_ac_lock_on); + ac_lock.setValue(is_ac_lock_on ? "0" : "1"); +} + +void toggle_pm_lock() +{ + bool is_pm_lock_on = get_pm_lock(); + ESP_LOGI("PM lock", "toggling PM lock state from: %d to %d", is_pm_lock_on, !is_pm_lock_on); + pm_lock.setValue(is_pm_lock_on ? "0" : "1"); +} + void set_pm_fanspeed(uint8_t speed) { ESP_LOGI("PM fan speed", "setting PM fan speed to: %d", speed); @@ -458,6 +490,7 @@ void handlePageChange(uint8_t page) case PAGE_DASHBOARD: iseDisplay.updateLightGroupStatePageDashboard(); iseDisplay.updateAirPurifierState(); + iseDisplay.updateSystemtoggle(); break; default: break; @@ -465,8 +498,8 @@ void handlePageChange(uint8_t page) iseDisplay.updatePMoutside(get_pm25_out()); iseDisplay.updatePMinside(get_pm25_in()); - iseDisplay.updateWeather(weather.getValue()); - iseDisplay.updateTempOutside(get_temp_out()); + //iseDisplay.updateWeather(weather.getValue()); + //iseDisplay.updateTempOutside(get_temp_out()); iseDisplay.updateACState(); } diff --git a/src/main.hpp b/src/main.hpp index 99824e8..580d03f 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -51,6 +51,10 @@ void on_pin_change(uint8_t pin, uint8_t value); uint16_t get_pm25_out(); uint16_t get_pm25_in(); float get_temp_out(); +bool get_pm_lock(); +bool get_ac_lock(); +void toggle_ac_lock(); +void toggle_pm_lock(); void toggle_pm_switch(); void set_pm_fanspeed(uint8_t speed); void display_update(); @@ -59,5 +63,7 @@ void pm25inupdatedisplay(char* value); void tempoutupdatedisplay(char* value); void weatherupdatedisplay(char* value); void pmfanspeedupdatedisplay(char* value); +void pmlockupdatedisplay(char* value); +void aclockupdatedisplay(char* value); void pmswitchupdatedisplay(char* value); float adc2current(uint16_t adc_val); \ No newline at end of file