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 // Brand: Danby, Model: DAC080BGUWDB (MIDEA)
15 // Brand: Danby, Model: DAC100BGUWDB (MIDEA)
16 // Brand: Danby, Model: DAC120BGUWDB (MIDEA)
17 // Brand: Danby, Model: R09C/BCGE remote (MIDEA)
18 
19 #ifndef IR_MIDEA_H_
20 #define IR_MIDEA_H_
21 
22 #define __STDC_LIMIT_MACROS
23 #include <stdint.h>
24 #ifdef ARDUINO
25 #include <Arduino.h>
26 #endif
27 #include "IRremoteESP8266.h"
28 #include "IRsend.h"
29 #ifdef UNIT_TEST
30 #include "IRsend_test.h"
31 #endif
32 
33 #if DANBY_DAC
35 #endif
36 
37 // Constants
38 const uint8_t kMideaACTempOffset = 24;
39 const uint8_t kMideaACTempSize = 5; // Bits
40 const uint8_t kMideaACMinTempF = 62; // Fahrenheit
41 const uint8_t kMideaACMaxTempF = 86; // Fahrenheit
42 const uint8_t kMideaACMinTempC = 17; // Celsius
43 const uint8_t kMideaACMaxTempC = 30; // Celsius
44 const uint8_t kMideaACCelsiusOffset = 29;
45 const uint8_t kMideaACModeOffset = 32;
46 const uint8_t kMideaACCool = 0; // 0b000
47 const uint8_t kMideaACDry = 1; // 0b001
48 const uint8_t kMideaACAuto = 2; // 0b010
49 const uint8_t kMideaACHeat = 3; // 0b011
50 const uint8_t kMideaACFan = 4; // 0b100
51 const uint8_t kMideaACFanOffset = 35;
52 const uint8_t kMideaACFanSize = 2; // Bits
53 const uint8_t kMideaACFanAuto = 0; // 0b00
54 const uint8_t kMideaACFanLow = 1; // 0b01
55 const uint8_t kMideaACFanMed = 2; // 0b10
56 const uint8_t kMideaACFanHigh = 3; // 0b11
57 const uint8_t kMideaACSleepOffset = 38;
58 const uint8_t kMideaACPowerOffset = 39;
59 const uint64_t kMideaACToggleSwingV = 0x0000A201FFFFFF7C;
60 // For Danby DAC unit, the Ionizer toggle is the same as ToggleSwingV
61 // const uint64_t kMideaACToggleIonizer = 0x0000A201FFFFFF7C;
62 const uint64_t kMideaACToggleEcono = 0x0000A202FFFFFF7E;
63 
64 // Legacy defines. (Deprecated)
65 #define MIDEA_AC_COOL kMideaACCool
66 #define MIDEA_AC_DRY kMideaACDry
67 #define MIDEA_AC_AUTO kMideaACAuto
68 #define MIDEA_AC_HEAT kMideaACHeat
69 #define MIDEA_AC_FAN kMideaACFan
70 #define MIDEA_AC_FAN_AUTO kMideaACFanAuto
71 #define MIDEA_AC_FAN_LOW kMideaACFanLow
72 #define MIDEA_AC_FAN_MED kMideaACFanMed
73 #define MIDEA_AC_FAN_HI kMideaACFanHigh
74 #define MIDEA_AC_POWER kMideaACPower
75 #define MIDEA_AC_SLEEP kMideaACSleep
76 #define MIDEA_AC_MIN_TEMP_F kMideaACMinTempF
77 #define MIDEA_AC_MAX_TEMP_F kMideaACMaxTempF
78 #define MIDEA_AC_MIN_TEMP_C kMideaACMinTempC
79 #define MIDEA_AC_MAX_TEMP_C kMideaACMaxTempC
80 
81 // Classes
84 class IRMideaAC {
85  public:
86  explicit IRMideaAC(const uint16_t pin, const bool inverted = false,
87  const bool use_modulation = true);
88  void stateReset(void);
89 #if SEND_MIDEA
90  void send(const uint16_t repeat = kMideaMinRepeat);
95  int8_t calibrate(void) { return _irsend.calibrate(); }
96 #endif // SEND_MIDEA
97  void begin(void);
98  void on(void);
99  void off(void);
100  void setPower(const bool on);
101  bool getPower(void);
102  bool getUseCelsius(void);
103  void setUseCelsius(const bool celsius);
104  void setTemp(const uint8_t temp, const bool useCelsius = false);
105  uint8_t getTemp(const bool useCelsius = false);
106  void setFan(const uint8_t fan);
107  uint8_t getFan(void);
108  void setMode(const uint8_t mode);
109  uint8_t getMode(void);
110  void setRaw(const uint64_t newState);
111  uint64_t getRaw(void);
112  static bool validChecksum(const uint64_t state);
113  void setSleep(const bool on);
114  bool getSleep(void);
115  bool isSwingVToggle(void);
116  void setSwingVToggle(const bool on);
117  bool getSwingVToggle(void);
118  bool isEconoToggle(void);
119  void setEconoToggle(const bool on);
120  bool getEconoToggle(void);
121  uint8_t convertMode(const stdAc::opmode_t mode);
122  uint8_t convertFan(const stdAc::fanspeed_t speed);
123  static stdAc::opmode_t toCommonMode(const uint8_t mode);
124  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
125  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL);
126  String toString(void);
127 #ifndef UNIT_TEST
128 
129  private:
131 #else // UNIT_TEST
132  IRsendTest _irsend;
134 #endif // UNIT_TEST
136  uint64_t remote_state;
139  void checksum(void);
140  static uint8_t calcChecksum(const uint64_t state);
141 };
142 
143 #endif // IR_MIDEA_H_
kMideaACMinTempF
const uint8_t kMideaACMinTempF
Definition: ir_Midea.h:40
IRMideaAC::begin
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Midea.cpp:108
IRMideaAC::toCommonFanSpeed
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivilant.
Definition: ir_Midea.cpp:362
IRMideaAC::setSleep
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Midea.cpp:244
IRMideaAC::on
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Midea.cpp:139
IRMideaAC::setUseCelsius
void setUseCelsius(const bool celsius)
Set the A/C unit to use Celsius natively.
Definition: ir_Midea.cpp:164
kMideaMinRepeat
const uint16_t kMideaMinRepeat
Definition: IRremoteESP8266.h:931
IRMideaAC::_EconoToggle
bool _EconoToggle
Definition: ir_Midea.h:138
IRMideaAC::setTemp
void setTemp(const uint8_t temp, const bool useCelsius=false)
Set the temperature.
Definition: ir_Midea.cpp:175
IRMideaAC::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Midea.h:95
kMideaACTempOffset
const uint8_t kMideaACTempOffset
Definition: ir_Midea.h:38
IRMideaAC::setEconoToggle
void setEconoToggle(const bool on)
Set the A/C to toggle the Econo (energy saver) mode for the next send.
Definition: ir_Midea.cpp:276
kMideaACFanSize
const uint8_t kMideaACFanSize
Definition: ir_Midea.h:52
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:216
IRMideaAC::_SwingVToggle
bool _SwingVToggle
Definition: ir_Midea.h:137
kMideaACAuto
const uint8_t kMideaACAuto
Definition: ir_Midea.h:48
IRMideaAC::checksum
void checksum(void)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Midea.cpp:314
IRMideaAC::IRMideaAC
IRMideaAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Midea.cpp:95
kMideaACFan
const uint8_t kMideaACFan
Definition: ir_Midea.h:50
IRMideaAC::send
void send(const uint16_t repeat=kMideaMinRepeat)
Send the current internal state as an IR message.
Definition: ir_Midea.cpp:113
kMideaACModeOffset
const uint8_t kMideaACModeOffset
Definition: ir_Midea.h:45
IRMideaAC::isSwingVToggle
bool isSwingVToggle(void)
Is the current state a vertical swing toggle message?
Definition: ir_Midea.cpp:262
IRMideaAC::getSleep
bool getSleep(void)
Get the Sleep setting of the A/C.
Definition: ir_Midea.cpp:250
IRsend.h
kMideaACMaxTempF
const uint8_t kMideaACMaxTempF
Definition: ir_Midea.h:41
kMideaACCelsiusOffset
const uint8_t kMideaACCelsiusOffset
Definition: ir_Midea.h:44
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:257
String
std::string String
Definition: IRremoteESP8266.h:1107
kSwingVToggleStr
kSwingVToggleStr
Definition: ir_Midea.h:34
IRMideaAC::getSwingVToggle
bool getSwingVToggle(void)
Definition: ir_Midea.cpp:269
IRMideaAC::off
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Midea.cpp:142
IRremoteESP8266.h
kMideaACHeat
const uint8_t kMideaACHeat
Definition: ir_Midea.h:49
IRMideaAC::getPower
bool getPower(void)
Get the value of the current power setting.
Definition: ir_Midea.cpp:152
IRMideaAC::getMode
uint8_t getMode(void)
Get the operating mode setting of the A/C.
Definition: ir_Midea.cpp:222
IRMideaAC::getUseCelsius
bool getUseCelsius(void)
Is the device currently using Celsius or the Fahrenheit temp scale?
Definition: ir_Midea.cpp:158
IRMideaAC::getTemp
uint8_t getTemp(const bool useCelsius=false)
Get the current temperature setting.
Definition: ir_Midea.cpp:196
IRMideaAC::toCommonMode
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivilant.
Definition: ir_Midea.cpp:349
kMideaACFanAuto
const uint8_t kMideaACFanAuto
Definition: ir_Midea.h:53
kMideaACToggleSwingV
const uint64_t kMideaACToggleSwingV
Definition: ir_Midea.h:59
IRMideaAC::_irsend
IRsend _irsend
Instance of the IR send class.
Definition: ir_Midea.h:130
IRMideaAC
Class for handling detailed Midea A/C messages.
Definition: ir_Midea.h:84
IRMideaAC::setRaw
void setRaw(const uint64_t newState)
Set the internal state from a valid code for this protocol.
Definition: ir_Midea.cpp:136
IRMideaAC::setMode
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Midea.cpp:228
IRMideaAC::calcChecksum
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition: ir_Midea.cpp:294
kIonStr
const PROGMEM char * kIonStr
"Ion"
Definition: IRtext.cpp:55
kMideaACTempSize
const uint8_t kMideaACTempSize
Definition: ir_Midea.h:39
kMideaACToggleEcono
const uint64_t kMideaACToggleEcono
Definition: ir_Midea.h:62
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:335
kMideaACSleepOffset
const uint8_t kMideaACSleepOffset
Definition: ir_Midea.h:57
kMideaACFanMed
const uint8_t kMideaACFanMed
Definition: ir_Midea.h:55
IRMideaAC::getRaw
uint64_t getRaw(void)
Get a copy of the internal state/code for this protocol.
Definition: ir_Midea.cpp:129
kMideaACMinTempC
const uint8_t kMideaACMinTempC
Definition: ir_Midea.h:42
IRMideaAC::convertMode
uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Midea.cpp:322
IRMideaAC::remote_state
uint64_t remote_state
The state of the IR remote in IR code form.
Definition: ir_Midea.h:136
kMideaACPowerOffset
const uint8_t kMideaACPowerOffset
Definition: ir_Midea.h:58
IRMideaAC::isEconoToggle
bool isEconoToggle(void)
Is the current state an Econo (energy saver) toggle message?
Definition: ir_Midea.cpp:280
kMideaACFanHigh
const uint8_t kMideaACFanHigh
Definition: ir_Midea.h:56
IRMideaAC::getEconoToggle
bool getEconoToggle(void)
Definition: ir_Midea.cpp:286
kMideaACMaxTempC
const uint8_t kMideaACMaxTempC
Definition: ir_Midea.h:43
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:374
kMideaACDry
const uint8_t kMideaACDry
Definition: ir_Midea.h:47
IRMideaAC::toString
String toString(void)
Convert the current internal state into a human readable string.
Definition: ir_Midea.cpp:411
IRMideaAC::validChecksum
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition: ir_Midea.cpp:309
kMideaACFanOffset
const uint8_t kMideaACFanOffset
Definition: ir_Midea.h:51
kMideaACCool
const uint8_t kMideaACCool
Definition: ir_Midea.h:46
IRMideaAC::setPower
void setPower(const bool on)
Change the power setting.
Definition: ir_Midea.cpp:146
IRMideaAC::stateReset
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Midea.cpp:100
stdAc::state_t
Structure to hold a common A/C state.
Definition: IRsend.h:97
kMideaACFanLow
const uint8_t kMideaACFanLow
Definition: ir_Midea.h:54
IRMideaAC::setFan
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Midea.cpp:209
stdAc::opmode_t
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46