FIX anto_fan rule for Cooling mode.
This commit is contained in:
@@ -9,7 +9,11 @@ from homeassistant.helpers.event import (
|
|||||||
async_track_time_interval,
|
async_track_time_interval,
|
||||||
)
|
)
|
||||||
|
|
||||||
from homeassistant.components.climate import HVACAction, HVACMode, ClimateEntityFeature
|
from homeassistant.components.climate import (
|
||||||
|
HVACAction,
|
||||||
|
HVACMode,
|
||||||
|
ClimateEntityFeature,
|
||||||
|
)
|
||||||
|
|
||||||
from .commons import NowClass, round_to_nearest
|
from .commons import NowClass, round_to_nearest
|
||||||
from .base_thermostat import BaseThermostat
|
from .base_thermostat import BaseThermostat
|
||||||
@@ -194,6 +198,16 @@ class ThermostatOverClimate(BaseThermostat):
|
|||||||
should_activate_auto_fan = (
|
should_activate_auto_fan = (
|
||||||
dtemp >= AUTO_FAN_DTEMP_THRESHOLD or dtemp <= -AUTO_FAN_DTEMP_THRESHOLD
|
dtemp >= AUTO_FAN_DTEMP_THRESHOLD or dtemp <= -AUTO_FAN_DTEMP_THRESHOLD
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# deal with ac / non ac mode
|
||||||
|
hvac_mode = self.hvac_mode
|
||||||
|
if (
|
||||||
|
(hvac_mode == HVACMode.COOL and dtemp > 0)
|
||||||
|
or (hvac_mode == HVACMode.HEAT and dtemp < 0)
|
||||||
|
or (hvac_mode == HVACMode.OFF)
|
||||||
|
):
|
||||||
|
should_activate_auto_fan = False
|
||||||
|
|
||||||
if should_activate_auto_fan and self.fan_mode != self._auto_activated_fan_mode:
|
if should_activate_auto_fan and self.fan_mode != self._auto_activated_fan_mode:
|
||||||
_LOGGER.info(
|
_LOGGER.info(
|
||||||
"%s - Activate the auto fan mode with %s because delta temp is %.2f",
|
"%s - Activate the auto fan mode with %s because delta temp is %.2f",
|
||||||
|
|||||||
@@ -180,6 +180,9 @@ async def test_over_climate_auto_fan_mode_turbo_activation(
|
|||||||
"eco_temp": 17,
|
"eco_temp": 17,
|
||||||
"comfort_temp": 18,
|
"comfort_temp": 18,
|
||||||
"boost_temp": 19,
|
"boost_temp": 19,
|
||||||
|
"eco_ac_temp": 25,
|
||||||
|
"comfort_ac_temp": 23,
|
||||||
|
"boost_ac_temp": 21,
|
||||||
CONF_USE_WINDOW_FEATURE: False,
|
CONF_USE_WINDOW_FEATURE: False,
|
||||||
CONF_USE_MOTION_FEATURE: False,
|
CONF_USE_MOTION_FEATURE: False,
|
||||||
CONF_USE_POWER_FEATURE: False,
|
CONF_USE_POWER_FEATURE: False,
|
||||||
@@ -189,6 +192,7 @@ async def test_over_climate_auto_fan_mode_turbo_activation(
|
|||||||
CONF_SECURITY_DELAY_MIN: 5,
|
CONF_SECURITY_DELAY_MIN: 5,
|
||||||
CONF_SECURITY_MIN_ON_PERCENT: 0.3,
|
CONF_SECURITY_MIN_ON_PERCENT: 0.3,
|
||||||
CONF_AUTO_FAN_MODE: CONF_AUTO_FAN_TURBO,
|
CONF_AUTO_FAN_MODE: CONF_AUTO_FAN_TURBO,
|
||||||
|
CONF_AC_MODE: True,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -235,6 +239,7 @@ async def test_over_climate_auto_fan_mode_turbo_activation(
|
|||||||
assert entity.hvac_mode == HVACMode.HEAT
|
assert entity.hvac_mode == HVACMode.HEAT
|
||||||
await entity.async_set_preset_mode(PRESET_COMFORT)
|
await entity.async_set_preset_mode(PRESET_COMFORT)
|
||||||
assert entity.preset_mode == PRESET_COMFORT
|
assert entity.preset_mode == PRESET_COMFORT
|
||||||
|
assert entity.target_temperature == 18
|
||||||
|
|
||||||
# Change the current temperature to 16 which is 2° under
|
# Change the current temperature to 16 which is 2° under
|
||||||
await send_temperature_change_event(entity, 16, now, True)
|
await send_temperature_change_event(entity, 16, now, True)
|
||||||
@@ -283,3 +288,59 @@ async def test_over_climate_auto_fan_mode_turbo_activation(
|
|||||||
|
|
||||||
assert mock_send_fan_mode.call_count == 0
|
assert mock_send_fan_mode.call_count == 0
|
||||||
assert entity.fan_mode == "mute"
|
assert entity.fan_mode == "mute"
|
||||||
|
|
||||||
|
# 6. Set temperature very high above the target
|
||||||
|
with patch(
|
||||||
|
"custom_components.versatile_thermostat.underlyings.UnderlyingClimate.set_fan_mode"
|
||||||
|
) as mock_send_fan_mode:
|
||||||
|
fake_underlying_climate.set_fan_mode("mute")
|
||||||
|
|
||||||
|
# Change the current temperature to 17 which is 1° under
|
||||||
|
await send_temperature_change_event(entity, 21, now, True)
|
||||||
|
|
||||||
|
assert mock_send_fan_mode.call_count == 0
|
||||||
|
assert entity.fan_mode == "mute"
|
||||||
|
|
||||||
|
# 7. In AC mode, set temperature very high under the target
|
||||||
|
with patch(
|
||||||
|
"custom_components.versatile_thermostat.underlyings.UnderlyingClimate.set_fan_mode"
|
||||||
|
) as mock_send_fan_mode:
|
||||||
|
await entity.async_set_hvac_mode(HVACMode.COOL)
|
||||||
|
assert entity.hvac_mode == HVACMode.COOL
|
||||||
|
assert entity.preset_mode == PRESET_COMFORT
|
||||||
|
assert entity.target_temperature == 23
|
||||||
|
|
||||||
|
assert entity.current_temperature == 21
|
||||||
|
|
||||||
|
fake_underlying_climate.set_fan_mode("mute")
|
||||||
|
|
||||||
|
# Change the current temperature to 17 which is 1° under
|
||||||
|
await send_temperature_change_event(entity, 20, now, True)
|
||||||
|
|
||||||
|
assert mock_send_fan_mode.call_count == 0
|
||||||
|
assert entity.fan_mode == "mute"
|
||||||
|
|
||||||
|
# 8. In AC mode, set temperature not so high above the target
|
||||||
|
with patch(
|
||||||
|
"custom_components.versatile_thermostat.underlyings.UnderlyingClimate.set_fan_mode"
|
||||||
|
) as mock_send_fan_mode:
|
||||||
|
assert entity.target_temperature == 23
|
||||||
|
await send_temperature_change_event(entity, 24, now, True)
|
||||||
|
assert entity.current_temperature == 24
|
||||||
|
fake_underlying_climate.set_fan_mode("mute")
|
||||||
|
|
||||||
|
assert mock_send_fan_mode.call_count == 0
|
||||||
|
assert entity.fan_mode == "mute"
|
||||||
|
|
||||||
|
# 8. In AC mode, set temperature high above the target
|
||||||
|
with patch(
|
||||||
|
"custom_components.versatile_thermostat.underlyings.UnderlyingClimate.set_fan_mode"
|
||||||
|
) as mock_send_fan_mode:
|
||||||
|
assert entity.target_temperature == 23
|
||||||
|
await send_temperature_change_event(entity, 25.1, now, True)
|
||||||
|
assert entity.current_temperature == 25.1
|
||||||
|
fake_underlying_climate.set_fan_mode("turbo")
|
||||||
|
|
||||||
|
assert mock_send_fan_mode.call_count == 1
|
||||||
|
mock_send_fan_mode.assert_has_calls([call.set_fan_mode("turbo")])
|
||||||
|
assert entity.fan_mode == "turbo"
|
||||||
|
|||||||
Reference in New Issue
Block a user