mirror of
https://github.com/GrKoR/esphome_aux_ac_component.git
synced 2025-12-08 12:36:56 +03:00
cade formatting
This commit is contained in:
@@ -1,16 +1,15 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "esphome/core/component.h"
|
|
||||||
#include "esphome/core/automation.h"
|
|
||||||
#include "aux_ac.h"
|
#include "aux_ac.h"
|
||||||
|
#include "esphome/core/automation.h"
|
||||||
|
#include "esphome/core/component.h"
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace aux_ac {
|
namespace aux_ac {
|
||||||
|
|
||||||
// **************************************** DISPLAY ACTIONS ****************************************
|
// **************************************** DISPLAY ACTIONS ****************************************
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConDisplayOffAction : public Action<Ts...>
|
class AirConDisplayOffAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConDisplayOffAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConDisplayOffAction(AirCon *ac) : ac_(ac) {}
|
||||||
|
|
||||||
@@ -21,8 +20,7 @@ namespace aux_ac {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConDisplayOnAction : public Action<Ts...>
|
class AirConDisplayOnAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConDisplayOnAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConDisplayOnAction(AirCon *ac) : ac_(ac) {}
|
||||||
|
|
||||||
@@ -32,12 +30,9 @@ namespace aux_ac {
|
|||||||
AirCon *ac_;
|
AirCon *ac_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// **************************************** VERTICAL LOUVER ACTIONS ****************************************
|
// **************************************** VERTICAL LOUVER ACTIONS ****************************************
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConVLouverSwingAction : public Action<Ts...>
|
class AirConVLouverSwingAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConVLouverSwingAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConVLouverSwingAction(AirCon *ac) : ac_(ac) {}
|
||||||
|
|
||||||
@@ -48,8 +43,7 @@ namespace aux_ac {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConVLouverStopAction : public Action<Ts...>
|
class AirConVLouverStopAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConVLouverStopAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConVLouverStopAction(AirCon *ac) : ac_(ac) {}
|
||||||
|
|
||||||
@@ -60,8 +54,7 @@ namespace aux_ac {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConVLouverTopAction : public Action<Ts...>
|
class AirConVLouverTopAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConVLouverTopAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConVLouverTopAction(AirCon *ac) : ac_(ac) {}
|
||||||
|
|
||||||
@@ -72,8 +65,7 @@ namespace aux_ac {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConVLouverMiddleAboveAction : public Action<Ts...>
|
class AirConVLouverMiddleAboveAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConVLouverMiddleAboveAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConVLouverMiddleAboveAction(AirCon *ac) : ac_(ac) {}
|
||||||
|
|
||||||
@@ -84,8 +76,7 @@ namespace aux_ac {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConVLouverMiddleAction : public Action<Ts...>
|
class AirConVLouverMiddleAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConVLouverMiddleAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConVLouverMiddleAction(AirCon *ac) : ac_(ac) {}
|
||||||
|
|
||||||
@@ -96,8 +87,7 @@ namespace aux_ac {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConVLouverMiddleBelowAction : public Action<Ts...>
|
class AirConVLouverMiddleBelowAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConVLouverMiddleBelowAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConVLouverMiddleBelowAction(AirCon *ac) : ac_(ac) {}
|
||||||
|
|
||||||
@@ -108,8 +98,7 @@ namespace aux_ac {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConVLouverBottomAction : public Action<Ts...>
|
class AirConVLouverBottomAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConVLouverBottomAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConVLouverBottomAction(AirCon *ac) : ac_(ac) {}
|
||||||
|
|
||||||
@@ -120,8 +109,7 @@ namespace aux_ac {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConVLouverSetAction : public Action<Ts...>
|
class AirConVLouverSetAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
AirConVLouverSetAction(AirCon *ac) : ac_(ac) {}
|
AirConVLouverSetAction(AirCon *ac) : ac_(ac) {}
|
||||||
TEMPLATABLE_VALUE(uint8_t, value);
|
TEMPLATABLE_VALUE(uint8_t, value);
|
||||||
@@ -136,11 +124,9 @@ namespace aux_ac {
|
|||||||
uint8_t vlpos_;
|
uint8_t vlpos_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// **************************************** SEND TEST PACKET ACTION ****************************************
|
// **************************************** SEND TEST PACKET ACTION ****************************************
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class AirConSendTestPacketAction : public Action<Ts...>
|
class AirConSendTestPacketAction : public Action<Ts...> {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit AirConSendTestPacketAction(AirCon *ac) : ac_(ac) {}
|
explicit AirConSendTestPacketAction(AirCon *ac) : ac_(ac) {}
|
||||||
void set_data_template(std::function<std::vector<uint8_t>(Ts...)> func) {
|
void set_data_template(std::function<std::vector<uint8_t>(Ts...)> func) {
|
||||||
|
|||||||
@@ -5,14 +5,15 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "esphome.h"
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include "esphome/core/component.h"
|
|
||||||
#include "esphome/components/climate/climate.h"
|
#include "esphome.h"
|
||||||
#include "esphome/components/uart/uart.h"
|
|
||||||
#include "esphome/components/sensor/sensor.h"
|
|
||||||
#include "esphome/components/binary_sensor/binary_sensor.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/text_sensor/text_sensor.h"
|
||||||
|
#include "esphome/components/uart/uart.h"
|
||||||
|
#include "esphome/core/component.h"
|
||||||
#include "esphome/core/helpers.h"
|
#include "esphome/core/helpers.h"
|
||||||
|
|
||||||
// весь функционал сохранения пресетов прячу под дефайн
|
// весь функционал сохранения пресетов прячу под дефайн
|
||||||
@@ -28,18 +29,16 @@
|
|||||||
// раскоментируй ключ HOLMS для вывода лога под Эксель, значение ключа - размер пакетов которые будут видны
|
// раскоментируй ключ HOLMS для вывода лога под Эксель, значение ключа - размер пакетов которые будут видны
|
||||||
//#define HOLMS 19
|
//#define HOLMS 19
|
||||||
|
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace aux_ac {
|
namespace aux_ac {
|
||||||
|
|
||||||
static const char *const TAG = "AirCon";
|
static const char *const TAG = "AirCon";
|
||||||
|
|
||||||
using climate::ClimatePreset;
|
|
||||||
using climate::ClimateTraits;
|
|
||||||
using climate::ClimateMode;
|
|
||||||
using climate::ClimateSwingMode;
|
|
||||||
using climate::ClimateFanMode;
|
using climate::ClimateFanMode;
|
||||||
|
using climate::ClimateMode;
|
||||||
|
using climate::ClimatePreset;
|
||||||
|
using climate::ClimateSwingMode;
|
||||||
|
using climate::ClimateTraits;
|
||||||
|
|
||||||
class Constants {
|
class Constants {
|
||||||
public:
|
public:
|
||||||
@@ -80,7 +79,6 @@ const float Constants::AC_MAX_TEMPERATURE = 32.0;
|
|||||||
const float Constants::AC_TEMPERATURE_STEP = 0.5;
|
const float Constants::AC_TEMPERATURE_STEP = 0.5;
|
||||||
const uint32_t Constants::AC_STATES_REQUEST_INTERVAL = 7000;
|
const uint32_t Constants::AC_STATES_REQUEST_INTERVAL = 7000;
|
||||||
|
|
||||||
|
|
||||||
class AirCon;
|
class AirCon;
|
||||||
|
|
||||||
// состояния конечного автомата компонента
|
// состояния конечного автомата компонента
|
||||||
@@ -338,8 +336,6 @@ struct packet_small_info_body_t {
|
|||||||
uint8_t target_temp_frac2;
|
uint8_t target_temp_frac2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//****************************************************************************************************************************************************
|
//****************************************************************************************************************************************************
|
||||||
//*************************************************** ПАРАМЕТРЫ РАБОТЫ КОНДИЦИОНЕРА ******************************************************************
|
//*************************************************** ПАРАМЕТРЫ РАБОТЫ КОНДИЦИОНЕРА ******************************************************************
|
||||||
//****************************************************************************************************************************************************
|
//****************************************************************************************************************************************************
|
||||||
@@ -347,20 +343,28 @@ struct packet_small_info_body_t {
|
|||||||
|
|
||||||
// питание кондиционера
|
// питание кондиционера
|
||||||
#define AC_POWER_MASK 0b00100000
|
#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
|
// режим очистки кондиционера, включается (или должен включаться) при AC_POWER_OFF
|
||||||
#define AC_CLEAN_MASK 0b00000100
|
#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
|
#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
|
#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
|
#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
|
#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
|
#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 часов.
|
// Ночной режим (SLEEP). Комбинируется только с режимами COOL и HEAT. Автоматически выключается через 7 часов.
|
||||||
// COOL: температура +1 градус через час, еще через час дополнительные +1 градус, дальше не меняется.
|
// COOL: температура +1 градус через час, еще через час дополнительные +1 градус, дальше не меняется.
|
||||||
// HEAT: температура -2 градуса через час, еще через час дополнительные -2 градуса, дальше не меняется.
|
// HEAT: температура -2 градуса через час, еще через час дополнительные -2 градуса, дальше не меняется.
|
||||||
// Восстанавливается ли температура через 7 часов при отключении режима - не понятно.
|
// Восстанавливается ли температура через 7 часов при отключении режима - не понятно.
|
||||||
#define AC_SLEEP_MASK 0b00000100
|
#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
|
#define AC_LOUVERV_MASK 0b00000111
|
||||||
@@ -402,7 +415,9 @@ enum ac_louver_V : uint8_t {
|
|||||||
// Горизонтальные жалюзи. В протоколе зашита возможность двигать ими по всякому, но должна быть такая возможность на уровне железа.
|
// Горизонтальные жалюзи. В протоколе зашита возможность двигать ими по всякому, но должна быть такая возможность на уровне железа.
|
||||||
// горизонтальные жалюзи выставлять в определенное положение не вышло, протестировано.
|
// горизонтальные жалюзи выставлять в определенное положение не вышло, протестировано.
|
||||||
#define AC_LOUVERH_MASK 0b11100000
|
#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 {
|
struct ac_louver {
|
||||||
ac_louver_H louver_h;
|
ac_louver_H louver_h;
|
||||||
@@ -411,28 +426,46 @@ struct ac_louver {
|
|||||||
|
|
||||||
// скорость вентилятора
|
// скорость вентилятора
|
||||||
#define AC_FANSPEED_MASK 0b11100000
|
#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
|
// TURBO работает только в режимах COOL и HEAT
|
||||||
#define AC_FANTURBO_MASK 0b01000000
|
#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 не устанавливается
|
// MUTE работает только в режиме FAN. В режиме COOL кондей команду принимает, но MUTE не устанавливается
|
||||||
#define AC_FANMUTE_MASK 0b10000000
|
#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
|
#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 открытые жалюзи и глушит вентилятор. Уличный блок при этом гудит и тарахтит.
|
// По факту: после выключения сплита он оставляет минут на 5 открытые жалюзи и глушит вентилятор. Уличный блок при этом гудит и тарахтит.
|
||||||
// Возможно, прогревается теплообменник для высыхания. Через некоторое время внешний блок замолкает и сплит закрывает жалюзи.
|
// Возможно, прогревается теплообменник для высыхания. Через некоторое время внешний блок замолкает и сплит закрывает жалюзи.
|
||||||
#define AC_MILDEW_MASK 0b00001000
|
#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
|
// 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,
|
AC_VLOUVER_FRONTEND_BOTTOM = 0x06,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/** команда для кондиционера
|
/** команда для кондиционера
|
||||||
*
|
*
|
||||||
* ВАЖНО! В коде используется копирование команд простым присваиванием.
|
* ВАЖНО! В коде используется копирование команд простым присваиванием.
|
||||||
@@ -460,7 +492,8 @@ enum ac_vlouver_frontend : uint8_t {
|
|||||||
//*****************************************************************************
|
//*****************************************************************************
|
||||||
// структура для сохранения настроек, специально вынесено в макрос, чтобы использовать в нескольких местах
|
// структура для сохранения настроек, специально вынесено в макрос, чтобы использовать в нескольких местах
|
||||||
// сделано Brokly для того, чтобы поведение wifi-модуля походило на ИК-пульт (для каждого режима сохранялись свои настройки температуры и прочего)
|
// сделано Brokly для того, чтобы поведение wifi-модуля походило на ИК-пульт (для каждого режима сохранялись свои настройки температуры и прочего)
|
||||||
#define AC_COMMAND_BASE float temp_target;\
|
#define AC_COMMAND_BASE \
|
||||||
|
float temp_target; \
|
||||||
ac_power power; \
|
ac_power power; \
|
||||||
ac_clean clean; \
|
ac_clean clean; \
|
||||||
ac_health health; \
|
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 {
|
class AirCon : public esphome::Component, public esphome::climate::Climate {
|
||||||
private:
|
private:
|
||||||
|
|
||||||
#if defined(PRESETS_SAVING)
|
#if defined(PRESETS_SAVING)
|
||||||
// массив для сохранения данных глобальных персетов
|
// массив для сохранения данных глобальных персетов
|
||||||
ac_save_command_t global_presets[POS_MODE_OFF + 1];
|
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);
|
_setStateMachineState(ACSM_RECEIVING_PACKET);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
while (_ac_serial->available() > 0)
|
while (_ac_serial->available() > 0) {
|
||||||
{
|
|
||||||
// если наткнулись на старт пакета, то выходим из while
|
// если наткнулись на старт пакета, то выходим из while
|
||||||
// если какие-то данные были загружены в буфер, то они будут выгружены в лог при загрузке нового пакета
|
// если какие-то данные были загружены в буфер, то они будут выгружены в лог при загрузке нового пакета
|
||||||
if (this->peek() == AC_PACKET_START_BYTE) break;
|
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__;
|
if (line == 0) line = __LINE__;
|
||||||
_debugMsg(st, dbgLevel, line);
|
_debugMsg(st, dbgLevel, line);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** расчет CRC16 для блока данных data длиной len
|
/** расчет 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;
|
pack->body[12] = (pack->body[12] & ~AC_MILDEW_MASK) | cmd->mildew;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// рассчитываем и записываем в пакет CRC
|
// рассчитываем и записываем в пакет CRC
|
||||||
pack->crc = (packet_crc_t *)&(pack->data[AC_HEADER_SIZE + pack->header->body_length]);
|
pack->crc = (packet_crc_t *)&(pack->data[AC_HEADER_SIZE + pack->header->body_length]);
|
||||||
_setCRC16(pack);
|
_setCRC16(pack);
|
||||||
@@ -1810,7 +1834,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
esphome::binary_sensor::BinarySensor *sensor_defrost_ = nullptr;
|
esphome::binary_sensor::BinarySensor *sensor_defrost_ = nullptr;
|
||||||
esphome::text_sensor::TextSensor *sensor_preset_reporter_ = nullptr;
|
esphome::text_sensor::TextSensor *sensor_preset_reporter_ = nullptr;
|
||||||
|
|
||||||
|
|
||||||
// загружает на выполнение последовательность команд на включение/выключение табло с температурой
|
// загружает на выполнение последовательность команд на включение/выключение табло с температурой
|
||||||
bool _displaySequence(ac_display dsp = AC_DISPLAY_ON) {
|
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);
|
uint8_t num_preset = get_num_preset(cmd);
|
||||||
if (memcmp(cmd, &(global_presets[num_preset]), AC_COMMAND_BASE_SIZE) != 0) { // содержимое пресетов разное
|
if (memcmp(cmd, &(global_presets[num_preset]), AC_COMMAND_BASE_SIZE) != 0) { // содержимое пресетов разное
|
||||||
memcpy(&(global_presets[num_preset]), cmd, AC_COMMAND_BASE_SIZE); // копируем пресет в массив
|
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);
|
_debugMsg(F("Save preset %02d to NVRAM."), ESPHOME_LOG_LEVEL_WARN, __LINE__, num_preset);
|
||||||
if (storage.save(global_presets)) {
|
if (storage.save(global_presets)) {
|
||||||
if (!global_preferences->sync()) // сохраняем все пресеты
|
if (!global_preferences->sync()) // сохраняем все пресеты
|
||||||
@@ -1876,7 +1899,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
} else {
|
} else {
|
||||||
_debugMsg(F("Save presets to flash ERROR ! (load result: %02d)"), ESPHOME_LOG_LEVEL_ERROR, __LINE__, load_presets_result);
|
_debugMsg(F("Save presets to flash ERROR ! (load result: %02d)"), ESPHOME_LOG_LEVEL_ERROR, __LINE__, load_presets_result);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
_debugMsg(F("Preset %02d has not been changed, Saving canceled."), ESPHOME_LOG_LEVEL_WARN, __LINE__, num_preset);
|
_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);
|
_debugMsg(F("Action mode: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, this->action);
|
||||||
|
|
||||||
|
|
||||||
/*************************** POWER & MODE ***************************/
|
/*************************** POWER & MODE ***************************/
|
||||||
if (_current_ac_state.power == AC_POWER_ON) {
|
if (_current_ac_state.power == AC_POWER_ON) {
|
||||||
switch (_current_ac_state.mode) {
|
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 &&
|
if (_current_ac_state.health == AC_HEALTH_ON &&
|
||||||
_current_ac_state.power == AC_POWER_ON) {
|
_current_ac_state.power == AC_POWER_ON) {
|
||||||
|
|
||||||
this->custom_preset = Constants::HEALTH;
|
this->custom_preset = Constants::HEALTH;
|
||||||
|
|
||||||
} else if (this->custom_preset == Constants::HEALTH) {
|
} else if (this->custom_preset == Constants::HEALTH) {
|
||||||
|
|
||||||
// AC_HEALTH_OFF
|
// AC_HEALTH_OFF
|
||||||
// только в том случае, если до этого пресет был установлен
|
// только в том случае, если до этого пресет был установлен
|
||||||
this->custom_preset = (std::string) "";
|
this->custom_preset = (std::string) "";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_debugMsg(F("Climate HEALTH preset: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, _current_ac_state.health);
|
_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 часов при отключении режима - не понятно.
|
// Восстанавливается ли температура через 7 часов при отключении режима - не понятно.
|
||||||
if (_current_ac_state.sleep == AC_SLEEP_ON &&
|
if (_current_ac_state.sleep == AC_SLEEP_ON &&
|
||||||
_current_ac_state.power == AC_POWER_ON) {
|
_current_ac_state.power == AC_POWER_ON) {
|
||||||
|
|
||||||
this->preset = climate::CLIMATE_PRESET_SLEEP;
|
this->preset = climate::CLIMATE_PRESET_SLEEP;
|
||||||
|
|
||||||
} else if (this->preset == climate::CLIMATE_PRESET_SLEEP) {
|
} else if (this->preset == climate::CLIMATE_PRESET_SLEEP) {
|
||||||
|
|
||||||
// AC_SLEEP_OFF
|
// AC_SLEEP_OFF
|
||||||
// только в том случае, если до этого пресет был установлен
|
// только в том случае, если до этого пресет был установлен
|
||||||
this->preset = climate::CLIMATE_PRESET_NONE;
|
this->preset = climate::CLIMATE_PRESET_NONE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_debugMsg(F("Climate preset: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, this->preset);
|
_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
|
// режим очистки кондиционера, включается (или должен включаться) при AC_POWER_OFF
|
||||||
if (_current_ac_state.clean == AC_CLEAN_ON &&
|
if (_current_ac_state.clean == AC_CLEAN_ON &&
|
||||||
_current_ac_state.power == AC_POWER_OFF) {
|
_current_ac_state.power == AC_POWER_OFF) {
|
||||||
|
|
||||||
this->custom_preset = Constants::CLEAN;
|
this->custom_preset = Constants::CLEAN;
|
||||||
|
|
||||||
} else if (this->custom_preset == Constants::CLEAN) {
|
} else if (this->custom_preset == Constants::CLEAN) {
|
||||||
|
|
||||||
// AC_CLEAN_OFF
|
// AC_CLEAN_OFF
|
||||||
// только в том случае, если до этого пресет был установлен
|
// только в том случае, если до этого пресет был установлен
|
||||||
this->custom_preset = (std::string) "";
|
this->custom_preset = (std::string) "";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_debugMsg(F("Climate CLEAN preset: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, _current_ac_state.clean);
|
_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);
|
_debugMsg(F("Climate ANTIFUNGUS preset: %i"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, _current_ac_state.mildew);
|
||||||
|
|
||||||
|
|
||||||
/*************************** LOUVERs ***************************/
|
/*************************** LOUVERs ***************************/
|
||||||
this->swing_mode = climate::CLIMATE_SWING_OFF;
|
this->swing_mode = climate::CLIMATE_SWING_OFF;
|
||||||
if (_current_ac_state.power == AC_POWER_ON) {
|
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;
|
this->current_temperature = _current_ac_state.temp_ambient;
|
||||||
_debugMsg(F("Room temperature: %f"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, this->current_temperature);
|
_debugMsg(F("Room temperature: %f"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, this->current_temperature);
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
/*************************** PUBLISH STATE ***************************/
|
/*************************** PUBLISH STATE ***************************/
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
@@ -2317,7 +2327,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
LOG_BINARY_SENSOR(" ", "Display", this->sensor_display_);
|
LOG_BINARY_SENSOR(" ", "Display", this->sensor_display_);
|
||||||
LOG_TEXT_SENSOR(" ", "Preset Reporter", this->sensor_preset_reporter_);
|
LOG_TEXT_SENSOR(" ", "Preset Reporter", this->sensor_preset_reporter_);
|
||||||
this->dump_traits_(TAG);
|
this->dump_traits_(TAG);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// вызывается пользователем из интерфейса ESPHome или Home Assistant
|
// вызывается пользователем из интерфейса ESPHome или Home Assistant
|
||||||
@@ -2411,7 +2420,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// User requested fan_mode change
|
// User requested fan_mode change
|
||||||
@@ -2512,15 +2520,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
// COOL: температура +1 градус через час, еще через час дополнительные +1 градус, дальше не меняется.
|
// COOL: температура +1 градус через час, еще через час дополнительные +1 градус, дальше не меняется.
|
||||||
// HEAT: температура -2 градуса через час, еще через час дополнительные -2 градуса, дальше не меняется.
|
// HEAT: температура -2 градуса через час, еще через час дополнительные -2 градуса, дальше не меняется.
|
||||||
// Восстанавливается ли температура через 7 часов при отключении режима - не понятно.
|
// Восстанавливается ли температура через 7 часов при отключении режима - не понятно.
|
||||||
if ( cmd.mode == AC_MODE_COOL
|
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) {
|
||||||
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;
|
hasCommand = true;
|
||||||
cmd.sleep = AC_SLEEP_ON;
|
cmd.sleep = AC_SLEEP_ON;
|
||||||
cmd.health = AC_HEALTH_OFF; // для логики пресетов
|
cmd.health = AC_HEALTH_OFF; // для логики пресетов
|
||||||
@@ -2555,9 +2555,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
if (custom_preset == Constants::CLEAN) {
|
if (custom_preset == Constants::CLEAN) {
|
||||||
// режим очистки кондиционера, включается (или должен включаться) при AC_POWER_OFF
|
// режим очистки кондиционера, включается (или должен включаться) при AC_POWER_OFF
|
||||||
// TODO: надо отдебажить выключение этого режима
|
// TODO: надо отдебажить выключение этого режима
|
||||||
if ( cmd.power == AC_POWER_OFF
|
if (cmd.power == AC_POWER_OFF or _current_ac_state.power == AC_POWER_OFF) {
|
||||||
or _current_ac_state.power == AC_POWER_OFF) {
|
|
||||||
|
|
||||||
hasCommand = true;
|
hasCommand = true;
|
||||||
cmd.clean = AC_CLEAN_ON;
|
cmd.clean = AC_CLEAN_ON;
|
||||||
cmd.mildew = AC_MILDEW_OFF; // для логики пресетов
|
cmd.mildew = AC_MILDEW_OFF; // для логики пресетов
|
||||||
@@ -2568,10 +2566,8 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else if (custom_preset == Constants::HEALTH) {
|
} else if (custom_preset == Constants::HEALTH) {
|
||||||
|
|
||||||
if (cmd.power == AC_POWER_ON ||
|
if (cmd.power == AC_POWER_ON ||
|
||||||
_current_ac_state.power == AC_POWER_ON) {
|
_current_ac_state.power == AC_POWER_ON) {
|
||||||
|
|
||||||
hasCommand = true;
|
hasCommand = true;
|
||||||
cmd.health = AC_HEALTH_ON;
|
cmd.health = AC_HEALTH_ON;
|
||||||
// cmd.health_status = AC_HEALTH_STATUS_ON; // GK: статус кондей сам поднимает
|
// 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_COOL ||
|
||||||
_current_ac_state.mode == AC_MODE_HEAT ||
|
_current_ac_state.mode == AC_MODE_HEAT ||
|
||||||
_current_ac_state.mode == AC_MODE_AUTO) {
|
_current_ac_state.mode == AC_MODE_AUTO) {
|
||||||
|
|
||||||
cmd.fanSpeed = AC_FANSPEED_AUTO; // зависимость от health
|
cmd.fanSpeed = AC_FANSPEED_AUTO; // зависимость от health
|
||||||
|
|
||||||
} else if (cmd.mode == AC_MODE_FAN ||
|
} else if (cmd.mode == AC_MODE_FAN ||
|
||||||
_current_ac_state.mode == AC_MODE_FAN) {
|
_current_ac_state.mode == AC_MODE_FAN) {
|
||||||
|
|
||||||
cmd.fanSpeed = AC_FANSPEED_MEDIUM; // зависимость от health
|
cmd.fanSpeed = AC_FANSPEED_MEDIUM; // зависимость от health
|
||||||
|
|
||||||
}
|
}
|
||||||
this->custom_preset = custom_preset;
|
this->custom_preset = custom_preset;
|
||||||
|
|
||||||
@@ -2657,7 +2650,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
this->swing_mode = swingmode;
|
this->swing_mode = swingmode;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// User requested target temperature change
|
// User requested target temperature change
|
||||||
@@ -2968,7 +2960,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
_debugMsg(F("AUXvlouverToVlouverFrontend: unknown vertical louver state = %u"), ESPHOME_LOG_LEVEL_DEBUG, __LINE__, _current_ac_state.louver.louver_v);
|
_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:
|
default:
|
||||||
_debugMsg(F("vlouverFrontendToAUXvlouver: unknown vertical louver state = %u"), ESPHOME_LOG_LEVEL_DEBUG, __LINE__, _current_ac_state.louver.louver_v);
|
_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)
|
#if defined(PRESETS_SAVING)
|
||||||
void set_store_settings(bool store_settings) { this->_store_settings = store_settings; }
|
void set_store_settings(bool store_settings) { this->_store_settings = store_settings; }
|
||||||
bool get_store_settings() { return this->_store_settings; }
|
bool get_store_settings() { return this->_store_settings; }
|
||||||
|
|
||||||
uint8_t load_presets_result = 0xFF;
|
uint8_t load_presets_result = 0xFF;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void setup() override {
|
void setup() override {
|
||||||
|
|
||||||
#if defined(PRESETS_SAVING)
|
#if defined(PRESETS_SAVING)
|
||||||
load_presets_result = storage.load(global_presets); // читаем все пресеты из флеша
|
load_presets_result = storage.load(global_presets); // читаем все пресеты из флеша
|
||||||
_debugMsg(F("Preset base read from NVRAM, result %02d."), ESPHOME_LOG_LEVEL_WARN, __LINE__, load_presets_result);
|
_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.
|
// if the climate device supports reporting the active current action of the device with the action property.
|
||||||
_traits.set_supports_action(this->_show_action);
|
_traits.set_supports_action(this->_show_action);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void loop() override {
|
void loop() override {
|
||||||
@@ -3162,7 +3151,6 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
// делаем этот запрос только в случае, если есть коннект с кондиционером
|
// делаем этот запрос только в случае, если есть коннект с кондиционером
|
||||||
if (get_has_connection()) getStatusBigAndSmall();
|
if (get_has_connection()) getStatusBigAndSmall();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user