Compare commits
3 Commits
7.1.4
...
7.1.4.beta
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fdae24077a | ||
|
|
566e0e683c | ||
|
|
9628e9a93b |
7
.github/ISSUE_TEMPLATE/issue.md
vendored
7
.github/ISSUE_TEMPLATE/issue.md
vendored
@@ -4,10 +4,7 @@ about: Create a report to help us improve
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Read this carefully
|
> Please read carefuly this instructions and fill this form before writing an issue. It helps me to help you.
|
||||||
|
|
||||||
> Please read carefully this instructions and fill this form before writing an issue. It helps me to help you.
|
|
||||||
> If you choose to not follow this template, you accept to have no answer from the author. The tag on the issue 'Template not respected' means you don't respect this template. Potentially, you will not have a relevant answer.
|
|
||||||
|
|
||||||
<!-- This template will allow the maintainer to be efficient and post the more accurante response as possible. There is many types / modes / configuration possible, so the analysis can be very tricky. If don't follow this template, your issue could be rejected without any message. Please help me to help you. -->
|
<!-- This template will allow the maintainer to be efficient and post the more accurante response as possible. There is many types / modes / configuration possible, so the analysis can be very tricky. If don't follow this template, your issue could be rejected without any message. Please help me to help you. -->
|
||||||
|
|
||||||
@@ -15,7 +12,7 @@ about: Create a report to help us improve
|
|||||||
|
|
||||||
If you have a simple question or you are not sure this is an issue, don't open an issue but open a new discussion [here](https://github.com/jmcollin78/versatile_thermostat/discussions).
|
If you have a simple question or you are not sure this is an issue, don't open an issue but open a new discussion [here](https://github.com/jmcollin78/versatile_thermostat/discussions).
|
||||||
|
|
||||||
Check also in the [Troubleshooting] paragrah of the README if the aswer is not already given.
|
Check also in the [Troubleshooting](#troubleshooting) paragrah of the README if the aswer is not already given.
|
||||||
|
|
||||||
Issues not containing the minimum requirements will be closed:
|
Issues not containing the minimum requirements will be closed:
|
||||||
|
|
||||||
|
|||||||
@@ -1031,10 +1031,6 @@ class BaseThermostat(ClimateEntity, RestoreEntity, Generic[T]):
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# Remove eventual overpoering if we want to turn-off
|
|
||||||
if hvac_mode == HVACMode.OFF and self.power_manager.is_overpowering_detected:
|
|
||||||
await self.power_manager.set_overpowering(False)
|
|
||||||
|
|
||||||
self._hvac_mode = hvac_mode
|
self._hvac_mode = hvac_mode
|
||||||
|
|
||||||
# Delegate to all underlying
|
# Delegate to all underlying
|
||||||
|
|||||||
@@ -825,132 +825,3 @@ async def test_power_management_energy_over_climate(
|
|||||||
# Test the re-increment
|
# Test the re-increment
|
||||||
entity.incremente_energy()
|
entity.incremente_energy()
|
||||||
assert entity.total_energy == 2 * 100 * 3.0 / 60
|
assert entity.total_energy == 2 * 100 * 3.0 / 60
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("expected_lingering_tasks", [True])
|
|
||||||
@pytest.mark.parametrize("expected_lingering_timers", [True])
|
|
||||||
async def test_power_management_turn_off_while_shedding(hass: HomeAssistant, skip_hass_states_is_state, init_central_power_manager):
|
|
||||||
"""Test the Power management and that we can turn off a Vtherm that
|
|
||||||
is in overpowering state"""
|
|
||||||
|
|
||||||
temps = {
|
|
||||||
"eco": 17,
|
|
||||||
"comfort": 18,
|
|
||||||
"boost": 19,
|
|
||||||
}
|
|
||||||
|
|
||||||
entry = MockConfigEntry(
|
|
||||||
domain=DOMAIN,
|
|
||||||
title="TheOverSwitchMockName",
|
|
||||||
unique_id="uniqueId",
|
|
||||||
data={
|
|
||||||
CONF_NAME: "TheOverSwitchMockName",
|
|
||||||
CONF_THERMOSTAT_TYPE: CONF_THERMOSTAT_SWITCH,
|
|
||||||
CONF_TEMP_SENSOR: "sensor.mock_temp_sensor",
|
|
||||||
CONF_EXTERNAL_TEMP_SENSOR: "sensor.mock_ext_temp_sensor",
|
|
||||||
CONF_CYCLE_MIN: 5,
|
|
||||||
CONF_TEMP_MIN: 15,
|
|
||||||
CONF_TEMP_MAX: 30,
|
|
||||||
CONF_USE_WINDOW_FEATURE: False,
|
|
||||||
CONF_USE_MOTION_FEATURE: False,
|
|
||||||
CONF_USE_POWER_FEATURE: True,
|
|
||||||
CONF_USE_PRESENCE_FEATURE: False,
|
|
||||||
CONF_UNDERLYING_LIST: ["switch.mock_switch"],
|
|
||||||
CONF_PROP_FUNCTION: PROPORTIONAL_FUNCTION_TPI,
|
|
||||||
CONF_TPI_COEF_INT: 0.3,
|
|
||||||
CONF_TPI_COEF_EXT: 0.01,
|
|
||||||
CONF_MINIMAL_ACTIVATION_DELAY: 30,
|
|
||||||
CONF_SAFETY_DELAY_MIN: 5,
|
|
||||||
CONF_SAFETY_MIN_ON_PERCENT: 0.3,
|
|
||||||
CONF_DEVICE_POWER: 100,
|
|
||||||
CONF_PRESET_POWER: 12,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
entity: ThermostatOverSwitch = await create_thermostat(hass, entry, "climate.theoverswitchmockname", temps)
|
|
||||||
assert entity
|
|
||||||
|
|
||||||
now: datetime = NowClass.get_now(hass)
|
|
||||||
VersatileThermostatAPI.get_vtherm_api()._set_now(now)
|
|
||||||
|
|
||||||
tpi_algo = entity._prop_algorithm
|
|
||||||
assert tpi_algo
|
|
||||||
|
|
||||||
await entity.async_set_hvac_mode(HVACMode.HEAT)
|
|
||||||
await entity.async_set_preset_mode(PRESET_BOOST)
|
|
||||||
assert entity.hvac_mode is HVACMode.HEAT
|
|
||||||
assert entity.preset_mode is PRESET_BOOST
|
|
||||||
assert entity.power_manager.overpowering_state is STATE_UNKNOWN
|
|
||||||
assert entity.target_temperature == 19
|
|
||||||
|
|
||||||
# make the heater heats
|
|
||||||
await send_temperature_change_event(entity, 15, now)
|
|
||||||
await send_ext_temperature_change_event(entity, 1, now)
|
|
||||||
await hass.async_block_till_done()
|
|
||||||
|
|
||||||
assert entity.power_percent > 0
|
|
||||||
|
|
||||||
side_effects = SideEffects(
|
|
||||||
{
|
|
||||||
"sensor.the_power_sensor": State("sensor.the_power_sensor", 50),
|
|
||||||
"sensor.the_max_power_sensor": State("sensor.the_max_power_sensor", 49),
|
|
||||||
},
|
|
||||||
State("unknown.entity_id", "unknown"),
|
|
||||||
)
|
|
||||||
# # fmt:off
|
|
||||||
# with patch("homeassistant.core.StateMachine.get", side_effect=side_effects.get_side_effects()):
|
|
||||||
# # fmt: on
|
|
||||||
# await send_power_change_event(entity, 50, datetime.now())
|
|
||||||
# # Send power max mesurement
|
|
||||||
# now = now + timedelta(seconds=30)
|
|
||||||
# VersatileThermostatAPI.get_vtherm_api()._set_now(now)
|
|
||||||
# await send_max_power_change_event(entity, 300, datetime.now())
|
|
||||||
#
|
|
||||||
# assert entity.power_manager.is_overpowering_detected is False
|
|
||||||
# # All configuration is complete and power is < power_max
|
|
||||||
# assert entity.preset_mode is PRESET_BOOST
|
|
||||||
# assert entity.power_manager.overpowering_state is STATE_OFF
|
|
||||||
|
|
||||||
# 1. Set VTherm to overpowering
|
|
||||||
# Send power max mesurement too low and HVACMode is on and device is active
|
|
||||||
# fmt:off
|
|
||||||
with patch("homeassistant.core.StateMachine.get", side_effect=side_effects.get_side_effects()), \
|
|
||||||
patch("custom_components.versatile_thermostat.base_thermostat.BaseThermostat.send_event"), \
|
|
||||||
patch("custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_on") as mock_heater_on, \
|
|
||||||
patch("custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_off") as mock_heater_off, \
|
|
||||||
patch("custom_components.versatile_thermostat.thermostat_switch.ThermostatOverSwitch.is_device_active", return_value="True"):
|
|
||||||
# fmt: on
|
|
||||||
now = now + timedelta(seconds=30)
|
|
||||||
VersatileThermostatAPI.get_vtherm_api()._set_now(now)
|
|
||||||
|
|
||||||
await send_max_power_change_event(entity, 49, now)
|
|
||||||
assert entity.power_manager.is_overpowering_detected is True
|
|
||||||
# All configuration is complete and power is > power_max we switch to POWER preset
|
|
||||||
assert entity.preset_mode is PRESET_POWER
|
|
||||||
assert entity.power_manager.overpowering_state is STATE_ON
|
|
||||||
assert entity.target_temperature == 12
|
|
||||||
|
|
||||||
assert mock_heater_on.call_count == 0
|
|
||||||
assert mock_heater_off.call_count == 1
|
|
||||||
|
|
||||||
# 2. Turn-off Vtherm
|
|
||||||
# fmt:off
|
|
||||||
with patch("homeassistant.core.StateMachine.get", side_effect=side_effects.get_side_effects()), \
|
|
||||||
patch("custom_components.versatile_thermostat.base_thermostat.BaseThermostat.send_event") as mock_send_event, \
|
|
||||||
patch("custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_on") as mock_heater_on, \
|
|
||||||
patch("custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_off") as mock_heater_off, \
|
|
||||||
patch("custom_components.versatile_thermostat.thermostat_switch.ThermostatOverSwitch.is_device_active", return_value="True"):
|
|
||||||
# fmt: on
|
|
||||||
now = now + timedelta(seconds=30)
|
|
||||||
VersatileThermostatAPI.get_vtherm_api()._set_now(now)
|
|
||||||
|
|
||||||
await entity.async_set_hvac_mode(HVACMode.OFF)
|
|
||||||
await VersatileThermostatAPI.get_vtherm_api().central_power_manager._do_immediate_shedding()
|
|
||||||
await hass.async_block_till_done()
|
|
||||||
|
|
||||||
# VTherm is off and overpowering if off also
|
|
||||||
assert entity.hvac_mode == HVACMode.OFF
|
|
||||||
assert entity.power_manager.is_overpowering_detected is False
|
|
||||||
assert entity.preset_mode is PRESET_BOOST
|
|
||||||
assert entity.power_manager.overpowering_state is STATE_OFF
|
|
||||||
assert entity.target_temperature == 19
|
|
||||||
|
|||||||
Reference in New Issue
Block a user