create hmi and define component

This commit is contained in:
reaw55 2024-01-30 20:51:12 +07:00
parent 8a19674b0e
commit f2c0eb6bf1
86 changed files with 643 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

BIN
ise-display/logo-gif.gmov Normal file

Binary file not shown.

BIN
ise-display/logof-gif.gmov Normal file

Binary file not shown.

BIN
ise-display/logofd-gif.gmov Normal file

Binary file not shown.

153
src/codebook.txt Normal file
View file

@ -0,0 +1,153 @@
page 0 boot screen
video id:
0 logo 500x500px
1 logo 260x260px
2 logo 140x140px
object id:
0 page (pic 43)
1 logo gmov
picture id:
43 background
page 1 standby
object id:
0 page
1 logo gmov
2 s_open_all
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)
picture id:
44 background
45 ref
46 s-open-all-off
47 s-open-all-off-p
48 s-open-all-on
49 s-open-all-on-p
50 s-ac-off
51 s-ac-off-p
52 s-ac-on
53 s-ac-on-p
54 s-light-off
55 s-light-off-p
56 s-light-on
57 s-light-on-p
58 s-pm-off
59 s-pm-off-p
60 s-pm-on
61 s-pm-on-p
62 reference-background
page 2 dashboard
picture id:
0 reference-background
1 background
2 background-variant
3 ac-off
4 ac-off-p
5 ac-on
6 ac-on-p
7 ac-minus
8 ac-minus-p
9 ac-plus
10 ac-plus-p
11 fan-auto
12 fan-auto-p
13 fan-high
14 fan-high-p
15 fan-mid
16 fan-mid-p
17 fan-low
18 fan-low-p
19 mode-dry
20 mode-dry-p
21 mode-cool
22 mode-cool-p
23 mode-fan
24 mode-fan-p
25 pm-off
26 pm-off-p
27 pm-on
28 pm-on-p
29 pm-minus
30 pm-minus-p
31 pm-plus
32 pm-plus-p
33 ac-status-off
34 ac-status-on
35 light-master-off
36 light-master-off-p
37 light-master-on
38 light-master-on-p
39 light-level-1
40 light-level-2
41 light-level-3
42 light-level-4
object id:
0 main
1 ac_temp (number)
2 pm_fan (number 0-20)
3 ac_sw
4 ac_mode
5 ac_speed
6 ac_minus
7 ac_plus
8 pm_sw
9 pm_minus
10 pm_plus
11 pm_in (txt)
12 pm_out (txt)
13 light_master
14 light_row1 (pic)
15 light_row2 (pic)
16 light_row3 (pic)
17 light_row4 (pic)
18 light_m_l1
19 light_m_l2
20 light_m_l3
21 light_1_l0
22 light_1_l1
23 light_1_l2
24 light_1_l3
25 light_2_l0
26 light_2_l1
27 light_2_l2
28 light_2_l3
29 light_3_l0
30 light_3_l1
31 light_3_l2
32 light_3_l3
33 light_4_l0
34 light_4_l1
35 light_4_l2
36 light_4_l3
37 time (txt)
38 date (txt)
39 outside_temp (txt)

275
src/ise_display.cpp Normal file
View file

@ -0,0 +1,275 @@
#include <ise_display.hpp>
ISEDisplay::ISEDisplay(HardwareSerial *adapter) : ESPMegaDisplay(adapter)
{
}
void ISEDisplay::begin(std::function<rtctime_t()> getTime, DigitalInputCard *inputCard,
DigitalOutputCard *outputCard, ClimateCard *climateCard)
{
this->getTime = getTime;
this->inputCard = inputCard;
this->outputCard = outputCard;
this->climateCard = climateCard;
auto bindedHandlePWMChange = std::bind(&ISEDisplay::handlePWMChange, this, std::placeholders::_1, std::placeholders::_2);
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);
auto bindedHandlePayload = std::bind(&ISEDisplay::handlePayload, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
this->outputCallbackHandle = this->outputCard->registerChangeCallback(bindedHandlePWMChange);
this->climateCallbackHandle = this->climateCard->registerChangeCallback(bindedHandleACChange);
this->registerTouchCallback(bindedHandleTouch);
this->registerPayloadCallback(bindedHandlePayload);
this->reset();
delay(1000);
this->jumpToPage(1);
delay(100);
this->sendClock();
this->setACControlEnabled(true);
this->updateLightGroupState();
this->updateFanGroupState();
this->updateAirPurifierState();
this->updateACState();
}
void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t event)
{
if (page != PAGE_DASHBOARD)
return;
switch (component)
{
case COMPONENT_LIGHT_TOGGLE_BUTTON:
if (event != TOUCH_TYPE_RELEASE)
break;
toggleLightGroupState();
break;
case COMPONENT_FAN_TOGGLE_BUTTON:
if (event != TOUCH_TYPE_RELEASE)
break;
toggleFanGroupState();
break;
case COMPONENT_AIR_PURIFIER_TOGGLE_BUTTON:
if (event != TOUCH_TYPE_RELEASE)
break;
this->outputCard->setState(7, !this->outputCard->getState(7));
break;
case COMPONENT_AC_TEMP_UP_BUTTON:
if (!ac_control_enabled) break;
if (event != TOUCH_TYPE_RELEASE)
break;
this->climateCard->setTemperature(this->climateCard->getTemperature() + 1);
break;
case COMPONENT_AC_TEMP_DOWN_BUTTON:
if (!ac_control_enabled) break;
if (event != TOUCH_TYPE_RELEASE)
break;
this->climateCard->setTemperature(this->climateCard->getTemperature() - 1);
break;
case COMPONENT_AC_MODE_OFF_BUTTON:
if (!ac_control_enabled) break;
if (event != TOUCH_TYPE_RELEASE)
break;
this->climateCard->setMode(0);
break;
case COMPONENT_AC_MODE_FAN_ONLY_BUTTON:
if (!ac_control_enabled) break;
if (event != TOUCH_TYPE_RELEASE)
break;
this->climateCard->setMode(1);
break;
case COMPONENT_AC_MODE_COOL_BUTTON:
if (!ac_control_enabled) break;
if (event != TOUCH_TYPE_RELEASE)
break;
this->climateCard->setMode(2);
break;
case COMPONENT_AC_FAN_MODE_AUTO_BUTTON:
if (!ac_control_enabled) break;
if (event != TOUCH_TYPE_RELEASE)
break;
this->climateCard->setFanSpeed(0);
break;
case COMPONENT_AC_FAN_MODE_LOW_BUTTON:
if (!ac_control_enabled) break;
if (event != TOUCH_TYPE_RELEASE)
break;
this->climateCard->setFanSpeed(3);
break;
case COMPONENT_AC_FAN_MODE_MEDIUM_BUTTON:
if (!ac_control_enabled) break;
if (event != TOUCH_TYPE_RELEASE)
break;
this->climateCard->setFanSpeed(2);
break;
case COMPONENT_AC_FAN_MODE_HIGH_BUTTON:
if (!ac_control_enabled) break;
if (event != TOUCH_TYPE_RELEASE)
break;
this->climateCard->setFanSpeed(1);
break;
default:
break;
}
}
void ISEDisplay::handlePWMChange(uint8_t pin, uint8_t value)
{
// Is the pin a light, fan, or air purifier?
if (pin >= 0 && pin <= 3)
{
// Light
updateLightGroupState();
}
else if (pin >= 4 && pin <= 6)
{
// Fan
updateFanGroupState();
}
else if (pin == 7)
{
// Air Purifier
updateAirPurifierState();
}
}
void ISEDisplay::handleACChange(uint8_t mode, uint8_t fan_speed, uint8_t temperature)
{
// Update AC Controls
updateACState();
}
void ISEDisplay::sendClock()
{
// Get the time
rtctime_t time = this->getTime();
// Send the time to the display
this->displayAdapter->print("clock.txt=");
// We use 24 hour format, HH:MM
this->displayAdapter->print(time.hours);
this->displayAdapter->print(":");
this->displayAdapter->print(time.minutes);
this->sendStopBytes();
}
bool ISEDisplay::calculateLightGroupState() {
// Check if all lights are on
bool lightOn = false;
for (uint8_t i = 0; i < 4; i++) {
if (this->outputCard->getState(i)) {
lightOn = true;
break;
}
}
return lightOn;
}
bool ISEDisplay::calculateFanGroupState() {
// Check if all fans are on
bool fanOn = false;
for (uint8_t i = 4; i < 7; i++) {
if (this->outputCard->getState(i)) {
fanOn = true;
break;
}
}
return fanOn;
}
void ISEDisplay::setLightGrouptState(bool state) {
// Set all lights to state
for (uint8_t i = 0; i < 4; i++) {
this->outputCard->setState(i, state);
}
}
void ISEDisplay::setFanGroupState(bool state) {
// Set all fans to state
for (uint8_t i = 4; i < 7; i++) {
this->outputCard->setState(i, state);
}
}
void ISEDisplay::toggleLightGroupState() {
// Get the current group state
bool state = calculateLightGroupState();
// Toggle the state
state = !state;
// Set the state
setLightGrouptState(state);
}
void ISEDisplay::toggleFanGroupState() {
// Get the current group state
bool state = calculateFanGroupState();
// Toggle the state
state = !state;
// Set the state
setFanGroupState(state);
}
void ISEDisplay::updateLightGroupState() {
// Calculate the state
bool state = calculateLightGroupState();
// Send the state to the display
this->displayAdapter->print("lt_bt.pic=");
this->displayAdapter->print(state ? COMPONENT_LIGHT_TOGGLE_PIC_ON : COMPONENT_LIGHT_TOGGLE_PIC_OFF);
this->sendStopBytes();
}
void ISEDisplay::updateFanGroupState() {
// Calculate the state
bool state = calculateFanGroupState();
// Send the state to the display
this->displayAdapter->print("fan_bt.pic=");
this->displayAdapter->print(state ? COMPONENT_FAN_TOGGLE_PIC_ON : COMPONENT_FAN_TOGGLE_PIC_OFF);
this->sendStopBytes();
}
void ISEDisplay::updateAirPurifierState() {
// Get the state
bool state = this->outputCard->getState(7);
// Send the state to the display
this->displayAdapter->print("puri_bt.pic=");
this->displayAdapter->print(state ? COMPONENT_AIR_PURIFIER_TOGGLE_PIC_ON : COMPONENT_AIR_PURIFIER_TOGGLE_PIC_OFF);
this->sendStopBytes();
}
void ISEDisplay::updateACState() {
// Get the state
uint8_t mode = this->climateCard->getMode();
uint8_t fan_speed = this->climateCard->getFanSpeed();
uint8_t temperature = this->climateCard->getTemperature();
// Send the state to the display
this->displayAdapter->print("mode_off_btn.pic=");
this->displayAdapter->print(mode == 0 ? COMPONENT_AC_MODE_OFF_PIC_ACTIVE : COMPONENT_AC_MODE_OFF_PIC_INACTIVE);
this->sendStopBytes();
this->displayAdapter->print("mode_fan_btn.pic=");
this->displayAdapter->print(mode == 1 ? COMPONENT_AC_MODE_FAN_ONLY_PIC_ACTIVE : COMPONENT_AC_MODE_FAN_ONLY_PIC_INACTIVE);
this->sendStopBytes();
this->displayAdapter->print("mode_cool_btn.pic=");
this->displayAdapter->print(mode == 2 ? COMPONENT_AC_MODE_COOL_PIC_ACTIVE : COMPONENT_AC_MODE_COOL_PIC_INACTIVE);
this->sendStopBytes();
this->displayAdapter->print("fan_auto_btn.pic=");
this->displayAdapter->print(fan_speed == 0 ? COMPONENT_AC_FAN_MODE_AUTO_PIC_ACTIVE : COMPONENT_AC_FAN_MODE_AUTO_PIC_INACTIVE);
this->sendStopBytes();
this->displayAdapter->print("fan_1_btn.pic=");
this->displayAdapter->print(fan_speed == 3 ? COMPONENT_AC_FAN_MODE_HIGH_PIC_ACTIVE : COMPONENT_AC_FAN_MODE_HIGH_PIC_INACTIVE);
this->sendStopBytes();
this->displayAdapter->print("fan_2_btn.pic=");
this->displayAdapter->print(fan_speed == 2 ? COMPONENT_AC_FAN_MODE_MEDIUM_PIC_ACTIVE : COMPONENT_AC_FAN_MODE_MEDIUM_PIC_INACTIVE);
this->sendStopBytes();
this->displayAdapter->print("fan_3_btn.pic=");
this->displayAdapter->print(fan_speed == 1 ? COMPONENT_AC_FAN_MODE_LOW_PIC_ACTIVE : COMPONENT_AC_FAN_MODE_LOW_PIC_INACTIVE);
this->sendStopBytes();
this->displayAdapter->print("temp_txt.txt=\"");
this->displayAdapter->print(temperature);
this->displayAdapter->print("C\"");
this->sendStopBytes();
}
void ISEDisplay::setACControlEnabled(bool enabled) {
ac_control_enabled = enabled;
this->displayAdapter->print("dashboard.pic=");
this->displayAdapter->print(enabled ? COMPONENT_BACKGROUND_AC_UNLOCK : COMPONENT_BACKGROUND_AC_LOCK);
this->sendStopBytes();
}
bool ISEDisplay::getACControlEnabled() {
return ac_control_enabled;
}
void ISEDisplay::handlePayload(uint8_t payload_type, uint8_t *payload, uint8_t length)
{
}

210
src/ise_display.hpp Normal file
View file

@ -0,0 +1,210 @@
#pragma once
#include <ESPMegaDisplay.hpp>
#include <TimeStructure.hpp>
#include <DigitalInputCard.hpp>
#include <DigitalOutputCard.hpp>
#include <ClimateCard.hpp>
// Touch Types
#define TOUCH_TYPE_PRESS 1
#define TOUCH_TYPE_RELEASE 0
// Page IDs
#define PAGE_BOOT 0
#define PAGE_STANDBY 1
#define PAGE_DASHBOARD 2
//boot page
//logo gmov boot
#define COMPONENT_LOGO_BOOT 1
#define COMPONENT_LOGO_BOOT_VID 1
//boot background
#define COMPONENT_BACKGROUND_BOOT_PIC 43
//standby page object id
#define COMPONENT_LOGO_STANDBY 1
#define COMPONENT_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
//text
#define COMPONENT_STANDBY_TIME_TXT 6
#define COMPONENT_STANDBY_DATE_TXT 7
#define COMPONENT_STANDBY_OUTSIDE_TEMP_TXT 8
//standby page picture id
#define COMPONENT_BACKGROUND_PIC 44
#define COMPONENT_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 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 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 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 COMPONENT_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 COMPONENT_PM_TOGGLE_BUTTON 8
#define COMPONENT_PM_FAN_SPEED_DECREASE 9
#define COMPONENT_PM_FAN_SPEED_INCREASE 10
#define COMPONENT_PM_INSIDE_TXT 11
#define COMPONENT_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 COMPONENT_LIGHT_MASTER_LEVEL1_TOUCHPOINT 18
#define COMPONENT_LIGHT_MASTER_LEVEL2_TOUCHPOINT 19
#define COMPONENT_LIGHT_MASTER_LEVEL3_TOUCHPOINT 20
#define COMPONENT_LIGHT_ROW1_LEVEL0_TOUCHPOINT 21
#define COMPONENT_LIGHT_ROW1_LEVEL1_TOUCHPOINT 22
#define COMPONENT_LIGHT_ROW1_LEVEL2_TOUCHPOINT 23
#define COMPONENT_LIGHT_ROW1_LEVEL3_TOUCHPOINT 24
#define COMPONENT_LIGHT_ROW2_LEVEL0_TOUCHPOINT 25
#define COMPONENT_LIGHT_ROW2_LEVEL1_TOUCHPOINT 26
#define COMPONENT_LIGHT_ROW2_LEVEL2_TOUCHPOINT 27
#define COMPONENT_LIGHT_ROW2_LEVEL3_TOUCHPOINT 28
#define COMPONENT_LIGHT_ROW3_LEVEL0_TOUCHPOINT 29
#define COMPONENT_LIGHT_ROW3_LEVEL1_TOUCHPOINT 30
#define COMPONENT_LIGHT_ROW3_LEVEL2_TOUCHPOINT 31
#define COMPONENT_LIGHT_ROW3_LEVEL3_TOUCHPOINT 32
#define COMPONENT_LIGHT_ROW4_LEVEL0_TOUCHPOINT 33
#define COMPONENT_LIGHT_ROW4_LEVEL1_TOUCHPOINT 34
#define COMPONENT_LIGHT_ROW4_LEVEL2_TOUCHPOINT 35
#define COMPONENT_LIGHT_ROW4_LEVEL3_TOUCHPOINT 36
#define COMPONENT_DASHBOARD_TIME_TXT 37
#define COMPONENT_DASHBOARD_DATE_TXT 38
#define COMPONENT_DASHBOARD_OUTSIDE_TEMP_TXT 39
//dashboard page picture id
#define COMPONENT_DASHBOARD_REFERENCE_BACKGROUND_PIC 0
#define COMPONENT_DASHBOARD_BACKGROUND_PIC 1
#define COMPONENT_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 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 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 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 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 COMPONENT_AC_STATUS_OFF 33
#define COMPONENT_AC_STATUS_ON 34
#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 COMPONENT_LIGHT_LEVEL_1 39
#define COMPONENT_LIGHT_LEVEL_2 40
#define COMPONENT_LIGHT_LEVEL_3 41
#define COMPONENT_LIGHT_LEVEL_4 42
/**
* @brief A class for controlling the ESPMegaDisplay.
*
* Made for ISE building 2 room 303/2.
*/
class ISEDisplay : public ESPMegaDisplay {
public:
ISEDisplay(HardwareSerial* adapter);
void begin(std::function<rtctime_t()> getTime, DigitalInputCard* inputCard, DigitalOutputCard* outputCard, ClimateCard* climateCard);
void handleTouch(uint8_t page, uint8_t component, uint8_t event);
void handlePWMChange(uint8_t pin, uint8_t value);
void handleACChange(uint8_t mode, uint8_t fan_speed, uint8_t temperature);
void handlePayload(uint8_t payload_type, uint8_t* payload, uint8_t length);
void sendClock();
void setACControlEnabled(bool enabled);
bool getACControlEnabled();
private:
bool ac_control_enabled = true;
std::function<rtctime_t()> getTime;
DigitalInputCard* inputCard;
DigitalOutputCard* outputCard;
uint8_t outputCallbackHandle;
ClimateCard* climateCard;
uint8_t climateCallbackHandle;
bool calculateLightGroupState();
bool calculateFanGroupState();
void setLightGrouptState(bool state);
void setFanGroupState(bool state);
void toggleLightGroupState();
void toggleFanGroupState();
void updateLightGroupState();
void updateFanGroupState();
void updateAirPurifierState();
void updateACState();
};

View file

@ -45,6 +45,10 @@ ClimateCard climateCard = ClimateCard(AIR_CONDITIONER_IR_PIN, ac,
void handleMqttMessage(char *topic, char *payload)
{
char *temperature = (char*)calloc(16,sizeof(char));
strcpy(temperature, payload);
int temp_int;
temp_int = atoi(temperature);
Serial.printf("MQTT Message: %s %s\n", topic, payload);
if (!strcmp(topic, AIR_CONDITIONER_LOCK_SET_RELATIVE_TOPIC))
{
@ -59,6 +63,7 @@ void handleMqttMessage(char *topic, char *payload)
espmega.iot->publishRelative(AIR_CONDITIONER_LOCK_RELATIVE_TOPIC, "unlock");
}
}
free(temperature);
}
void lockAC()