mirror of
https://github.com/GrKoR/esphome_aux_ac_component.git
synced 2025-12-13 06:57:01 +03:00
v.0.2.9-dev.2: power limitation bug fixes
This commit is contained in:
@@ -66,7 +66,7 @@ class Constants {
|
|||||||
static const uint32_t AC_STATES_REQUEST_INTERVAL;
|
static const uint32_t AC_STATES_REQUEST_INTERVAL;
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::string Constants::AC_FIRMWARE_VERSION = "0.2.9-dev";
|
const std::string Constants::AC_FIRMWARE_VERSION = "0.2.9-dev.2";
|
||||||
|
|
||||||
// custom fan modes
|
// custom fan modes
|
||||||
const std::string Constants::MUTE = "mute";
|
const std::string Constants::MUTE = "mute";
|
||||||
@@ -365,8 +365,8 @@ struct packet_small_info_body_t {
|
|||||||
uint8_t display_and_mildew;
|
uint8_t display_and_mildew;
|
||||||
|
|
||||||
// байт 21 пакета: https://github.com/GrKoR/AUX_HVAC_Protocol#packet_cmd_11_b21
|
// байт 21 пакета: https://github.com/GrKoR/AUX_HVAC_Protocol#packet_cmd_11_b21
|
||||||
bool inverter_power_limitation_enable : 1;
|
|
||||||
uint8_t inverter_power_limitation_value : 7;
|
uint8_t inverter_power_limitation_value : 7;
|
||||||
|
bool inverter_power_limitation_enable : 1;
|
||||||
|
|
||||||
// байт 22 пакета: https://github.com/GrKoR/AUX_HVAC_Protocol#packet_cmd_11_b22
|
// байт 22 пакета: https://github.com/GrKoR/AUX_HVAC_Protocol#packet_cmd_11_b22
|
||||||
uint8_t target_temp_frac2;
|
uint8_t target_temp_frac2;
|
||||||
@@ -514,6 +514,7 @@ enum ac_mildew : uint8_t { AC_MILDEW_OFF = 0x00,
|
|||||||
// маски ограничения мощности для инверторного кондиционера
|
// маски ограничения мощности для инверторного кондиционера
|
||||||
#define AC_INVERTER_POWER_LIMITATION_ENABLE_MASK 0b10000000
|
#define AC_INVERTER_POWER_LIMITATION_ENABLE_MASK 0b10000000
|
||||||
#define AC_INVERTER_POWER_LIMITATION_VALUE_MASK 0b01111111
|
#define AC_INVERTER_POWER_LIMITATION_VALUE_MASK 0b01111111
|
||||||
|
#define AC_INVERTER_POWER_LIMITATION_VALUE_UNTOUCHED 0xFF
|
||||||
|
|
||||||
// положение вертикальных жалюзи для фронтенда
|
// положение вертикальных жалюзи для фронтенда
|
||||||
enum ac_vlouver_frontend : uint8_t {
|
enum ac_vlouver_frontend : uint8_t {
|
||||||
@@ -959,7 +960,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
cmd->invertor_power = 0;
|
cmd->invertor_power = 0;
|
||||||
cmd->defrost = false;
|
cmd->defrost = false;
|
||||||
cmd->inverter_power_limitation_enable =false;
|
cmd->inverter_power_limitation_enable =false;
|
||||||
cmd->inverter_power_limitation_value = 0;
|
cmd->inverter_power_limitation_value = AC_INVERTER_POWER_LIMITATION_VALUE_UNTOUCHED;
|
||||||
};
|
};
|
||||||
|
|
||||||
// очистка буфера размером AC_BUFFER_SIZE
|
// очистка буфера размером AC_BUFFER_SIZE
|
||||||
@@ -1344,7 +1345,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
stateChangedFlag = stateChangedFlag || (_current_ac_state.temp_compressor != stateFloat);
|
stateChangedFlag = stateChangedFlag || (_current_ac_state.temp_compressor != stateFloat);
|
||||||
_current_ac_state.temp_compressor = stateFloat;
|
_current_ac_state.temp_compressor = stateFloat;
|
||||||
|
|
||||||
// реальная скорость проперлера
|
// реальная скорость пропеллера
|
||||||
stateFloat = big_info_body->realFanSpeed;
|
stateFloat = big_info_body->realFanSpeed;
|
||||||
stateChangedFlag = stateChangedFlag || (_current_ac_state.realFanSpeed != (ac_realFan)stateFloat);
|
stateChangedFlag = stateChangedFlag || (_current_ac_state.realFanSpeed != (ac_realFan)stateFloat);
|
||||||
_current_ac_state.realFanSpeed = (ac_realFan)stateFloat;
|
_current_ac_state.realFanSpeed = (ac_realFan)stateFloat;
|
||||||
@@ -1666,9 +1667,11 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ограничение мощности инвертора
|
// ограничение мощности инвертора
|
||||||
pack->body[13] = (pack->body[13] & ~AC_INVERTER_POWER_LIMITATION_ENABLE_MASK) | cmd->inverter_power_limitation_enable;
|
if (cmd->inverter_power_limitation_value != AC_INVERTER_POWER_LIMITATION_VALUE_UNTOUCHED) {
|
||||||
cmd->inverter_power_limitation_value = _power_limitation_value_normalise(cmd->inverter_power_limitation_value);
|
pack->body[13] = (pack->body[13] & ~AC_INVERTER_POWER_LIMITATION_ENABLE_MASK) | cmd->inverter_power_limitation_enable;
|
||||||
pack->body[13] = (pack->body[13] & ~AC_INVERTER_POWER_LIMITATION_VALUE_MASK) | cmd->inverter_power_limitation_value;
|
cmd->inverter_power_limitation_value = _power_limitation_value_normalise(cmd->inverter_power_limitation_value);
|
||||||
|
pack->body[13] = (pack->body[13] & ~AC_INVERTER_POWER_LIMITATION_VALUE_MASK) | cmd->inverter_power_limitation_value;
|
||||||
|
}
|
||||||
|
|
||||||
// обнулить счетчик минут с последней команды
|
// обнулить счетчик минут с последней команды
|
||||||
// GK: считаю, что так делать не надо. Штатный wifi-модуль не сбрасывает счетчик минут.
|
// GK: считаю, что так делать не надо. Штатный wifi-модуль не сбрасывает счетчик минут.
|
||||||
@@ -2074,6 +2077,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
void stateChanged() {
|
void stateChanged() {
|
||||||
_debugMsg(F("State changed, let's publish it."), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__);
|
_debugMsg(F("State changed, let's publish it."), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__);
|
||||||
|
|
||||||
|
// экшины кондиционера (информация для пользователя, что кондиционер сейчас делает)
|
||||||
// сейчас экшины рассчётные и могут не отражать реального положения дел, но других вариантов не придумалось
|
// сейчас экшины рассчётные и могут не отражать реального положения дел, но других вариантов не придумалось
|
||||||
if (_is_invertor) {
|
if (_is_invertor) {
|
||||||
// анализ режима для инвертора точнее потому, что использует показания мощности инвертора
|
// анализ режима для инвертора точнее потому, что использует показания мощности инвертора
|
||||||
@@ -2433,6 +2437,8 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
LOG_BINARY_SENSOR(" ", "Defrost Status", this->sensor_defrost_);
|
LOG_BINARY_SENSOR(" ", "Defrost Status", this->sensor_defrost_);
|
||||||
LOG_BINARY_SENSOR(" ", "Display", this->sensor_display_);
|
LOG_BINARY_SENSOR(" ", "Display", this->sensor_display_);
|
||||||
LOG_TEXT_SENSOR(" ", "Preset Reporter", this->sensor_preset_reporter_);
|
LOG_TEXT_SENSOR(" ", "Preset Reporter", this->sensor_preset_reporter_);
|
||||||
|
LOG_SENSOR(" ", "Inverter Power Limit Value", this->sensor_invertor_power_limit_value_);
|
||||||
|
LOG_BINARY_SENSOR(" ", "Inverter Power Limit State", this->sensor_invertor_power_limit_state_);
|
||||||
this->dump_traits_(TAG);
|
this->dump_traits_(TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3054,8 +3060,8 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
// формируем команду
|
// формируем команду
|
||||||
ac_command_t cmd;
|
ac_command_t cmd;
|
||||||
_clearCommand(&cmd); // не забываем очищать, а то будет мусор
|
_clearCommand(&cmd); // не забываем очищать, а то будет мусор
|
||||||
cmd.inverter_power_limitation_value = this->_current_ac_state.inverter_power_limitation_value;
|
|
||||||
cmd.inverter_power_limitation_enable = false;
|
cmd.inverter_power_limitation_enable = false;
|
||||||
|
cmd.inverter_power_limitation_value = this->_current_ac_state.inverter_power_limitation_value;
|
||||||
// добавляем команду в последовательность
|
// добавляем команду в последовательность
|
||||||
if (!commandSequence(&cmd)) return false;
|
if (!commandSequence(&cmd)) return false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user