From 9c2daf0615917e26123e32151770c23e12cc6c23 Mon Sep 17 00:00:00 2001 From: GrKoR Date: Sat, 26 Oct 2024 23:25:08 +0300 Subject: [PATCH] fix: esp8266 compatibility --- components/aux_ac/aux_ac.h | 77 +++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 35 deletions(-) diff --git a/components/aux_ac/aux_ac.h b/components/aux_ac/aux_ac.h index 6767852..88d0015 100644 --- a/components/aux_ac/aux_ac.h +++ b/components/aux_ac/aux_ac.h @@ -6,9 +6,6 @@ #include #include -#ifndef F -#define F(string_literal) (string_literal) -#endif #include "esphome.h" #include "esphome/components/binary_sensor/binary_sensor.h" @@ -19,6 +16,11 @@ #include "esphome/core/component.h" #include "esphome/core/helpers.h" +#ifndef USE_ARDUINO +using String = std::string; +#define F(string_literal) (string_literal) +#endif + // весь функционал сохранения пресетов прячу под дефайн // #define PRESETS_SAVING #ifdef PRESETS_SAVING @@ -713,16 +715,16 @@ namespace esphome { AC_COMMAND_BASE; ac_health_status health_status; - float temp_ambient; // внутренняя температура - int8_t temp_outdoor; // внешняя температура - int8_t temp_inbound; // температура входящая - int8_t temp_outbound; // температура исходящая - int8_t temp_compressor; // температура компрессора - ac_realFan realFanSpeed; // текущая скорость вентилятора - uint8_t inverter_power; // мощность инвертора - bool defrost; // режим разморозки внешнего блока (накопление тепла + прогрев испарителя) - ac_powLim_state power_lim_state; // статус ограничения мощности инвертора - uint8_t power_lim_value; // значение ограничения мощности инвертора + float temp_ambient; // внутренняя температура + int8_t temp_outdoor; // внешняя температура + int8_t temp_inbound; // температура входящая + int8_t temp_outbound; // температура исходящая + int8_t temp_compressor; // температура компрессора + ac_realFan realFanSpeed; // текущая скорость вентилятора + uint8_t inverter_power; // мощность инвертора + bool defrost; // режим разморозки внешнего блока (накопление тепла + прогрев испарителя) + ac_powLim_state power_lim_state; // статус ограничения мощности инвертора + uint8_t power_lim_value; // значение ограничения мощности инвертора }; typedef ac_command_t ac_state_t; // текущее состояние параметров кондея можно хранить в таком же формате, как и комманды @@ -1523,15 +1525,15 @@ namespace esphome stateByte = small_info_body->display_and_mildew & AC_MILDEW_MASK; stateChangedFlag = stateChangedFlag || (_current_ac_state.mildew != (ac_mildew)stateByte); _current_ac_state.mildew = (ac_mildew)stateByte; - + stateByte = AC_POWLIMSTAT_ON * small_info_body->inverter_power_limitation_enable; stateChangedFlag = stateChangedFlag || (_current_ac_state.power_lim_state != (ac_powLim_state)stateByte); - _current_ac_state.power_lim_state = (ac_powLim_state)stateByte; - + _current_ac_state.power_lim_state = (ac_powLim_state)stateByte; + stateByte = small_info_body->inverter_power_limitation_value; stateChangedFlag = stateChangedFlag || (_current_ac_state.power_lim_value != stateByte); _current_ac_state.power_lim_value = stateByte; - + // уведомляем об изменении статуса сплита if (stateChangedFlag) stateChanged(); @@ -1667,7 +1669,7 @@ namespace esphome * msg - сообщение, выводимое в лог * line - строка, на которой произошел вызов (удобно при отладке) */ - void _debugMsg(const std::string &msg, uint8_t dbgLevel = ESPHOME_LOG_LEVEL_DEBUG, unsigned int line = 0, ...) + void _debugMsg(const String &msg, uint8_t dbgLevel = ESPHOME_LOG_LEVEL_DEBUG, unsigned int line = 0, ...) { if (dbgLevel < ESPHOME_LOG_LEVEL_NONE) dbgLevel = ESPHOME_LOG_LEVEL_NONE; @@ -1708,7 +1710,7 @@ namespace esphome if ((!notAPacket) && (!HOLMES_WORKS)) return; - std::string st = ""; + String st = ""; char textBuf[11]; // заполняем время получения пакета @@ -3548,7 +3550,7 @@ namespace esphome } // устанавливает ограничение мощности сплита на нужный уровень - bool powerLimitationSetSequence(uint8_t power_limit, bool set_on=false) + bool powerLimitationSetSequence(uint8_t power_limit, bool set_on = false) { // нет смысла в последовательности, если нет коннекта с кондиционером if (!get_has_connection()) @@ -3563,12 +3565,12 @@ namespace esphome return false; } - if(power_limit != this->_power_limitation_value_normalise(power_limit)) + if (power_limit != this->_power_limitation_value_normalise(power_limit)) { _debugMsg(F("powerLimitationSetSequence: incorrect power limit value."), ESPHOME_LOG_LEVEL_WARN, __LINE__); return false; } - + // формируем команду ac_command_t cmd; _clearCommand(&cmd); // не забываем очищать, а то будет мусор @@ -3580,12 +3582,14 @@ namespace esphome // добавляем команду в последовательность if (!commandSequence(&cmd)) return false; - + if (set_on) { - _debugMsg(F("powerLimitationSetSequence: loaded (state = %02X, power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, cmd.power_lim_state, power_limit); - } else { - _debugMsg(F("powerLimitationSetSequence: loaded (power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, power_limit); + _debugMsg(F("powerLimitationSetSequence: loaded (state = %02X, power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, cmd.power_lim_state, power_limit); + } + else + { + _debugMsg(F("powerLimitationSetSequence: loaded (power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, power_limit); } return true; } @@ -3605,14 +3609,17 @@ namespace esphome _debugMsg(F("powerLimitationOnSequence: unsupported for noninverter AC."), ESPHOME_LOG_LEVEL_WARN, __LINE__); return false; // если кондиционер не инверторный, то выходим } - + // формируем команду ac_command_t cmd; _clearCommand(&cmd); // не забываем очищать, а то будет мусор - if(enable_limit){ - cmd.power_lim_state = AC_POWLIMSTAT_ON; // включить ограничение мощности - } else { - cmd.power_lim_state = AC_POWLIMSTAT_OFF; // отключить ограничение мощности + if (enable_limit) + { + cmd.power_lim_state = AC_POWLIMSTAT_ON; // включить ограничение мощности + } + else + { + cmd.power_lim_state = AC_POWLIMSTAT_OFF; // отключить ограничение мощности } // добавляем команду в последовательность if (!commandSequence(&cmd)) @@ -3625,19 +3632,19 @@ namespace esphome // включает ограничение мощности сплита bool powerLimitationOnSequence() { - return powerLimitationOnOffSequence(true); + return powerLimitationOnOffSequence(true); } // включает ограничение мощности сплита на нужный уровень bool powerLimitationOnSequence(uint8_t power_limit) { - return powerLimitationSetSequence(power_limit, true); + return powerLimitationSetSequence(power_limit, true); } - + // выключает ограничение мощности сплита bool powerLimitationOffSequence() { - return powerLimitationOnOffSequence(false); + return powerLimitationOnOffSequence(false); } // конвертирует состояние жалюзи из кодов сплита в коды для фронтенда