From e75a852832d5cade59fb41b662336b6e99a13942 Mon Sep 17 00:00:00 2001 From: I-am-nightingale Date: Fri, 12 Apr 2024 04:25:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B8=20=D1=88=D0=B0=D0=B3=D0=B0=20=D1=82=D0=B5=D0=BC=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D1=82=D1=83=D1=80=D1=8B=20=D0=B2=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B5,=20?= =?UTF-8?q?=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B5=20=D1=81=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=BE=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/tclac/climate.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/components/tclac/climate.py b/components/tclac/climate.py index ab4b202..1286364 100644 --- a/components/tclac/climate.py +++ b/components/tclac/climate.py @@ -24,6 +24,11 @@ AUTO_LOAD = ["climate"] CODEOWNERS = ["@I-am-nightingale"] DEPENDENCIES = ["climate", "uart"] +TCLAC_MIN_TEMPERATURE = 16.0 +TCLAC_MAX_TEMPERATURE = 31.0 +TCLAC_TARGET_TEMPERATURE_STEP = 1.0 +TCLAC_CURRENT_TEMPERATURE_STEP = 1.0 + CONF_RX_LED = "rx_led" CONF_TX_LED = "tx_led" CONF_DISPLAY = "show_display" @@ -99,6 +104,31 @@ AIRFLOW_HORIZONTAL_DIRECTION_OPTIONS = { "MAX_RIGHT": AirflowHorizontalDirection.MAX_RIGHT, } +def validate_visual(config): + if CONF_VISUAL in config: + visual_config = config[CONF_VISUAL] + if CONF_MIN_TEMPERATURE in visual_config: + min_temp = visual_config[CONF_MIN_TEMPERATURE] + if min_temp < TCLAC_MIN_TEMPERATURE: + raise cv.Invalid(f"Указанная интерфейсная минимальная температура в {min_temp} ниже допустимой {TCLAC_MIN_TEMPERATURE} для кондиционера") + else: + config[CONF_VISUAL][CONF_MIN_TEMPERATURE] = TCLAC_MIN_TEMPERATURE + if CONF_MAX_TEMPERATURE in visual_config: + max_temp = visual_config[CONF_MAX_TEMPERATURE] + if max_temp > TCLAC_MAX_TEMPERATURE: + raise cv.Invalid(f"Указанная интерфейсная максимальная температура в {max_temp} выше допустимой {TCLAC_MAX_TEMPERATURE} для кондиционера") + else: + config[CONF_VISUAL][CONF_MAX_TEMPERATURE] = TCLAC_MAX_TEMPERATURE + if CONF_TEMPERATURE_STEP in visual_config: + temp_step = config[CONF_VISUAL][CONF_TEMPERATURE_STEP][CONF_TARGET_TEMPERATURE] + if ((int)(temp_step * 2)) / 2 != temp_step: + raise cv.Invalid(f"Указанный шаг температуры {temp_step} не корректен, должен быть кратен 1") + else: + config[CONF_VISUAL][CONF_TEMPERATURE_STEP] = {CONF_TARGET_TEMPERATURE: TCLAC_TARGET_TEMPERATURE_STEP,CONF_CURRENT_TEMPERATURE: TCLAC_CURRENT_TEMPERATURE_STEP,} + else: + config[CONF_VISUAL] = {CONF_MIN_TEMPERATURE: TCLAC_MIN_TEMPERATURE,CONF_MAX_TEMPERATURE: TCLAC_MAX_TEMPERATURE,CONF_TEMPERATURE_STEP: {CONF_TARGET_TEMPERATURE: TCLAC_TARGET_TEMPERATURE_STEP,CONF_CURRENT_TEMPERATURE: TCLAC_CURRENT_TEMPERATURE_STEP,},} + return config + # Проверка данных конфигурации и принятие значений по умолчанию CONFIG_SCHEMA = cv.All( climate.CLIMATE_SCHEMA.extend(