IRremoteESP8266
ir_Midea.h
Go to the documentation of this file.
1 // Copyright 2017 David Conran
2 
7 
8 // Supports:
9 // Brand: Pioneer System, Model: RYBO12GMFILCAD A/C (12K BTU) (MIDEA)
10 // Brand: Pioneer System, Model: RUBO18GMFILCAD A/C (18K BTU) (MIDEA)
11 // Brand: Comfee, Model: MPD1-12CRN7 A/C (MIDEA)
12 // Brand: Keystone, Model: RG57H4(B)BGEF remote (MIDEA)
13 // Brand: Midea, Model: FS40-7AR Stand Fan (MIDEA24)
14 
15 #ifndef IR_MIDEA_H_
16 #define IR_MIDEA_H_
17 
18 #define __STDC_LIMIT_MACROS
19 #include <stdint.h>
20 #ifdef ARDUINO
21 #include <Arduino.h>
22 #endif
23 #include "IRremoteESP8266.h"
24 #include "IRsend.h"
25 #ifdef UNIT_TEST
26 #include "IRsend_test.h"
27 #endif
28 
29 // Constants
30 const uint8_t kMideaACTempOffset = 24;
31 const uint8_t kMideaACTempSize = 5; // Bits
32 const uint8_t kMideaACMinTempF = 62; // Fahrenheit
33 const uint8_t kMideaACMaxTempF = 86; // Fahrenheit
34 const uint8_t kMideaACMinTempC = 17; // Celsius
35 const uint8_t kMideaACMaxTempC = 30; // Celsius
36 const uint8_t kMideaACCelsiusOffset = 29;
37 const uint8_t kMideaACModeOffset = 32;
38 const uint8_t kMideaACCool = 0; // 0b000
39 const uint8_t kMideaACDry = 1; // 0b001
40 const uint8_t kMideaACAuto = 2; // 0b010
41 const uint8_t kMideaACHeat = 3; // 0b011
42 const uint8_t kMideaACFan = 4; // 0b100
43 const uint8_t kMideaACFanOffset = 35;
44 const uint8_t kMideaACFanSize = 2; // Bits
45 const uint8_t kMideaACFanAuto = 0; // 0b00
46 const uint8_t kMideaACFanLow = 1; // 0b01
47 const uint8_t kMideaACFanMed = 2; // 0b10
48 const uint8_t kMideaACFanHigh = 3; // 0b11
49 const uint8_t kMideaACSleepOffset = 38;
50 const uint8_t kMideaACPowerOffset = 39;
51 const uint64_t kMideaACToggleSwingV = 0x0000A201FFFFFF7C;
52 
53 // Legacy defines. (Deprecated)
54 #define MIDEA_AC_COOL kMideaACCool
55 #define MIDEA_AC_DRY kMideaACDry
56 #define MIDEA_AC_AUTO kMideaACAuto
57 #define MIDEA_AC_HEAT kMideaACHeat
58 #define MIDEA_AC_FAN kMideaACFan
59 #define MIDEA_AC_FAN_AUTO kMideaACFanAuto
60 #define MIDEA_AC_FAN_LOW kMideaACFanLow
61 #define MIDEA_AC_FAN_MED kMideaACFanMed
62 #define MIDEA_AC_FAN_HI kMideaACFanHigh
63 #define MIDEA_AC_POWER kMideaACPower
64 #define MIDEA_AC_SLEEP kMideaACSleep
65 #define MIDEA_AC_MIN_TEMP_F kMideaACMinTempF
66 #define MIDEA_AC_MAX_TEMP_F kMideaACMaxTempF
67 #define MIDEA_AC_MIN_TEMP_C kMideaACMinTempC
68 #define MIDEA_AC_MAX_TEMP_C kMideaACMaxTempC
69 
70 // Classes
73 class IRMideaAC {
74  public:
75  explicit IRMideaAC(const uint16_t pin, const bool inverted = false,
76  const bool use_modulation = true);
77  void stateReset(void);
78 #if SEND_MIDEA
79  void send(const uint16_t repeat = kMideaMinRepeat);
84  int8_t calibrate(void) { return _irsend.calibrate(); }
85 #endif // SEND_MIDEA
86  void begin(void);
87  void on(void);
88  void off(void);
89  void setPower(const bool on);
90  bool getPower(void);
91  bool getUseCelsius(void);
92  void setUseCelsius(const bool celsius);
93  void setTemp(const uint8_t temp, const bool useCelsius = false);
94  uint8_t getTemp(const bool useCelsius = false);
95  void setFan(const uint8_t fan);
96  uint8_t getFan(void);
97  void setMode(const uint8_t mode);
98  uint8_t getMode(void);
99  void setRaw(const uint64_t newState);
100  uint64_t getRaw(void);
101  static bool validChecksum(const uint64_t state);
102  void setSleep(const bool on);
103  bool getSleep(void);
104  bool isSwingVToggle(void);
105  void setSwingVToggle(const bool on);
106  bool getSwingVToggle(void);
107  uint8_t convertMode(const stdAc::opmode_t mode);
108  uint8_t convertFan(const stdAc::fanspeed_t speed);
109  static stdAc::opmode_t toCommonMode(const uint8_t mode);
110  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
111  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL);
112  String toString(void);
113 #ifndef UNIT_TEST
114 
115  private:
117 #else // UNIT_TEST
118  IRsendTest _irsend;
120 #endif // UNIT_TEST
122  uint64_t remote_state;
124  void checksum(void);
125  static uint8_t calcChecksum(const uint64_t state);
126 };
127 
128 #endif // IR_MIDEA_H_
kMideaACMinTempF
const uint8_t kMideaACMinTempF
Definition: ir_Midea.h:32
IRMideaAC::begin
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Midea.cpp:105
IRMideaAC::toCommonFanSpeed
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivilant.
Definition: ir_Midea.cpp:336
IRMideaAC::setSleep
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Midea.cpp:238
IRMideaAC::on
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Midea.cpp:133
IRMideaAC::setUseCelsius
void setUseCelsius(const bool celsius)
Set the A/C unit to use Celsius natively.
Definition: ir_Midea.cpp:158
kMideaMinRepeat
const uint16_t kMideaMinRepeat
Definition: IRremoteESP8266.h:923
IRMideaAC::setTemp
void setTemp(const uint8_t temp, const bool useCelsius=false)
Set the temperature.
Definition: ir_Midea.cpp:169
IRMideaAC::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Midea.h:84
kMideaACTempOffset
const uint8_t kMideaACTempOffset
Definition: ir_Midea.h:30
kMideaACFanSize
const uint8_t kMideaACFanSize
Definition: ir_Midea.h:44
stdAc::fanspeed_t
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
IRMideaAC::getFan
uint8_t getFan(void)
Get the current fan speed setting.
Definition: ir_Midea.cpp:210
IRMideaAC::_SwingVToggle
bool _SwingVToggle
Definition: ir_Midea.h:123
kMideaACAuto
const uint8_t kMideaACAuto
Definition: ir_Midea.h:40
IRMideaAC::checksum
void checksum(void)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Midea.cpp:288
IRMideaAC::IRMideaAC
IRMideaAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Midea.cpp:93
kMideaACFan
const uint8_t kMideaACFan
Definition: ir_Midea.h:42
IRMideaAC::send
void send(const uint16_t repeat=kMideaMinRepeat)
Send the current internal state as an IR message.
Definition: ir_Midea.cpp:110
kMideaACModeOffset
const uint8_t kMideaACModeOffset
Definition: ir_Midea.h:37
IRMideaAC::isSwingVToggle
bool isSwingVToggle(void)
Is the current state a vertical swing toggle message?
Definition: ir_Midea.cpp:254
IRMideaAC::getSleep
bool getSleep(void)
Get the Sleep setting of the A/C.
Definition: ir_Midea.cpp:244
IRsend.h
kMideaACMaxTempF
const uint8_t kMideaACMaxTempF
Definition: ir_Midea.h:33
kMideaACCelsiusOffset
const uint8_t kMideaACCelsiusOffset
Definition: ir_Midea.h:36
IRsend
Class for sending all basic IR protocols.
Definition: IRsend.h:170
IRsend::calibrate
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
IRMideaAC::setSwingVToggle
void setSwingVToggle(const bool on)
Set the A/C to toggle the vertical swing toggle for the next send.
Definition: ir_Midea.cpp:250
String
std::string String
Definition: IRremoteESP8266.h:1093
IRMideaAC::getSwingVToggle
bool getSwingVToggle(void)
Definition: ir_Midea.cpp:260
IRMideaAC::off
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Midea.cpp:136
IRremoteESP8266.h
kMideaACHeat
const uint8_t kMideaACHeat
Definition: ir_Midea.h:41
IRMideaAC::getPower
bool getPower(void)
Get the value of the current power setting.
Definition: ir_Midea.cpp:146
IRMideaAC::getMode
uint8_t getMode(void)
Get the operating mode setting of the A/C.
Definition: ir_Midea.cpp:216
IRMideaAC::getUseCelsius
bool getUseCelsius(void)
Is the device currently using Celsius or the Fahrenheit temp scale?
Definition: ir_Midea.cpp:152
IRMideaAC::getTemp
uint8_t getTemp(const bool useCelsius=false)
Get the current temperature setting.
Definition: ir_Midea.cpp:190
IRMideaAC::toCommonMode
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivilant.
Definition: ir_Midea.cpp:323
kMideaACFanAuto
const uint8_t kMideaACFanAuto
Definition: ir_Midea.h:45
kMideaACToggleSwingV
const uint64_t kMideaACToggleSwingV
Definition: ir_Midea.h:51
IRMideaAC::_irsend
IRsend _irsend
Instance of the IR send class.
Definition: ir_Midea.h:116
IRMideaAC
Class for handling detailed Midea A/C messages.
Definition: ir_Midea.h:73
IRMideaAC::setRaw
void setRaw(const uint64_t newState)
Set the internal state from a valid code for this protocol.
Definition: ir_Midea.cpp:130
IRMideaAC::setMode
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Midea.cpp:222
IRMideaAC::calcChecksum
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition: ir_Midea.cpp:268
kMideaACTempSize
const uint8_t kMideaACTempSize
Definition: ir_Midea.h:31
IRMideaAC::convertFan
uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Midea.cpp:309
kMideaACSleepOffset
const uint8_t kMideaACSleepOffset
Definition: ir_Midea.h:49
kMideaACFanMed
const uint8_t kMideaACFanMed
Definition: ir_Midea.h:47
IRMideaAC::getRaw
uint64_t getRaw(void)
Get a copy of the internal state/code for this protocol.
Definition: ir_Midea.cpp:123
kMideaACMinTempC
const uint8_t kMideaACMinTempC
Definition: ir_Midea.h:34
IRMideaAC::convertMode
uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Midea.cpp:296
IRMideaAC::remote_state
uint64_t remote_state
The state of the IR remote in IR code form.
Definition: ir_Midea.h:122
kMideaACPowerOffset
const uint8_t kMideaACPowerOffset
Definition: ir_Midea.h:50
kMideaACFanHigh
const uint8_t kMideaACFanHigh
Definition: ir_Midea.h:48
kMideaACMaxTempC
const uint8_t kMideaACMaxTempC
Definition: ir_Midea.h:35
IRMideaAC::toCommon
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL)
Convert the current internal state into its stdAc::state_t equivilant.
Definition: ir_Midea.cpp:348
kMideaACDry
const uint8_t kMideaACDry
Definition: ir_Midea.h:39
IRMideaAC::toString
String toString(void)
Convert the current internal state into a human readable string.
Definition: ir_Midea.cpp:384
IRMideaAC::validChecksum
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition: ir_Midea.cpp:283
kMideaACFanOffset
const uint8_t kMideaACFanOffset
Definition: ir_Midea.h:43
kMideaACCool
const uint8_t kMideaACCool
Definition: ir_Midea.h:38
IRMideaAC::setPower
void setPower(const bool on)
Change the power setting.
Definition: ir_Midea.cpp:140
IRMideaAC::stateReset
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Midea.cpp:98
stdAc::state_t
Structure to hold a common A/C state.
Definition: IRsend.h:97
kMideaACFanLow
const uint8_t kMideaACFanLow
Definition: ir_Midea.h:46
IRMideaAC::setFan
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Midea.cpp:203
stdAc::opmode_t
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46