Make optimistic mode configurable

This commit is contained in:
Adam Bogdał
2023-07-03 21:46:47 +02:00
parent cdd97b8da3
commit c868e5b49b
7 changed files with 22 additions and 2 deletions

View File

@@ -756,6 +756,10 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
// если тут true, то 1 потушит дисплей, а 0 включит.
bool _display_inverted = false;
// in optimistic mode, the entity states are updated immediately after receiving a command
// from Home Assistant/ESPHome
bool _optimistic = true;
// флаг типа кондиционера. инвертор - true, ON/OFF - false, начальная установка false
// в таком режиме точность и скорость определения реального состояния системы для инвертора,
// будет работать, но будет ниже, переменная устанавливается при первом получении большого пакета;
@@ -2472,6 +2476,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
ESP_LOGCONFIG(TAG, " [x] Period: %dms", this->get_period());
ESP_LOGCONFIG(TAG, " [x] Show action: %s", TRUEFALSE(this->get_show_action()));
ESP_LOGCONFIG(TAG, " [x] Display inverted: %s", TRUEFALSE(this->get_display_inverted()));
ESP_LOGCONFIG(TAG, " [x] Optimistic: %s", TRUEFALSE(this->get_optimistic()));
ESP_LOGCONFIG(TAG, " [x] Packet timeout: %dms", this->get_packet_timeout());
#if defined(PRESETS_SAVING)
@@ -2830,7 +2835,9 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
if (hasCommand) {
commandSequence(&cmd);
this->publish_all_states(); // Publish updated state
if (this->get_optimistic()) {
this->publish_all_states(); // Publish updated state
}
#if defined(PRESETS_SAVING)
// флаг отправки новой команды, для процедуры сохранения пресетов, если есть настройка
@@ -3267,6 +3274,9 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
}
uint32_t get_packet_timeout() { return this->_packet_timeout; }
void set_optimistic(bool optimistic) { this->_optimistic = optimistic; }
bool get_optimistic() { return this->_optimistic; }
// возможно функции get и не нужны, но вроде как должны быть
void set_supported_modes(const std::set<ClimateMode> &modes) { this->_supported_modes = modes; }
std::set<ClimateMode> get_supported_modes() { return this->_supported_modes; }

View File

@@ -10,6 +10,7 @@ from esphome.const import (
CONF_DATA,
CONF_ID,
CONF_INTERNAL,
CONF_OPTIMISTIC,
CONF_PERIOD,
CONF_POSITION,
CONF_SUPPORTED_MODES,
@@ -193,7 +194,7 @@ CONFIG_SCHEMA = cv.All(
cv.Optional(CONF_SHOW_ACTION, default="true"): cv.boolean,
cv.Optional(CONF_DISPLAY_INVERTED, default="false"): cv.boolean,
cv.Optional(CONF_TIMEOUT, default=AC_PACKET_TIMEOUT_MIN): validate_packet_timeout,
cv.Optional(CONF_OPTIMISTIC, default="true"): cv.boolean,
cv.Optional(CONF_INVERTER_POWER_DEPRICATED): cv.invalid(
"The name of sensor was changed in v.0.2.9 from 'invertor_power' to 'inverter_power'. Update your config please."
),
@@ -400,6 +401,7 @@ async def to_code(config):
cg.add(var.set_show_action(config[CONF_SHOW_ACTION]))
cg.add(var.set_display_inverted(config[CONF_DISPLAY_INVERTED]))
cg.add(var.set_packet_timeout(config[CONF_TIMEOUT]))
cg.add(var.set_optimistic(config[CONF_OPTIMISTIC]))
if CONF_SUPPORTED_MODES in config:
cg.add(var.set_supported_modes(config[CONF_SUPPORTED_MODES]))
if CONF_SUPPORTED_SWING_MODES in config: