cade formatting

This commit is contained in:
GrKoR
2022-07-14 17:22:57 +03:00
parent 517265f73c
commit 18edab9742
2 changed files with 2649 additions and 2675 deletions

View File

@@ -1,16 +1,15 @@
#pragma once
#include "esphome/core/component.h"
#include "esphome/core/automation.h"
#include "aux_ac.h"
#include "esphome/core/automation.h"
#include "esphome/core/component.h"
namespace esphome {
namespace aux_ac {
// **************************************** DISPLAY ACTIONS ****************************************
template <typename... Ts>
class AirConDisplayOffAction : public Action<Ts...>
{
class AirConDisplayOffAction : public Action<Ts...> {
public:
explicit AirConDisplayOffAction(AirCon *ac) : ac_(ac) {}
@@ -21,8 +20,7 @@ namespace aux_ac {
};
template <typename... Ts>
class AirConDisplayOnAction : public Action<Ts...>
{
class AirConDisplayOnAction : public Action<Ts...> {
public:
explicit AirConDisplayOnAction(AirCon *ac) : ac_(ac) {}
@@ -32,12 +30,9 @@ namespace aux_ac {
AirCon *ac_;
};
// **************************************** VERTICAL LOUVER ACTIONS ****************************************
template <typename... Ts>
class AirConVLouverSwingAction : public Action<Ts...>
{
class AirConVLouverSwingAction : public Action<Ts...> {
public:
explicit AirConVLouverSwingAction(AirCon *ac) : ac_(ac) {}
@@ -48,8 +43,7 @@ namespace aux_ac {
};
template <typename... Ts>
class AirConVLouverStopAction : public Action<Ts...>
{
class AirConVLouverStopAction : public Action<Ts...> {
public:
explicit AirConVLouverStopAction(AirCon *ac) : ac_(ac) {}
@@ -60,8 +54,7 @@ namespace aux_ac {
};
template <typename... Ts>
class AirConVLouverTopAction : public Action<Ts...>
{
class AirConVLouverTopAction : public Action<Ts...> {
public:
explicit AirConVLouverTopAction(AirCon *ac) : ac_(ac) {}
@@ -72,8 +65,7 @@ namespace aux_ac {
};
template <typename... Ts>
class AirConVLouverMiddleAboveAction : public Action<Ts...>
{
class AirConVLouverMiddleAboveAction : public Action<Ts...> {
public:
explicit AirConVLouverMiddleAboveAction(AirCon *ac) : ac_(ac) {}
@@ -84,8 +76,7 @@ namespace aux_ac {
};
template <typename... Ts>
class AirConVLouverMiddleAction : public Action<Ts...>
{
class AirConVLouverMiddleAction : public Action<Ts...> {
public:
explicit AirConVLouverMiddleAction(AirCon *ac) : ac_(ac) {}
@@ -96,8 +87,7 @@ namespace aux_ac {
};
template <typename... Ts>
class AirConVLouverMiddleBelowAction : public Action<Ts...>
{
class AirConVLouverMiddleBelowAction : public Action<Ts...> {
public:
explicit AirConVLouverMiddleBelowAction(AirCon *ac) : ac_(ac) {}
@@ -108,8 +98,7 @@ namespace aux_ac {
};
template <typename... Ts>
class AirConVLouverBottomAction : public Action<Ts...>
{
class AirConVLouverBottomAction : public Action<Ts...> {
public:
explicit AirConVLouverBottomAction(AirCon *ac) : ac_(ac) {}
@@ -120,8 +109,7 @@ namespace aux_ac {
};
template <typename... Ts>
class AirConVLouverSetAction : public Action<Ts...>
{
class AirConVLouverSetAction : public Action<Ts...> {
public:
AirConVLouverSetAction(AirCon *ac) : ac_(ac) {}
TEMPLATABLE_VALUE(uint8_t, value);
@@ -136,11 +124,9 @@ namespace aux_ac {
uint8_t vlpos_;
};
// **************************************** SEND TEST PACKET ACTION ****************************************
template <typename... Ts>
class AirConSendTestPacketAction : public Action<Ts...>
{
class AirConSendTestPacketAction : public Action<Ts...> {
public:
explicit AirConSendTestPacketAction(AirCon *ac) : ac_(ac) {}
void set_data_template(std::function<std::vector<uint8_t>(Ts...)> func) {

View File

@@ -5,14 +5,15 @@
#pragma once
#include <Arduino.h>
#include "esphome.h"
#include <stdarg.h>
#include "esphome/core/component.h"
#include "esphome/components/climate/climate.h"
#include "esphome/components/uart/uart.h"
#include "esphome/components/sensor/sensor.h"
#include "esphome.h"
#include "esphome/components/binary_sensor/binary_sensor.h"
#include "esphome/components/climate/climate.h"
#include "esphome/components/sensor/sensor.h"
#include "esphome/components/text_sensor/text_sensor.h"
#include "esphome/components/uart/uart.h"
#include "esphome/core/component.h"
#include "esphome/core/helpers.h"
// весь функционал сохранения пресетов прячу под дефайн
@@ -28,18 +29,16 @@
// раскоментируй ключ HOLMS для вывода лога под Эксель, значение ключа - размер пакетов которые будут видны
//#define HOLMS 19
namespace esphome {
namespace aux_ac {
static const char *const TAG = "AirCon";
using climate::ClimatePreset;
using climate::ClimateTraits;
using climate::ClimateMode;
using climate::ClimateSwingMode;
using climate::ClimateFanMode;
using climate::ClimateMode;
using climate::ClimatePreset;
using climate::ClimateSwingMode;
using climate::ClimateTraits;
class Constants {
public:
@@ -80,7 +79,6 @@ const float Constants::AC_MAX_TEMPERATURE = 32.0;
const float Constants::AC_TEMPERATURE_STEP = 0.5;
const uint32_t Constants::AC_STATES_REQUEST_INTERVAL = 7000;
class AirCon;
// состояния конечного автомата компонента
@@ -338,8 +336,6 @@ struct packet_small_info_body_t {
uint8_t target_temp_frac2;
};
//****************************************************************************************************************************************************
//*************************************************** ПАРАМЕТРЫ РАБОТЫ КОНДИЦИОНЕРА ******************************************************************
//****************************************************************************************************************************************************
@@ -347,20 +343,28 @@ struct packet_small_info_body_t {
// питание кондиционера
#define AC_POWER_MASK 0b00100000
enum ac_power : uint8_t { AC_POWER_OFF = 0x00, AC_POWER_ON = 0x20, AC_POWER_UNTOUCHED = 0xFF };
enum ac_power : uint8_t { AC_POWER_OFF = 0x00,
AC_POWER_ON = 0x20,
AC_POWER_UNTOUCHED = 0xFF };
// режим очистки кондиционера, включается (или должен включаться) при AC_POWER_OFF
#define AC_CLEAN_MASK 0b00000100
enum ac_clean : uint8_t { AC_CLEAN_OFF = 0x00, AC_CLEAN_ON = 0x04, AC_CLEAN_UNTOUCHED = 0xFF };
enum ac_clean : uint8_t { AC_CLEAN_OFF = 0x00,
AC_CLEAN_ON = 0x04,
AC_CLEAN_UNTOUCHED = 0xFF };
// для включения ионизатора нужно установить второй бит в байте
// по результату этот бит останется установленным, но кондиционер еще и установит первый бит
#define AC_HEALTH_MASK 0b00000010
enum ac_health : uint8_t { AC_HEALTH_OFF = 0x00, AC_HEALTH_ON = 0x02, AC_HEALTH_UNTOUCHED = 0xFF };
enum ac_health : uint8_t { AC_HEALTH_OFF = 0x00,
AC_HEALTH_ON = 0x02,
AC_HEALTH_UNTOUCHED = 0xFF };
// Статус ионизатора. Если бит поднят, то обнаружена ошибка ключения ионизатора
#define AC_HEALTH_STATUS_MASK 0b00000001
enum ac_health_status : uint8_t { AC_HEALTH_STATUS_OFF = 0x00, AC_HEALTH_STATUS_ON = 0x01, AC_HEALTH_STATUS_UNTOUCHED = 0xFF };
enum ac_health_status : uint8_t { AC_HEALTH_STATUS_OFF = 0x00,
AC_HEALTH_STATUS_ON = 0x01,
AC_HEALTH_STATUS_UNTOUCHED = 0xFF };
// целевая температура
#define AC_TEMP_TARGET_INT_PART_MASK 0b11111000
@@ -372,18 +376,27 @@ enum ac_health_status : uint8_t { AC_HEALTH_STATUS_OFF = 0x00, AC_HEALTH_STATUS_
// включение таймера сна
#define AC_TIMER_MASK 0b01000000
enum ac_timer : uint8_t {AC_TIMER_OFF = 0x00, AC_TIMER_ON = 0x40, AC_TIMER_UNTOUCHED = 0xFF};
enum ac_timer : uint8_t { AC_TIMER_OFF = 0x00,
AC_TIMER_ON = 0x40,
AC_TIMER_UNTOUCHED = 0xFF };
// основные режимы работы кондиционера
#define AC_MODE_MASK 0b11100000
enum ac_mode : uint8_t { AC_MODE_AUTO = 0x00, AC_MODE_COOL = 0x20, AC_MODE_DRY = 0x40, AC_MODE_HEAT = 0x80, AC_MODE_FAN = 0xC0, AC_MODE_UNTOUCHED = 0xFF };
enum ac_mode : uint8_t { AC_MODE_AUTO = 0x00,
AC_MODE_COOL = 0x20,
AC_MODE_DRY = 0x40,
AC_MODE_HEAT = 0x80,
AC_MODE_FAN = 0xC0,
AC_MODE_UNTOUCHED = 0xFF };
// Ночной режим (SLEEP). Комбинируется только с режимами COOL и HEAT. Автоматически выключается через 7 часов.
// COOL: температура +1 градус через час, еще через час дополнительные +1 градус, дальше не меняется.
// HEAT: температура -2 градуса через час, еще через час дополнительные -2 градуса, дальше не меняется.
// Восстанавливается ли температура через 7 часов при отключении режима - не понятно.
#define AC_SLEEP_MASK 0b00000100
enum ac_sleep : uint8_t { AC_SLEEP_OFF = 0x00, AC_SLEEP_ON = 0x04, AC_SLEEP_UNTOUCHED = 0xFF };
enum ac_sleep : uint8_t { AC_SLEEP_OFF = 0x00,
AC_SLEEP_ON = 0x04,
AC_SLEEP_UNTOUCHED = 0xFF };
// Вертикальные жалюзи. В протоколе зашита возможность двигать ими по всякому, но должна быть такая возможность на уровне железа.
#define AC_LOUVERV_MASK 0b00000111
@@ -402,7 +415,9 @@ enum ac_louver_V : uint8_t {
// Горизонтальные жалюзи. В протоколе зашита возможность двигать ими по всякому, но должна быть такая возможность на уровне железа.
// горизонтальные жалюзи выставлять в определенное положение не вышло, протестировано.
#define AC_LOUVERH_MASK 0b11100000
enum ac_louver_H : uint8_t { AC_LOUVERH_SWING_LEFTRIGHT = 0x00, AC_LOUVERH_OFF = 0xE0, AC_LOUVERH_UNTOUCHED = 0xFF };
enum ac_louver_H : uint8_t { AC_LOUVERH_SWING_LEFTRIGHT = 0x00,
AC_LOUVERH_OFF = 0xE0,
AC_LOUVERH_UNTOUCHED = 0xFF };
struct ac_louver {
ac_louver_H louver_h;
@@ -411,28 +426,46 @@ struct ac_louver {
// скорость вентилятора
#define AC_FANSPEED_MASK 0b11100000
enum ac_fanspeed : uint8_t { AC_FANSPEED_HIGH = 0x20, AC_FANSPEED_MEDIUM = 0x40, AC_FANSPEED_LOW = 0x60, AC_FANSPEED_AUTO = 0xA0, AC_FANSPEED_UNTOUCHED = 0xFF };
enum ac_fanspeed : uint8_t { AC_FANSPEED_HIGH = 0x20,
AC_FANSPEED_MEDIUM = 0x40,
AC_FANSPEED_LOW = 0x60,
AC_FANSPEED_AUTO = 0xA0,
AC_FANSPEED_UNTOUCHED = 0xFF };
// TURBO работает только в режимах COOL и HEAT
#define AC_FANTURBO_MASK 0b01000000
enum ac_fanturbo : uint8_t { AC_FANTURBO_OFF = 0x00, AC_FANTURBO_ON = 0x40, AC_FANTURBO_UNTOUCHED = 0xFF };
enum ac_fanturbo : uint8_t { AC_FANTURBO_OFF = 0x00,
AC_FANTURBO_ON = 0x40,
AC_FANTURBO_UNTOUCHED = 0xFF };
// MUTE работает только в режиме FAN. В режиме COOL кондей команду принимает, но MUTE не устанавливается
#define AC_FANMUTE_MASK 0b10000000
enum ac_fanmute : uint8_t { AC_FANMUTE_OFF = 0x00, AC_FANMUTE_ON = 0x80, AC_FANMUTE_UNTOUCHED = 0xFF };
enum ac_fanmute : uint8_t { AC_FANMUTE_OFF = 0x00,
AC_FANMUTE_ON = 0x80,
AC_FANMUTE_UNTOUCHED = 0xFF };
// реальная скорость вентилятора
enum ac_realFan : uint8_t { AC_REAL_FAN_OFF = 0x00, AC_REAL_FAN_MUTE = 0x01, AC_REAL_FAN_LOW = 0x02, AC_REAL_FAN_MID = 0x04, AC_REAL_FAN_HIGH = 0x06, AC_REAL_FAN_TURBO = 0x07, AC_REAL_FAN_UNTOUCHED = 0xFF };
enum ac_realFan : uint8_t { AC_REAL_FAN_OFF = 0x00,
AC_REAL_FAN_MUTE = 0x01,
AC_REAL_FAN_LOW = 0x02,
AC_REAL_FAN_MID = 0x04,
AC_REAL_FAN_HIGH = 0x06,
AC_REAL_FAN_TURBO = 0x07,
AC_REAL_FAN_UNTOUCHED = 0xFF };
// включение-выключение дисплея на корпусе внутреннего блока
#define AC_DISPLAY_MASK 0b00010000
enum ac_display : uint8_t { AC_DISPLAY_OFF = 0x00, AC_DISPLAY_ON = 0x10, AC_DISPLAY_UNTOUCHED = 0xFF };
enum ac_display : uint8_t { AC_DISPLAY_OFF = 0x00,
AC_DISPLAY_ON = 0x10,
AC_DISPLAY_UNTOUCHED = 0xFF };
// включение-выключение функции "Антиплесень".
// По факту: после выключения сплита он оставляет минут на 5 открытые жалюзи и глушит вентилятор. Уличный блок при этом гудит и тарахтит.
// Возможно, прогревается теплообменник для высыхания. Через некоторое время внешний блок замолкает и сплит закрывает жалюзи.
#define AC_MILDEW_MASK 0b00001000
enum ac_mildew : uint8_t { AC_MILDEW_OFF = 0x00, AC_MILDEW_ON = 0x08, AC_MILDEW_UNTOUCHED = 0xFF };
enum ac_mildew : uint8_t { AC_MILDEW_OFF = 0x00,
AC_MILDEW_ON = 0x08,
AC_MILDEW_UNTOUCHED = 0xFF };
// маска счетчика минут прошедших с последней команды
// https://github.com/GrKoR/AUX_HVAC_Protocol#packet_cmd_11_b12
@@ -450,7 +483,6 @@ enum ac_vlouver_frontend : uint8_t {
AC_VLOUVER_FRONTEND_BOTTOM = 0x06,
};
/** команда для кондиционера
*
* ВАЖНО! В коде используется копирование команд простым присваиванием.
@@ -460,7 +492,8 @@ enum ac_vlouver_frontend : uint8_t {
//*****************************************************************************
// структура для сохранения настроек, специально вынесено в макрос, чтобы использовать в нескольких местах
// сделано Brokly для того, чтобы поведение wifi-модуля походило на ИК-пульт (для каждого режима сохранялись свои настройки температуры и прочего)
#define AC_COMMAND_BASE float temp_target;\
#define AC_COMMAND_BASE \
float temp_target; \
ac_power power; \
ac_clean clean; \
ac_health health; \
@@ -518,9 +551,6 @@ typedef ac_command_t ac_state_t; // текущее состояние пара
//************************************************ КОНЕЦ ПАРАМЕТРОВ РАБОТЫ КОНДИЦИОНЕРА **************************************************************
//****************************************************************************************************************************************************
/*****************************************************************************************************************************************************
* структуры и типы для последовательности команд
*****************************************************************************************************************************************************
@@ -579,10 +609,8 @@ struct sequence_item_t {
};
/*****************************************************************************************************************************************************/
class AirCon : public esphome::Component, public esphome::climate::Climate {
private:
#if defined(PRESETS_SAVING)
// массив для сохранения данных глобальных персетов
ac_save_command_t global_presets[POS_MODE_OFF + 1];
@@ -970,8 +998,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
_setStateMachineState(ACSM_RECEIVING_PACKET);
} else {
while (_ac_serial->available() > 0)
{
while (_ac_serial->available() > 0) {
// если наткнулись на старт пакета, то выходим из while
// если какие-то данные были загружены в буфер, то они будут выгружены в лог при загрузке нового пакета
if (this->peek() == AC_PACKET_START_BYTE) break;
@@ -1393,7 +1420,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
if (line == 0) line = __LINE__;
_debugMsg(st, dbgLevel, line);
#endif
}
/** расчет CRC16 для блока данных data длиной len
@@ -1614,8 +1640,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
pack->body[12] = (pack->body[12] & ~AC_MILDEW_MASK) | cmd->mildew;
}
// рассчитываем и записываем в пакет CRC
pack->crc = (packet_crc_t *)&(pack->data[AC_HEADER_SIZE + pack->header->body_length]);
_setCRC16(pack);
@@ -1810,7 +1834,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
esphome::binary_sensor::BinarySensor *sensor_defrost_ = nullptr;
esphome::text_sensor::TextSensor *sensor_preset_reporter_ = nullptr;
// загружает на выполнение последовательность команд на включение/выключение табло с температурой
bool _displaySequence(ac_display dsp = AC_DISPLAY_ON) {
// нет смысла в последовательности, если нет коннекта с кондиционером
@@ -1868,7 +1891,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
uint8_t num_preset = get_num_preset(cmd);
if (memcmp(cmd, &(global_presets[num_preset]), AC_COMMAND_BASE_SIZE) != 0) { // содержимое пресетов разное
memcpy(&(global_presets[num_preset]), cmd, AC_COMMAND_BASE_SIZE); // копируем пресет в массив
#if defined(PRESETS_SAVING)
_debugMsg(F("Save preset %02d to NVRAM."), ESPHOME_LOG_LEVEL_WARN, __LINE__, num_preset);
if (storage.save(global_presets)) {
if (!global_preferences->sync()) // сохраняем все пресеты
@@ -1876,7 +1899,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
} else {
_debugMsg(F("Save presets to flash ERROR ! (load result: %02d)"), ESPHOME_LOG_LEVEL_ERROR, __LINE__, load_presets_result);
}
#endif
} else {
_debugMsg(F("Preset %02d has not been changed, Saving canceled."), ESPHOME_LOG_LEVEL_WARN, __LINE__, num_preset);
}
@@ -2016,7 +2038,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
_debugMsg(F("Action mode: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, this->action);
/*************************** POWER & MODE ***************************/
if (_current_ac_state.power == AC_POWER_ON) {
switch (_current_ac_state.mode) {
@@ -2118,15 +2139,12 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
// режим работы ионизатора
if (_current_ac_state.health == AC_HEALTH_ON &&
_current_ac_state.power == AC_POWER_ON) {
this->custom_preset = Constants::HEALTH;
} else if (this->custom_preset == Constants::HEALTH) {
// AC_HEALTH_OFF
// только в том случае, если до этого пресет был установлен
this->custom_preset = (std::string) "";
}
_debugMsg(F("Climate HEALTH preset: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, _current_ac_state.health);
@@ -2138,15 +2156,12 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
// Восстанавливается ли температура через 7 часов при отключении режима - не понятно.
if (_current_ac_state.sleep == AC_SLEEP_ON &&
_current_ac_state.power == AC_POWER_ON) {
this->preset = climate::CLIMATE_PRESET_SLEEP;
} else if (this->preset == climate::CLIMATE_PRESET_SLEEP) {
// AC_SLEEP_OFF
// только в том случае, если до этого пресет был установлен
this->preset = climate::CLIMATE_PRESET_NONE;
}
_debugMsg(F("Climate preset: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, this->preset);
@@ -2155,15 +2170,12 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
// режим очистки кондиционера, включается (или должен включаться) при AC_POWER_OFF
if (_current_ac_state.clean == AC_CLEAN_ON &&
_current_ac_state.power == AC_POWER_OFF) {
this->custom_preset = Constants::CLEAN;
} else if (this->custom_preset == Constants::CLEAN) {
// AC_CLEAN_OFF
// только в том случае, если до этого пресет был установлен
this->custom_preset = (std::string) "";
}
_debugMsg(F("Climate CLEAN preset: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, _current_ac_state.clean);
@@ -2197,7 +2209,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
_debugMsg(F("Climate ANTIFUNGUS preset: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, _current_ac_state.mildew);
/*************************** LOUVERs ***************************/
this->swing_mode = climate::CLIMATE_SWING_OFF;
if (_current_ac_state.power == AC_POWER_ON) {
@@ -2219,7 +2230,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
this->current_temperature = _current_ac_state.temp_ambient;
_debugMsg(F("Room temperature: %f"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, this->current_temperature);
/*********************************************************************/
/*************************** PUBLISH STATE ***************************/
/*********************************************************************/
@@ -2317,7 +2327,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
LOG_BINARY_SENSOR(" ", "Display", this->sensor_display_);
LOG_TEXT_SENSOR(" ", "Preset Reporter", this->sensor_preset_reporter_);
this->dump_traits_(TAG);
}
// вызывается пользователем из интерфейса ESPHome или Home Assistant
@@ -2411,7 +2420,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
default:
break;
}
}
// User requested fan_mode change
@@ -2512,15 +2520,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
// COOL: температура +1 градус через час, еще через час дополнительные +1 градус, дальше не меняется.
// HEAT: температура -2 градуса через час, еще через час дополнительные -2 градуса, дальше не меняется.
// Восстанавливается ли температура через 7 часов при отключении режима - не понятно.
if ( cmd.mode == AC_MODE_COOL
or cmd.mode == AC_MODE_HEAT
or cmd.mode == AC_MODE_DRY
or cmd.mode == AC_MODE_AUTO
or _current_ac_state.mode == AC_MODE_COOL
or _current_ac_state.mode == AC_MODE_HEAT
or _current_ac_state.mode == AC_MODE_DRY
or _current_ac_state.mode == AC_MODE_AUTO) {
if (cmd.mode == AC_MODE_COOL or cmd.mode == AC_MODE_HEAT or cmd.mode == AC_MODE_DRY or cmd.mode == AC_MODE_AUTO or _current_ac_state.mode == AC_MODE_COOL or _current_ac_state.mode == AC_MODE_HEAT or _current_ac_state.mode == AC_MODE_DRY or _current_ac_state.mode == AC_MODE_AUTO) {
hasCommand = true;
cmd.sleep = AC_SLEEP_ON;
cmd.health = AC_HEALTH_OFF; // для логики пресетов
@@ -2555,9 +2555,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
if (custom_preset == Constants::CLEAN) {
// режим очистки кондиционера, включается (или должен включаться) при AC_POWER_OFF
// TODO: надо отдебажить выключение этого режима
if ( cmd.power == AC_POWER_OFF
or _current_ac_state.power == AC_POWER_OFF) {
if (cmd.power == AC_POWER_OFF or _current_ac_state.power == AC_POWER_OFF) {
hasCommand = true;
cmd.clean = AC_CLEAN_ON;
cmd.mildew = AC_MILDEW_OFF; // для логики пресетов
@@ -2568,10 +2566,8 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
}
} else if (custom_preset == Constants::HEALTH) {
if (cmd.power == AC_POWER_ON ||
_current_ac_state.power == AC_POWER_ON) {
hasCommand = true;
cmd.health = AC_HEALTH_ON;
// cmd.health_status = AC_HEALTH_STATUS_ON; // GK: статус кондей сам поднимает
@@ -2585,14 +2581,11 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
_current_ac_state.mode == AC_MODE_COOL ||
_current_ac_state.mode == AC_MODE_HEAT ||
_current_ac_state.mode == AC_MODE_AUTO) {
cmd.fanSpeed = AC_FANSPEED_AUTO; // зависимость от health
} else if (cmd.mode == AC_MODE_FAN ||
_current_ac_state.mode == AC_MODE_FAN) {
cmd.fanSpeed = AC_FANSPEED_MEDIUM; // зависимость от health
}
this->custom_preset = custom_preset;
@@ -2657,7 +2650,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
this->swing_mode = swingmode;
break;
}
}
// User requested target temperature change
@@ -2968,7 +2960,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
default:
_debugMsg(F("AUXvlouverToVlouverFrontend: unknown vertical louver state = %u"), ESPHOME_LOG_LEVEL_DEBUG, __LINE__, _current_ac_state.louver.louver_v);
return AC_VLOUVER_FRONTEND_STOP; //
return AC_VLOUVER_FRONTEND_STOP;
}
}
@@ -3003,7 +2995,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
default:
_debugMsg(F("vlouverFrontendToAUXvlouver: unknown vertical louver state = %u"), ESPHOME_LOG_LEVEL_DEBUG, __LINE__, _current_ac_state.louver.louver_v);
return AC_LOUVERV_OFF; //
return AC_LOUVERV_OFF;
}
}
@@ -3071,12 +3063,10 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
#if defined(PRESETS_SAVING)
void set_store_settings(bool store_settings) { this->_store_settings = store_settings; }
bool get_store_settings() { return this->_store_settings; }
uint8_t load_presets_result = 0xFF;
#endif
void setup() override {
#if defined(PRESETS_SAVING)
load_presets_result = storage.load(global_presets); // читаем все пресеты из флеша
_debugMsg(F("Preset base read from NVRAM, result %02d."), ESPHOME_LOG_LEVEL_WARN, __LINE__, load_presets_result);
@@ -3116,7 +3106,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
// if the climate device supports reporting the active current action of the device with the action property.
_traits.set_supports_action(this->_show_action);
};
void loop() override {
@@ -3162,7 +3151,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
// делаем этот запрос только в случае, если есть коннект с кондиционером
if (get_has_connection()) getStatusBigAndSmall();
}
};
};