IRremoteESP8266
ir_Gree.h
Go to the documentation of this file.
1 // Copyright 2016 David Conran
2 
6 
7 // Supports:
8 // Brand: Ultimate, Model: Heat Pump
9 // Brand: EKOKAI, Model: A/C
10 // Brand: RusClimate, Model: EACS/I-09HAR_X/N3 A/C
11 // Brand: RusClimate, Model: YAW1F remote
12 // Brand: Green, Model: YBOFB remote
13 // Brand: Green, Model: YBOFB2 remote
14 // Brand: Gree, Model: YAA1FBF remote
15 // Brand: Gree, Model: YB1F2F remote
16 
17 #ifndef IR_GREE_H_
18 #define IR_GREE_H_
19 
20 #define __STDC_LIMIT_MACROS
21 #include <stdint.h>
22 #ifndef UNIT_TEST
23 #include <Arduino.h>
24 #endif
25 #include "IRremoteESP8266.h"
26 #include "IRsend.h"
27 #ifdef UNIT_TEST
28 #include "IRsend_test.h"
29 #endif
30 
31 // Constants
32 
33 const uint8_t kGreeAuto = 0;
34 const uint8_t kGreeCool = 1;
35 const uint8_t kGreeDry = 2;
36 const uint8_t kGreeFan = 3;
37 const uint8_t kGreeHeat = 4;
38 
39 // Byte[0]
40 const uint8_t kGreePower1Offset = 3;
41 const uint8_t kGreeFanOffset = 4;
42 const uint8_t kGreeFanSize = 2; // Bits
43 const uint8_t kGreeFanAuto = 0;
44 const uint8_t kGreeFanMin = 1;
45 const uint8_t kGreeFanMed = 2;
46 const uint8_t kGreeFanMax = 3;
47 const uint8_t kGreeSwingAutoOffset = 6;
48 const uint8_t kGreeSleepOffset = 7;
49 // Byte[1]
50 const uint8_t kGreeTempOffset = 0;
51 const uint8_t kGreeTempSize = 4; // Mask 0b0000xxxx
52 const uint8_t kGreeMinTempC = 16; // Celsius
53 const uint8_t kGreeMaxTempC = 30; // Celsius
54 const uint8_t kGreeMinTempF = 61; // Fahrenheit
55 const uint8_t kGreeMaxTempF = 86; // Fahrenheit
56 const uint8_t kGreeTimerHalfHrOffset = 4; // Mask 0b000x0000
57 const uint8_t kGreeTimerTensHrOffset = 5;
58 const uint8_t kGreeTimerTensHrSize = 2; // Mask 0b0xx00000
59 const uint16_t kGreeTimerMax = 24 * 60;
60 const uint8_t kGreeTimerEnabledOffset = 7; // Mask 0bx0000000
61 // Byte[2]
62 const uint8_t kGreeTimerHoursOffset = 0;
63 const uint8_t kGreeTimerHoursSize = 4; // Bits
64 const uint8_t kGreeTurboOffset = 4;
65 const uint8_t kGreeLightOffset = 5;
66 // This might not be used. See #814
67 const uint8_t kGreePower2Offset = 6;
68 const uint8_t kGreeXfanOffset = 7;
69 // Byte[3]
70 const uint8_t kGreeTempExtraDegreeFOffset = 2; // Mask 0b00000x00
71 const uint8_t kGreeUseFahrenheitOffset = 3; // Mask 0b0000x000
72 // Byte[4]
73 const uint8_t kGreeSwingSize = 4; // Bits
74 const uint8_t kGreeSwingLastPos = 0b0000;
75 const uint8_t kGreeSwingAuto = 0b0001;
76 const uint8_t kGreeSwingUp = 0b0010;
77 const uint8_t kGreeSwingMiddleUp = 0b0011;
78 const uint8_t kGreeSwingMiddle = 0b0100;
79 const uint8_t kGreeSwingMiddleDown = 0b0101;
80 const uint8_t kGreeSwingDown = 0b0110;
81 const uint8_t kGreeSwingDownAuto = 0b0111;
82 const uint8_t kGreeSwingMiddleAuto = 0b1001;
83 const uint8_t kGreeSwingUpAuto = 0b1011;
84 // Byte[5]
85 const uint8_t kGreeWiFiOffset = 6; // Mask 0b0x000000
86 const uint8_t kGreeIFeelOffset = 2; // Mask 0b00000x00
87 const uint8_t kGreeDisplayTempOffset = 0;
88 const uint8_t kGreeDisplayTempSize = 2; // Mask 0b000000xx
89 const uint8_t kGreeDisplayTempOff = 0b00; // 0
90 const uint8_t kGreeDisplayTempSet = 0b01; // 1
91 const uint8_t kGreeDisplayTempInside = 0b10; // 2
92 const uint8_t kGreeDisplayTempOutside = 0b11; // 3
93 
94 
95 // Legacy defines.
96 #define GREE_AUTO kGreeAuto
97 #define GREE_COOL kGreeCool
98 #define GREE_DRY kGreeDry
99 #define GREE_FAN kGreeFan
100 #define GREE_HEAT kGreeHeat
101 #define GREE_MIN_TEMP kGreeMinTempC
102 #define GREE_MAX_TEMP kGreeMaxTempC
103 #define GREE_FAN_MAX kGreeFanMax
104 #define GREE_SWING_LAST_POS kGreeSwingLastPos
105 #define GREE_SWING_AUTO kGreeSwingAuto
106 #define GREE_SWING_UP kGreeSwingUp
107 #define GREE_SWING_MIDDLE_UP kGreeSwingMiddleUp
108 #define GREE_SWING_MIDDLE kGreeSwingMiddle
109 #define GREE_SWING_MIDDLE_DOWN kGreeSwingMiddleDown
110 #define GREE_SWING_DOWN kGreeSwingDown
111 #define GREE_SWING_DOWN_AUTO kGreeSwingDownAuto
112 #define GREE_SWING_MIDDLE_AUTO kGreeSwingMiddleAuto
113 #define GREE_SWING_UP_AUTO kGreeSwingUpAuto
114 
115 // Classes
117 class IRGreeAC {
118  public:
119  explicit IRGreeAC(
120  const uint16_t pin,
122  const bool inverted = false, const bool use_modulation = true);
123  void stateReset(void);
124 #if SEND_GREE
125  void send(const uint16_t repeat = kGreeDefaultRepeat);
130  int8_t calibrate(void) { return _irsend.calibrate(); }
131 #endif // SEND_GREE
132  void begin(void);
133  void on(void);
134  void off(void);
135  void setModel(const gree_ac_remote_model_t model);
137  void setPower(const bool on);
138  bool getPower(void);
139  void setTemp(const uint8_t temp, const bool fahrenheit = false);
140  uint8_t getTemp(void);
141  void setUseFahrenheit(const bool on);
142  bool getUseFahrenheit(void);
143  void setFan(const uint8_t speed);
144  uint8_t getFan(void);
145  void setMode(const uint8_t new_mode);
146  uint8_t getMode(void);
147  void setLight(const bool on);
148  bool getLight(void);
149  void setXFan(const bool on);
150  bool getXFan(void);
151  void setSleep(const bool on);
152  bool getSleep(void);
153  void setTurbo(const bool on);
154  bool getTurbo(void);
155  void setIFeel(const bool on);
156  bool getIFeel(void);
157  void setWiFi(const bool on);
158  bool getWiFi(void);
159  void setSwingVertical(const bool automatic, const uint8_t position);
160  bool getSwingVerticalAuto(void);
161  uint8_t getSwingVerticalPosition(void);
162  uint16_t getTimer(void);
163  void setTimer(const uint16_t minutes);
164  void setDisplayTempSource(const uint8_t mode);
165  uint8_t getDisplayTempSource(void);
166  uint8_t convertMode(const stdAc::opmode_t mode);
167  uint8_t convertFan(const stdAc::fanspeed_t speed);
168  uint8_t convertSwingV(const stdAc::swingv_t swingv);
169  static stdAc::opmode_t toCommonMode(const uint8_t mode);
170  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
171  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
172  stdAc::state_t toCommon(void);
173  uint8_t* getRaw(void);
174  void setRaw(const uint8_t new_code[]);
175  static bool validChecksum(const uint8_t state[],
176  const uint16_t length = kGreeStateLength);
177  String toString(void);
178 #ifndef UNIT_TEST
179 
180  private:
182 #else // UNIT_TEST
183  IRsendTest _irsend;
185 #endif // UNIT_TEST
189  void checksum(const uint16_t length = kGreeStateLength);
190  void fixup(void);
191  void setTimerEnabled(const bool on);
192  bool getTimerEnabled(void);
193 };
194 
195 #endif // IR_GREE_H_
IRGreeAC::setSwingVertical
void setSwingVertical(const bool automatic, const uint8_t position)
Set the Vertical Swing mode of the A/C.
Definition: ir_Gree.cpp:395
kGreeTimerTensHrSize
const uint8_t kGreeTimerTensHrSize
Definition: ir_Gree.h:58
kGreeStateLength
const uint16_t kGreeStateLength
Definition: IRremoteESP8266.h:883
IRGreeAC::getTemp
uint8_t getTemp(void)
Get the set temperature.
Definition: ir_Gree.cpp:269
kGreeIFeelOffset
const uint8_t kGreeIFeelOffset
Definition: ir_Gree.h:86
kGreeXfanOffset
const uint8_t kGreeXfanOffset
Definition: ir_Gree.h:68
IRGreeAC::getPower
bool getPower(void)
Get the value of the current power setting.
Definition: ir_Gree.cpp:220
kGreeSwingUp
const uint8_t kGreeSwingUp
Definition: ir_Gree.h:76
stdAc::swingv_t
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
IRGreeAC::validChecksum
static bool validChecksum(const uint8_t state[], const uint16_t length=kGreeStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Gree.cpp:181
IRGreeAC::toString
String toString(void)
Convert the current internal state into a human readable string.
Definition: ir_Gree.cpp:609
kGreeFanSize
const uint8_t kGreeFanSize
Definition: ir_Gree.h:42
IRGreeAC::off
void off(void)
Change the power setting to Off.
Definition: ir_Gree.cpp:205
IRGreeAC::getTimer
uint16_t getTimer(void)
Get the timer time value from the A/C.
Definition: ir_Gree.cpp:449
kGreeFan
const uint8_t kGreeFan
Definition: ir_Gree.h:36
IRGreeAC::setXFan
void setXFan(const bool on)
Set the XFan (Mould) setting of the A/C.
Definition: ir_Gree.cpp:358
IRGreeAC::toCommonMode
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivilant.
Definition: ir_Gree.cpp:542
stdAc::fanspeed_t
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
IRGreeAC::convertMode
uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Gree.cpp:501
kGreeDry
const uint8_t kGreeDry
Definition: ir_Gree.h:35
kGreeFanMax
const uint8_t kGreeFanMax
Definition: ir_Gree.h:46
kGreeSleepOffset
const uint8_t kGreeSleepOffset
Definition: ir_Gree.h:48
kGreeMaxTempF
const uint8_t kGreeMaxTempF
Definition: ir_Gree.h:55
IRGreeAC::setMode
void setMode(const uint8_t new_mode)
Set the operating mode of the A/C.
Definition: ir_Gree.cpp:298
IRGreeAC::getModel
gree_ac_remote_model_t getModel(void)
Get/Detect the model of the A/C.
Definition: ir_Gree.cpp:199
IRGreeAC::toCommon
stdAc::state_t toCommon(void)
Convert the current internal state into its stdAc::state_t equivilant.
Definition: ir_Gree.cpp:580
gree_ac_remote_model_t
gree_ac_remote_model_t
Gree A/C model numbers.
Definition: IRsend.h:129
IRGreeAC::send
void send(const uint16_t repeat=kGreeDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Gree.cpp:143
kGreeSwingUpAuto
const uint8_t kGreeSwingUpAuto
Definition: ir_Gree.h:83
kGreeDisplayTempOutside
const uint8_t kGreeDisplayTempOutside
Definition: ir_Gree.h:92
IRGreeAC::fixup
void fixup(void)
Fix up the internal state so it is correct.
Definition: ir_Gree.cpp:132
kGreeSwingDownAuto
const uint8_t kGreeSwingDownAuto
Definition: ir_Gree.h:81
kGreeSwingSize
const uint8_t kGreeSwingSize
Definition: ir_Gree.h:73
IRsend.h
IRGreeAC::setPower
void setPower(const bool on)
Change the power setting.
Definition: ir_Gree.cpp:210
IRGreeAC::getUseFahrenheit
bool getUseFahrenheit(void)
Get the default temperature units in use.
Definition: ir_Gree.cpp:234
kGreeTimerTensHrOffset
const uint8_t kGreeTimerTensHrOffset
Definition: ir_Gree.h:57
IRGreeAC::setTimerEnabled
void setTimerEnabled(const bool on)
Set the timer enable setting of the A/C.
Definition: ir_Gree.cpp:437
IRGreeAC::getRaw
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Gree.cpp:151
IRGreeAC::getSwingVerticalAuto
bool getSwingVerticalAuto(void)
Get the Vertical Swing Automatic mode setting of the A/C.
Definition: ir_Gree.cpp:425
IRGreeAC::getLight
bool getLight(void)
Get the Light (LED) setting of the A/C.
Definition: ir_Gree.cpp:328
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
kGreeSwingAutoOffset
const uint8_t kGreeSwingAutoOffset
Definition: ir_Gree.h:47
String
std::string String
Definition: IRremoteESP8266.h:1093
kGreeDisplayTempSet
const uint8_t kGreeDisplayTempSet
Definition: ir_Gree.h:90
kGreeTempOffset
const uint8_t kGreeTempOffset
Definition: ir_Gree.h:50
kGreeSwingMiddleDown
const uint8_t kGreeSwingMiddleDown
Definition: ir_Gree.h:79
IRGreeAC::IRGreeAC
IRGreeAC(const uint16_t pin, const gree_ac_remote_model_t model=gree_ac_remote_model_t::YAW1F, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Gree.cpp:112
kGreeFanMed
const uint8_t kGreeFanMed
Definition: ir_Gree.h:45
IRGreeAC::getSleep
bool getSleep(void)
Get the Sleep setting of the A/C.
Definition: ir_Gree.cpp:376
IRremoteESP8266.h
kGreeSwingMiddleAuto
const uint8_t kGreeSwingMiddleAuto
Definition: ir_Gree.h:82
IRGreeAC::convertFan
uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Gree.cpp:514
kGreeHeat
const uint8_t kGreeHeat
Definition: ir_Gree.h:37
IRGreeAC::setSleep
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Gree.cpp:370
IRGreeAC::begin
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Gree.cpp:138
kGreeTimerMax
const uint16_t kGreeTimerMax
Definition: ir_Gree.h:59
YAW1F
@ YAW1F
Definition: IRsend.h:130
kGreeMaxTempC
const uint8_t kGreeMaxTempC
Definition: ir_Gree.h:53
IRGreeAC::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Gree.h:130
IRGreeAC::getSwingVerticalPosition
uint8_t getSwingVerticalPosition(void)
Get the Vertical Swing position setting of the A/C.
Definition: ir_Gree.cpp:431
IRGreeAC::getFan
uint8_t getFan(void)
Get the current fan speed setting.
Definition: ir_Gree.cpp:292
kGreeMinTempF
const uint8_t kGreeMinTempF
Definition: ir_Gree.h:54
kGreeTurboOffset
const uint8_t kGreeTurboOffset
Definition: ir_Gree.h:64
kGreeDisplayTempOff
const uint8_t kGreeDisplayTempOff
Definition: ir_Gree.h:89
IRGreeAC::setFan
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Gree.cpp:283
IRGreeAC::setUseFahrenheit
void setUseFahrenheit(const bool on)
Set the default temperature units to use.
Definition: ir_Gree.cpp:228
IRGreeAC::toCommonFanSpeed
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivilant.
Definition: ir_Gree.cpp:555
kGreeTimerHoursOffset
const uint8_t kGreeTimerHoursOffset
Definition: ir_Gree.h:62
kGreePower1Offset
const uint8_t kGreePower1Offset
Definition: ir_Gree.h:40
kGreeTimerHalfHrOffset
const uint8_t kGreeTimerHalfHrOffset
Definition: ir_Gree.h:56
IRGreeAC::getIFeel
bool getIFeel(void)
Get the IFeel setting of the A/C.
Definition: ir_Gree.cpp:340
kGreeTimerHoursSize
const uint8_t kGreeTimerHoursSize
Definition: ir_Gree.h:63
IRGreeAC::checksum
void checksum(const uint16_t length=kGreeStateLength)
Calculate and set the checksum values for the internal state.
Definition: ir_Gree.cpp:171
IRGreeAC::getTimerEnabled
bool getTimerEnabled(void)
Get the timer enabled setting of the A/C.
Definition: ir_Gree.cpp:443
kGreeDisplayTempSize
const uint8_t kGreeDisplayTempSize
Definition: ir_Gree.h:88
IRGreeAC::setTimer
void setTimer(const uint16_t minutes)
Set the A/C's timer to turn off in X many minutes.
Definition: ir_Gree.cpp:461
IRGreeAC::setModel
void setModel(const gree_ac_remote_model_t model)
Set the model of the A/C to emulate.
Definition: ir_Gree.cpp:189
IRGreeAC::getTurbo
bool getTurbo(void)
Get the Turbo setting of the A/C.
Definition: ir_Gree.cpp:388
kGreeFanOffset
const uint8_t kGreeFanOffset
Definition: ir_Gree.h:41
kGreeAuto
const uint8_t kGreeAuto
Definition: ir_Gree.h:33
IRGreeAC::setWiFi
void setWiFi(const bool on)
Set the Wifi (enabled) setting of the A/C.
Definition: ir_Gree.cpp:346
IRGreeAC::convertSwingV
uint8_t convertSwingV(const stdAc::swingv_t swingv)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Gree.cpp:528
IRGreeAC::setIFeel
void setIFeel(const bool on)
Set the IFeel setting of the A/C.
Definition: ir_Gree.cpp:334
kGreeSwingMiddleUp
const uint8_t kGreeSwingMiddleUp
Definition: ir_Gree.h:77
IRGreeAC::remote_state
uint8_t remote_state[kGreeStateLength]
The state in native IR code form.
Definition: ir_Gree.h:187
IRGreeAC::getDisplayTempSource
uint8_t getDisplayTempSource(void)
Get the temperature display mode. i.e. Internal, External temperature sensing.
Definition: ir_Gree.cpp:493
kGreeFanMin
const uint8_t kGreeFanMin
Definition: ir_Gree.h:44
kGreeCool
const uint8_t kGreeCool
Definition: ir_Gree.h:34
kGreeSwingMiddle
const uint8_t kGreeSwingMiddle
Definition: ir_Gree.h:78
IRGreeAC::getXFan
bool getXFan(void)
Get the XFan (Mould) setting of the A/C.
Definition: ir_Gree.cpp:364
kGreeSwingLastPos
const uint8_t kGreeSwingLastPos
Definition: ir_Gree.h:74
IRGreeAC::setTemp
void setTemp(const uint8_t temp, const bool fahrenheit=false)
Set the temp. in degrees.
Definition: ir_Gree.cpp:244
IRGreeAC::_model
gree_ac_remote_model_t _model
Definition: ir_Gree.h:188
kGreeWiFiOffset
const uint8_t kGreeWiFiOffset
Definition: ir_Gree.h:85
kGreeTimerEnabledOffset
const uint8_t kGreeTimerEnabledOffset
Definition: ir_Gree.h:60
IRGreeAC::setTurbo
void setTurbo(const bool on)
Set the Turbo setting of the A/C.
Definition: ir_Gree.cpp:382
kGreeSwingDown
const uint8_t kGreeSwingDown
Definition: ir_Gree.h:80
IRGreeAC::toCommonSwingV
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Gree.cpp:567
kGreeFanAuto
const uint8_t kGreeFanAuto
Definition: ir_Gree.h:43
kGreeUseFahrenheitOffset
const uint8_t kGreeUseFahrenheitOffset
Definition: ir_Gree.h:71
kGreeMinTempC
const uint8_t kGreeMinTempC
Definition: ir_Gree.h:52
kGreeTempSize
const uint8_t kGreeTempSize
Definition: ir_Gree.h:51
IRGreeAC::setDisplayTempSource
void setDisplayTempSource(const uint8_t mode)
Set temperature display mode. i.e. Internal, External temperature sensing.
Definition: ir_Gree.cpp:486
kGreeSwingAuto
const uint8_t kGreeSwingAuto
Definition: ir_Gree.h:75
IRGreeAC
Class for handling detailed Gree A/C messages.
Definition: ir_Gree.h:117
IRGreeAC::getMode
uint8_t getMode(void)
Get the operating mode setting of the A/C.
Definition: ir_Gree.cpp:316
kGreeTempExtraDegreeFOffset
const uint8_t kGreeTempExtraDegreeFOffset
Definition: ir_Gree.h:70
kGreeDisplayTempInside
const uint8_t kGreeDisplayTempInside
Definition: ir_Gree.h:91
IRGreeAC::stateReset
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Gree.cpp:120
kGreePower2Offset
const uint8_t kGreePower2Offset
Definition: ir_Gree.h:67
kGreeLightOffset
const uint8_t kGreeLightOffset
Definition: ir_Gree.h:65
IRGreeAC::getWiFi
bool getWiFi(void)
Get the Wifi (enabled) setting of the A/C.
Definition: ir_Gree.cpp:352
stdAc::state_t
Structure to hold a common A/C state.
Definition: IRsend.h:97
IRGreeAC::setRaw
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Gree.cpp:158
IRGreeAC::_irsend
IRsend _irsend
Instance of the IR send class.
Definition: ir_Gree.h:181
kGreeDisplayTempOffset
const uint8_t kGreeDisplayTempOffset
Definition: ir_Gree.h:87
IRGreeAC::on
void on(void)
Change the power setting to On.
Definition: ir_Gree.cpp:202
IRGreeAC::setLight
void setLight(const bool on)
Set the Light (LED) setting of the A/C.
Definition: ir_Gree.cpp:322
kGreeDefaultRepeat
const uint16_t kGreeDefaultRepeat
Definition: IRremoteESP8266.h:885
stdAc::opmode_t
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46