From b01540a4cef8abba651aa8140faf029d04771577 Mon Sep 17 00:00:00 2001 From: Siwat Sirichai Date: Thu, 8 Feb 2024 23:37:25 +0700 Subject: [PATCH] both light in standby and dashboard work now --- ise-display/ise-display-prod.HMI | Bin 37446253 -> 37446253 bytes src/codebook.txt | 6 +- src/ise_display.cpp | 122 +++++++++++++++++++++++++------ src/ise_display.hpp | 16 ++-- src/main.cpp | 37 +++++++++- src/main.hpp | 1 + 6 files changed, 151 insertions(+), 31 deletions(-) diff --git a/ise-display/ise-display-prod.HMI b/ise-display/ise-display-prod.HMI index 75f51bd6fa16ad2fb21db2ccac13eceb18167f83..ac9122b18c4b822521fe31a0bc3197eaa5f9fe6f 100644 GIT binary patch delta 4622 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 diff --git a/src/codebook.txt b/src/codebook.txt index 419126f..c7c6996 100644 --- a/src/codebook.txt +++ b/src/codebook.txt @@ -31,9 +31,9 @@ object id: 3 s_light_toggle 4 s_ac_toggle 5 s_pm_toggle -6 s_time (txt) -7 s_date (txt) -8 s_outside_temp (txt) +6 s_time (txt) -> date +7 s_date (txt) -> time +8 s_outside_temp (txt) -> outside_temp 9 idle_timer (timer) // wait one min for inactivity then dim screen 10 s_weather_icon (pic) diff --git a/src/ise_display.cpp b/src/ise_display.cpp index af60c80..95e443f 100644 --- a/src/ise_display.cpp +++ b/src/ise_display.cpp @@ -5,7 +5,6 @@ ISEDisplay::ISEDisplay(HardwareSerial *adapter) : ESPMegaDisplay(adapter, 115200 // Work left // TODO : Implement // debug to work -// appdeamon send data / receive data void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCard, ClimateCard *climateCard) { @@ -24,7 +23,7 @@ void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCar 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); + this->jumpToPage(1); // change this back later to 2 delay(100); this->updateAirPurifierState(); this->updateACState(); @@ -50,6 +49,7 @@ void ISEDisplay::loop() 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); if (page == PAGE_STANDBY) { switch (component) @@ -68,7 +68,7 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type break; // TODO : So this does nothing? Shouldn't it turn on the lights? // should turn it on now - toggleLightGroupState(); + 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 @@ -106,7 +106,30 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type toggleLightGroupState(); break; // TODOlater : can't this be done better with array lookup? - + case COMPONENT_LIGHT_MASTER_LEVEL1_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + for (uint8_t i = 1; i <= 4; i++) + { + setLightLevel(i, 1); + } + break; + case COMPONENT_LIGHT_MASTER_LEVEL2_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + for (uint8_t i = 1; i <= 4; i++) + { + setLightLevel(i, 2); + } + break; + case COMPONENT_LIGHT_MASTER_LEVEL3_TOUCHPOINT: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + for (uint8_t i = 1; i <= 4; i++) + { + setLightLevel(i, 3); + } + break; case COMPONENT_LIGHT_ROW1_SLIDER: if (touch_type != TOUCH_TYPE_RELEASE) break; @@ -169,21 +192,24 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type // 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); + updateACState(); break; case COMPONENT_AC_TEMP_DOWN_BUTTON: if (touch_type != TOUCH_TYPE_RELEASE) break; this->climateCard->setTemperature(this->climateCard->getTemperature() - 1); + updateACState(); break; case COMPONENT_AC_TEMP_UP_BUTTON: if (touch_type != TOUCH_TYPE_RELEASE) break; this->climateCard->setTemperature(this->climateCard->getTemperature() + 1); + updateACState(); break; case COMPONENT_PM_TOGGLE_BUTTON: if (touch_type != TOUCH_TYPE_RELEASE) break; - this->outputCard->setState(5, !this->outputCard->getState(5)); + togglePM(); break; case COMPONENT_PM_FAN_SPEED_DECREASE: if (touch_type != TOUCH_TYPE_RELEASE) @@ -191,6 +217,7 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type pm_fan_speed = this->outputCard->getValue(6); if (pm_fan_speed >= 0 && pm_fan_speed <= 20) this->outputCard->setValue(5, (pm_fan_speed - 1)); + updateAirPurifierState(); break; case COMPONENT_PM_FAN_SPEED_INCREASE: if (touch_type != TOUCH_TYPE_RELEASE) @@ -198,6 +225,7 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type pm_fan_speed = this->outputCard->getValue(6); if (pm_fan_speed >= 0 && pm_fan_speed <= 20) this->outputCard->setValue(5, (pm_fan_speed + 1)); + updateAirPurifierState(); break; default: break; @@ -220,14 +248,13 @@ void ISEDisplay::handlePWMChange(uint8_t pin, bool state, uint16_t value) if (pin >= 1 && pin <= 4) { // Light - updateLightGroupStatePageDashboard(); updateLightGroupStatePageStandby(); time_since_last_screen_update = millis(); // update time since last activity } else if (pin == 4 || pin == 5) { // Air Purifier - updateAirPurifierState(); + updateAirPurifierStateStandby(); time_since_last_screen_update = millis(); // update time since last activity } } @@ -236,7 +263,7 @@ void ISEDisplay::handlePWMChange(uint8_t pin, bool state, uint16_t value) if (pin >= 1 && pin <= 4) { // Light - updateLightGroupStatePageStandby(); + updateLightGroupStatePageDashboard(); time_since_last_screen_update = millis(); // update time since last activity } else if (pin == 4 || pin == 5) @@ -256,16 +283,10 @@ void ISEDisplay::updateDateTimeText(rtctime_t time) this->takeSerialMutex(); // Send the time to the display - this->displayAdapter->printf("time.txt=%02d:%02d", time.hours, time.minutes); + this->displayAdapter->printf("time.txt=\"%02d:%02d\"", time.hours, time.minutes); this->sendStopBytes(); - this->displayAdapter->printf("date.txt=%02d.%02d.%d", time.day, time.month, time.year); - this->sendStopBytes(); - - this->displayAdapter->printf("s_time.txt=%02d:%02d", time.hours, time.minutes); - this->sendStopBytes(); - - this->displayAdapter->printf("s_date.txt=%02d.%02d.%d", time.day, time.month, time.year); + this->displayAdapter->printf("date.txt=\"%02d.%02d.%d\"", time.day, time.month, time.year); this->sendStopBytes(); this->giveSerialMutex(); @@ -344,17 +365,17 @@ 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 + // 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 @@ -380,36 +401,73 @@ void ISEDisplay::toggleLightGroupState() { // Get the current group state bool state = calculateLightGroupState(); + ESP_LOGI("ISEDisplay", "Current light group state: %d", state); // Toggle light for (uint8_t i = 1; i <= 4; i++) { setLightLevel(i, state ? 0 : 3); } + updateLightGroupStatePageDashboard(); +} +void ISEDisplay::toggleLightGroupStateStandby() +{ + // Get the current group state + bool state = calculateLightGroupState(); + ESP_LOGI("ISEDisplay", "Current light group state: %d", state); + // Toggle light + for (uint8_t i = 1; i <= 4; i++) + { + setLightLevel(i, state ? 0 : 3); + } + updateLightGroupStatePageStandby(); } void ISEDisplay::togglePM() { // Get the current group state bool state = this->outputCard->getState(5); + ESP_LOGI("ISEDisplay", "Current PM state: %d", state); // Toggle the state state = !state; // Set the state this->outputCard->setState(5, state); + ESP_LOGI("ISEDisplay", "New PM state: %d", state); + updateAirPurifierState(); +} +void ISEDisplay::togglePMStandby() +{ + // Get the current group state + bool state = this->outputCard->getState(5); + ESP_LOGI("ISEDisplay", "Current PM state: %d", state); + // Toggle the state + state = !state; + // Set the state + this->outputCard->setState(5, state); + ESP_LOGI("ISEDisplay", "New PM state: %d", state); + updateAirPurifierStateStandby(); } void ISEDisplay::toggleAC() { // Get the current group state uint8_t mode = this->climateCard->getMode(); + // get fan speed and temperature + uint8_t fan_speed = this->climateCard->getFanSpeed(); + uint8_t temperature = this->climateCard->getTemperature(); + + ESP_LOGI("ISEDisplay", "Current AC mode: %d", mode); // Toggle the state if (mode == 0) { - this->climateCard->setMode(user_mode); + ESP_LOGI("ISEDisplay", " User mode: %d", user_mode); + setACstate(fan_speed, user_mode, temperature); } else { + ESP_LOGI("ISEDisplay", "User mode BEFORE: %d", user_mode); // update user mode to new mode user_mode = mode; // change actual mode to off - this->climateCard->setMode(0); + ESP_LOGI("ISEDisplay", "User mode AFTER: %d", user_mode); + setACstate(fan_speed, 0, temperature); } } void ISEDisplay::changeUserACmode() @@ -438,6 +496,7 @@ void ISEDisplay::setLightLevel(uint8_t row, uint8_t level) if (row == i) this->outputCard->setValue(row, level); } + updateLightGroupStatePageDashboard(); } void ISEDisplay::updateLightGroupStatePageStandby() @@ -540,6 +599,8 @@ void ISEDisplay::toggleLightIndividual(uint8_t row) } // Set the state setLightLevel(row, state); + updateLightGroupStatePageDashboard(); + updateLightGroupStatePageStandby(); } void ISEDisplay::toggleSliderLight(uint8_t row, uint8_t lightLevel) { @@ -569,12 +630,29 @@ void ISEDisplay::toggleSliderLight(uint8_t row, uint8_t lightLevel) // Set the state setLightLevel(row, state); } +void ISEDisplay::updateAirPurifierStateStandby() +{ + // Get the state + bool state = this->outputCard->getState(5); + // Send the state to the display + this->takeSerialMutex(); + + this->displayAdapter->print("s_pm_toggle.pic="); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PM_PIC_ON : COMPONENT_STANDBY_PM_PIC_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->sendStopBytes(); + + this->giveSerialMutex(); +} void ISEDisplay::updateAirPurifierState() { // Get the state bool state = this->outputCard->getState(5); - uint8_t fan_speed = this->outputCard->getState(5); + uint8_t fan_speed = this->outputCard->getState(6); // Send the state to the display this->takeSerialMutex(); diff --git a/src/ise_display.hpp b/src/ise_display.hpp index 5dbe09f..353efac 100644 --- a/src/ise_display.hpp +++ b/src/ise_display.hpp @@ -21,7 +21,7 @@ class ISEDisplay : public ESPMegaDisplay { public: ISEDisplay(HardwareSerial* adapter); void begin(DigitalInputCard* inputCard, DigitalOutputCard* outputCard, ClimateCard* climateCard); - + void updateLightGroupStatePageDashboard(); void updateDateTimeText(rtctime_t time); void updateWeather(char *weather_string); void updateTempOutside(float temp_outside); @@ -29,6 +29,8 @@ class ISEDisplay : public ESPMegaDisplay { void updatePMinside(u_int8_t pm25_inside); void loop(); + + private: void handleTouch(uint8_t page, uint8_t component, uint8_t touch_type); @@ -46,18 +48,22 @@ class ISEDisplay : public ESPMegaDisplay { uint8_t time_since_last_screen_update; - - void updateLightGroupStatePageDashboard(); + void updateuserACmode(); + void updateACfanSpeed(); void updateLightGroupStatePageStandby(); void updateAirPurifierState(); + void updateAirPurifierStateStandby(); void updateACState(); + bool calculateLightGroupState(); void toggleLightGroupState(); + void toggleLightGroupStateStandby(); void toggleLightIndividual(uint8_t row); void toggleSliderLight(uint8_t row,uint8_t lightLevel); void togglePM(); + void togglePMStandby(); void toggleAC(); + void toggleACStandby(); void changeUserACmode(); - void updateuserACmode(); - void updateACfanSpeed(); + }; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index fa296a7..9ce7193 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -104,7 +104,7 @@ void setup() auto bindedGetTime = std::bind(&ESPMegaPRO::getTime, &espmega); iseDisplay.begin(&espmega.inputs, &espmega.outputs, &climateCard); espmega.iot->registerRelativeMqttCallback(&handleMqttMessage); - + iseDisplay.registerPageChangeCallback(&handlePageChange); // placeholder // PM2.5 PPM Remote Variable // 12 bytes remote variable, 11 characters + null terminator @@ -122,10 +122,25 @@ void loop() iseDisplay.loop(); // Update the time every 15 seconds + //static bool run_when_init = false; // No static ? , this shit will reset to 0 every loop static uint32_t last_time_updated = 0; + //rtctime_t time = espmega.getTime(); + //when init update once then update every 15 seconds + // You don't need this, when it go from page 0 to 1 it call handlePageChange + // if(!run_when_init){ + // time = espmega.getTime(); + // iseDisplay.updateDateTimeText(time); + // last_time_updated = millis(); + // run_when_init = true; + // } + + if (millis() - last_time_updated > 15000) { rtctime_t time = espmega.getTime(); + // log time + ESP_LOGI("time", "Time: %d:%d:%d", time.hours, time.minutes, time.seconds); + ESP_LOGI("Date", "Date: %d/%d/%d", time.day, time.month, time.year); iseDisplay.updateDateTimeText(time); last_time_updated = millis(); } @@ -174,4 +189,24 @@ float get_temp_out() // Read temperature from sensor temp_out_value = atof(temp_out.getValue()); return temp_out_value; +} + +void handlePageChange(uint8_t page) { + + // Which already send the time + //printESP_LOGI the page have changed + ESP_LOGI("Page", "Page change to: %d", page); + rtctime_t time = espmega.getTime(); + iseDisplay.updateDateTimeText(time); + iseDisplay.updateLightGroupStatePageDashboard(); + //iseDisplay.updatePMinside(); + /* iseDisplay.updatePMoutside(get_pm25_out()); + iseDisplay.updateWeather(weather.getValue()); + iseDisplay.updateTempOutside(get_temp_out()); */ + /* iseDisplay.updateACState(); + iseDisplay.updateAirPurifierState(); + iseDisplay.updateLightGroupStatePageStandby(); + iseDisplay.updateLightGroupStatePageDashboard(); + iseDisplay.updateuserACmode(); + iseDisplay.updateAirPurifierStateStandby(); */ } \ No newline at end of file diff --git a/src/main.hpp b/src/main.hpp index df1e403..2100941 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -24,6 +24,7 @@ SET_LOOP_TASK_STACK_SIZE(32*1024); void handleMqttMessage(char *topic, char *payload); void subscribeToMqttTopics(); +void handlePageChange(uint8_t page); void sendStopBytes(); void sendExtStopBytes();