mirror of
https://github.com/GrKoR/esphome_aux_ac_component.git
synced 2025-12-06 11:36:55 +03:00
Make optimistic mode configurable
This commit is contained in:
@@ -90,6 +90,7 @@ climate:
|
||||
show_action: true
|
||||
display_inverted: false
|
||||
timeout: 150
|
||||
optimistic: true
|
||||
indoor_temperature:
|
||||
name: AC Indoor Temperature
|
||||
id: ac_indoor_temp
|
||||
@@ -187,6 +188,8 @@ climate:
|
||||
The only situation when you can play with timeout is heavily loaded ESP. When you are using your ESP for many hard tasks, it is possible that `aux_ac` does not have enough time to receive AC responses. In this case, you can slightly raise the timeout value. But the best solution would be to remove some of the tasks from the ESP.
|
||||
The timeout is limited to a range from `150` to `600` milliseconds. Other values are possible only with source code modification. But I don't recommend that.
|
||||
|
||||
- **optimistic** (*Optional*, boolean, default ``true``): Whether entity states should be updated immediately after receiving a command from Home Assistant/ESPHome.
|
||||
|
||||
- **indoor_temperature** (*Optional*): Parameters of the room air temperature sensor.
|
||||
- **name** (**Required**, string): The name for the temperature sensor.
|
||||
- **id** (*Optional*, [ID](https://esphome.io/guides/configuration-types.html#config-id)): Set the ID of this sensor for use in lambdas.
|
||||
|
||||
@@ -196,6 +196,8 @@ climate:
|
||||
Единственная ситуация, когда вам может пригодиться этот параметр, - это сильно загруженная ESP. Если по какой-то неподдающейся логике причине вы кроме `aux_ac` нагрузили свою ESP кучей дополнительных ресурсоемких задач, то у компонента может просто не хватать времени для оперативного приёма ответов от кондиционера. В этом в логе будут сообщения о том, что последовательность команд была прервана по таймауту. Чтобы это исправить, лучше, конечно, немного разгрузить ESP. Если это вам не подходит, тогда можно увеличить таймаут.
|
||||
Значение таймаута в прошивке ограничено диапазоном от `150` до `600` миллисекунд. Устанавливать значения выше можно только отредактировав исходные коды компонента. Но сильно задирать таймаут не стоит. Кондиционер периодически рассылает пакеты без запроса со стороны `aux_ac` и это приводит к сбою в отправке команды.
|
||||
|
||||
- **optimistic** (*Опциональный*, логическое, по умолчанию ``true``)
|
||||
|
||||
- **indoor_temperature** (*Опциональный*): Параметры создаваемого датчика температуры воздуха, если такой датчик нужен
|
||||
- **name** (**Обязательный**, строка): Имя датчика температуры.
|
||||
- **id** (*Опциональный*, [ID](https://esphome.io/guides/configuration-types.html#config-id)): Можно указать свой ID для датчика для использования в лямбдах.
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -65,6 +65,7 @@ climate:
|
||||
period: 7s
|
||||
show_action: true
|
||||
display_inverted: true
|
||||
optimistic: true
|
||||
indoor_temperature:
|
||||
name: ${upper_devicename} Indoor Temperature
|
||||
id: ${devicename}_indoor_temp
|
||||
|
||||
@@ -79,6 +79,7 @@ climate:
|
||||
period: 7s
|
||||
show_action: true
|
||||
display_inverted: true
|
||||
optimistic: true
|
||||
indoor_temperature:
|
||||
name: $upper_devicename Indoor Temperature
|
||||
id: ${devicename}_indoor_temp
|
||||
|
||||
@@ -61,6 +61,7 @@ climate:
|
||||
period: 7s
|
||||
show_action: true
|
||||
display_inverted: true
|
||||
optimistic: true
|
||||
indoor_temperature:
|
||||
name: $upper_devicename Indoor Temperature
|
||||
id: ${devicename}_indoor_temp
|
||||
|
||||
Reference in New Issue
Block a user