Issue #820 - improve power shedding algorithm
This commit is contained in:
@@ -195,6 +195,16 @@ class UnderlyingEntity:
|
|||||||
self._cancel_cycle()
|
self._cancel_cycle()
|
||||||
await self.turn_off()
|
await self.turn_off()
|
||||||
|
|
||||||
|
async def check_overpowering(self) -> bool:
|
||||||
|
"""Check that a underlying can be turned on, else
|
||||||
|
activate the overpowering state of the VTherm associated.
|
||||||
|
Returns True if the check is ok (no overpowering needed)"""
|
||||||
|
if not await self._thermostat.power_manager.check_power_available():
|
||||||
|
_LOGGER.debug("%s - overpowering is detected", self)
|
||||||
|
await self._thermostat.power_manager.set_overpowering(True)
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
class UnderlyingSwitch(UnderlyingEntity):
|
class UnderlyingSwitch(UnderlyingEntity):
|
||||||
"""Represent a underlying switch"""
|
"""Represent a underlying switch"""
|
||||||
@@ -318,6 +328,10 @@ class UnderlyingSwitch(UnderlyingEntity):
|
|||||||
"""Turn heater toggleable device on."""
|
"""Turn heater toggleable device on."""
|
||||||
self._keep_alive.cancel() # Cancel early to avoid a turn_on/turn_off race condition
|
self._keep_alive.cancel() # Cancel early to avoid a turn_on/turn_off race condition
|
||||||
_LOGGER.debug("%s - Starting underlying entity %s", self, self._entity_id)
|
_LOGGER.debug("%s - Starting underlying entity %s", self, self._entity_id)
|
||||||
|
|
||||||
|
if not await self.check_overpowering():
|
||||||
|
return
|
||||||
|
|
||||||
command = SERVICE_TURN_ON if not self.is_inversed else SERVICE_TURN_OFF
|
command = SERVICE_TURN_ON if not self.is_inversed else SERVICE_TURN_OFF
|
||||||
domain = self._entity_id.split(".")[0]
|
domain = self._entity_id.split(".")[0]
|
||||||
try:
|
try:
|
||||||
@@ -414,10 +428,6 @@ class UnderlyingSwitch(UnderlyingEntity):
|
|||||||
await self.turn_off()
|
await self.turn_off()
|
||||||
return
|
return
|
||||||
|
|
||||||
# if await self._thermostat.power_manager.check_overpowering():
|
|
||||||
# _LOGGER.debug("%s - End of cycle (3)", self)
|
|
||||||
# return
|
|
||||||
|
|
||||||
# safety mode could have change the on_time percent
|
# safety mode could have change the on_time percent
|
||||||
await self._thermostat.safety_manager.refresh_state()
|
await self._thermostat.safety_manager.refresh_state()
|
||||||
time = self._on_time_sec
|
time = self._on_time_sec
|
||||||
@@ -557,6 +567,10 @@ class UnderlyingClimate(UnderlyingEntity):
|
|||||||
)
|
)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# When turning on a climate, check that power is available
|
||||||
|
if hvac_mode in (HVACMode.HEAT, HVACMode.COOL) and not await self.check_overpowering():
|
||||||
|
return False
|
||||||
|
|
||||||
data = {ATTR_ENTITY_ID: self._entity_id, "hvac_mode": hvac_mode}
|
data = {ATTR_ENTITY_ID: self._entity_id, "hvac_mode": hvac_mode}
|
||||||
await self._hass.services.async_call(
|
await self._hass.services.async_call(
|
||||||
CLIMATE_DOMAIN,
|
CLIMATE_DOMAIN,
|
||||||
|
|||||||
Reference in New Issue
Block a user