Skip to content

Commit 23b6644

Browse files
authored
HAIER_AC176: Add experimental detailed support (#1571)
* `IRHaierACYRW02` inherits from the new `IRHaierAC176`. - Except for a few functions that need to be special. * Add `[sg]et(On|Off)Timer()` & `[sg]etTimerMode()` class methods. * Update `toString()`. * Add timer specific unit tests. * Update existing Unit Tests. * Add it to the Common A/C API (`IRac`) * Expand & update the unit tests. Fixes #1480
1 parent 7e2df07 commit 23b6644

File tree

9 files changed

+600
-90
lines changed

9 files changed

+600
-90
lines changed

src/IRac.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,9 @@ bool IRac::isProtocolSupported(const decode_type_t protocol) {
203203
#if SEND_HAIER_AC
204204
case decode_type_t::HAIER_AC:
205205
#endif
206+
#if SEND_HAIER_AC176
207+
case decode_type_t::HAIER_AC176:
208+
#endif // SEND_HAIER_AC176
206209
#if SEND_HAIER_AC_YRW02
207210
case decode_type_t::HAIER_AC_YRW02:
208211
#endif
@@ -1083,6 +1086,40 @@ void IRac::haier(IRHaierAC *ac,
10831086
}
10841087
#endif // SEND_HAIER_AC
10851088

1089+
#if SEND_HAIER_AC176
1090+
/// Send a Haier 176 bit A/C message with the supplied settings.
1091+
/// @param[in, out] ac A Ptr to an IRHaierAC176 object to use.
1092+
/// @param[in] on The power setting.
1093+
/// @param[in] mode The operation mode setting.
1094+
/// @param[in] degrees The temperature setting in degrees.
1095+
/// @param[in] fan The speed setting for the fan.
1096+
/// @param[in] swingv The vertical swing setting.
1097+
/// @param[in] turbo Run the device in turbo/powerful mode.
1098+
/// @param[in] filter Turn on the (ion/pollen/etc) filter mode.
1099+
/// @param[in] sleep Nr. of minutes for sleep mode. -1 is Off, >= 0 is on.
1100+
void IRac::haier176(IRHaierAC176 *ac,
1101+
const bool on, const stdAc::opmode_t mode,
1102+
const float degrees, const stdAc::fanspeed_t fan,
1103+
const stdAc::swingv_t swingv, const bool turbo,
1104+
const bool filter, const int16_t sleep) {
1105+
ac->begin();
1106+
ac->setMode(ac->convertMode(mode));
1107+
ac->setTemp(degrees);
1108+
ac->setFan(ac->convertFan(fan));
1109+
ac->setSwing(ac->convertSwingV(swingv));
1110+
// No Horizontal Swing setting available.
1111+
// No Quiet setting available.
1112+
ac->setTurbo(turbo);
1113+
// No Light setting available.
1114+
ac->setHealth(filter);
1115+
// No Clean setting available.
1116+
// No Beep setting available.
1117+
ac->setSleep(sleep >= 0); // Sleep on this A/C is either on or off.
1118+
ac->setPower(on);
1119+
ac->send();
1120+
}
1121+
#endif // SEND_HAIER_AC176
1122+
10861123
#if SEND_HAIER_AC_YRW02
10871124
/// Send a Haier YRWO2 A/C message with the supplied settings.
10881125
/// @param[in, out] ac A Ptr to an IRHaierACYRW02 object to use.
@@ -2655,6 +2692,15 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
26552692
break;
26562693
}
26572694
#endif // SEND_HAIER_AC
2695+
#if SEND_HAIER_AC176
2696+
case HAIER_AC176:
2697+
{
2698+
IRHaierAC176 ac(_pin, _inverted, _modulation);
2699+
haier176(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
2700+
send.turbo, send.filter, send.sleep);
2701+
break;
2702+
}
2703+
#endif // SEND_HAIER_AC176
26582704
#if SEND_HAIER_AC_YRW02
26592705
case HAIER_AC_YRW02:
26602706
{
@@ -3558,6 +3604,13 @@ namespace IRAcUtils {
35583604
return ac.toString();
35593605
}
35603606
#endif // DECODE_HAIER_AC
3607+
#if DECODE_HAIER_AC176
3608+
case decode_type_t::HAIER_AC176: {
3609+
IRHaierAC176 ac(kGpioUnused);
3610+
ac.setRaw(result->state);
3611+
return ac.toString();
3612+
}
3613+
#endif // DECODE_HAIER_AC176
35613614
#if DECODE_HAIER_AC_YRW02
35623615
case decode_type_t::HAIER_AC_YRW02: {
35633616
IRHaierACYRW02 ac(kGpioUnused);
@@ -3907,6 +3960,14 @@ namespace IRAcUtils {
39073960
break;
39083961
}
39093962
#endif // DECODE_HAIER_AC
3963+
#if DECODE_HAIER_AC176
3964+
case decode_type_t::HAIER_AC176: {
3965+
IRHaierAC176 ac(kGpioUnused);
3966+
ac.setRaw(decode->state);
3967+
*result = ac.toCommon();
3968+
break;
3969+
}
3970+
#endif // DECODE_HAIER_AC176
39103971
#if DECODE_HAIER_AC_YRW02
39113972
case decode_type_t::HAIER_AC_YRW02: {
39123973
IRHaierACYRW02 ac(kGpioUnused);

src/IRac.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,14 @@ void electra(IRElectraAc *ac,
255255
const bool filter, const int16_t sleep = -1,
256256
const int16_t clock = -1);
257257
#endif // SEND_HAIER_AC
258+
#if SEND_HAIER_AC176
259+
void haier176(IRHaierAC176 *ac,
260+
const bool on, const stdAc::opmode_t mode,
261+
const float degrees, const stdAc::fanspeed_t fan,
262+
const stdAc::swingv_t swingv,
263+
const bool turbo, const bool filter,
264+
const int16_t sleep = -1);
265+
#endif // SEND_HAIER_AC176
258266
#if SEND_HAIER_AC_YRW02
259267
void haierYrwo2(IRHaierACYRW02 *ac,
260268
const bool on, const stdAc::opmode_t mode,

src/IRtext.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ const PROGMEM char* kMouldStr = D_STR_MOULD; ///< "Mould"
3939
const PROGMEM char* kCleanStr = D_STR_CLEAN; ///< "Clean"
4040
const PROGMEM char* kPurifyStr = D_STR_PURIFY; ///< "Purify"
4141
const PROGMEM char* kTimerStr = D_STR_TIMER; ///< "Timer"
42-
const PROGMEM char* kOnTimerStr = D_STR_ONTIMER; ///< "OnTimer"
43-
const PROGMEM char* kOffTimerStr = D_STR_OFFTIMER; ///< "OffTimer"
42+
const PROGMEM char* kOnTimerStr = D_STR_ONTIMER; ///< "On Timer"
43+
const PROGMEM char* kOffTimerStr = D_STR_OFFTIMER; ///< "Off Timer"
44+
const PROGMEM char* kTimerModeStr = D_STR_TIMERMODE; ///< "Timer Mode"
4445
const PROGMEM char* kClockStr = D_STR_CLOCK; ///< "Clock"
4546
const PROGMEM char* kCommandStr = D_STR_COMMAND; ///< "Command"
4647
const PROGMEM char* kXFanStr = D_STR_XFAN; ///< "XFan"

src/IRtext.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ extern const char* kTempDownStr;
146146
extern const char* kTempStr;
147147
extern const char* kTempUpStr;
148148
extern const char* kThreeLetterDayOfWeekStr;
149+
extern const char* kTimerModeStr;
149150
extern const char* kTimerStr;
150151
extern const char* kToggleStr;
151152
extern const char* kTopStr;

0 commit comments

Comments
 (0)