Closed GrKoR closed 2 years ago
Как я понял из экспериментов, механизм traits устроен так. То что отдает твой код - esphome::climate::ClimateTraits traits() это некий шаблон, который , после запроса безусловно перегружается другими активными данными, при условии, что они описаны. А то что код запрашивает сам this->get_traits() - возвращает уже консолидированные настройки, окончательные .
Экспериментально установлено, что минимально, куда пускает сплит, - это 15 градусов. Максимум - 33. Производитель неспроста везде заявляет 16..32 - на этот режим работы рассчитан компрессор.
Похоже, надо ограничивать пользователя диапазоном 16..32. Менять диапазон в этих пределах можно, выходить за него нельзя. В идеале нужно засунуть проверку в climate.py и выдавать предупреждение еще на этапе сборки исходников из yaml.
Сей час в коде проверка не даст вылезти за пределы 15-33, но при этом применить настройки , если они попадают в этот диапазон. Поэтому дополнительные проверки, ИМХО, не нужны.
Тут скорее не про дополнительные проверки, а про прозрачность для пользователя. Он в ямле вставит 10..40, всё скомпилится без ошибок. И будет чувак долго думать, почему в HA не установленный им диапазон, а какой-то левый. ИМХО, стоит проверить границы температур из ямла на попадание в диапазон и какой-то warning бросить в консоль по результатам проверки.
Проверил. Контроль пределов целевой температуры верный. Поэтому issue закрыт.
Сейчас минимум и максимум целевой температуры задаются через
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() (ссылка)
Здесь похоже неправильно. Кажется, что так мы не сможем выставить в конфиге свой диапазон температур - всегда будет от AC_MIN_TEMPERATURE до AC_MAX_TEMPERATURE. Надо проверить.