mirror of
https://github.com/crankyoldgit/IRremoteESP8266.git
synced 2026-01-12 00:05:10 +08:00
Quiet/Silent Mode for Electra_AC (#1990)
* Add Delonghi PAC EM90 to Electra compat. list * Add Electra_AC Quiet Mode ( testet with Delonghi PAC EM90 ) --------- Co-authored-by: noone2k <only_today@gmx.de>
This commit is contained in:
10
src/IRac.cpp
10
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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user