From 5499e2ec2f232c895f8197f35577542a66eeb08d Mon Sep 17 00:00:00 2001 From: Djordje <6750655+DjordjeMandic@users.noreply.github.com> Date: Fri, 22 Nov 2024 00:48:14 +0100 Subject: [PATCH] remove midea_ir autoload --- esphome/components/midea/climate.py | 2 +- esphome/components/midea/ir_transmitter.h | 63 +++++++++++++++++++++-- esphome/components/midea_ir/__init__.py | 1 - esphome/components/midea_ir/climate.py | 2 +- 4 files changed, 62 insertions(+), 6 deletions(-) diff --git a/esphome/components/midea/climate.py b/esphome/components/midea/climate.py index 47b86da895..24b7976963 100644 --- a/esphome/components/midea/climate.py +++ b/esphome/components/midea/climate.py @@ -38,7 +38,7 @@ from esphome.components.climate import ( CODEOWNERS = ["@dudanov"] DEPENDENCIES = ["climate", "uart"] -AUTO_LOAD = ["sensor", "midea_ir"] +AUTO_LOAD = ["sensor"] CONF_POWER_USAGE = "power_usage" CONF_HUMIDITY_SETPOINT = "humidity_setpoint" midea_ac_ns = cg.esphome_ns.namespace("midea").namespace("ac") diff --git a/esphome/components/midea/ir_transmitter.h b/esphome/components/midea/ir_transmitter.h index 2cd5c0000c..e93ba57a9e 100644 --- a/esphome/components/midea/ir_transmitter.h +++ b/esphome/components/midea/ir_transmitter.h @@ -3,15 +3,72 @@ #ifdef USE_ARDUINO #ifdef USE_REMOTE_TRANSMITTER #include "esphome/components/remote_base/midea_protocol.h" -#include "esphome/components/midea_ir/midea_data.h" namespace esphome { namespace midea { using remote_base::RemoteTransmitterBase; using IrData = remote_base::MideaData; -using IrFollowMeData = midea_ir::FollowMeData; -using IrSpecialData = midea_ir::SpecialData; + +class IrFollowMeData : public IrData { + public: + // Default constructor (temp: 30C, beeper: off) + FollowMeData() : IrData({MIDEA_TYPE_FOLLOW_ME, 0x82, 0x48, 0x7F, 0x1F}) {} + // Copy from Base + FollowMeData(const IrData &data) : IrData(data) {} + // Direct from temperature in celsius and beeper values + FollowMeData(uint8_t temp, bool beeper = false) : FollowMeData() { + this->set_temp(temp, false); + this->set_beeper(beeper); + } + // Direct from temperature, fahrenheit and beeper values + FollowMeData(uint8_t temp, bool fahrenheit, bool beeper) : FollowMeData() { + 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: + SpecialData(uint8_t code) : IrData({MIDEA_TYPE_SPECIAL, code, 0xFF, 0xFF, 0xFF}) {} +}; class IrTransmitter { public: diff --git a/esphome/components/midea_ir/__init__.py b/esphome/components/midea_ir/__init__.py index db3484e0be..e69de29bb2 100644 --- a/esphome/components/midea_ir/__init__.py +++ b/esphome/components/midea_ir/__init__.py @@ -1 +0,0 @@ -AUTO_LOAD = ["climate_ir", "coolix"] diff --git a/esphome/components/midea_ir/climate.py b/esphome/components/midea_ir/climate.py index db6cca2207..8fea6b192b 100644 --- a/esphome/components/midea_ir/climate.py +++ b/esphome/components/midea_ir/climate.py @@ -3,7 +3,7 @@ import esphome.config_validation as cv from esphome.components import climate_ir from esphome.const import CONF_ID, CONF_USE_FAHRENHEIT -AUTO_LOAD = ["midea_ir"] +AUTO_LOAD = ["climate_ir", "coolix"] CODEOWNERS = ["@dudanov"] midea_ir_ns = cg.esphome_ns.namespace("midea_ir")