IRremoteESP8266
ir_Haier.h
Go to the documentation of this file.
1 // Copyright 2018 crankyoldgit
11 
12 // Supports:
13 // Brand: Haier, Model: HSU07-HEA03 remote (HAIER_AC)
14 // Brand: Haier, Model: YR-W02 remote (HAIER_AC_YRW02)
15 // Brand: Haier, Model: HSU-09HMC203 A/C (HAIER_AC_YRW02)
16 // Brand: Mabe, Model: MMI18HDBWCA6MI8 A/C (HAIER_AC176)
17 // Brand: Mabe, Model: V12843 HJ200223 remote (HAIER_AC176)
18 
19 #ifndef IR_HAIER_H_
20 #define IR_HAIER_H_
21 
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 
35  struct {
36  // Byte 0
37  uint8_t Prefix;
38  // Byte 1
39  uint8_t Command:4;
40  uint8_t Temp :4;
41  // Byte 2
42  uint8_t CurrHours:5;
43  uint8_t unknown :1; // value=1
44  uint8_t Swing :2;
45  // Byte 3
46  uint8_t CurrMins:6;
47  uint8_t OffTimer:1;
48  uint8_t OnTimer :1;
49  // Byte 4
50  uint8_t OffHours:5;
51  uint8_t Health :1;
52  uint8_t :0;
53  // Byte 5
54  uint8_t OffMins:6;
55  uint8_t Fan :2;
56  // Byte 6
57  uint8_t OnHours:5;
58  uint8_t Mode :3;
59  // Byte 7
60  uint8_t OnMins:6;
61  uint8_t Sleep :1;
62  uint8_t :0;
63  // Byte 8
64  uint8_t Sum;
65  };
66 };
67 
68 // Constants
69 
70 const uint8_t kHaierAcPrefix = 0b10100101;
71 
72 const uint8_t kHaierAcMinTemp = 16;
73 const uint8_t kHaierAcDefTemp = 25;
74 const uint8_t kHaierAcMaxTemp = 30;
75 const uint8_t kHaierAcCmdOff = 0b0000;
76 const uint8_t kHaierAcCmdOn = 0b0001;
77 const uint8_t kHaierAcCmdMode = 0b0010;
78 const uint8_t kHaierAcCmdFan = 0b0011;
79 const uint8_t kHaierAcCmdTempUp = 0b0110;
80 const uint8_t kHaierAcCmdTempDown = 0b0111;
81 const uint8_t kHaierAcCmdSleep = 0b1000;
82 const uint8_t kHaierAcCmdTimerSet = 0b1001;
83 const uint8_t kHaierAcCmdTimerCancel = 0b1010;
84 const uint8_t kHaierAcCmdHealth = 0b1100;
85 const uint8_t kHaierAcCmdSwing = 0b1101;
86 
87 const uint8_t kHaierAcSwingOff = 0b00;
88 const uint8_t kHaierAcSwingUp = 0b01;
89 const uint8_t kHaierAcSwingDown = 0b10;
90 const uint8_t kHaierAcSwingChg = 0b11;
91 
92 const uint8_t kHaierAcAuto = 0;
93 const uint8_t kHaierAcCool = 1;
94 const uint8_t kHaierAcDry = 2;
95 const uint8_t kHaierAcHeat = 3;
96 const uint8_t kHaierAcFan = 4;
97 
98 const uint8_t kHaierAcFanAuto = 0;
99 const uint8_t kHaierAcFanLow = 1;
100 const uint8_t kHaierAcFanMed = 2;
101 const uint8_t kHaierAcFanHigh = 3;
102 
103 const uint16_t kHaierAcMaxTime = (23 * 60) + 59;
104 
105 const uint8_t kHaierAcSleepBit = 0b01000000;
106 
107 // Legacy Haier AC defines.
108 #define HAIER_AC_MIN_TEMP kHaierAcMinTemp
109 #define HAIER_AC_DEF_TEMP kHaierAcDefTemp
110 #define HAIER_AC_MAX_TEMP kHaierAcMaxTemp
111 #define HAIER_AC_CMD_OFF kHaierAcCmdOff
112 #define HAIER_AC_CMD_ON kHaierAcCmdOn
113 #define HAIER_AC_CMD_MODE kHaierAcCmdMode
114 #define HAIER_AC_CMD_FAN kHaierAcCmdFan
115 #define HAIER_AC_CMD_TEMP_UP kHaierAcCmdTempUp
116 #define HAIER_AC_CMD_TEMP_DOWN kHaierAcCmdTempDown
117 #define HAIER_AC_CMD_SLEEP kHaierAcCmdSleep
118 #define HAIER_AC_CMD_TIMER_SET kHaierAcCmdTimerSet
119 #define HAIER_AC_CMD_TIMER_CANCEL kHaierAcCmdTimerCancel
120 #define HAIER_AC_CMD_HEALTH kHaierAcCmdHealth
121 #define HAIER_AC_CMD_SWING kHaierAcCmdSwing
122 #define HAIER_AC_SWING_OFF kHaierAcSwingOff
123 #define HAIER_AC_SWING_UP kHaierAcSwingUp
124 #define HAIER_AC_SWING_DOWN kHaierAcSwingDown
125 #define HAIER_AC_SWING_CHG kHaierAcSwingChg
126 #define HAIER_AC_AUTO kHaierAcAuto
127 #define HAIER_AC_COOL kHaierAcCool
128 #define HAIER_AC_DRY kHaierAcDry
129 #define HAIER_AC_HEAT kHaierAcHeat
130 #define HAIER_AC_FAN kHaierAcFan
131 #define HAIER_AC_FAN_AUTO kHaierAcFanAuto
132 #define HAIER_AC_FAN_LOW kHaierAcFanLow
133 #define HAIER_AC_FAN_MED kHaierAcFanMed
134 #define HAIER_AC_FAN_HIGH kHaierAcFanHigh
135 
139  struct {
140  // Byte 0
141  uint8_t Prefix;
142  // Byte 1
143  uint8_t Swing:4;
144  uint8_t Temp :4; // 16C~30C
145  // Byte 2
146  uint8_t :8;
147  // Byte 3
148  uint8_t :1;
149  uint8_t Health:1;
150  uint8_t :6;
151  // Byte 4
152  uint8_t :6;
153  uint8_t Power:1;
154  uint8_t :1;
155  // Byte 5
156  uint8_t :5;
157  uint8_t Fan:3;
158  // Byte 6
159  uint8_t :6;
160  uint8_t Turbo:2;
161  // Byte 7
162  uint8_t :5;
163  uint8_t Mode:3;
164  // Byte 8
165  uint8_t :7;
166  uint8_t Sleep:1;
167  // Byte 9
168  uint8_t :8;
169  // Byte 10
170  uint8_t :8;
171  // Byte 11
172  uint8_t :8;
173  // Byte 12
174  uint8_t Button:4;
175  uint8_t :4;
176  // Byte 13
177  uint8_t Sum;
178  };
179 };
180 
181 const uint8_t kHaierAcYrw02Prefix = 0xA6;
182 const uint8_t kHaierAc176Prefix = 0xB7;
183 
184 const uint8_t kHaierAcYrw02SwingOff = 0x0;
185 const uint8_t kHaierAcYrw02SwingTop = 0x1;
186 const uint8_t kHaierAcYrw02SwingMiddle = 0x2; // Not available in heat mode.
187 const uint8_t kHaierAcYrw02SwingBottom = 0x3; // Only available in heat mode.
188 const uint8_t kHaierAcYrw02SwingDown = 0xA;
189 const uint8_t kHaierAcYrw02SwingAuto = 0xC; // Airflow
190 
191 const uint8_t kHaierAcYrw02FanHigh = 0b001;
192 const uint8_t kHaierAcYrw02FanMed = 0b010;
193 const uint8_t kHaierAcYrw02FanLow = 0b011;
194 const uint8_t kHaierAcYrw02FanAuto = 0b101; // HAIER_AC176 uses `0` in Fan2
195 
196 const uint8_t kHaierAcYrw02TurboOff = 0x0;
197 const uint8_t kHaierAcYrw02TurboHigh = 0x1;
198 const uint8_t kHaierAcYrw02TurboLow = 0x2;
199 
200 const uint8_t kHaierAcYrw02Auto = 0b000; // 0
201 const uint8_t kHaierAcYrw02Cool = 0b001; // 1
202 const uint8_t kHaierAcYrw02Dry = 0b010; // 2
203 const uint8_t kHaierAcYrw02Heat = 0b100; // 4
204 const uint8_t kHaierAcYrw02Fan = 0b110; // 5
205 
206 const uint8_t kHaierAcYrw02ButtonTempUp = 0x0;
207 const uint8_t kHaierAcYrw02ButtonTempDown = 0x1;
208 const uint8_t kHaierAcYrw02ButtonSwing = 0x2;
209 const uint8_t kHaierAcYrw02ButtonFan = 0x4;
210 const uint8_t kHaierAcYrw02ButtonPower = 0x5;
211 const uint8_t kHaierAcYrw02ButtonMode = 0x6;
212 const uint8_t kHaierAcYrw02ButtonHealth = 0x7;
213 const uint8_t kHaierAcYrw02ButtonTurbo = 0x8;
214 const uint8_t kHaierAcYrw02ButtonSleep = 0xB;
215 
216 const uint8_t kHaierAcYrw02NoTimers = 0b000;
217 const uint8_t kHaierAcYrw02OffTimer = 0b001;
218 const uint8_t kHaierAcYrw02OnTimer = 0b010;
219 const uint8_t kHaierAcYrw02OnThenOffTimer = 0b100;
220 const uint8_t kHaierAcYrw02OffThenOnTimer = 0b101;
221 
225  struct {
226  // Byte 0
227  uint8_t Prefix :8;
228  // Byte 1
229  uint8_t Swing :4;
230  uint8_t Temp :4; // 16C~30C
231  // Byte 2
232  uint8_t :8;
233  // Byte 3
234  uint8_t :1;
235  uint8_t Health :1;
236  uint8_t :3;
237  uint8_t TimerMode :3;
238  // Byte 4
239  uint8_t :6;
240  uint8_t Power :1;
241  uint8_t :1;
242  // Byte 5
243  uint8_t OffTimerHrs :5;
244  uint8_t Fan :3;
245  // Byte 6
246  uint8_t OffTimerMins:6;
247  uint8_t Turbo:2;
248  // Byte 7
249  uint8_t OnTimerHrs :5;
250  uint8_t Mode :3;
251  // Byte 8
252  uint8_t OnTimerMins :6;
253  uint8_t :1;
254  uint8_t Sleep :1;
255  // Byte 9
256  uint8_t :8;
257  // Byte 10
258  uint8_t :8;
259  // Byte 11
260  uint8_t :8;
261  // Byte 12
262  uint8_t Button :4;
263  uint8_t :4;
264  // Byte 13
265  uint8_t Sum :8;
266  // Byte 14
267  uint8_t Prefix2 :8;
268  // Byte 15
269  uint8_t :8;
270  // Byte 16
271  uint8_t :6;
272  uint8_t Fan2 :2;
273  // Byte 17
274  uint8_t :8;
275  // Byte 18
276  uint8_t :8;
277  // Byte 19
278  uint8_t :8;
279  // Byte 20
280  uint8_t :8;
281  // Byte 21
282  uint8_t Sum2 :8;
283  };
284 };
285 
286 // Legacy Haier YRW02 remote defines.
287 #define HAIER_AC_YRW02_SWING_OFF kHaierAcYrw02SwingOff
288 #define HAIER_AC_YRW02_SWING_TOP kHaierAcYrw02SwingTop
289 #define HAIER_AC_YRW02_SWING_MIDDLE kHaierAcYrw02SwingMiddle
290 #define HAIER_AC_YRW02_SWING_BOTTOM kHaierAcYrw02SwingBottom
291 #define HAIER_AC_YRW02_SWING_DOWN kHaierAcYrw02SwingDown
292 #define HAIER_AC_YRW02_SWING_AUTO kHaierAcYrw02SwingAuto
293 #define HAIER_AC_YRW02_FAN_HIGH kHaierAcYrw02FanHigh
294 #define HAIER_AC_YRW02_FAN_MED kHaierAcYrw02FanMed
295 #define HAIER_AC_YRW02_FAN_LOW kHaierAcYrw02FanLow
296 #define HAIER_AC_YRW02_FAN_AUTO kHaierAcYrw02FanAuto
297 #define HAIER_AC_YRW02_TURBO_OFF kHaierAcYrw02TurboOff
298 #define HAIER_AC_YRW02_TURBO_HIGH kHaierAcYrw02TurboHigh
299 #define HAIER_AC_YRW02_TURBO_LOW kHaierAcYrw02TurboLow
300 #define HAIER_AC_YRW02_AUTO kHaierAcYrw02Auto
301 #define HAIER_AC_YRW02_COOL kHaierAcYrw02Cool
302 #define HAIER_AC_YRW02_DRY kHaierAcYrw02Dry
303 #define HAIER_AC_YRW02_HEAT kHaierAcYrw02Heat
304 #define HAIER_AC_YRW02_FAN kHaierAcYrw02Fan
305 #define HAIER_AC_YRW02_BUTTON_TEMP_UP kHaierAcYrw02ButtonTempUp
306 #define HAIER_AC_YRW02_BUTTON_TEMP_DOWN kHaierAcYrw02ButtonTempDown
307 #define HAIER_AC_YRW02_BUTTON_SWING kHaierAcYrw02ButtonSwing
308 #define HAIER_AC_YRW02_BUTTON_FAN kHaierAcYrw02ButtonFan
309 #define HAIER_AC_YRW02_BUTTON_POWER kHaierAcYrw02ButtonPower
310 #define HAIER_AC_YRW02_BUTTON_MODE kHaierAcYrw02ButtonMode
311 #define HAIER_AC_YRW02_BUTTON_HEALTH kHaierAcYrw02ButtonHealth
312 #define HAIER_AC_YRW02_BUTTON_TURBO kHaierAcYrw02ButtonTurbo
313 #define HAIER_AC_YRW02_BUTTON_SLEEP kHaierAcYrw02ButtonSleep
314 
315 // Classes
317 class IRHaierAC {
318  public:
319  explicit IRHaierAC(const uint16_t pin, const bool inverted = false,
320  const bool use_modulation = true);
321 #if SEND_HAIER_AC
322  void send(const uint16_t repeat = kHaierAcDefaultRepeat);
327  int8_t calibrate(void) { return _irsend.calibrate(); }
328 #endif // SEND_HAIER_AC
329  void begin(void);
330  void stateReset(void);
331 
332  void setCommand(const uint8_t command);
333  uint8_t getCommand(void) const;
334 
335  void setTemp(const uint8_t temp);
336  uint8_t getTemp(void) const;
337 
338  void setFan(const uint8_t speed);
339  uint8_t getFan(void) const;
340 
341  uint8_t getMode(void) const;
342  void setMode(const uint8_t mode);
343 
344  bool getSleep(void) const;
345  void setSleep(const bool on);
346  bool getHealth(void) const;
347  void setHealth(const bool on);
348 
349  int16_t getOnTimer(void) const;
350  void setOnTimer(const uint16_t mins);
351  int16_t getOffTimer(void) const;
352  void setOffTimer(const uint16_t mins);
353  void cancelTimers(void);
354 
355  uint16_t getCurrTime(void) const;
356  void setCurrTime(const uint16_t mins);
357 
358  uint8_t getSwing(void) const;
359  void setSwing(const uint8_t state);
360 
361  uint8_t* getRaw(void);
362  void setRaw(const uint8_t new_code[]);
363  static bool validChecksum(uint8_t state[],
364  const uint16_t length = kHaierACStateLength);
365  static uint8_t convertMode(const stdAc::opmode_t mode);
366  static uint8_t convertFan(const stdAc::fanspeed_t speed);
367  static uint8_t convertSwingV(const stdAc::swingv_t position);
368  static stdAc::opmode_t toCommonMode(const uint8_t mode);
369  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
370  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
371  stdAc::state_t toCommon(void) const;
372  String toString(void) const;
373 #ifndef UNIT_TEST
374 
375  private:
377 #else // UNIT_TEST
378  IRsendTest _irsend;
380 #endif
383  void checksum(void);
384 };
385 
388  friend class IRHaierACYRW02;
389  public:
390  explicit IRHaierAC176(const uint16_t pin, const bool inverted = false,
391  const bool use_modulation = true);
392 #if SEND_HAIER_AC176
393  virtual void send(const uint16_t repeat = kHaierAc176DefaultRepeat);
398  int8_t calibrate(void) { return _irsend.calibrate(); }
399 #endif // SEND_HAIER_AC176
400  void begin(void);
401  void stateReset(void);
402 
403  void setButton(const uint8_t button);
404  uint8_t getButton(void) const;
405 
406  void setTemp(const uint8_t temp);
407  uint8_t getTemp(void) const;
408 
409  void setFan(const uint8_t speed);
410  uint8_t getFan(void) const;
411 
412  uint8_t getMode(void) const;
413  void setMode(const uint8_t mode);
414 
415  bool getPower(void) const;
416  void setPower(const bool on);
417  void on(void);
418  void off(void);
419 
420  bool getSleep(void) const;
421  void setSleep(const bool on);
422  bool getHealth(void) const;
423  void setHealth(const bool on);
424 
425  uint8_t getTurbo(void) const;
426  void setTurbo(const uint8_t speed);
427 
428  uint8_t getSwing(void) const;
429  void setSwing(const uint8_t pos);
430 
431  void setTimerMode(const uint8_t setting);
432  uint8_t getTimerMode(void) const;
433  void setOnTimer(const uint16_t mins);
434  uint16_t getOnTimer(void) const;
435  void setOffTimer(const uint16_t mins);
436  uint16_t getOffTimer(void) const;
437 
438  uint8_t* getRaw(void);
439  virtual void setRaw(const uint8_t new_code[]);
440  static bool validChecksum(const uint8_t state[],
441  const uint16_t length = kHaierAC176StateLength);
442  static uint8_t convertMode(const stdAc::opmode_t mode);
443  static uint8_t convertFan(const stdAc::fanspeed_t speed);
444  static uint8_t convertSwingV(const stdAc::swingv_t position);
445  static stdAc::opmode_t toCommonMode(const uint8_t mode);
446  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
447  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
448  stdAc::state_t toCommon(void) const;
449  String toString(void) const;
450 #ifndef UNIT_TEST
451 
452  private:
454 #else // UNIT_TEST
455  IRsendTest _irsend;
457 #endif // UNIT_TEST
460  void checksum(void);
461 };
462 
464 class IRHaierACYRW02 : public IRHaierAC176 {
465  public:
466  explicit IRHaierACYRW02(const uint16_t pin, const bool inverted = false,
467  const bool use_modulation = true);
468 #if SEND_HAIER_AC_YRW02
469  void send(const uint16_t repeat = kHaierAcYrw02DefaultRepeat) override;
474  int8_t calibrate(void) { return _irsend.calibrate(); }
475 #endif // SEND_HAIER_AC_YRW02
476  void setRaw(const uint8_t new_code[]) override;
477  static bool validChecksum(
478  const uint8_t state[],
479  const uint16_t length = kHaierACYRW02StateLength);
480 };
481 #endif // IR_HAIER_H_
kHaierAcCmdFan
const uint8_t kHaierAcCmdFan
Definition: ir_Haier.h:78
IRHaierAC176::setButton
void setButton(const uint8_t button)
Set the Button/Command setting of the A/C.
Definition: ir_Haier.cpp:608
kHaierAcFanHigh
const uint8_t kHaierAcFanHigh
Definition: ir_Haier.h:101
kHaierAcYrw02DefaultRepeat
const uint16_t kHaierAcYrw02DefaultRepeat
Definition: IRremoteESP8266.h:1046
IRHaierAC176::begin
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Haier.cpp:546
IRHaierAC::getOffTimer
int16_t getOffTimer(void) const
Get the Off Timer value/setting of the A/C.
Definition: ir_Haier.cpp:281
HaierYRW02Protocol
Native representation of a Haier YRW02 A/C message.
Definition: ir_Haier.h:137
IRHaierAC::getMode
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Haier.cpp:215
IRHaierAC176::getOffTimer
uint16_t getOffTimer(void) const
Get the number of minutes of the Off Timer setting.
Definition: ir_Haier.cpp:866
kHaierAcYrw02Fan
const uint8_t kHaierAcYrw02Fan
Definition: ir_Haier.h:204
HaierAc176Protocol::Sleep
uint8_t Sleep
Definition: ir_Haier.h:254
kHaierAcDefaultRepeat
const uint16_t kHaierAcDefaultRepeat
Definition: IRremoteESP8266.h:1043
HaierAc176Protocol::raw
uint8_t raw[kHaierAC176StateLength]
The state in native form.
Definition: ir_Haier.h:224
kHaierAcYrw02FanMed
const uint8_t kHaierAcYrw02FanMed
Definition: ir_Haier.h:192
kHaierAcSwingChg
const uint8_t kHaierAcSwingChg
Definition: ir_Haier.h:90
IRHaierAC::setSwing
void setSwing(const uint8_t state)
Set the Vertical Swing mode of the A/C.
Definition: ir_Haier.cpp:332
HaierYRW02Protocol::Temp
uint8_t Temp
Definition: ir_Haier.h:144
kHaierAcAuto
const uint8_t kHaierAcAuto
Definition: ir_Haier.h:92
kHaierAcYrw02ButtonTurbo
const uint8_t kHaierAcYrw02ButtonTurbo
Definition: ir_Haier.h:213
IRHaierACYRW02::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Haier.h:474
stdAc::swingv_t
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
IRHaierAC176::validChecksum
static bool validChecksum(const uint8_t state[], const uint16_t length=kHaierAC176StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Haier.cpp:567
kHaierAcYrw02OnTimer
const uint8_t kHaierAcYrw02OnTimer
Definition: ir_Haier.h:218
kHaierAcYrw02OffThenOnTimer
const uint8_t kHaierAcYrw02OffThenOnTimer
Definition: ir_Haier.h:220
kHaierACStateLength
const uint16_t kHaierACStateLength
Definition: IRremoteESP8266.h:1041
IRHaierACYRW02::validChecksum
static bool validChecksum(const uint8_t state[], const uint16_t length=kHaierACYRW02StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Haier.cpp:1132
kHaierAcCmdTempDown
const uint8_t kHaierAcCmdTempDown
Definition: ir_Haier.h:80
IRHaierAC::setRaw
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Haier.cpp:147
IRHaierAC::stateReset
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Haier.cpp:128
HaierProtocol::Swing
uint8_t Swing
Definition: ir_Haier.h:44
kHaierAcCmdMode
const uint8_t kHaierAcCmdMode
Definition: ir_Haier.h:77
stdAc::fanspeed_t
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
kHaierAcYrw02ButtonHealth
const uint8_t kHaierAcYrw02ButtonHealth
Definition: ir_Haier.h:212
IRHaierAC::getCurrTime
uint16_t getCurrTime(void) const
Get the clock value of the A/C.
Definition: ir_Haier.cpp:291
IRHaierAC::setFan
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Haier.cpp:178
HaierAc176Protocol::Fan
uint8_t Fan
Definition: ir_Haier.h:244
IRHaierAC176::on
void on(void)
Change the power setting to On.
Definition: ir_Haier.cpp:702
HaierAc176Protocol::Mode
uint8_t Mode
Definition: ir_Haier.h:250
kHaierAcCmdSleep
const uint8_t kHaierAcCmdSleep
Definition: ir_Haier.h:81
IRHaierAC176::setMode
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Haier.cpp:631
IRHaierAC::convertFan
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Haier.cpp:361
HaierAc176Protocol::OffTimerHrs
uint8_t OffTimerHrs
Definition: ir_Haier.h:243
kHaierAC176StateLength
const uint16_t kHaierAC176StateLength
Definition: IRremoteESP8266.h:1047
HaierProtocol::Prefix
uint8_t Prefix
Definition: ir_Haier.h:37
IRHaierAC176::getOnTimer
uint16_t getOnTimer(void) const
Get the number of minutes of the On Timer setting.
Definition: ir_Haier.cpp:836
IRHaierAC::getTemp
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Haier.cpp:239
HaierProtocol::Temp
uint8_t Temp
Definition: ir_Haier.h:40
IRHaierAC::getFan
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Haier.cpp:194
HaierProtocol::OnTimer
uint8_t OnTimer
Definition: ir_Haier.h:48
kHaierAcYrw02Auto
const uint8_t kHaierAcYrw02Auto
Definition: ir_Haier.h:200
IRHaierAC176::_
HaierAc176Protocol _
Definition: ir_Haier.h:459
IRHaierAC::getRaw
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Haier.cpp:140
kHaierAcCmdSwing
const uint8_t kHaierAcCmdSwing
Definition: ir_Haier.h:85
kHaierAcYrw02Prefix
const uint8_t kHaierAcYrw02Prefix
Definition: ir_Haier.h:181
IRHaierAC176::off
void off(void)
Change the power setting to Off.
Definition: ir_Haier.cpp:705
IRHaierAC176::getRaw
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Haier.cpp:595
IRHaierAC176::setTimerMode
void setTimerMode(const uint8_t setting)
Set the Timer operating mode.
Definition: ir_Haier.cpp:789
IRHaierAC176::setSleep
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Haier.cpp:715
IRHaierAC::setSleep
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Haier.cpp:258
kHaierAcYrw02SwingTop
const uint8_t kHaierAcYrw02SwingTop
Definition: ir_Haier.h:185
HaierAc176Protocol::Power
uint8_t Power
Definition: ir_Haier.h:240
HaierProtocol::CurrMins
uint8_t CurrMins
Definition: ir_Haier.h:46
HaierAc176Protocol::Prefix2
uint8_t Prefix2
Definition: ir_Haier.h:267
IRsend.h
IRHaierAC176::setTemp
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Haier.cpp:653
IRHaierAC176::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Haier.h:398
HaierYRW02Protocol::raw
uint8_t raw[kHaierACYRW02StateLength]
The state in native form.
Definition: ir_Haier.h:138
HaierProtocol::Mode
uint8_t Mode
Definition: ir_Haier.h:58
HaierYRW02Protocol::Power
uint8_t Power
Definition: ir_Haier.h:153
IRHaierAC176::toString
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Haier.cpp:979
IRHaierAC176::toCommonSwingV
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Haier.cpp:940
IRHaierAC::toString
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Haier.cpp:453
kHaierAcCmdTimerSet
const uint8_t kHaierAcCmdTimerSet
Definition: ir_Haier.h:82
IRHaierAC::setMode
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Haier.cpp:205
kHaierAcCmdTempUp
const uint8_t kHaierAcCmdTempUp
Definition: ir_Haier.h:79
IRHaierAC::cancelTimers
void cancelTimers(void)
Cancel/disable the On & Off timers.
Definition: ir_Haier.cpp:312
IRsend
Class for sending all basic IR protocols.
Definition: IRsend.h:190
IRHaierAC176::getTurbo
uint8_t getTurbo(void) const
Get the Turbo setting of the A/C.
Definition: ir_Haier.cpp:722
IRHaierAC176::getSleep
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Haier.cpp:709
IRHaierAC::_irsend
IRsend _irsend
Instance of the IR send class.
Definition: ir_Haier.h:376
IRHaierAC::convertMode
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Haier.cpp:348
IRHaierAC176::checksum
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Haier.cpp:557
IRsend::calibrate
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
IRHaierAC176::getPower
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Haier.cpp:690
kHaierAcFanLow
const uint8_t kHaierAcFanLow
Definition: ir_Haier.h:99
kHaierAcYrw02OffTimer
const uint8_t kHaierAcYrw02OffTimer
Definition: ir_Haier.h:217
String
std::string String
Definition: IRremoteESP8266.h:1279
IRHaierAC::getHealth
bool getHealth(void) const
Get the Health (filter) setting of the A/C.
Definition: ir_Haier.cpp:252
kHaierAcYrw02ButtonSleep
const uint8_t kHaierAcYrw02ButtonSleep
Definition: ir_Haier.h:214
IRHaierAC176::setFan
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Haier.cpp:748
kHaierAcPrefix
const uint8_t kHaierAcPrefix
Definition: ir_Haier.h:70
IRHaierAC176::setRaw
virtual void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Haier.cpp:602
kHaierACYRW02StateLength
const uint16_t kHaierACYRW02StateLength
Definition: IRremoteESP8266.h:1044
HaierYRW02Protocol::Prefix
uint8_t Prefix
Definition: ir_Haier.h:141
HaierAc176Protocol
Native representation of a Haier 176 bit A/C message.
Definition: ir_Haier.h:223
IRHaierAC::setOnTimer
void setOnTimer(const uint16_t mins)
Set & enable the On Timer.
Definition: ir_Haier.cpp:295
IRHaierAC176::setPower
void setPower(const bool on)
Change the power setting.
Definition: ir_Haier.cpp:696
HaierYRW02Protocol::Sleep
uint8_t Sleep
Definition: ir_Haier.h:166
IRHaierACYRW02::send
void send(const uint16_t repeat=kHaierAcYrw02DefaultRepeat) override
Send the current internal state as an IR message.
Definition: ir_Haier.cpp:1117
kHaierAcSwingOff
const uint8_t kHaierAcSwingOff
Definition: ir_Haier.h:87
kHaierAcSwingDown
const uint8_t kHaierAcSwingDown
Definition: ir_Haier.h:89
IRremoteESP8266.h
HaierAc176Protocol::Fan2
uint8_t Fan2
Definition: ir_Haier.h:272
IRHaierAC176::getHealth
bool getHealth(void) const
Get the Health (filter) setting of the A/C.
Definition: ir_Haier.cpp:684
kHaierAcYrw02FanHigh
const uint8_t kHaierAcYrw02FanHigh
Definition: ir_Haier.h:191
kHaierAcFan
const uint8_t kHaierAcFan
Definition: ir_Haier.h:96
kHaierAcYrw02FanLow
const uint8_t kHaierAcYrw02FanLow
Definition: ir_Haier.h:193
HaierProtocol::Fan
uint8_t Fan
Definition: ir_Haier.h:55
kHaierAcYrw02SwingAuto
const uint8_t kHaierAcYrw02SwingAuto
Definition: ir_Haier.h:189
IRHaierAC176::setHealth
void setHealth(const bool on)
Set the Health (filter) setting of the A/C.
Definition: ir_Haier.cpp:677
kHaierAcCool
const uint8_t kHaierAcCool
Definition: ir_Haier.h:93
HaierYRW02Protocol::Turbo
uint8_t Turbo
Definition: ir_Haier.h:160
kHaierAcDefTemp
const uint8_t kHaierAcDefTemp
Definition: ir_Haier.h:73
HaierYRW02Protocol::Mode
uint8_t Mode
Definition: ir_Haier.h:163
HaierAc176Protocol::Button
uint8_t Button
Definition: ir_Haier.h:262
kHaierAcYrw02SwingOff
const uint8_t kHaierAcYrw02SwingOff
Definition: ir_Haier.h:184
IRHaierAC::convertSwingV
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Haier.cpp:375
IRHaierAC::getSleep
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Haier.cpp:265
IRHaierAC::setHealth
void setHealth(const bool on)
Set the Health (filter) setting of the A/C.
Definition: ir_Haier.cpp:245
kHaierAcYrw02ButtonTempUp
const uint8_t kHaierAcYrw02ButtonTempUp
Definition: ir_Haier.h:206
HaierAc176Protocol::Temp
uint8_t Temp
Definition: ir_Haier.h:230
HaierYRW02Protocol::Swing
uint8_t Swing
Definition: ir_Haier.h:143
kHaierAcMinTemp
const uint8_t kHaierAcMinTemp
Definition: ir_Haier.h:72
kHaierAcYrw02SwingDown
const uint8_t kHaierAcYrw02SwingDown
Definition: ir_Haier.h:188
IRHaierAC::validChecksum
static bool validChecksum(uint8_t state[], const uint16_t length=kHaierACStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Haier.cpp:122
IRHaierAC::getSwing
uint8_t getSwing(void) const
Get the Vertical Swing position setting of the A/C.
Definition: ir_Haier.cpp:326
IRHaierAC::_
HaierProtocol _
Definition: ir_Haier.h:382
IRHaierAC176::getTemp
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Haier.cpp:671
HaierAc176Protocol::Prefix
uint8_t Prefix
Definition: ir_Haier.h:227
HaierProtocol::Health
uint8_t Health
Definition: ir_Haier.h:51
kHaierAc176DefaultRepeat
const uint16_t kHaierAc176DefaultRepeat
Definition: IRremoteESP8266.h:1049
IRHaierAC176::toCommonFanSpeed
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Haier.cpp:928
IRHaierAC176::stateReset
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Haier.cpp:582
IRHaierAC176::convertFan
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Haier.cpp:886
kHaierAcCmdHealth
const uint8_t kHaierAcCmdHealth
Definition: ir_Haier.h:84
HaierProtocol::unknown
uint8_t unknown
Definition: ir_Haier.h:43
HaierProtocol::CurrHours
uint8_t CurrHours
Definition: ir_Haier.h:42
HaierProtocol::remote_state
uint8_t remote_state[kHaierACStateLength]
< The state in native IR code form
Definition: ir_Haier.h:34
HaierAc176Protocol::Health
uint8_t Health
Definition: ir_Haier.h:235
kHaierAcCmdOn
const uint8_t kHaierAcCmdOn
Definition: ir_Haier.h:76
HaierAc176Protocol::Sum
uint8_t Sum
Definition: ir_Haier.h:265
kHaierAcYrw02SwingMiddle
const uint8_t kHaierAcYrw02SwingMiddle
Definition: ir_Haier.h:186
IRHaierAC176::getTimerMode
uint8_t getTimerMode(void) const
Get the Timer operating mode.
Definition: ir_Haier.cpp:808
IRHaierAC176::getButton
uint8_t getButton(void) const
Get the Button/Command setting of the A/C.
Definition: ir_Haier.cpp:625
HaierAc176Protocol::OnTimerHrs
uint8_t OnTimerHrs
Definition: ir_Haier.h:249
kHaierAcYrw02ButtonSwing
const uint8_t kHaierAcYrw02ButtonSwing
Definition: ir_Haier.h:208
kHaierAcYrw02TurboLow
const uint8_t kHaierAcYrw02TurboLow
Definition: ir_Haier.h:198
IRHaierAC176::toCommonMode
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Haier.cpp:915
kHaierAcFanMed
const uint8_t kHaierAcFanMed
Definition: ir_Haier.h:100
IRHaierAC176::getFan
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Haier.cpp:742
HaierAc176Protocol::Turbo
uint8_t Turbo
Definition: ir_Haier.h:247
kHaierAcYrw02TurboOff
const uint8_t kHaierAcYrw02TurboOff
Definition: ir_Haier.h:196
HaierYRW02Protocol::Health
uint8_t Health
Definition: ir_Haier.h:149
kHaierAcYrw02ButtonTempDown
const uint8_t kHaierAcYrw02ButtonTempDown
Definition: ir_Haier.h:207
IRHaierAC176::_irsend
IRsend _irsend
Instance of the IR send class.
Definition: ir_Haier.h:453
IRHaierAC
Class for handling detailed Haier A/C messages.
Definition: ir_Haier.h:317
HaierProtocol::OnMins
uint8_t OnMins
Definition: ir_Haier.h:60
IRHaierAC176::IRHaierAC176
IRHaierAC176(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Haier.cpp:541
IRHaierAC176::setOffTimer
void setOffTimer(const uint16_t mins)
Set the number of minutes of the Off Timer setting.
Definition: ir_Haier.cpp:842
IRHaierAC::setOffTimer
void setOffTimer(const uint16_t mins)
Set & enable the Off Timer.
Definition: ir_Haier.cpp:304
HaierAc176Protocol::OnTimerMins
uint8_t OnTimerMins
Definition: ir_Haier.h:252
kHaierAcYrw02FanAuto
const uint8_t kHaierAcYrw02FanAuto
Definition: ir_Haier.h:194
kHaierAc176Prefix
const uint8_t kHaierAc176Prefix
Definition: ir_Haier.h:182
IRHaierAC176::setTurbo
void setTurbo(const uint8_t speed)
Set the Turbo setting of the A/C.
Definition: ir_Haier.cpp:730
kHaierAcYrw02TurboHigh
const uint8_t kHaierAcYrw02TurboHigh
Definition: ir_Haier.h:197
kHaierAcMaxTemp
const uint8_t kHaierAcMaxTemp
Definition: ir_Haier.h:74
kHaierAcYrw02ButtonFan
const uint8_t kHaierAcYrw02ButtonFan
Definition: ir_Haier.h:209
kHaierAcYrw02Cool
const uint8_t kHaierAcYrw02Cool
Definition: ir_Haier.h:201
IRHaierAC176
Class for handling detailed Haier 176 bit A/C messages.
Definition: ir_Haier.h:387
IRHaierAC::toCommonMode
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Haier.cpp:390
kHaierAcYrw02SwingBottom
const uint8_t kHaierAcYrw02SwingBottom
Definition: ir_Haier.h:187
HaierProtocol::OffHours
uint8_t OffHours
Definition: ir_Haier.h:50
IRHaierAC176::setSwing
void setSwing(const uint8_t pos)
Set the Vertical Swing mode of the A/C.
Definition: ir_Haier.cpp:766
kHaierAcFanAuto
const uint8_t kHaierAcFanAuto
Definition: ir_Haier.h:98
HaierAc176Protocol::Swing
uint8_t Swing
Definition: ir_Haier.h:229
kHaierAcYrw02OnThenOffTimer
const uint8_t kHaierAcYrw02OnThenOffTimer
Definition: ir_Haier.h:219
kHaierAcCmdOff
const uint8_t kHaierAcCmdOff
Definition: ir_Haier.h:75
HaierProtocol::Sleep
uint8_t Sleep
Definition: ir_Haier.h:61
IRHaierAC::toCommon
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Haier.cpp:426
IRHaierACYRW02::setRaw
void setRaw(const uint8_t new_code[]) override
Set the internal state from a valid code for this protocol.
Definition: ir_Haier.cpp:1124
IRHaierAC176::IRHaierACYRW02
friend class IRHaierACYRW02
Definition: ir_Haier.h:388
IRHaierAC::getOnTimer
int16_t getOnTimer(void) const
Get the On Timer value/setting of the A/C.
Definition: ir_Haier.cpp:271
IRHaierAC176::send
virtual void send(const uint16_t repeat=kHaierAc176DefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Haier.cpp:551
kHaierAcYrw02Heat
const uint8_t kHaierAcYrw02Heat
Definition: ir_Haier.h:203
IRHaierAC::checksum
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Haier.cpp:114
IRHaierAC::setCommand
void setCommand(const uint8_t command)
Set the Command/Button setting of the A/C.
Definition: ir_Haier.cpp:153
IRHaierAC::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Haier.h:327
kHaierAcSleepBit
const uint8_t kHaierAcSleepBit
Definition: ir_Haier.h:105
kHaierAcDry
const uint8_t kHaierAcDry
Definition: ir_Haier.h:94
IRHaierAC176::convertMode
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Haier.cpp:873
kHaierAcSwingUp
const uint8_t kHaierAcSwingUp
Definition: ir_Haier.h:88
IRHaierAC::toCommonSwingV
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Haier.cpp:415
kHaierAcYrw02NoTimers
const uint8_t kHaierAcYrw02NoTimers
Definition: ir_Haier.h:216
kHaierAcYrw02ButtonMode
const uint8_t kHaierAcYrw02ButtonMode
Definition: ir_Haier.h:211
kHaierAcHeat
const uint8_t kHaierAcHeat
Definition: ir_Haier.h:95
IRHaierAC176::getSwing
uint8_t getSwing(void) const
Get the Vertical Swing position setting of the A/C.
Definition: ir_Haier.cpp:762
HaierAc176Protocol::Sum2
uint8_t Sum2
Definition: ir_Haier.h:282
HaierProtocol
Native representation of a Haier HSU07-HEA03 A/C message.
Definition: ir_Haier.h:32
IRHaierAC::begin
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Haier.cpp:103
kHaierAcMaxTime
const uint16_t kHaierAcMaxTime
Definition: ir_Haier.h:103
IRHaierAC::setCurrTime
void setCurrTime(const uint16_t mins)
Set the clock value for the A/C.
Definition: ir_Haier.cpp:320
IRHaierACYRW02
Class for handling detailed Haier ACYRW02 A/C messages.
Definition: ir_Haier.h:464
IRHaierAC::IRHaierAC
IRHaierAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Haier.cpp:98
IRHaierAC::setTemp
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Haier.cpp:221
IRHaierAC::getCommand
uint8_t getCommand(void) const
Get the Command/Button setting of the A/C.
Definition: ir_Haier.cpp:172
IRHaierAC176::setOnTimer
void setOnTimer(const uint16_t mins)
Set the number of minutes of the On Timer setting.
Definition: ir_Haier.cpp:812
HaierYRW02Protocol::Fan
uint8_t Fan
Definition: ir_Haier.h:157
IRHaierAC176::getMode
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Haier.cpp:647
HaierAc176Protocol::TimerMode
uint8_t TimerMode
Definition: ir_Haier.h:237
kHaierAcYrw02Dry
const uint8_t kHaierAcYrw02Dry
Definition: ir_Haier.h:202
HaierProtocol::OnHours
uint8_t OnHours
Definition: ir_Haier.h:57
HaierProtocol::OffTimer
uint8_t OffTimer
Definition: ir_Haier.h:47
stdAc::state_t
Structure to hold a common A/C state.
Definition: IRsend.h:97
HaierProtocol::Command
uint8_t Command
Definition: ir_Haier.h:39
HaierYRW02Protocol::Button
uint8_t Button
Definition: ir_Haier.h:174
HaierProtocol::OffMins
uint8_t OffMins
Definition: ir_Haier.h:54
HaierYRW02Protocol::Sum
uint8_t Sum
Definition: ir_Haier.h:177
HaierProtocol::Sum
uint8_t Sum
Definition: ir_Haier.h:64
IRHaierAC::toCommonFanSpeed
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Haier.cpp:403
kHaierAcYrw02ButtonPower
const uint8_t kHaierAcYrw02ButtonPower
Definition: ir_Haier.h:210
IRHaierAC176::toCommon
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Haier.cpp:953
kHaierAcCmdTimerCancel
const uint8_t kHaierAcCmdTimerCancel
Definition: ir_Haier.h:83
HaierAc176Protocol::OffTimerMins
uint8_t OffTimerMins
Definition: ir_Haier.h:246
IRHaierAC176::convertSwingV
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Haier.cpp:900
stdAc::opmode_t
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
IRHaierAC::send
void send(const uint16_t repeat=kHaierAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Haier.cpp:108