Merge pull request #34 from Sateetje/dev
Mitsubishi Heavy ZS-S and FDTC support
This commit is contained in:
commit
bea7693ff4
|
@ -0,0 +1,128 @@
|
|||
#include <MitsubishiHeavyFDTCHeatpumpIR.h>
|
||||
|
||||
MitsubishiHeavyFDTCHeatpumpIR::MitsubishiHeavyFDTCHeatpumpIR() : HeatpumpIR()
|
||||
{
|
||||
static const char PROGMEM model[] PROGMEM = "mitsubishi_heavy_fdtc";
|
||||
static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"mitsubishi_heavy_fdtc\",\"dn\":\"Mitsubishi Heavy FDTC\",\"mT\":18,\"xT\":30,\"fs\":3}";
|
||||
|
||||
_model = model;
|
||||
_info = info;
|
||||
}
|
||||
|
||||
void MitsubishiHeavyFDTCHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd)
|
||||
{
|
||||
// Sensible defaults for the heat pump mode
|
||||
uint8_t powerMode = MITSUBISHI_HEAVY_FDTC_MODE_ON;
|
||||
uint8_t operatingMode = MITSUBISHI_HEAVY_FDTC_MODE_AUTO;
|
||||
uint8_t fanSpeed = MITSUBISHI_HEAVY_FDTC_FAN1;
|
||||
uint8_t temperature = 21;
|
||||
uint8_t swingV = MITSUBISHI_HEAVY_FDTC_VS_UP;
|
||||
|
||||
if (powerModeCmd == POWER_OFF)
|
||||
{
|
||||
powerMode = MITSUBISHI_HEAVY_FDTC_MODE_OFF;
|
||||
}
|
||||
|
||||
switch (operatingModeCmd)
|
||||
{
|
||||
case MODE_AUTO:
|
||||
operatingMode = MITSUBISHI_HEAVY_FDTC_MODE_AUTO;
|
||||
break;
|
||||
case MODE_HEAT:
|
||||
operatingMode = MITSUBISHI_HEAVY_FDTC_MODE_HEAT;
|
||||
break;
|
||||
case MODE_COOL:
|
||||
operatingMode = MITSUBISHI_HEAVY_FDTC_MODE_COOL;
|
||||
break;
|
||||
case MODE_DRY:
|
||||
operatingMode = MITSUBISHI_HEAVY_FDTC_MODE_DRY;
|
||||
break;
|
||||
case MODE_FAN:
|
||||
operatingMode = MITSUBISHI_HEAVY_FDTC_MODE_FAN;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (fanSpeedCmd)
|
||||
{
|
||||
case FAN_1:
|
||||
fanSpeed = MITSUBISHI_HEAVY_FDTC_FAN1;
|
||||
break;
|
||||
case FAN_2:
|
||||
fanSpeed = MITSUBISHI_HEAVY_FDTC_FAN2;
|
||||
break;
|
||||
case FAN_3:
|
||||
fanSpeed = MITSUBISHI_HEAVY_FDTC_FAN3;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if ( temperatureCmd > 17 && temperatureCmd < 31)
|
||||
{
|
||||
temperature = (temperatureCmd - 16) & 0x0F;
|
||||
}
|
||||
|
||||
switch (swingVCmd)
|
||||
{
|
||||
case VDIR_SWING:
|
||||
swingV = MITSUBISHI_HEAVY_FDTC_VS_SWING;
|
||||
break;
|
||||
case VDIR_UP:
|
||||
swingV = MITSUBISHI_HEAVY_FDTC_VS_UP;
|
||||
break;
|
||||
case VDIR_MUP:
|
||||
swingV = MITSUBISHI_HEAVY_FDTC_VS_MUP;
|
||||
break;
|
||||
case VDIR_MIDDLE:
|
||||
swingV = MITSUBISHI_HEAVY_FDTC_VS_MUP;
|
||||
break;
|
||||
case VDIR_MDOWN:
|
||||
swingV = MITSUBISHI_HEAVY_FDTC_VS_MDOWN;
|
||||
break;
|
||||
case VDIR_DOWN:
|
||||
swingV = MITSUBISHI_HEAVY_FDTC_VS_DOWN;
|
||||
break;
|
||||
}
|
||||
|
||||
sendMitsubishiHeavyFDTC(IR, powerMode, operatingMode, fanSpeed, temperature, swingV);
|
||||
}
|
||||
|
||||
|
||||
void MitsubishiHeavyFDTCHeatpumpIR::sendMitsubishiHeavyFDTC(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV)
|
||||
{
|
||||
uint8_t MitsubishiHeavyFDTCTemplate[] = { 0x0B, 0x00, 0x00, 0x40, 0xF4, 0xFF, 0xFF, 0xBF};
|
||||
// 0 1 2 3 4 5 6 7
|
||||
|
||||
// Vertical air flow + fan speed
|
||||
MitsubishiHeavyFDTCTemplate[1] |= (swingV & 0b01000000) | fanSpeed;
|
||||
|
||||
// Power state + operating mode + temperature
|
||||
MitsubishiHeavyFDTCTemplate[2] |= operatingMode | powerMode | temperature;
|
||||
|
||||
// Vertical air flow
|
||||
MitsubishiHeavyFDTCTemplate[3] |= (swingV & 0b00110000);
|
||||
|
||||
// There is no checksum, but some bytes are inverted
|
||||
MitsubishiHeavyFDTCTemplate[4] = ~MitsubishiHeavyFDTCTemplate[0];
|
||||
MitsubishiHeavyFDTCTemplate[5] = ~MitsubishiHeavyFDTCTemplate[1];
|
||||
MitsubishiHeavyFDTCTemplate[6] = ~MitsubishiHeavyFDTCTemplate[2];
|
||||
MitsubishiHeavyFDTCTemplate[7] = ~MitsubishiHeavyFDTCTemplate[3];
|
||||
|
||||
// 38 kHz PWM frequency
|
||||
IR.setFrequency(38);
|
||||
|
||||
// Header
|
||||
IR.mark(MITSUBISHI_HEAVY_FDTC_HDR_MARK);
|
||||
IR.space(MITSUBISHI_HEAVY_FDTC_HDR_SPACE);
|
||||
|
||||
// Data
|
||||
for (uint8_t i=0; i<sizeof(MitsubishiHeavyFDTCTemplate); i++) {
|
||||
IR.sendIRbyte(MitsubishiHeavyFDTCTemplate[i], MITSUBISHI_HEAVY_FDTC_BIT_MARK, MITSUBISHI_HEAVY_FDTC_ZERO_SPACE, MITSUBISHI_HEAVY_FDTC_ONE_SPACE);
|
||||
}
|
||||
|
||||
// End mark
|
||||
IR.mark(MITSUBISHI_HEAVY_FDTC_BIT_MARK);
|
||||
IR.space(MITSUBISHI_HEAVY_FDTC_HDR_SPACE);
|
||||
|
||||
IR.mark(MITSUBISHI_HEAVY_FDTC_BIT_MARK);
|
||||
IR.space(0);
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
Mitsubishi Heavy FDTCxxVF heatpump control (remote control P/N PJA502A704AA)
|
||||
*/
|
||||
#ifndef MitsubishiHeavyFDTCHeatpumpIR_h
|
||||
#define MitsubishiHeavyFDTCHeatpumpIR_h
|
||||
|
||||
#include <HeatpumpIR.h>
|
||||
|
||||
// Mitsubishi Heavy timing constants
|
||||
#define MITSUBISHI_HEAVY_FDTC_HDR_MARK 6000
|
||||
#define MITSUBISHI_HEAVY_FDTC_HDR_SPACE 7500
|
||||
#define MITSUBISHI_HEAVY_FDTC_BIT_MARK 500
|
||||
#define MITSUBISHI_HEAVY_FDTC_ONE_SPACE 3500
|
||||
#define MITSUBISHI_HEAVY_FDTC_ZERO_SPACE 1500
|
||||
|
||||
// Mitsubishi Heavy codes
|
||||
#define MITSUBISHI_HEAVY_FDTC_MODE_AUTO 0x00 // Operating mode
|
||||
#define MITSUBISHI_HEAVY_FDTC_MODE_HEAT 0x40
|
||||
#define MITSUBISHI_HEAVY_FDTC_MODE_COOL 0x20
|
||||
#define MITSUBISHI_HEAVY_FDTC_MODE_DRY 0x10
|
||||
#define MITSUBISHI_HEAVY_FDTC_MODE_FAN 0x30
|
||||
|
||||
#define MITSUBISHI_HEAVY_FDTC_MODE_OFF 0x00 // Power OFF
|
||||
#define MITSUBISHI_HEAVY_FDTC_MODE_ON 0x80 // Power ON
|
||||
|
||||
#define MITSUBISHI_HEAVY_FDTC_FAN1 0x00
|
||||
#define MITSUBISHI_HEAVY_FDTC_FAN2 0x10
|
||||
#define MITSUBISHI_HEAVY_FDTC_FAN3 0x20
|
||||
|
||||
#define MITSUBISHI_HEAVY_FDTC_VS_SWING 0x40 // Vertical swing
|
||||
#define MITSUBISHI_HEAVY_FDTC_VS_UP 0x00
|
||||
#define MITSUBISHI_HEAVY_FDTC_VS_MUP 0x10
|
||||
#define MITSUBISHI_HEAVY_FDTC_VS_MDOWN 0x20
|
||||
#define MITSUBISHI_HEAVY_FDTC_VS_DOWN 0x30
|
||||
|
||||
class MitsubishiHeavyFDTCHeatpumpIR : public HeatpumpIR
|
||||
{
|
||||
public:
|
||||
MitsubishiHeavyFDTCHeatpumpIR();
|
||||
void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd);
|
||||
|
||||
private:
|
||||
void sendMitsubishiHeavyFDTC(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -30,6 +30,16 @@ MitsubishiHeavyZMHeatpumpIR::MitsubishiHeavyZMHeatpumpIR() : MitsubishiHeavyHeat
|
|||
_mitsubishiModel = MITSUBISHIHEAVY_ZM;
|
||||
}
|
||||
|
||||
MitsubishiHeavyZSHeatpumpIR::MitsubishiHeavyZSHeatpumpIR() : MitsubishiHeavyZMHeatpumpIR()
|
||||
{
|
||||
static const char PROGMEM model[] PROGMEM = "mitsubishi_heavy_zs";
|
||||
static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"mitsubishi_heavy_zs\",\"dn\":\"Mitsubishi Heavy ZS\",\"mT\":18,\"xT\":30,\"fs\":4}";
|
||||
|
||||
_model = model;
|
||||
_info = info;
|
||||
|
||||
_mitsubishiModel = MITSUBISHIHEAVY_ZS;
|
||||
}
|
||||
|
||||
void MitsubishiHeavyHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/*
|
||||
Mitsubishi Heavy SRKxxZJ-S heatpump control (remote control P/N RKX502A001C)
|
||||
Mitsubishi Heavy SRKxxZM-S heatpump control (remote control P/N RLA502A700B)
|
||||
Mitsubishi Heavy SRKxxZS-S heatpump control (remote control P/N RLA502A700L)
|
||||
*/
|
||||
#ifndef MitsubishiHeavyHeatpumpIR_h
|
||||
#define MitsubishiHeavyHeatpumpIR_h
|
||||
|
@ -91,7 +93,7 @@
|
|||
// MitsubishiHeavy model codes
|
||||
#define MITSUBISHIHEAVY_ZJ 0
|
||||
#define MITSUBISHIHEAVY_ZM 1
|
||||
|
||||
#define MITSUBISHIHEAVY_ZS 2
|
||||
|
||||
class MitsubishiHeavyHeatpumpIR : public HeatpumpIR
|
||||
{
|
||||
|
@ -124,5 +126,12 @@ class MitsubishiHeavyZMHeatpumpIR : public MitsubishiHeavyHeatpumpIR
|
|||
void sendMitsubishiHeavy(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH, uint8_t cleanMode, uint8_t silentMode, uint8_t _3DAuto);
|
||||
};
|
||||
|
||||
class MitsubishiHeavyZSHeatpumpIR : public MitsubishiHeavyZMHeatpumpIR
|
||||
{
|
||||
public:
|
||||
// ZS has the same IR protocol as the ZM, remote control has some extra options
|
||||
MitsubishiHeavyZSHeatpumpIR();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -26,6 +26,8 @@ Currently supports at least these models
|
|||
* Daikin RXS25G2V1B / FVXS25FV1B (Remote control P/N ARC452A1)
|
||||
* Mitsubishi Heavy SRKxxZJ-S (Remote control P/N RKX502A001C)
|
||||
* Mitsubishi Heavy SRKxxZM-S (Remote Control P/N RLA502A700B)
|
||||
* Mitsubishi Heavy SRKxxZS-S (Remote Control P/N RLA502A700L)
|
||||
* Mitsubishi Heavy FDTCxxVF (Remote Control P/N PJA502A704AA)
|
||||
* Hyundai (Remote Control P/N Y512F2)
|
||||
* This is probably a generic Gree model
|
||||
* Samsung
|
||||
|
|
Loading…
Reference in New Issue