fix: esp8266 compatibility

This commit is contained in:
GrKoR
2024-10-26 23:25:08 +03:00
parent 3ca873450d
commit 9c2daf0615

View File

@@ -6,9 +6,6 @@
#include <stdarg.h> #include <stdarg.h>
#include <cinttypes> #include <cinttypes>
#ifndef F
#define F(string_literal) (string_literal)
#endif
#include "esphome.h" #include "esphome.h"
#include "esphome/components/binary_sensor/binary_sensor.h" #include "esphome/components/binary_sensor/binary_sensor.h"
@@ -19,6 +16,11 @@
#include "esphome/core/component.h" #include "esphome/core/component.h"
#include "esphome/core/helpers.h" #include "esphome/core/helpers.h"
#ifndef USE_ARDUINO
using String = std::string;
#define F(string_literal) (string_literal)
#endif
// весь функционал сохранения пресетов прячу под дефайн // весь функционал сохранения пресетов прячу под дефайн
// #define PRESETS_SAVING // #define PRESETS_SAVING
#ifdef PRESETS_SAVING #ifdef PRESETS_SAVING
@@ -713,16 +715,16 @@ namespace esphome
{ {
AC_COMMAND_BASE; AC_COMMAND_BASE;
ac_health_status health_status; ac_health_status health_status;
float temp_ambient; // внутренняя температура float temp_ambient; // внутренняя температура
int8_t temp_outdoor; // внешняя температура int8_t temp_outdoor; // внешняя температура
int8_t temp_inbound; // температура входящая int8_t temp_inbound; // температура входящая
int8_t temp_outbound; // температура исходящая int8_t temp_outbound; // температура исходящая
int8_t temp_compressor; // температура компрессора int8_t temp_compressor; // температура компрессора
ac_realFan realFanSpeed; // текущая скорость вентилятора ac_realFan realFanSpeed; // текущая скорость вентилятора
uint8_t inverter_power; // мощность инвертора uint8_t inverter_power; // мощность инвертора
bool defrost; // режим разморозки внешнего блока (накопление тепла + прогрев испарителя) bool defrost; // режим разморозки внешнего блока (накопление тепла + прогрев испарителя)
ac_powLim_state power_lim_state; // статус ограничения мощности инвертора ac_powLim_state power_lim_state; // статус ограничения мощности инвертора
uint8_t power_lim_value; // значение ограничения мощности инвертора uint8_t power_lim_value; // значение ограничения мощности инвертора
}; };
typedef ac_command_t ac_state_t; // текущее состояние параметров кондея можно хранить в таком же формате, как и комманды typedef ac_command_t ac_state_t; // текущее состояние параметров кондея можно хранить в таком же формате, как и комманды
@@ -1523,15 +1525,15 @@ namespace esphome
stateByte = small_info_body->display_and_mildew & AC_MILDEW_MASK; stateByte = small_info_body->display_and_mildew & AC_MILDEW_MASK;
stateChangedFlag = stateChangedFlag || (_current_ac_state.mildew != (ac_mildew)stateByte); stateChangedFlag = stateChangedFlag || (_current_ac_state.mildew != (ac_mildew)stateByte);
_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; stateByte = AC_POWLIMSTAT_ON * small_info_body->inverter_power_limitation_enable;
stateChangedFlag = stateChangedFlag || (_current_ac_state.power_lim_state != (ac_powLim_state)stateByte); 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; stateByte = small_info_body->inverter_power_limitation_value;
stateChangedFlag = stateChangedFlag || (_current_ac_state.power_lim_value != stateByte); stateChangedFlag = stateChangedFlag || (_current_ac_state.power_lim_value != stateByte);
_current_ac_state.power_lim_value = stateByte; _current_ac_state.power_lim_value = stateByte;
// уведомляем об изменении статуса сплита // уведомляем об изменении статуса сплита
if (stateChangedFlag) if (stateChangedFlag)
stateChanged(); stateChanged();
@@ -1667,7 +1669,7 @@ namespace esphome
* msg - сообщение, выводимое в лог * msg - сообщение, выводимое в лог
* line - строка, на которой произошел вызов (удобно при отладке) * 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) if (dbgLevel < ESPHOME_LOG_LEVEL_NONE)
dbgLevel = ESPHOME_LOG_LEVEL_NONE; dbgLevel = ESPHOME_LOG_LEVEL_NONE;
@@ -1708,7 +1710,7 @@ namespace esphome
if ((!notAPacket) && (!HOLMES_WORKS)) if ((!notAPacket) && (!HOLMES_WORKS))
return; return;
std::string st = ""; String st = "";
char textBuf[11]; 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()) if (!get_has_connection())
@@ -3563,12 +3565,12 @@ namespace esphome
return false; 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__); _debugMsg(F("powerLimitationSetSequence: incorrect power limit value."), ESPHOME_LOG_LEVEL_WARN, __LINE__);
return false; return false;
} }
// формируем команду // формируем команду
ac_command_t cmd; ac_command_t cmd;
_clearCommand(&cmd); // не забываем очищать, а то будет мусор _clearCommand(&cmd); // не забываем очищать, а то будет мусор
@@ -3580,12 +3582,14 @@ namespace esphome
// добавляем команду в последовательность // добавляем команду в последовательность
if (!commandSequence(&cmd)) if (!commandSequence(&cmd))
return false; return false;
if (set_on) if (set_on)
{ {
_debugMsg(F("powerLimitationSetSequence: loaded (state = %02X, power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, cmd.power_lim_state, 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); else
{
_debugMsg(F("powerLimitationSetSequence: loaded (power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, power_limit);
} }
return true; return true;
} }
@@ -3605,14 +3609,17 @@ namespace esphome
_debugMsg(F("powerLimitationOnSequence: unsupported for noninverter AC."), ESPHOME_LOG_LEVEL_WARN, __LINE__); _debugMsg(F("powerLimitationOnSequence: unsupported for noninverter AC."), ESPHOME_LOG_LEVEL_WARN, __LINE__);
return false; // если кондиционер не инверторный, то выходим return false; // если кондиционер не инверторный, то выходим
} }
// формируем команду // формируем команду
ac_command_t cmd; ac_command_t cmd;
_clearCommand(&cmd); // не забываем очищать, а то будет мусор _clearCommand(&cmd); // не забываем очищать, а то будет мусор
if(enable_limit){ if (enable_limit)
cmd.power_lim_state = AC_POWLIMSTAT_ON; // включить ограничение мощности {
} else { cmd.power_lim_state = AC_POWLIMSTAT_ON; // включить ограничение мощности
cmd.power_lim_state = AC_POWLIMSTAT_OFF; // отключить ограничение мощности }
else
{
cmd.power_lim_state = AC_POWLIMSTAT_OFF; // отключить ограничение мощности
} }
// добавляем команду в последовательность // добавляем команду в последовательность
if (!commandSequence(&cmd)) if (!commandSequence(&cmd))
@@ -3625,19 +3632,19 @@ namespace esphome
// включает ограничение мощности сплита // включает ограничение мощности сплита
bool powerLimitationOnSequence() bool powerLimitationOnSequence()
{ {
return powerLimitationOnOffSequence(true); return powerLimitationOnOffSequence(true);
} }
// включает ограничение мощности сплита на нужный уровень // включает ограничение мощности сплита на нужный уровень
bool powerLimitationOnSequence(uint8_t power_limit) bool powerLimitationOnSequence(uint8_t power_limit)
{ {
return powerLimitationSetSequence(power_limit, true); return powerLimitationSetSequence(power_limit, true);
} }
// выключает ограничение мощности сплита // выключает ограничение мощности сплита
bool powerLimitationOffSequence() bool powerLimitationOffSequence()
{ {
return powerLimitationOnOffSequence(false); return powerLimitationOnOffSequence(false);
} }
// конвертирует состояние жалюзи из кодов сплита в коды для фронтенда // конвертирует состояние жалюзи из кодов сплита в коды для фронтенда