Skip to content

Commit

Permalink
Add support for setting/getting Health/Filter status.
Browse files Browse the repository at this point in the history
  • Loading branch information
crankyoldgit committed Aug 11, 2022
1 parent d5b4257 commit 98fc647
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 15 deletions.
9 changes: 5 additions & 4 deletions src/IRac.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1214,6 +1214,7 @@ void IRac::haier(IRHaierAC *ac,
/// @param[in] swingv The vertical swing setting.
/// @param[in] turbo Run the device in turbo/powerful mode.
/// @param[in] quiet Run the device in quiet mode.
/// @param[in] filter Turn on the (ion/pollen/etc) filter mode.
/// @param[in] clean Turn on the clean mode.
/// @param[in] light Turn on the LED/Display mode.
/// @param[in] prevlight Previous LED/Display mode.
Expand All @@ -1223,8 +1224,8 @@ void IRac::haier160(IRHaierAC160 *ac,
const bool celsius, const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo, const bool quiet, const bool clean,
const bool light, const bool prevlight,
const bool turbo, const bool quiet, const bool filter,
const bool clean, const bool light, const bool prevlight,
const int16_t sleep) {
ac->begin();
// No Model setting available.
Expand All @@ -1236,7 +1237,7 @@ void IRac::haier160(IRHaierAC160 *ac,
// No Horizontal Swing setting available.
ac->setQuiet(quiet);
ac->setTurbo(turbo);
// No Filter setting available.
ac->setHealth(filter);
ac->setClean(clean);
// No Clean setting available.
// No Beep setting available.
Expand Down Expand Up @@ -3034,7 +3035,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
{
IRHaierAC160 ac(_pin, _inverted, _modulation);
haier160(&ac, send.power, send.mode, send.celsius, send.degrees,
send.fanspeed, send.swingv, send.turbo, send.clean,
send.fanspeed, send.swingv, send.turbo, send.filter, send.clean,
send.light, prev_light, send.sleep);
break;
}
Expand Down
4 changes: 2 additions & 2 deletions src/IRac.h
Original file line number Diff line number Diff line change
Expand Up @@ -280,8 +280,8 @@ void electra(IRElectraAc *ac,
const bool on, const stdAc::opmode_t mode, const bool celsius,
const float degrees, const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo, const bool quiet, const bool clean,
const bool light, const bool prevlight,
const bool turbo, const bool quiet, const bool filter,
const bool clean, const bool light, const bool prevlight,
const int16_t sleep = -1);
#endif // SEND_HAIER_AC160
#if SEND_HAIER_AC176
Expand Down
14 changes: 13 additions & 1 deletion src/ir_Haier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1794,6 +1794,17 @@ void IRHaierAC160::setFan(uint8_t speed) {
}
}

/// Set the Health (filter) setting of the A/C.
/// @param[in] on true, the setting is on. false, the setting is off.
void IRHaierAC160::setHealth(const bool on) {
_.Button = kHaierAcYrw02ButtonHealth;
_.Health = on;
}

/// Get the Health (filter) setting of the A/C.
/// @return true, the setting is on. false, the setting is off.
bool IRHaierAC160::getHealth(void) const { return _.Health; }

/// Get the Vertical Swing position setting of the A/C.
/// @return The native position/mode.
uint8_t IRHaierAC160::getSwingV(void) const { return _.SwingV; }
Expand Down Expand Up @@ -2021,8 +2032,8 @@ stdAc::state_t IRHaierAC160::toCommon(const stdAc::state_t *prev) const {
result.quiet = _.Quiet;
result.clean = _.Clean && _.Clean2;
result.light ^= getLightToggle();
result.filter = _.Health;
// Not supported.
result.filter = false;
result.model = -1;
result.econo = false;
result.beep = true;
Expand Down Expand Up @@ -2101,6 +2112,7 @@ String IRHaierAC160::toString(void) const {
kHaierAcYrw02FanMed);
result += addBoolToString(_.Turbo, kTurboStr);
result += addBoolToString(_.Quiet, kQuietStr);
result += addBoolToString(_.Health, kHealthStr);
result += addIntToString(_.SwingV, kSwingVStr);
result += kSpaceLBraceStr;
switch (_.SwingV) {
Expand Down
5 changes: 4 additions & 1 deletion src/ir_Haier.h
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ union HaierAc160Protocol{
uint8_t SwingH :3;
// Byte 3
uint8_t :1;
uint8_t Econo :1;
uint8_t Health :1;
uint8_t :3;
uint8_t TimerMode :3;
// Byte 4
Expand Down Expand Up @@ -621,6 +621,9 @@ class IRHaierAC160 {
bool getLock(void) const;
void setLock(const bool on);

bool getHealth(void) const;
void setHealth(const bool on);

uint8_t* getRaw(void);
virtual void setRaw(const uint8_t new_code[]);
static bool validChecksum(const uint8_t state[],
Expand Down
4 changes: 3 additions & 1 deletion test/IRac_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -826,7 +826,8 @@ TEST(TestIRac, Haier160) {
IRrecv capture(kGpioUnused);
const char expected[] =
"Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 23C, "
"Fan: 2 (Medium), Turbo: On, Quiet: Off, Swing(V): 4 (High), Sleep: On, "
"Fan: 2 (Medium), Turbo: On, Quiet: Off, Health: On, "
"Swing(V): 4 (High), Sleep: On, "
"Clean: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, "
"Lock: Off, Heating: Off";
ac.begin();
Expand All @@ -839,6 +840,7 @@ TEST(TestIRac, Haier160) {
stdAc::swingv_t::kHigh, // Vertical swing
true, // Turbo
false, // Quiet
true, // Filter/Health
true, // Clean
true, // Light
true, // Light (prev)
Expand Down
32 changes: 26 additions & 6 deletions test/ir_Haier_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1589,7 +1589,8 @@ TEST(TestDecodeHaierAC160, RealExample) {
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
EXPECT_EQ(
"Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 26C, Fan: 3 (Low), "
"Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), Sleep: Off, Clean: Off, "
"Turbo: Off, Quiet: Off, Health: Off, Swing(V): 12 (Auto), Sleep: Off, "
"Clean: Off, "
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off, "
"Heating: Off",
IRAcUtils::resultAcToString(&irsend.capture));
Expand Down Expand Up @@ -1617,7 +1618,8 @@ TEST(TestDecodeHaierAC160, SyntheticExample) {
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
EXPECT_EQ(
"Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 26C, Fan: 3 (Low), "
"Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), Sleep: Off, Clean: Off, "
"Turbo: Off, Quiet: Off, Health: Off, Swing(V): 12 (Auto), Sleep: Off, "
"Clean: Off, "
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off, "
"Heating: Off",
IRAcUtils::resultAcToString(&irsend.capture));
Expand Down Expand Up @@ -1791,7 +1793,7 @@ TEST(TestHaierAC160Class, CleanMode) {
EXPECT_TRUE(ac.getClean());
EXPECT_EQ(
"Power: On, Button: 25 (Clean), Mode: 1 (Cool), Temp: 26C, "
"Fan: 3 (Low), Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), "
"Fan: 3 (Low), Turbo: Off, Quiet: Off, Health: Off, Swing(V): 12 (Auto), "
"Sleep: Off, Clean: On, Timer Mode: 0 (N/A), "
"On Timer: Off, Off Timer: Off, Lock: Off, Heating: Off",
ac.toString());
Expand All @@ -1804,7 +1806,7 @@ TEST(TestHaierAC160Class, CleanMode) {
EXPECT_FALSE(ac.getClean());
EXPECT_EQ(
"Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 26C, "
"Fan: 3 (Low), Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), "
"Fan: 3 (Low), Turbo: Off, Quiet: Off, Health: Off, Swing(V): 12 (Auto), "
"Sleep: Off, Clean: Off, Timer Mode: 0 (N/A), "
"On Timer: Off, Off Timer: Off, Lock: Off, Heating: Off",
ac.toString());
Expand Down Expand Up @@ -1851,6 +1853,24 @@ TEST(TestHaierAC160Class, SleepMode) {
EXPECT_EQ(kHaierAcYrw02ButtonSleep, ac.getButton());
}

TEST(TestHaierAC160Class, Health) {
IRHaierAC160 ac(kGpioUnused);
ac.begin();

ac.setHealth(true);
EXPECT_TRUE(ac.getHealth());
EXPECT_EQ(kHaierAcYrw02ButtonHealth, ac.getButton());

ac.setButton(kHaierAcYrw02ButtonTempUp);
ac.setHealth(false);
EXPECT_FALSE(ac.getHealth());
EXPECT_EQ(kHaierAcYrw02ButtonHealth, ac.getButton());

ac.setHealth(true);
EXPECT_TRUE(ac.getHealth());
EXPECT_EQ(kHaierAcYrw02ButtonHealth, ac.getButton());
}

TEST(TestHaierAC160Class, TurboAndQuiet) {
IRHaierAC160 ac(kGpioUnused);
ac.begin();
Expand Down Expand Up @@ -1974,7 +1994,7 @@ TEST(TestHaierAC160Class, Light) {
EXPECT_EQ(kHaierAc160ButtonLight, ac.getButton());
EXPECT_EQ(
"Power: On, Button: 21 (Light), Mode: 1 (Cool), Temp: 26C, "
"Fan: 3 (Low), Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), "
"Fan: 3 (Low), Turbo: Off, Quiet: Off, Health: Off, Swing(V): 12 (Auto), "
"Sleep: Off, Clean: Off, Timer Mode: 0 (N/A), "
"On Timer: Off, Off Timer: Off, Lock: Off, Heating: Off",
ac.toString());
Expand Down Expand Up @@ -2006,7 +2026,7 @@ TEST(TestHaierAC160Class, AuxHeating) {
EXPECT_EQ(kHaierAc160ButtonAuxHeating, ac.getButton());
EXPECT_EQ(
"Power: On, Button: 22 (Heating), Mode: 4 (Heat), Temp: 26C, "
"Fan: 3 (Low), Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), "
"Fan: 3 (Low), Turbo: Off, Quiet: Off, Health: Off, Swing(V): 12 (Auto), "
"Sleep: Off, Clean: Off, Timer Mode: 0 (N/A), "
"On Timer: Off, Off Timer: Off, Lock: Off, Heating: Off",
ac.toString());
Expand Down

0 comments on commit 98fc647

Please sign in to comment.