Добавлен задел на переключатель принудительного применения настроек
This commit is contained in:
@@ -110,5 +110,25 @@ template<typename... Ts> class ModuleDisplayOffAction : public Action<Ts...> {
|
||||
tclacClimate *parent_;
|
||||
};
|
||||
|
||||
// Шаблон действия: включение принудительного применения настроек
|
||||
template<typename... Ts> class ForceOnAction : public Action<Ts...> {
|
||||
public:
|
||||
ForceOnAction(tclacClimate *parent) : parent_(parent) {}
|
||||
void play(Ts... x) { this->parent_->set_force_mode_state(true); }
|
||||
|
||||
protected:
|
||||
tclacClimate *parent_;
|
||||
};
|
||||
|
||||
// Шаблон действия: выключение принудительного применения настроек
|
||||
template<typename... Ts> class ForceOffAction : public Action<Ts...> {
|
||||
public:
|
||||
ForceOffAction(tclacClimate *parent) : parent_(parent) {}
|
||||
void play(Ts... x) { this->parent_->set_force_mode_state(false); }
|
||||
|
||||
protected:
|
||||
tclacClimate *parent_;
|
||||
};
|
||||
|
||||
} // namespace tclac
|
||||
} // namespace esphome
|
||||
|
||||
@@ -25,6 +25,7 @@ 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_HORIZONTAL_AIRFLOW = "horizontal_airflow"
|
||||
@@ -104,6 +105,7 @@ CONFIG_SCHEMA = cv.All(
|
||||
cv.Optional(CONF_DISPLAY, default=True): cv.boolean,
|
||||
cv.Optional(CONF_RX_LED): pins.gpio_output_pin_schema,
|
||||
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_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)),
|
||||
@@ -114,7 +116,8 @@ CONFIG_SCHEMA = cv.All(
|
||||
.extend(cv.COMPONENT_SCHEMA)
|
||||
)
|
||||
|
||||
|
||||
ForceOnAction = tclac_ns.class_("ForceOnAction", automation.Action)
|
||||
ForceOffAction = tclac_ns.class_("ForceOffAction", automation.Action)
|
||||
BeeperOnAction = tclac_ns.class_("BeeperOnAction", automation.Action)
|
||||
BeeperOffAction = tclac_ns.class_("BeeperOffAction", automation.Action)
|
||||
DisplayOnAction = tclac_ns.class_("DisplayOnAction", automation.Action)
|
||||
@@ -163,6 +166,18 @@ async def module_display_action_to_code(config, action_id, template_arg, args):
|
||||
paren = await cg.get_variable(config[CONF_ID])
|
||||
var = cg.new_Pvariable(action_id, template_arg, paren)
|
||||
return var
|
||||
|
||||
# Регистрация событий включения и отключения принудительного применения настроек
|
||||
@automation.register_action(
|
||||
"climate.tclac.force_mode_on", ForceOnAction, cv.Schema
|
||||
)
|
||||
@automation.register_action(
|
||||
"climate.tclac.force_mode_off", ForceOffAction, cv.Schema
|
||||
)
|
||||
async def force_mode_action_to_code(config, action_id, template_arg, args):
|
||||
paren = await cg.get_variable(config[CONF_ID])
|
||||
var = cg.new_Pvariable(action_id, template_arg, paren)
|
||||
return var
|
||||
|
||||
# Регистрация события установки вертикальной фиксации заслонки
|
||||
@automation.register_action(
|
||||
@@ -253,6 +268,8 @@ def to_code(config):
|
||||
cg.add(var.set_beeper_state(config[CONF_BEEPER]))
|
||||
if CONF_DISPLAY in config:
|
||||
cg.add(var.set_display_state(config[CONF_DISPLAY]))
|
||||
if CONF_FORCE_MODE in config:
|
||||
cg.add(var.set_force_mode_state(config[CONF_FORCE_MODE]))
|
||||
if CONF_SUPPORTED_MODES in config:
|
||||
cg.add(var.set_supported_modes(config[CONF_SUPPORTED_MODES]))
|
||||
if CONF_MODULE_DISPLAY in config:
|
||||
|
||||
@@ -516,6 +516,7 @@ void tclacClimate::control(const ClimateCall &call) {
|
||||
|
||||
tclacClimate::sendData(dataTX, sizeof(dataTX));
|
||||
}
|
||||
|
||||
// Отправка данных в кондиционер
|
||||
void tclacClimate::sendData(byte * message, byte size) {
|
||||
tclacClimate::dataShow(1,1);
|
||||
@@ -525,6 +526,7 @@ void tclacClimate::sendData(byte * message, byte size) {
|
||||
ESP_LOGD("TCL", "Message to TCL sended...");
|
||||
tclacClimate::dataShow(1,0);
|
||||
}
|
||||
|
||||
// Преобразование байта в читабельнывй формат
|
||||
String tclacClimate::getHex(byte *message, byte size) {
|
||||
String raw;
|
||||
@@ -534,6 +536,7 @@ String tclacClimate::getHex(byte *message, byte size) {
|
||||
raw.toUpperCase();
|
||||
return raw;
|
||||
}
|
||||
|
||||
// Вычисление контрольной суммы
|
||||
byte tclacClimate::getChecksum(const byte * message, size_t size) {
|
||||
byte position = size - 1;
|
||||
@@ -542,6 +545,7 @@ byte tclacClimate::getChecksum(const byte * message, size_t size) {
|
||||
crc ^= message[i];
|
||||
return crc;
|
||||
}
|
||||
|
||||
// Мигаем светодиодами
|
||||
void tclacClimate::dataShow(bool flow, bool shine) {
|
||||
if (module_display_status_){
|
||||
@@ -580,6 +584,13 @@ void tclacClimate::set_beeper_state(bool state) {
|
||||
void tclacClimate::set_display_state(bool state) {
|
||||
this->display_status_ = state;
|
||||
}
|
||||
|
||||
// Получение состояния режима принудительного применения настроек
|
||||
void tclacClimate::set_force_mode_state(bool state) {
|
||||
this->force_mode_status_ = state;
|
||||
}
|
||||
|
||||
|
||||
// Получение пина светодиода приема данных
|
||||
#ifdef CONF_RX_LED
|
||||
void tclacClimate::set_rx_led_pin(GPIOPin *rx_led_pin) {
|
||||
|
||||
@@ -101,6 +101,7 @@ class tclacClimate : public climate::Climate, public esphome::uart::UARTDevice,
|
||||
// Инициализация и начальное наполнение переменных состоянй переключателей
|
||||
bool beeper_status_;
|
||||
bool display_status_;
|
||||
bool force_mode_status_;
|
||||
bool module_display_status_;
|
||||
esphome::climate::ClimateTraits traits_;
|
||||
|
||||
@@ -110,10 +111,10 @@ class tclacClimate : public climate::Climate, public esphome::uart::UARTDevice,
|
||||
checksum = 0;
|
||||
}
|
||||
|
||||
void setup() override;
|
||||
void loop() override;
|
||||
void update() override;
|
||||
void readData();
|
||||
void loop() override;
|
||||
void setup() override;
|
||||
void update() override;
|
||||
void dataShow(bool flow, bool shine);
|
||||
void sendData(byte * message, byte size);
|
||||
static String getHex(byte *message, byte size);
|
||||
@@ -130,8 +131,9 @@ class tclacClimate : public climate::Climate, public esphome::uart::UARTDevice,
|
||||
//VerticalSwingDirection tclacClimate::get_vertical_swing_direction() const;
|
||||
//HorizontalSwingDirection tclacClimate::get_horizontal_swing_direction() const;
|
||||
|
||||
void set_beeper_state(bool state);
|
||||
void set_beeper_state(bool state);
|
||||
void set_display_state(bool state);
|
||||
void set_force_mode_state(bool state);
|
||||
void set_rx_led_pin(GPIOPin *rx_led_pin);
|
||||
void set_tx_led_pin(GPIOPin *tx_led_pin);
|
||||
void set_module_display_state(bool state);
|
||||
|
||||
@@ -168,6 +168,22 @@ switch:
|
||||
then:
|
||||
lambda: !lambda |-
|
||||
id(${device_name}climate).set_module_display_state(false);
|
||||
|
||||
- name: Force config
|
||||
platform: template
|
||||
device_class: switch
|
||||
id: force_mode
|
||||
entity_category: config
|
||||
restore_mode: RESTORE_DEFAULT_ON
|
||||
optimistic: true
|
||||
on_turn_on:
|
||||
then:
|
||||
lambda: !lambda |-
|
||||
id(${device_name}climate).set_force_mode(true);
|
||||
on_turn_off:
|
||||
then:
|
||||
lambda: !lambda |-
|
||||
id(${device_name}climate).set_force_mode(false);
|
||||
|
||||
# - Выпадающие списки
|
||||
select:
|
||||
@@ -224,12 +240,12 @@ select:
|
||||
id: vfixing
|
||||
entity_category: config
|
||||
options:
|
||||
- Last
|
||||
- Max_Up
|
||||
- Up
|
||||
- Center
|
||||
- Down
|
||||
- Max_Down
|
||||
- "Последнее положение"
|
||||
- "До упора вверх"
|
||||
- "В верхней половине"
|
||||
- "По середине"
|
||||
- "В нижней половине"
|
||||
- "До упора вниз"
|
||||
optimistic: true
|
||||
restore_value: true
|
||||
set_action:
|
||||
|
||||
Reference in New Issue
Block a user