new: Fahrenheit support

This commit is contained in:
GrKoR
2023-10-12 17:44:07 +03:00
parent f143240089
commit 151e5af043

View File

@@ -485,6 +485,16 @@ namespace esphome
#define AC_TIMER_MINUTES_MASK 0b00111111
#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
enum ac_timer : uint8_t
@@ -648,6 +658,7 @@ namespace esphome
ac_clean clean; \
ac_health health; \
ac_mode mode; \
ac_temperature_unit t_unit; \
ac_sleep sleep; \
ac_louver louver; \
ac_fanspeed fanSpeed; \
@@ -1107,6 +1118,7 @@ namespace esphome
cmd->louver.louver_v = AC_LOUVERV_UNTOUCHED;
cmd->mildew = AC_MILDEW_UNTOUCHED;
cmd->mode = AC_MODE_UNTOUCHED;
cmd->t_unit = AC_TEMPERATURE_UNIT_UNTOUCHED;
cmd->power = AC_POWER_UNTOUCHED;
cmd->sleep = AC_SLEEP_UNTOUCHED;
cmd->timer = AC_TIMER_UNTOUCHED;
@@ -1466,6 +1478,10 @@ namespace esphome
stateChangedFlag = stateChangedFlag || (_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;
stateChangedFlag = stateChangedFlag || (_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;
}
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)
{
pack->body[7] = (pack->body[7] & ~AC_SLEEP_MASK) | cmd->sleep;
@@ -3032,7 +3052,10 @@ namespace esphome
// 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 _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;
cmd.sleep = AC_SLEEP_ON;