Skip to content

Commit

Permalink
Change Health to Clean.
Browse files Browse the repository at this point in the history
* Rename setHealth/getHealth to setClean/getClean
* Extend the unit tests to use realworld data for Clean mode.
* Update common inferface (IRac)
* Set clean to be off by default in class object.

For #1804
  • Loading branch information
crankyoldgit committed May 22, 2022
1 parent 535d5db commit 479ce61
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 34 deletions.
9 changes: 5 additions & 4 deletions src/IRac.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1169,14 +1169,14 @@ 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] sleep Nr. of minutes for sleep mode. -1 is Off, >= 0 is on.
void IRac::haier160(IRHaierAC160 *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 filter,
const bool turbo, const bool quiet, const bool clean,
const int16_t sleep) {
ac->begin();
// No Model setting available.
Expand All @@ -1189,7 +1189,8 @@ void IRac::haier160(IRHaierAC160 *ac,
ac->setQuiet(quiet);
ac->setTurbo(turbo);
// No Light setting available.
ac->setHealth(filter);
// No Filter setting available.
ac->setClean(clean);
// No Clean setting available.
// No Beep setting available.
ac->setSleep(sleep >= 0); // Sleep on this A/C is either on or off.
Expand Down Expand Up @@ -2972,7 +2973,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.filter, send.sleep);
send.fanspeed, send.swingv, send.turbo, send.clean, send.sleep);
break;
}
#endif // SEND_HAIER_AC160
Expand Down
26 changes: 15 additions & 11 deletions src/ir_Haier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1515,7 +1515,7 @@ void IRHaierAC160::stateReset(void) {
_.Model = kHaierAcYrw02ModelA;
_.Prefix = kHaierAc160Prefix;
_.Temp = kHaierAcYrw02DefTempC - kHaierAcYrw02MinTempC;
_.Health = true;
setClean(false);
setFan(kHaierAcYrw02FanAuto);
_.Power = true;
_.Button = kHaierAcYrw02ButtonPower;
Expand Down Expand Up @@ -1549,6 +1549,7 @@ void IRHaierAC160::setButton(uint8_t button) {
case kHaierAcYrw02ButtonTurbo:
case kHaierAcYrw02ButtonSleep:
case kHaierAcYrw02ButtonLock:
case kHaierAc160ButtonClean:
case kHaierAcYrw02ButtonCFAB:
_.Button = button;
}
Expand Down Expand Up @@ -1676,17 +1677,17 @@ uint8_t IRHaierAC160::getTemp(void) const {
return degree;
}

/// Set the Health (filter) setting of the A/C.
/// Set the Clean 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;
_.Health2 = on;
void IRHaierAC160::setClean(const bool on) {
_.Button = kHaierAc160ButtonClean;
_.Clean = on;
_.Clean2 = on;
}

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

/// Get the value of the current power setting.
/// @return true, the setting is on. false, the setting is off.
Expand Down Expand Up @@ -1980,15 +1981,15 @@ stdAc::state_t IRHaierAC160::toCommon(void) const {
result.fanspeed = toCommonFanSpeed(_.Fan);
result.swingv = toCommonSwingV(_.SwingV);
result.swingh = stdAc::swingh_t::kOff;
result.filter = _.Health && _.Health2;
result.sleep = _.Sleep ? 0 : -1;
result.turbo = _.Turbo;
result.quiet = _.Quiet;
result.clean = _.Clean && _.Clean2;
// Not supported.
result.filter = false;
result.model = -1;
result.econo = false;
result.light = false;
result.clean = false;
result.beep = true;
result.clock = -1;
return result;
Expand Down Expand Up @@ -2040,6 +2041,9 @@ String IRHaierAC160::toString(void) const {
case kHaierAcYrw02ButtonLock:
result += kLockStr;
break;
case kHaierAc160ButtonClean:
result += kCleanStr;
break;
case kHaierAcYrw02ButtonCFAB:
result += kCelsiusFahrenheitStr;
break;
Expand Down Expand Up @@ -2071,7 +2075,7 @@ String IRHaierAC160::toString(void) const {
}
result += ')';
result += addBoolToString(_.Sleep, kSleepStr);
result += addBoolToString(_.Health, kHealthStr);
result += addBoolToString(getClean(), kCleanStr);
const uint8_t tmode = getTimerMode();
result += addIntToString(tmode, kTimerModeStr);
result += kSpaceLBraceStr;
Expand Down
9 changes: 5 additions & 4 deletions src/ir_Haier.h
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ const uint8_t kHaierAcYrw02ButtonTurbo = 0b01000;
const uint8_t kHaierAcYrw02ButtonSleep = 0b01011;
const uint8_t kHaierAcYrw02ButtonTimer = 0b10000;
const uint8_t kHaierAcYrw02ButtonLock = 0b10100;
const uint8_t kHaierAc160ButtonClean = 0b11001;
const uint8_t kHaierAcYrw02ButtonCFAB = 0b11010;

const uint8_t kHaierAcYrw02NoTimers = 0b000;
Expand Down Expand Up @@ -312,7 +313,7 @@ union HaierAc160Protocol{
// Byte 10
uint8_t ExtraDegreeF :1;
uint8_t :3;
uint8_t Health :1;
uint8_t Clean :1;
uint8_t UseFahrenheit:1;
uint8_t :2;
// Byte 11
Expand All @@ -327,7 +328,7 @@ union HaierAc160Protocol{
uint8_t Prefix :8;
// Byte 15
uint8_t :6;
uint8_t Health2 :1;
uint8_t Clean2 :1;
uint8_t :1;
// Byte 16
uint8_t :5;
Expand Down Expand Up @@ -593,8 +594,8 @@ class IRHaierAC160 {

bool getSleep(void) const;
void setSleep(const bool on);
bool getHealth(void) const;
void setHealth(const bool on);
bool getClean(void) const;
void setClean(const bool on);

bool getTurbo(void) const;
void setTurbo(const bool on);
Expand Down
4 changes: 2 additions & 2 deletions test/IRac_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -827,7 +827,7 @@ TEST(TestIRac, Haier160) {
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, "
"Health: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, "
"Clean: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, "
"Lock: Off";
ac.begin();
irac.haier160(&ac,
Expand All @@ -839,7 +839,7 @@ TEST(TestIRac, Haier160) {
stdAc::swingv_t::kHigh, // Vertical swing
true, // Turbo
false, // Quiet
true, // Filter
true, // Clean
8 * 60 + 0); // Sleep time
ASSERT_EQ(expected, ac.toString());
ac._irsend.makeDecodeResult();
Expand Down
55 changes: 42 additions & 13 deletions test/ir_Haier_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1589,7 +1589,7 @@ 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, Health: Off, "
"Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), Sleep: Off, Clean: Off, "
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
IRAcUtils::resultAcToString(&irsend.capture));
stdAc::state_t result, prev;
Expand All @@ -1616,7 +1616,7 @@ 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, Health: Off, "
"Turbo: Off, Quiet: Off, Swing(V): 12 (Auto), Sleep: Off, Clean: Off, "
"Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off, Lock: Off",
IRAcUtils::resultAcToString(&irsend.capture));
stdAc::state_t result, prev;
Expand Down Expand Up @@ -1761,22 +1761,51 @@ TEST(TestHaierAC160Class, Temperature) {
EXPECT_EQ(kHaierAcYrw02ButtonTempUp, ac.getButton());
}

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

ac.setHealth(true);
EXPECT_TRUE(ac.getHealth());
EXPECT_EQ(kHaierAcYrw02ButtonHealth, ac.getButton());
ac.setClean(true);
EXPECT_TRUE(ac.getClean());
EXPECT_EQ(kHaierAc160ButtonClean, 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());
ac.setClean(false);
EXPECT_FALSE(ac.getClean());
EXPECT_EQ(kHaierAc160ButtonClean, ac.getButton());

ac.setClean(true);
EXPECT_TRUE(ac.getClean());
EXPECT_EQ(kHaierAc160ButtonClean, ac.getButton());

ac.stateReset();
EXPECT_FALSE(ac.getClean());
// clean button pressed.
// https://docs.google.com/spreadsheets/d/1RNJ7esbArS5fy1lmiM-i1PekXSNojCMad4WuuyunsC8/edit#gid=2048081808&range=FR22
const uint8_t clean_on[kHaierAC160StateLength] = {
0xA6, 0xAC, 0x00, 0x00, 0x40, 0x60, 0x00, 0x20, 0x00, 0x00,
0x10, 0x00, 0x19, 0x3B, 0xB5, 0x40, 0x60, 0x00, 0x00, 0x55};
ac.setRaw(clean_on);
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), "
"Sleep: Off, Clean: On, Timer Mode: 0 (N/A), "
"On Timer: Off, Off Timer: Off, Lock: Off",
ac.toString());
// No clean set.
// https://docs.google.com/spreadsheets/d/1RNJ7esbArS5fy1lmiM-i1PekXSNojCMad4WuuyunsC8/edit#gid=2048081808&range=FR4
const uint8_t clean_off[kHaierAC160StateLength] = {
0xA6, 0xAC, 0x00, 0x00, 0x40, 0x60, 0x00, 0x20, 0x00, 0x00,
0x00, 0x00, 0x05, 0x17, 0xB5, 0x00, 0x60, 0x00, 0x00, 0x15};
ac.setRaw(clean_off);
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), "
"Sleep: Off, Clean: Off, Timer Mode: 0 (N/A), "
"On Timer: Off, Off Timer: Off, Lock: Off",
ac.toString());
}

TEST(TestHaierAC160Class, Power) {
Expand Down

0 comments on commit 479ce61

Please sign in to comment.