diff --git a/esphome/components/midea/air_conditioner.cpp b/esphome/components/midea/air_conditioner.cpp index 2dc010a31d..4a55f50333 100644 --- a/esphome/components/midea/air_conditioner.cpp +++ b/esphome/components/midea/air_conditioner.cpp @@ -11,6 +11,9 @@ namespace esphome { namespace midea { namespace ac { +using IrFollowMeData = midea_ir::FollowMeData; +using IrSpecialData = midea_ir::SpecialData; + static void set_sensor(Sensor *sensor, float value) { if (sensor != nullptr && (!sensor->has_state() || sensor->get_raw_state() != value)) sensor->publish_state(value); diff --git a/esphome/components/midea/appliance_base.h b/esphome/components/midea/appliance_base.h index 060cbd996b..73a02af9b3 100644 --- a/esphome/components/midea/appliance_base.h +++ b/esphome/components/midea/appliance_base.h @@ -13,6 +13,9 @@ #include "esphome/core/log.h" #include "esphome/components/uart/uart.h" #include "esphome/components/climate/climate.h" + +// IR +#include "esphome/components/midea_ir/midea_data.h" #include "ir_transmitter.h" namespace esphome { diff --git a/esphome/components/midea/ir_transmitter.h b/esphome/components/midea/ir_transmitter.h index 0c63cd9db0..a93e02b3d7 100644 --- a/esphome/components/midea/ir_transmitter.h +++ b/esphome/components/midea/ir_transmitter.h @@ -3,78 +3,17 @@ #ifdef USE_ARDUINO #ifdef USE_REMOTE_TRANSMITTER #include "esphome/components/remote_base/midea_protocol.h" -#include "esphome/core/helpers.h" namespace esphome { namespace midea { using remote_base::RemoteTransmitterBase; -using IrData = remote_base::MideaData; - -class IrFollowMeData : public IrData { - public: - // Default constructor (temp: 30C, beeper: off) - IrFollowMeData() : IrData({MIDEA_TYPE_FOLLOW_ME, 0x82, 0x48, 0x7F, 0x1F}) {} - // Copy from Base - IrFollowMeData(const IrData &data) : IrData(data) {} - // Direct from temperature in celsius and beeper values - IrFollowMeData(uint8_t temp, bool beeper = false) : IrFollowMeData() { - this->set_temp(temp, false); - this->set_beeper(beeper); - } - // Direct from temperature, fahrenheit and beeper values - IrFollowMeData(uint8_t temp, bool fahrenheit, bool beeper) : IrFollowMeData() { - this->set_temp(temp, fahrenheit); - this->set_beeper(beeper); - } - - /* TEMPERATURE */ - uint8_t temp() const { - if (this->fahrenheit()) { - return this->get_value_(4) + 31; - } - return this->get_value_(4) - 1; - } - void set_temp(uint8_t val, bool fahrenheit = false) { - this->set_fahrenheit(fahrenheit); - if (this->fahrenheit()) { - // see https://github.com/esphome/feature-requests/issues/1627#issuecomment-1365639966 - val = esphome::clamp(val, MIN_TEMP_F, MAX_TEMP_F) - 31; - } else { - val = esphome::clamp(val, MIN_TEMP_C, MAX_TEMP_C) + 1; - } - this->set_value_(4, val); - } - - /* BEEPER */ - bool beeper() const { return this->get_value_(3, 128); } - void set_beeper(bool val) { this->set_mask_(3, val, 128); } - - /* FAHRENHEIT */ - bool fahrenheit() const { return this->get_value_(2, 32); } - void set_fahrenheit(bool val) { this->set_mask_(2, val, 32); } - - protected: - static const uint8_t MIN_TEMP_C = 0; - static const uint8_t MAX_TEMP_C = 37; - - // see - // https://github.com/crankyoldgit/IRremoteESP8266/blob/9bdf8abcb465268c5409db99dc83a26df64c7445/src/ir_Midea.h#L116 - static const uint8_t MIN_TEMP_F = 32; - // see - // https://github.com/crankyoldgit/IRremoteESP8266/blob/9bdf8abcb465268c5409db99dc83a26df64c7445/src/ir_Midea.h#L117 - static const uint8_t MAX_TEMP_F = 99; -}; - -class IrSpecialData : public IrData { - public: - IrSpecialData(uint8_t code) : IrData({MIDEA_TYPE_SPECIAL, code, 0xFF, 0xFF, 0xFF}) {} -}; +using remote_base::MideaData; class IrTransmitter { public: void set_transmitter(RemoteTransmitterBase *transmitter) { this->transmitter_ = transmitter; } - void transmit(IrData &data) { + void transmit(MideaData &data) { data.finalize(); auto transmit = this->transmitter_->transmit(); remote_base::MideaProtocol().encode(transmit.get_data(), data); diff --git a/esphome/components/midea_ir/midea_data.h b/esphome/components/midea_ir/midea_data.h index a6f7a71987..56fc3c981d 100644 --- a/esphome/components/midea_ir/midea_data.h +++ b/esphome/components/midea_ir/midea_data.h @@ -1,5 +1,7 @@ #pragma once +#ifdef USE_REMOTE_TRANSMITTER + #include "esphome/components/remote_base/midea_protocol.h" #include "esphome/components/climate/climate_mode.h" #include "esphome/core/helpers.h" @@ -94,7 +96,7 @@ class FollowMeData : public MideaData { /* BEEPER */ bool beeper() const { return this->get_value_(3, 128); } - void set_beeper(bool value) { this->set_mask_(3, value, 128); } + void set_beeper(bool val) { this->set_mask_(3, val, 128); } /* FAHRENHEIT */ bool fahrenheit() const { return this->get_value_(2, 32); } @@ -122,3 +124,5 @@ class SpecialData : public MideaData { } // namespace midea_ir } // namespace esphome + +#endif // USE_REMOTE_TRANSMITTER \ No newline at end of file