diff --git a/src/IRac.cpp b/src/IRac.cpp index 67c218c1e..571e31c8e 100644 --- a/src/IRac.cpp +++ b/src/IRac.cpp @@ -1167,6 +1167,7 @@ void IRac::ecoclim(IREcoclimAc *ac, /// @param[in] swingv The vertical swing setting. /// @param[in] swingh The horizontal swing setting. /// @param[in] iFeel Whether to enable iFeel (remote temp) mode on the A/C unit. +/// @param[in] quiet Run the device in quiet/silent mode. /// @param[in] turbo Run the device in turbo/powerful mode. /// @param[in] lighttoggle Should we toggle the LED/Display? /// @param[in] clean Turn on the self-cleaning mode. e.g. Mould, dry filters etc @@ -1175,7 +1176,8 @@ void IRac::electra(IRElectraAc *ac, const float degrees, const float sensorTemp, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool iFeel, - const bool turbo, const bool lighttoggle, const bool clean) { + const bool quiet, const bool turbo, const bool lighttoggle, + const bool clean) { ac->begin(); ac->setPower(on); ac->setMode(ac->convertMode(mode)); @@ -1186,7 +1188,7 @@ void IRac::electra(IRElectraAc *ac, ac->setFan(ac->convertFan(fan)); ac->setSwingV(swingv != stdAc::swingv_t::kOff); ac->setSwingH(swingh != stdAc::swingh_t::kOff); - // No Quiet setting available. + ac->setQuiet(quiet); ac->setTurbo(turbo); ac->setLightToggle(lighttoggle); // No Econo setting available. @@ -3223,8 +3225,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { { IRElectraAc ac(_pin, _inverted, _modulation); electra(&ac, send.power, send.mode, degC, sensorTempC, send.fanspeed, - send.swingv, send.swingh, send.iFeel, send.turbo, send.light, - send.clean); + send.swingv, send.swingh, send.iFeel, send.quiet, send.turbo, + send.light, send.clean); break; } #endif // SEND_ELECTRA_AC diff --git a/src/IRac.h b/src/IRac.h index 7f4a3cf01..e3c261d0d 100644 --- a/src/IRac.h +++ b/src/IRac.h @@ -264,8 +264,8 @@ void electra(IRElectraAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const float sensorTemp, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, - const stdAc::swingh_t swingh, const bool iFeel, const bool turbo, - const bool lighttoggle, const bool clean); + const stdAc::swingh_t swingh, const bool iFeel, const bool quiet, + const bool turbo, const bool lighttoggle, const bool clean); #endif // SEND_ELECTRA_AC #if SEND_FUJITSU_AC void fujitsu(IRFujitsuAC *ac, const fujitsu_ac_remote_model_t model, diff --git a/src/ir_Electra.cpp b/src/ir_Electra.cpp index f8edf9729..40e208a52 100644 --- a/src/ir_Electra.cpp +++ b/src/ir_Electra.cpp @@ -310,6 +310,18 @@ bool IRElectraAc::getTurbo(void) const { return _.Turbo; } +/// Set the Quiet/Silent'mode of the A/C. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRElectraAc::setQuiet(const bool on) { + _.Quiet = on; +} + +/// Get the Quiet/Silent mode of the A/C. +/// @return true, the setting is on. false, the setting is off. +bool IRElectraAc::getQuiet(void) const { + return _.Quiet; +} + /// Get the IFeel mode of the A/C. /// @return true, the setting is on. false, the setting is off. bool IRElectraAc::getIFeel(void) const { return _.IFeel; } @@ -373,11 +385,11 @@ stdAc::state_t IRElectraAc::toCommon(void) const { : stdAc::swingh_t::kOff; result.light = getLightToggle(); result.turbo = _.Turbo; + result.quiet = _.Quiet; result.clean = _.Clean; result.iFeel = getIFeel(); // Not supported. result.model = -1; // No models used. - result.quiet = false; result.econo = false; result.filter = false; result.beep = false; @@ -404,6 +416,7 @@ String IRElectraAc::toString(void) const { result += addToggleToString(getLightToggle(), kLightStr); result += addBoolToString(_.Clean, kCleanStr); result += addBoolToString(_.Turbo, kTurboStr); + result += addBoolToString(_.Quiet, kQuietStr); result += addBoolToString(_.IFeel, kIFeelStr); } if (_.IFeel || _.SensorUpdate) { diff --git a/src/ir_Electra.h b/src/ir_Electra.h index 602406d8d..ebc330068 100644 --- a/src/ir_Electra.h +++ b/src/ir_Electra.h @@ -15,6 +15,7 @@ // Brand: Centek, Model: YKR-P/002E remote // Brand: AEG, Model: Chillflex Pro AXP26U338CW A/C // Brand: Electrolux, Model: YKR-H/531E A/C +// Brand: Delonghi, Modell: PAC EM90 #ifndef IR_ELECTRA_H_ #define IR_ELECTRA_H_ @@ -52,7 +53,7 @@ union ElectraProtocol { // Byte 5 uint8_t :6; uint8_t Turbo :1; - uint8_t :1; + uint8_t Quiet :1; // Byte 6 uint8_t :3; uint8_t IFeel :1; @@ -145,6 +146,8 @@ class IRElectraAc { bool getLightToggle(void) const; void setTurbo(const bool on); bool getTurbo(void) const; + void setQuiet(const bool on); + bool getQuiet(void) const; void setIFeel(const bool on); bool getIFeel(void) const; void setSensorUpdate(const bool on); diff --git a/test/IRac_test.cpp b/test/IRac_test.cpp index 8d6274c65..5d9084ecb 100644 --- a/test/IRac_test.cpp +++ b/test/IRac_test.cpp @@ -613,7 +613,7 @@ TEST(TestIRac, Electra) { char expected[] = "Power: On, Mode: 6 (Fan), Temp: 26C, Fan: 1 (High), " "Swing(V): On, Swing(H): On, Light: Toggle, Clean: On, Turbo: On, " - "IFeel: Off"; + "Quiet: On, IFeel: Off"; ac.begin(); irac.electra(&ac, @@ -625,6 +625,7 @@ TEST(TestIRac, Electra) { stdAc::swingv_t::kAuto, // Vertical swing stdAc::swingh_t::kLeft, // Horizontal swing false, // iFeel + true, // Quiet true, // Turbo true, // Light (toggle) true); // Clean diff --git a/test/ir_Electra_test.cpp b/test/ir_Electra_test.cpp index 9c1dedd09..6eefc8b1d 100644 --- a/test/ir_Electra_test.cpp +++ b/test/ir_Electra_test.cpp @@ -102,7 +102,7 @@ TEST(TestDecodeElectraAC, RealExampleDecode) { EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), " "Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off, " - "IFeel: Off", + "Quiet: Off, IFeel: Off", IRAcUtils::resultAcToString(&irsend.capture)); stdAc::state_t r, p; ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &r, &p)); @@ -237,7 +237,7 @@ TEST(TestIRElectraAcClass, HumanReadable) { EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 32C, Fan: 5 (Auto), " "Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off, " - "IFeel: Off", + "Quiet: Off, IFeel: Off", ac.toString()); uint8_t on_cool_16C_auto_voff[13] = { 0xC3, 0x47, 0xE0, 0x00, 0xA0, 0x00, 0x20, @@ -246,7 +246,7 @@ TEST(TestIRElectraAcClass, HumanReadable) { EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 16C, Fan: 5 (Auto), " "Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off, " - "IFeel: Off", + "Quiet: Off, IFeel: Off", ac.toString()); uint8_t on_cool_16C_low_voff[13] = { 0xC3, 0x47, 0xE0, 0x00, 0x60, 0x00, 0x20, @@ -255,7 +255,7 @@ TEST(TestIRElectraAcClass, HumanReadable) { EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 16C, Fan: 3 (Low), " "Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off, " - "IFeel: Off", + "Quiet: Off, IFeel: Off", ac.toString()); } @@ -280,7 +280,7 @@ TEST(TestIRElectraAcClass, Clean) { EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), " "Swing(V): Off, Swing(H): Off, Light: Toggle, Clean: On, Turbo: Off, " - "IFeel: Off", + "Quiet: Off, IFeel: Off", ac.toString()); } @@ -307,7 +307,7 @@ TEST(TestIRElectraAcClass, Turbo) { EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), " "Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: On, " - "IFeel: Off", + "Quiet: Off, IFeel: Off", ac.toString()); } @@ -332,7 +332,7 @@ TEST(TestIRElectraAcClass, LightToggle) { EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), " "Swing(V): Off, Swing(H): Off, Light: Toggle, Clean: On, Turbo: Off, " - "IFeel: Off", + "Quiet: Off, IFeel: Off", ac.toString()); } @@ -360,7 +360,7 @@ TEST(TestIRElectraAcClass, ConstructKnownState) { EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), " "Swing(V): Off, Swing(H): Off, Light: Toggle, Clean: On, Turbo: Off, " - "IFeel: Off", + "Quiet: Off, IFeel: Off", ac.toString()); EXPECT_STATE_EQ(on_cool_24C_fan1_swing_off_turbo_off_clean_on, ac.getRaw(), kElectraAcBits); @@ -379,7 +379,7 @@ TEST(TestIRElectraAcClass, IFeelAndSensor) { EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 21C, Fan: 5 (Auto), " "Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off, " - "IFeel: On, Sensor Temp: 26C", + "Quiet: Off, IFeel: On, Sensor Temp: 26C", ac.toString()); ac.stateReset(); @@ -429,6 +429,6 @@ TEST(TestIRElectraAcClass, IFeelAndSensor) { EXPECT_EQ( "Power: On, Mode: 4 (Heat), Temp: 27C, Fan: 5 (Auto), " "Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off, " - "IFeel: On, Sensor Temp: 28C", + "Quiet: Off, IFeel: On, Sensor Temp: 28C", ac.toString()); }