mirror of
https://github.com/GrKoR/esphome_aux_ac_component.git
synced 2025-12-06 03:26:56 +03:00
fix: esp8266 compatibility
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
// конвертирует состояние жалюзи из кодов сплита в коды для фронтенда
|
// конвертирует состояние жалюзи из кодов сплита в коды для фронтенда
|
||||||
|
|||||||
Reference in New Issue
Block a user