mirror of
https://github.com/GrKoR/esphome_aux_ac_component.git
synced 2025-12-09 13:06:58 +03:00
+
This commit is contained in:
@@ -14,39 +14,18 @@
|
|||||||
#include "esphome/components/binary_sensor/binary_sensor.h"
|
#include "esphome/components/binary_sensor/binary_sensor.h"
|
||||||
#include "esphome/core/helpers.h"
|
#include "esphome/core/helpers.h"
|
||||||
|
|
||||||
/* TODO: Помечаю, чтобы не забыть.
|
// весь функционал сохранения пресетов прячу под дефайн
|
||||||
|
//#define PRESETS_SAVING
|
||||||
|
#ifdef PRESETS_SAVING
|
||||||
|
#ifdef ESP32
|
||||||
|
#include "esphome/core/preferences.h"
|
||||||
|
#else
|
||||||
|
#warning "Saving presets does not work with ESP8266"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
GK:
|
// раскоментируй ключ HOLMS для вывода лога под Эксель, значение ключа - размер пакетов которые будут видны
|
||||||
Не понятно пока, зачем сохранять настройки в энергонезависимую память.
|
//#define HOLMS 19
|
||||||
Вроде бы компоненту это не требуется - он отражает текущее состояние кондея.
|
|
||||||
А кондей при включении после пропадания питания сам переходит в последний включенный режим.
|
|
||||||
В общем, пока не понятно. Ждём пояснений =)
|
|
||||||
|
|
||||||
Brokly: У меня пульт выставляет свои настройки в завасимости от режима. У нагрева свои градусы со шторками ,
|
|
||||||
у охлаждения свои градусы со своими шторками
|
|
||||||
|
|
||||||
GK: ну то есть ты сохраняешь в памяти эти настройки, чтобы в умном доме вместо отправки указания
|
|
||||||
"выстави нагрев до 24 градусов + шторки так-то", отправлять просто команду "выстави нагрев",
|
|
||||||
а уже есп будет подтягивать температуру и шторки из памяти. Так? или я не понял?
|
|
||||||
|
|
||||||
Brokly: Да. А что эта функция чему то мешает ?
|
|
||||||
|
|
||||||
GK: фича не мешает, но наверное может вести к проблемам. Типа износа ячеек памяти... а может и не привести...
|
|
||||||
пока не уверен, что эту фичу надо в мастер кидать.
|
|
||||||
плюс исходники компонента вбирают в себя дополнительный функционал, который можно реализовать иначе.
|
|
||||||
Как минимум, старт с определенного пресета можно выполнить настройками в yaml (через глобальные переменные).
|
|
||||||
Не факт, что это будет проще и\или оптимальнее. Но зато фичи компонента будут соответствовать принципам атомарности,
|
|
||||||
в нем не будет дополнительного кода, который может в компоненте не быть.
|
|
||||||
в общем, надо будет взвесить все за и против
|
|
||||||
*/
|
|
||||||
#if defined(ESP32)
|
|
||||||
#define PRESETS_SAVING
|
|
||||||
#include "esphome/core/preferences.h"
|
|
||||||
#else
|
|
||||||
#warning "Saving presets does not work with ESP8266"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//#define HOLMS 19 // раскоментируй ключ для вывода лога под Эксель, значение ключа - размер пакетов которые будут видны
|
|
||||||
|
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
@@ -86,8 +65,8 @@ public:
|
|||||||
|
|
||||||
const std::string Constants::AC_FIRMWARE_VERSION = "0.2.4";
|
const std::string Constants::AC_FIRMWARE_VERSION = "0.2.4";
|
||||||
const char *const Constants::TAG = "AirCon";
|
const char *const Constants::TAG = "AirCon";
|
||||||
const std::string Constants::MUTE = "Mute";
|
const std::string Constants::MUTE = "mute";
|
||||||
const std::string Constants::TURBO = "Turbo";
|
const std::string Constants::TURBO = "turbo";
|
||||||
const std::string Constants::CLEAN = "Clean";
|
const std::string Constants::CLEAN = "Clean";
|
||||||
const std::string Constants::FEEL = "Feel";
|
const std::string Constants::FEEL = "Feel";
|
||||||
const std::string Constants::HEALTH = "Health";
|
const std::string Constants::HEALTH = "Health";
|
||||||
@@ -2451,7 +2430,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
// User requested mode change
|
// User requested mode change
|
||||||
if (call.get_mode().has_value()) {
|
if (call.get_mode().has_value()) {
|
||||||
ClimateMode mode = *call.get_mode();
|
ClimateMode mode = *call.get_mode();
|
||||||
// Send mode to hardware
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case climate::CLIMATE_MODE_OFF:
|
case climate::CLIMATE_MODE_OFF:
|
||||||
hasCommand = true;
|
hasCommand = true;
|
||||||
@@ -2460,8 +2439,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
#if defined(PRESETS_SAVING)
|
#if defined(PRESETS_SAVING)
|
||||||
load_preset(&cmd, POS_MODE_OFF);
|
load_preset(&cmd, POS_MODE_OFF);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
cmd.temp_target = _current_ac_state.temp_ambient; // TODO: не нужно же
|
|
||||||
this->mode = mode;
|
this->mode = mode;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2547,7 +2525,7 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
// User requested fan_mode change
|
// User requested fan_mode change
|
||||||
if (call.get_fan_mode().has_value()) {
|
if (call.get_fan_mode().has_value()) {
|
||||||
ClimateFanMode fanmode = *call.get_fan_mode();
|
ClimateFanMode fanmode = *call.get_fan_mode();
|
||||||
// Send fan mode to hardware
|
|
||||||
switch (fanmode) {
|
switch (fanmode) {
|
||||||
case climate::CLIMATE_FAN_AUTO:
|
case climate::CLIMATE_FAN_AUTO:
|
||||||
hasCommand = true;
|
hasCommand = true;
|
||||||
@@ -2596,23 +2574,25 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
|
|
||||||
} else if (call.get_custom_fan_mode().has_value()) {
|
} else if (call.get_custom_fan_mode().has_value()) {
|
||||||
std::string customfanmode = *call.get_custom_fan_mode();
|
std::string customfanmode = *call.get_custom_fan_mode();
|
||||||
// Send fan mode to hardware
|
|
||||||
if (customfanmode == Constants::TURBO) {
|
if (customfanmode == Constants::TURBO) {
|
||||||
// TURBO fan mode is suitable in COOL and HEAT modes for Rovex air conditioners.
|
// TURBO fan mode is suitable in COOL and HEAT modes.
|
||||||
// Other modes don't accept TURBO fan mode.
|
// Other modes don't accept TURBO fan mode.
|
||||||
// May be other AUX-based air conditioners do the same.
|
/*
|
||||||
if ( cmd.mode == AC_MODE_COOL
|
if ( cmd.mode == AC_MODE_COOL
|
||||||
or cmd.mode == AC_MODE_HEAT
|
or cmd.mode == AC_MODE_HEAT
|
||||||
or _current_ac_state.mode == AC_MODE_COOL
|
or _current_ac_state.mode == AC_MODE_COOL
|
||||||
or _current_ac_state.mode == AC_MODE_HEAT) {
|
or _current_ac_state.mode == AC_MODE_HEAT) {
|
||||||
|
*/
|
||||||
hasCommand = true;
|
hasCommand = true;
|
||||||
cmd.fanTurbo = AC_FANTURBO_ON;
|
cmd.fanTurbo = AC_FANTURBO_ON;
|
||||||
cmd.fanMute = AC_FANMUTE_OFF; // зависимость от fanturbo
|
cmd.fanMute = AC_FANMUTE_OFF; // зависимость от fanturbo
|
||||||
this->custom_fan_mode = customfanmode;
|
this->custom_fan_mode = customfanmode;
|
||||||
|
/*
|
||||||
} else {
|
} else {
|
||||||
_debugMsg(F("TURBO fan mode is suitable in COOL and HEAT modes only."), ESPHOME_LOG_LEVEL_WARN, __LINE__);
|
_debugMsg(F("TURBO fan mode is suitable in COOL and HEAT modes only."), ESPHOME_LOG_LEVEL_WARN, __LINE__);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
} else if (customfanmode == Constants::MUTE) {
|
} else if (customfanmode == Constants::MUTE) {
|
||||||
// MUTE fan mode is suitable in FAN mode only for Rovex air conditioner.
|
// MUTE fan mode is suitable in FAN mode only for Rovex air conditioner.
|
||||||
|
|||||||
Reference in New Issue
Block a user