mirror of
https://github.com/GrKoR/esphome_aux_ac_component.git
synced 2025-12-06 11:36:55 +03:00
new: Fahrenheit support
This commit is contained in:
@@ -485,6 +485,16 @@ namespace esphome
|
|||||||
#define AC_TIMER_MINUTES_MASK 0b00111111
|
#define AC_TIMER_MINUTES_MASK 0b00111111
|
||||||
#define AC_TIMER_HOURS_MASK 0b00011111
|
#define AC_TIMER_HOURS_MASK 0b00011111
|
||||||
|
|
||||||
|
// Temperature unit of measurement
|
||||||
|
// Air conditioner works with Celsius but can convert it to Fahrenheit for display on the LED screen.
|
||||||
|
#define AC_TEMPERATURE_UNIT_MASK 0b00000010
|
||||||
|
enum ac_temperature_unit : uint8_t
|
||||||
|
{
|
||||||
|
AC_TEMPERATURE_UNIT_CELSIUS = 0x00,
|
||||||
|
AC_TEMPERATURE_UNIT_FAHRENHEIT = 0x02,
|
||||||
|
AC_TEMPERATURE_UNIT_UNTOUCHED = 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
// включение таймера сна
|
// включение таймера сна
|
||||||
#define AC_TIMER_MASK 0b01000000
|
#define AC_TIMER_MASK 0b01000000
|
||||||
enum ac_timer : uint8_t
|
enum ac_timer : uint8_t
|
||||||
@@ -642,22 +652,23 @@ namespace esphome
|
|||||||
//*****************************************************************************
|
//*****************************************************************************
|
||||||
// структура для сохранения настроек, специально вынесено в макрос, чтобы использовать в нескольких местах
|
// структура для сохранения настроек, специально вынесено в макрос, чтобы использовать в нескольких местах
|
||||||
// сделано Brokly для того, чтобы поведение wifi-модуля походило на ИК-пульт (для каждого режима сохранялись свои настройки температуры и прочего)
|
// сделано Brokly для того, чтобы поведение wifi-модуля походило на ИК-пульт (для каждого режима сохранялись свои настройки температуры и прочего)
|
||||||
#define AC_COMMAND_BASE \
|
#define AC_COMMAND_BASE \
|
||||||
float temp_target; \
|
float temp_target; \
|
||||||
ac_power power; \
|
ac_power power; \
|
||||||
ac_clean clean; \
|
ac_clean clean; \
|
||||||
ac_health health; \
|
ac_health health; \
|
||||||
ac_mode mode; \
|
ac_mode mode; \
|
||||||
ac_sleep sleep; \
|
ac_temperature_unit t_unit; \
|
||||||
ac_louver louver; \
|
ac_sleep sleep; \
|
||||||
ac_fanspeed fanSpeed; \
|
ac_louver louver; \
|
||||||
ac_fanturbo fanTurbo; \
|
ac_fanspeed fanSpeed; \
|
||||||
ac_fanmute fanMute; \
|
ac_fanturbo fanTurbo; \
|
||||||
ac_display display; \
|
ac_fanmute fanMute; \
|
||||||
ac_mildew mildew; \
|
ac_display display; \
|
||||||
ac_timer timer; \
|
ac_mildew mildew; \
|
||||||
uint8_t timer_hours; \
|
ac_timer timer; \
|
||||||
uint8_t timer_minutes; \
|
uint8_t timer_hours; \
|
||||||
|
uint8_t timer_minutes; \
|
||||||
bool temp_target_matter
|
bool temp_target_matter
|
||||||
|
|
||||||
// чистый размер этой структуры 20 байт, скорее всего из-за выравнивания, она будет больше
|
// чистый размер этой структуры 20 байт, скорее всего из-за выравнивания, она будет больше
|
||||||
@@ -1107,6 +1118,7 @@ namespace esphome
|
|||||||
cmd->louver.louver_v = AC_LOUVERV_UNTOUCHED;
|
cmd->louver.louver_v = AC_LOUVERV_UNTOUCHED;
|
||||||
cmd->mildew = AC_MILDEW_UNTOUCHED;
|
cmd->mildew = AC_MILDEW_UNTOUCHED;
|
||||||
cmd->mode = AC_MODE_UNTOUCHED;
|
cmd->mode = AC_MODE_UNTOUCHED;
|
||||||
|
cmd->t_unit = AC_TEMPERATURE_UNIT_UNTOUCHED;
|
||||||
cmd->power = AC_POWER_UNTOUCHED;
|
cmd->power = AC_POWER_UNTOUCHED;
|
||||||
cmd->sleep = AC_SLEEP_UNTOUCHED;
|
cmd->sleep = AC_SLEEP_UNTOUCHED;
|
||||||
cmd->timer = AC_TIMER_UNTOUCHED;
|
cmd->timer = AC_TIMER_UNTOUCHED;
|
||||||
@@ -1466,6 +1478,10 @@ namespace esphome
|
|||||||
stateChangedFlag = stateChangedFlag || (_current_ac_state.mode != (ac_mode)stateByte);
|
stateChangedFlag = stateChangedFlag || (_current_ac_state.mode != (ac_mode)stateByte);
|
||||||
_current_ac_state.mode = (ac_mode)stateByte;
|
_current_ac_state.mode = (ac_mode)stateByte;
|
||||||
|
|
||||||
|
stateByte = small_info_body->mode & AC_TEMPERATURE_UNIT_MASK;
|
||||||
|
stateChangedFlag = stateChangedFlag || (_current_ac_state.t_unit != (ac_temperature_unit)stateByte);
|
||||||
|
_current_ac_state.t_unit = (ac_temperature_unit)stateByte;
|
||||||
|
|
||||||
stateByte = small_info_body->mode & AC_SLEEP_MASK;
|
stateByte = small_info_body->mode & AC_SLEEP_MASK;
|
||||||
stateChangedFlag = stateChangedFlag || (_current_ac_state.sleep != (ac_sleep)stateByte);
|
stateChangedFlag = stateChangedFlag || (_current_ac_state.sleep != (ac_sleep)stateByte);
|
||||||
_current_ac_state.sleep = (ac_sleep)stateByte;
|
_current_ac_state.sleep = (ac_sleep)stateByte;
|
||||||
@@ -1950,6 +1966,10 @@ namespace esphome
|
|||||||
{
|
{
|
||||||
pack->body[7] = (pack->body[7] & ~AC_MODE_MASK) | cmd->mode;
|
pack->body[7] = (pack->body[7] & ~AC_MODE_MASK) | cmd->mode;
|
||||||
}
|
}
|
||||||
|
if (cmd->t_unit != AC_TEMPERATURE_UNIT_UNTOUCHED)
|
||||||
|
{
|
||||||
|
pack->body[7] = (pack->body[7] & ~AC_TEMPERATURE_UNIT_MASK) | cmd->t_unit;
|
||||||
|
}
|
||||||
if (cmd->sleep != AC_SLEEP_UNTOUCHED)
|
if (cmd->sleep != AC_SLEEP_UNTOUCHED)
|
||||||
{
|
{
|
||||||
pack->body[7] = (pack->body[7] & ~AC_SLEEP_MASK) | cmd->sleep;
|
pack->body[7] = (pack->body[7] & ~AC_SLEEP_MASK) | cmd->sleep;
|
||||||
@@ -3032,7 +3052,10 @@ namespace esphome
|
|||||||
// COOL: температура +1 градус через час, еще через час дополнительные +1 градус, дальше не меняется.
|
// COOL: температура +1 градус через час, еще через час дополнительные +1 градус, дальше не меняется.
|
||||||
// HEAT: температура -2 градуса через час, еще через час дополнительные -2 градуса, дальше не меняется.
|
// HEAT: температура -2 градуса через час, еще через час дополнительные -2 градуса, дальше не меняется.
|
||||||
// Восстанавливается ли температура через 7 часов при отключении режима - не понятно.
|
// Восстанавливается ли температура через 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 _current_ac_state.mode == AC_MODE_COOL or
|
||||||
|
cmd.mode == AC_MODE_HEAT or _current_ac_state.mode == AC_MODE_HEAT or
|
||||||
|
cmd.mode == AC_MODE_DRY or _current_ac_state.mode == AC_MODE_DRY or
|
||||||
|
cmd.mode == AC_MODE_AUTO or _current_ac_state.mode == AC_MODE_AUTO)
|
||||||
{
|
{
|
||||||
hasCommand = true;
|
hasCommand = true;
|
||||||
cmd.sleep = AC_SLEEP_ON;
|
cmd.sleep = AC_SLEEP_ON;
|
||||||
|
|||||||
Reference in New Issue
Block a user