mirror of
https://github.com/letscontrolit/ESPEasy.git
synced 2026-07-27 19:57:38 +00:00
103 lines
2.7 KiB
C++
103 lines
2.7 KiB
C++
#include "KY26HeatpumpIR.h"
|
|
|
|
KY26HeatpumpIR::KY26HeatpumpIR() : HeatpumpIR() {
|
|
static const char model[] PROGMEM = "KY-26";
|
|
static const char info[] PROGMEM =
|
|
"{\"mdl\":\"ky26\",\"dn\":\"KY-26\",\"mT\":15,\"xT\":31,\"fs\":3}";
|
|
|
|
_model = model;
|
|
_info = info;
|
|
}
|
|
|
|
void KY26HeatpumpIR::send(IRSender &IR, uint8_t powerModeCmd,
|
|
uint8_t operatingModeCmd, uint8_t fanSpeedCmd,
|
|
uint8_t temperatureCmd, uint8_t swingVCmd,
|
|
uint8_t swingHCmd, uint8_t timerHourCmd,
|
|
bool timerHalfHourCmd) {
|
|
uint8_t powerMode = KY26_POWER_OFF;
|
|
uint8_t operatingMode = KY26_MODE_AUTO;
|
|
uint8_t fanSpeed = KY26_FAN1;
|
|
uint8_t temperature = 24;
|
|
uint8_t timer = KY26_TIMER_OFF;
|
|
|
|
// Operating mode
|
|
switch (operatingModeCmd) {
|
|
case MODE_AUTO:
|
|
operatingMode = KY26_MODE_AUTO;
|
|
break;
|
|
case MODE_COOL:
|
|
operatingMode = KY26_MODE_COOL;
|
|
break;
|
|
case MODE_DRY:
|
|
operatingMode = KY26_MODE_DRY;
|
|
break;
|
|
case MODE_FAN:
|
|
operatingMode = KY26_MODE_FAN;
|
|
break;
|
|
}
|
|
|
|
// Fan speed
|
|
switch (fanSpeedCmd) {
|
|
case FAN_1:
|
|
fanSpeed = KY26_FAN1;
|
|
break;
|
|
case FAN_2:
|
|
fanSpeed = KY26_FAN2;
|
|
break;
|
|
case FAN_3:
|
|
fanSpeed = KY26_FAN3;
|
|
break;
|
|
}
|
|
|
|
// Temperature
|
|
if (temperatureCmd >= 15 && temperatureCmd <= 31) {
|
|
temperature = temperatureCmd == 15 ? 0 : temperatureCmd;
|
|
}
|
|
|
|
// Timer
|
|
if (timerHourCmd > 0 && timerHourCmd <= 12) {
|
|
timer = timerHourCmd | KY26_TIMER_ON;
|
|
|
|
if (timerHalfHourCmd) {
|
|
timer |= KY26_TIMER_HALF_HOUR;
|
|
}
|
|
}
|
|
|
|
// Power mode
|
|
// This heatpump does not have a power on command, but we can simulate it by
|
|
// sending a power off command followed by a power toggle command.
|
|
if (powerModeCmd == POWER_ON) {
|
|
sendKY26(IR, powerMode, operatingMode, fanSpeed, temperature, timer);
|
|
powerMode = KY26_POWER_ONOFF;
|
|
}
|
|
|
|
return sendKY26(IR, powerMode, operatingMode, fanSpeed, temperature, timer);
|
|
}
|
|
|
|
void KY26HeatpumpIR::sendKY26(IRSender &IR, uint8_t powerModeCmd,
|
|
uint8_t operatingModeCmd, uint8_t fanSpeedCmd,
|
|
uint8_t temperatureCmd, uint8_t timerCmd) {
|
|
uint8_t KY26Template[] = {0x00, 0x00, 0x00, 0x00};
|
|
|
|
KY26Template[0] |= powerModeCmd | operatingModeCmd | fanSpeedCmd;
|
|
KY26Template[1] |= timerCmd;
|
|
KY26Template[2] |= temperatureCmd;
|
|
|
|
KY26Template[3] = (KY26Template[0] + KY26Template[1] + KY26Template[2]) % 256;
|
|
|
|
IR.setFrequency(38);
|
|
|
|
// Header
|
|
IR.mark(KY26_HDR_MARK);
|
|
IR.space(KY26_HDR_SPACE);
|
|
|
|
for (unsigned int i = 0; i < sizeof(KY26Template); i++) {
|
|
IR.sendIRbyte(KY26Template[i], KY26_BIT_MARK, KY26_ZERO_SPACE,
|
|
KY26_ONE_SPACE);
|
|
}
|
|
|
|
// Footer
|
|
IR.mark(KY26_BIT_MARK);
|
|
IR.space(0);
|
|
}
|