diff --git a/components/tclac/climate.py b/components/tclac/climate.py index aded06d..ab4b202 100644 --- a/components/tclac/climate.py +++ b/components/tclac/climate.py @@ -9,6 +9,7 @@ from esphome.const import ( CONF_MAX_TEMPERATURE, CONF_MIN_TEMPERATURE, CONF_SUPPORTED_MODES, + CONF_TEMPERATURE_STEP, CONF_SUPPORTED_FAN_MODES, CONF_SUPPORTED_SWING_MODES, ) @@ -22,12 +23,13 @@ from esphome.components.climate import ( AUTO_LOAD = ["climate"] CODEOWNERS = ["@I-am-nightingale"] DEPENDENCIES = ["climate", "uart"] + CONF_RX_LED = "rx_led" CONF_TX_LED = "tx_led" CONF_DISPLAY = "show_display" CONF_FORCE_MODE = "force_mode" -CONF_MODULE_DISPLAY = "show_module_display" CONF_VERTICAL_AIRFLOW = "vertical_airflow" +CONF_MODULE_DISPLAY = "show_module_display" CONF_HORIZONTAL_AIRFLOW = "horizontal_airflow" CONF_VERTICAL_SWING_MODE = "vertical_swing_mode" CONF_HORIZONTAL_SWING_MODE = "horizontal_swing_mode" @@ -97,6 +99,7 @@ AIRFLOW_HORIZONTAL_DIRECTION_OPTIONS = { "MAX_RIGHT": AirflowHorizontalDirection.MAX_RIGHT, } +# Проверка данных конфигурации и принятие значений по умолчанию CONFIG_SCHEMA = cv.All( climate.CLIMATE_SCHEMA.extend( { @@ -107,6 +110,10 @@ CONFIG_SCHEMA = cv.All( cv.Optional(CONF_TX_LED): pins.gpio_output_pin_schema, cv.Optional(CONF_FORCE_MODE, default=True): cv.boolean, cv.Optional(CONF_MODULE_DISPLAY, default=True): cv.boolean, + cv.Optional(CONF_VERTICAL_AIRFLOW, default="CENTER"): cv.ensure_list(cv.enum(AIRFLOW_VERTICAL_DIRECTION_OPTIONS, upper=True)), + cv.Optional(CONF_VERTICAL_SWING_MODE, default="UP_DOWN"): cv.ensure_list(cv.enum(VERTICAL_SWING_DIRECTION_OPTIONS, upper=True)), + cv.Optional(CONF_HORIZONTAL_AIRFLOW, default="CENTER"): cv.ensure_list(cv.enum(AIRFLOW_HORIZONTAL_DIRECTION_OPTIONS, upper=True)), + cv.Optional(CONF_HORIZONTAL_SWING_MODE, default="LEFT_RIGHT"): cv.ensure_list(cv.enum(HORIZONTAL_SWING_DIRECTION_OPTIONS, upper=True)), cv.Optional(CONF_SUPPORTED_SWING_MODES,default=["OFF","VERTICAL","HORIZONTAL","BOTH",],): cv.ensure_list(cv.enum(SUPPORTED_SWING_MODES_OPTIONS, upper=True)), cv.Optional(CONF_SUPPORTED_MODES,default=["OFF","AUTO","COOL","HEAT","DRY","FAN_ONLY",],): cv.ensure_list(cv.enum(SUPPORTED_CLIMATE_MODES_OPTIONS, upper=True)), cv.Optional(CONF_SUPPORTED_FAN_MODES,default=["AUTO","QUIET","LOW","MIDDLE","MEDIUM","HIGH","FOCUS","DIFFUSE",],): cv.ensure_list(cv.enum(SUPPORTED_FAN_MODES_OPTIONS, upper=True)), @@ -123,8 +130,8 @@ BeeperOffAction = tclac_ns.class_("BeeperOffAction", automation.Action) DisplayOnAction = tclac_ns.class_("DisplayOnAction", automation.Action) DisplayOffAction = tclac_ns.class_("DisplayOffAction", automation.Action) ModuleDisplayOnAction = tclac_ns.class_("ModuleDisplayOnAction", automation.Action) -ModuleDisplayOffAction = tclac_ns.class_("ModuleDisplayOffAction", automation.Action) VerticalAirflowAction = tclac_ns.class_("VerticalAirflowAction", automation.Action) +ModuleDisplayOffAction = tclac_ns.class_("ModuleDisplayOffAction", automation.Action) HorizontalAirflowAction = tclac_ns.class_("HorizontalAirflowAction", automation.Action) VerticalSwingDirectionAction = tclac_ns.class_("VerticalSwingDirectionAction", automation.Action) HorizontalSwingDirectionAction = tclac_ns.class_("HorizontalSwingDirectionAction", automation.Action) diff --git a/components/tclac/tclac.cpp b/components/tclac/tclac.cpp index a2da8c5..875e714 100644 --- a/components/tclac/tclac.cpp +++ b/components/tclac/tclac.cpp @@ -88,7 +88,6 @@ void tclacClimate::loop() { } void tclacClimate::update() { - tclacClimate::dataShow(1,1); this->esphome::uart::UARTDevice::write_array(poll, sizeof(poll)); auto raw = tclacClimate::getHex(poll, sizeof(poll)); diff --git a/components/tclac/tclac.h b/components/tclac/tclac.h index 7006cb7..153b631 100644 --- a/components/tclac/tclac.h +++ b/components/tclac/tclac.h @@ -18,36 +18,36 @@ namespace tclac { #define SET_TEMP_MASK 0b00001111 -#define MODE_POS 7 +#define MODE_POS 7 #define MODE_MASK 0b00111111 -#define MODE_AUTO 0b00110101 -#define MODE_COOL 0b00110001 -#define MODE_DRY 0b00110011 -#define MODE_FAN_ONLY 0b00110010 -#define MODE_HEAT 0b00110100 +#define MODE_AUTO 0b00110101 +#define MODE_COOL 0b00110001 +#define MODE_DRY 0b00110011 +#define MODE_FAN_ONLY 0b00110010 +#define MODE_HEAT 0b00110100 #define FAN_SPEED_POS 8 #define FAN_QUIET_POS 33 -#define FAN_AUTO 0b10000000 //auto -#define FAN_QUIET 0x80 //silent -#define FAN_LOW 0b10010000 // | -#define FAN_MIDDLE 0b11000000 // || -#define FAN_MEDIUM 0b10100000 // ||| -#define FAN_HIGH 0b11010000 // |||| -#define FAN_FOCUS 0b10110000 // ||||| +#define FAN_AUTO 0b10000000 //auto +#define FAN_QUIET 0x80 //silent +#define FAN_LOW 0b10010000 // | +#define FAN_MIDDLE 0b11000000 // || +#define FAN_MEDIUM 0b10100000 // ||| +#define FAN_HIGH 0b11010000 // |||| +#define FAN_FOCUS 0b10110000 // ||||| #define FAN_DIFFUSE 0b10000000 // POWER [7] #define FAN_SPEED_MASK 0b11110000 //FAN SPEED MASK #define SWING_POS 10 -#define SWING_OFF 0b00000000 -#define SWING_HORIZONTAL 0b00100000 -#define SWING_VERTICAL 0b01000000 -#define SWING_BOTH 0b01100000 -#define SWING_MODE_MASK 0b01100000 +#define SWING_OFF 0b00000000 +#define SWING_HORIZONTAL 0b00100000 +#define SWING_VERTICAL 0b01000000 +#define SWING_BOTH 0b01100000 +#define SWING_MODE_MASK 0b01100000 #define STEP_TEMPERATURE 1 #define MIN_SET_TEMPERATURE 16 @@ -103,13 +103,12 @@ class tclacClimate : public climate::Climate, public esphome::uart::UARTDevice, bool display_status_; bool force_mode_status_; bool module_display_status_; - esphome::climate::ClimateTraits traits_; - - uint8_t switch_climate_mode = 0; uint8_t switch_fan_mode = 0; uint8_t switch_swing_mode = 0; int target_temperature_set = 0; + uint8_t switch_climate_mode = 0; bool allow_take_control = false; + esphome::climate::ClimateTraits traits_; public: @@ -118,10 +117,10 @@ class tclacClimate : public climate::Climate, public esphome::uart::UARTDevice, } void readData(); + void takeControl(); void loop() override; void setup() override; void update() override; - void takeControl(); void dataShow(bool flow, bool shine); void sendData(byte * message, byte size); static String getHex(byte *message, byte size);