Testus +1
This commit is contained in:
@@ -204,6 +204,11 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
|
|||||||
_last_temperature_mesure: datetime
|
_last_temperature_mesure: datetime
|
||||||
_last_ext_temperature_mesure: datetime
|
_last_ext_temperature_mesure: datetime
|
||||||
_total_energy: float
|
_total_energy: float
|
||||||
|
_overpowering_state: bool
|
||||||
|
_window_state: bool
|
||||||
|
_motion_state: bool
|
||||||
|
_presence_state: bool
|
||||||
|
_security_state: bool
|
||||||
|
|
||||||
def __init__(self, hass: HomeAssistant, unique_id, name, entry_infos) -> None:
|
def __init__(self, hass: HomeAssistant, unique_id, name, entry_infos) -> None:
|
||||||
"""Initialize the thermostat."""
|
"""Initialize the thermostat."""
|
||||||
@@ -366,8 +371,6 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
|
|||||||
and self._device_power
|
and self._device_power
|
||||||
):
|
):
|
||||||
self._pmax_on = True
|
self._pmax_on = True
|
||||||
self._current_power = 0
|
|
||||||
self._current_power_max = 0
|
|
||||||
else:
|
else:
|
||||||
_LOGGER.info("%s - Power management is not fully configured", self)
|
_LOGGER.info("%s - Power management is not fully configured", self)
|
||||||
|
|
||||||
@@ -997,7 +1000,7 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
|
|||||||
if self._is_over_climate:
|
if self._is_over_climate:
|
||||||
return None
|
return None
|
||||||
elif self._device_power:
|
elif self._device_power:
|
||||||
return self._device_power * self._prop_algorithm.on_percent
|
return float(self._device_power * self._prop_algorithm.on_percent)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -1006,6 +1009,11 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
|
|||||||
"""Returns the total energy calculated for this thermostast"""
|
"""Returns the total energy calculated for this thermostast"""
|
||||||
return self._total_energy
|
return self._total_energy
|
||||||
|
|
||||||
|
@property
|
||||||
|
def overpowering_state(self) -> bool | None:
|
||||||
|
"""Get the overpowering_state"""
|
||||||
|
return self._overpowering_state
|
||||||
|
|
||||||
def turn_aux_heat_on(self) -> None:
|
def turn_aux_heat_on(self) -> None:
|
||||||
"""Turn auxiliary heater on."""
|
"""Turn auxiliary heater on."""
|
||||||
if self._is_over_climate and self._underlying_climate:
|
if self._is_over_climate and self._underlying_climate:
|
||||||
@@ -1696,7 +1704,16 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if not self._pmax_on:
|
if not self._pmax_on:
|
||||||
return
|
_LOGGER.debug("%s - power not configured. check_overpowering not available")
|
||||||
|
return False
|
||||||
|
|
||||||
|
if (
|
||||||
|
self._current_power is None
|
||||||
|
or self._device_power is None
|
||||||
|
or self._current_power_max is None
|
||||||
|
):
|
||||||
|
_LOGGER.warning("%s - power not valued. check_overpowering not available")
|
||||||
|
return False
|
||||||
|
|
||||||
_LOGGER.debug(
|
_LOGGER.debug(
|
||||||
"%s - overpowering check: power=%.3f, max_power=%.3f heater power=%.3f",
|
"%s - overpowering check: power=%.3f, max_power=%.3f heater power=%.3f",
|
||||||
@@ -1705,6 +1722,7 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
|
|||||||
self._current_power_max,
|
self._current_power_max,
|
||||||
self._device_power,
|
self._device_power,
|
||||||
)
|
)
|
||||||
|
|
||||||
ret = self._current_power + self._device_power >= self._current_power_max
|
ret = self._current_power + self._device_power >= self._current_power_max
|
||||||
if not self._overpowering_state and ret and not self._hvac_mode == HVACMode.OFF:
|
if not self._overpowering_state and ret and not self._hvac_mode == HVACMode.OFF:
|
||||||
_LOGGER.warning(
|
_LOGGER.warning(
|
||||||
|
|||||||
@@ -114,3 +114,35 @@ async def send_temperature_change_event(entity: VersatileThermostat, new_temp, d
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
await entity._async_temperature_changed(temp_event)
|
await entity._async_temperature_changed(temp_event)
|
||||||
|
|
||||||
|
|
||||||
|
async def send_power_change_event(entity: VersatileThermostat, new_power, date):
|
||||||
|
"""Sending a new power event simulating a change on power sensor"""
|
||||||
|
power_event = Event(
|
||||||
|
EVENT_STATE_CHANGED,
|
||||||
|
{
|
||||||
|
"new_state": State(
|
||||||
|
entity_id=entity.entity_id,
|
||||||
|
state=new_power,
|
||||||
|
last_changed=date,
|
||||||
|
last_updated=date,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
await entity._async_power_changed(power_event)
|
||||||
|
|
||||||
|
|
||||||
|
async def send_max_power_change_event(entity: VersatileThermostat, new_power_max, date):
|
||||||
|
"""Sending a new power event simulating a change on power max sensor"""
|
||||||
|
power_event = Event(
|
||||||
|
EVENT_STATE_CHANGED,
|
||||||
|
{
|
||||||
|
"new_state": State(
|
||||||
|
entity_id=entity.entity_id,
|
||||||
|
state=new_power_max,
|
||||||
|
last_changed=date,
|
||||||
|
last_updated=date,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
await entity._async_max_power_changed(power_event)
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ async def test_tpi_calculation(hass: HomeAssistant, skip_hass_states_is_state):
|
|||||||
assert tpi_algo.calculated_on_percent == 1
|
assert tpi_algo.calculated_on_percent == 1
|
||||||
assert tpi_algo.on_time_sec == 300
|
assert tpi_algo.on_time_sec == 300
|
||||||
assert tpi_algo.off_time_sec == 0
|
assert tpi_algo.off_time_sec == 0
|
||||||
assert entity.mean_cycle_power is None
|
assert entity.mean_cycle_power is None # no device power configured
|
||||||
|
|
||||||
tpi_algo.calculate(15, 14, 5)
|
tpi_algo.calculate(15, 14, 5)
|
||||||
assert tpi_algo.on_percent == 0.4
|
assert tpi_algo.on_percent == 0.4
|
||||||
|
|||||||
Reference in New Issue
Block a user