GrKoR / esphome_aux_ac_component

ESPHome component for AUX based air conditioners. Direct wifi control of HVAC by ESPHome and Home Assistant. HVAC status and command feedback are available.
Other
185 stars 44 forks source link

возможно неверный контроль пределов целевой температуры #43

Closed GrKoR closed 2 years ago

GrKoR commented 2 years ago

Сейчас минимум и максимум целевой температуры задаются через Constants::AC_MIN_TEMPERATURE и Constants::AC_MAX_TEMPERATURE. При этом в python проверки на эти пределы нет, можно указать любые. Brokly сделал в #42 функцию контроля _temp_target_normalise (ссылка на исходники), которая не позволяет выходить за пределы диапазона 16..32 градуса.

Но может быть это неверно и стоит дать пользователю возможность задавать меньше/больше? Если он в конфиге esphome задал другие границы, то может он лучше знает своё оборудование?

Можно сделать учет констант Constants::AC_MIN_TEMPERATURE и Constants::AC_MAX_TEMPERATURE только в случае, если пользователь не задал границы в конфиге. На этапе инициализации компонента заданные пользователем значения или наши константы заносятся в traits и в дальнейшем при вызове _temp_target_normalise значения берутся уже из traits без дополнительных проверок на соответствие Constants::AC_MIN_TEMPERATURE и Constants::AC_MAX_TEMPERATURE.

И вообще можно брать границы не из traits, а из атрибутов класса (их надо будет добавить). Тогда держать целый traits для проверки температур не потребуется.

Добавил позже: Есть еще такое в setup() (ссылка)

_traits.set_visual_min_temperature(Constants::AC_MIN_TEMPERATURE);
_traits.set_visual_max_temperature(Constants::AC_MAX_TEMPERATURE);

Здесь похоже неправильно. Кажется, что так мы не сможем выставить в конфиге свой диапазон температур - всегда будет от AC_MIN_TEMPERATURE до AC_MAX_TEMPERATURE. Надо проверить.

Brokly commented 2 years ago

Как я понял из экспериментов, механизм traits устроен так. То что отдает твой код - esphome::climate::ClimateTraits traits() это некий шаблон, который , после запроса безусловно перегружается другими активными данными, при условии, что они описаны. А то что код запрашивает сам this->get_traits() - возвращает уже консолидированные настройки, окончательные .

GrKoR commented 2 years ago

Экспериментально установлено, что минимально, куда пускает сплит, - это 15 градусов. Максимум - 33. Производитель неспроста везде заявляет 16..32 - на этот режим работы рассчитан компрессор.

Похоже, надо ограничивать пользователя диапазоном 16..32. Менять диапазон в этих пределах можно, выходить за него нельзя. В идеале нужно засунуть проверку в climate.py и выдавать предупреждение еще на этапе сборки исходников из yaml.

Brokly commented 2 years ago

Сей час в коде проверка не даст вылезти за пределы 15-33, но при этом применить настройки , если они попадают в этот диапазон. Поэтому дополнительные проверки, ИМХО, не нужны.

GrKoR commented 2 years ago

Тут скорее не про дополнительные проверки, а про прозрачность для пользователя. Он в ямле вставит 10..40, всё скомпилится без ошибок. И будет чувак долго думать, почему в HA не установленный им диапазон, а какой-то левый. ИМХО, стоит проверить границы температур из ямла на попадание в диапазон и какой-то warning бросить в консоль по результатам проверки.

GrKoR commented 2 years ago

Проверил. Контроль пределов целевой температуры верный. Поэтому issue закрыт.