Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| acd22d1fc4 | |||
| d6f33d5796 | |||
| c1ebb46ac6 | |||
| eee4a9c4e3 |
+1
-1
@@ -212,7 +212,7 @@ En conséquence toute la phase de paramètrage d'un VTherm a été profondemment
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
# Merci pour la bière [buymecoffee](https://www.buymeacoffee.com/jmcollin78)
|
# Merci pour la bière [buymecoffee](https://www.buymeacoffee.com/jmcollin78)
|
||||||
Un grand merci à @salabur, @pvince83, @bergoglio, @EPicLURcher, @ecolorado66, @Kriss1670, @maia, @f.maymil, @moutte69, @Jerome, @Gunnar M, @Greg.o, @John Burgess, @abyssmal, @capinfo26, @Helge, @MattG @Mexx62, @Someone, @Lajull, @giopeco, @fredericselier, @philpagan, @studiogriffanti, @Edwin, @Sebbou, @Gerard R. pour les bières. Ca fait très plaisir et ça m'encourage à continuer !
|
Un grand merci à @salabur, @pvince83, @bergoglio, @EPicLURcher, @ecolorado66, @Kriss1670, @maia, @f.maymil, @moutte69, @Jerome, @Gunnar M, @Greg.o, @John Burgess, @abyssmal, @capinfo26, @Helge, @MattG @Mexx62, @Someone, @Lajull, @giopeco, @fredericselier, @philpagan, @studiogriffanti, @Edwin, @Sebbou, @Gerard R., @John Burgess, @Sylvoliv, @cdenfert pour les bières. Ca fait très plaisir et ça m'encourage à continuer !
|
||||||
|
|
||||||
|
|
||||||
# Quand l'utiliser et ne pas l'utiliser
|
# Quand l'utiliser et ne pas l'utiliser
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ Consequently, the entire configuration phase of a VTherm has been profoundly mod
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
# Thanks for the beer [buymecoffee](https://www.buymeacoffee.com/jmcollin78)
|
# Thanks for the beer [buymecoffee](https://www.buymeacoffee.com/jmcollin78)
|
||||||
Many thanks to @salabur, @pvince83, @bergoglio, @EPicLURcher, @ecolorado66, @Kriss1670, @maia, @f.maymil, @moutte69, @Jerome, @Gunnar M, @Greg.o, @John Burgess, @abyssmal, @capinfo26, @Helge, @MattG, @MattG, @Mexx62, @Someone, @Lajull, @giopeco, @fredericselier, @philpagan, @studiogriffanti, @Edwin, @Sebbou, @Gerard R. for the beers. It's very nice and encourages me to continue!
|
Many thanks to @salabur, @pvince83, @bergoglio, @EPicLURcher, @ecolorado66, @Kriss1670, @maia, @f.maymil, @moutte69, @Jerome, @Gunnar M, @Greg.o, @John Burgess, @abyssmal, @capinfo26, @Helge, @MattG, @MattG, @Mexx62, @Someone, @Lajull, @giopeco, @fredericselier, @philpagan, @studiogriffanti, @Edwin, @Sebbou, @Gerard R., @John Burgess, @Sylvoliv, @cdenfert for the beers. It's very nice and encourages me to continue!
|
||||||
|
|
||||||
# When to use / not use
|
# When to use / not use
|
||||||
This thermostat can control 3 types of equipment:
|
This thermostat can control 3 types of equipment:
|
||||||
|
|||||||
@@ -532,7 +532,7 @@ class BaseThermostat(ClimateEntity, RestoreEntity, Generic[T]):
|
|||||||
self._overpowering_state = None
|
self._overpowering_state = None
|
||||||
self._presence_state = None
|
self._presence_state = None
|
||||||
|
|
||||||
self._total_energy = 0
|
self._total_energy = None
|
||||||
|
|
||||||
# Read the parameter from configuration.yaml if it exists
|
# Read the parameter from configuration.yaml if it exists
|
||||||
short_ema_params = DEFAULT_SHORT_EMA_PARAMS
|
short_ema_params = DEFAULT_SHORT_EMA_PARAMS
|
||||||
@@ -860,8 +860,7 @@ class BaseThermostat(ClimateEntity, RestoreEntity, Generic[T]):
|
|||||||
self._hvac_mode = HVACMode.OFF
|
self._hvac_mode = HVACMode.OFF
|
||||||
|
|
||||||
old_total_energy = old_state.attributes.get(ATTR_TOTAL_ENERGY)
|
old_total_energy = old_state.attributes.get(ATTR_TOTAL_ENERGY)
|
||||||
if old_total_energy:
|
self._total_energy = old_total_energy if old_total_energy else 0
|
||||||
self._total_energy = old_total_energy
|
|
||||||
|
|
||||||
self.restore_specific_previous_state(old_state)
|
self.restore_specific_previous_state(old_state)
|
||||||
else:
|
else:
|
||||||
@@ -874,6 +873,7 @@ class BaseThermostat(ClimateEntity, RestoreEntity, Generic[T]):
|
|||||||
_LOGGER.warning(
|
_LOGGER.warning(
|
||||||
"No previously saved temperature, setting to %s", self._target_temp
|
"No previously saved temperature, setting to %s", self._target_temp
|
||||||
)
|
)
|
||||||
|
self._total_energy = 0
|
||||||
|
|
||||||
self._saved_target_temp = self._target_temp
|
self._saved_target_temp = self._target_temp
|
||||||
|
|
||||||
@@ -1063,7 +1063,10 @@ class BaseThermostat(ClimateEntity, RestoreEntity, Generic[T]):
|
|||||||
@property
|
@property
|
||||||
def total_energy(self) -> float | None:
|
def total_energy(self) -> float | None:
|
||||||
"""Returns the total energy calculated for this thermostast"""
|
"""Returns the total energy calculated for this thermostast"""
|
||||||
return round(self._total_energy, 2)
|
if self._total_energy is not None:
|
||||||
|
return round(self._total_energy, 2)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def device_power(self) -> float | None:
|
def device_power(self) -> float | None:
|
||||||
@@ -1258,6 +1261,31 @@ class BaseThermostat(ClimateEntity, RestoreEntity, Generic[T]):
|
|||||||
self, preset_mode: str, overwrite_saved_preset=True
|
self, preset_mode: str, overwrite_saved_preset=True
|
||||||
):
|
):
|
||||||
"""Set new preset mode."""
|
"""Set new preset mode."""
|
||||||
|
|
||||||
|
# Wer accept a new preset when:
|
||||||
|
# 1. last_central_mode is not set,
|
||||||
|
# 2. or last_central_mode is AUTO,
|
||||||
|
# 3. or last_central_mode is CENTRAL_MODE_FROST_PROTECTION and preset_mode is PRESET_FROST_PROTECTION (to be abel to re-set the preset_mode)
|
||||||
|
accept = self._last_central_mode in [
|
||||||
|
None,
|
||||||
|
CENTRAL_MODE_AUTO,
|
||||||
|
CENTRAL_MODE_COOL_ONLY,
|
||||||
|
CENTRAL_MODE_HEAT_ONLY,
|
||||||
|
CENTRAL_MODE_STOPPED,
|
||||||
|
] or (
|
||||||
|
self._last_central_mode == CENTRAL_MODE_FROST_PROTECTION
|
||||||
|
and preset_mode == PRESET_FROST_PROTECTION
|
||||||
|
)
|
||||||
|
if not accept:
|
||||||
|
_LOGGER.info(
|
||||||
|
"%s - Impossible to change the preset to %s because central mode is %s",
|
||||||
|
self,
|
||||||
|
preset_mode,
|
||||||
|
self._last_central_mode,
|
||||||
|
)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
await self._async_set_preset_mode_internal(
|
await self._async_set_preset_mode_internal(
|
||||||
preset_mode, force=False, overwrite_saved_preset=overwrite_saved_preset
|
preset_mode, force=False, overwrite_saved_preset=overwrite_saved_preset
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -14,6 +14,6 @@
|
|||||||
"quality_scale": "silver",
|
"quality_scale": "silver",
|
||||||
"requirements": [],
|
"requirements": [],
|
||||||
"ssdp": [],
|
"ssdp": [],
|
||||||
"version": "6.2.0",
|
"version": "6.2.2",
|
||||||
"zeroconf": []
|
"zeroconf": []
|
||||||
}
|
}
|
||||||
@@ -125,15 +125,15 @@ class EnergySensor(VersatileThermostatBaseEntity, SensorEntity):
|
|||||||
"""Called when my climate have change"""
|
"""Called when my climate have change"""
|
||||||
_LOGGER.debug("%s - climate state change", self._attr_unique_id)
|
_LOGGER.debug("%s - climate state change", self._attr_unique_id)
|
||||||
|
|
||||||
if math.isnan(self.my_climate.total_energy) or math.isinf(
|
energy = self.my_climate.total_energy
|
||||||
self.my_climate.total_energy
|
if energy is None:
|
||||||
):
|
return
|
||||||
|
|
||||||
|
if math.isnan(energy) or math.isinf(energy):
|
||||||
raise ValueError(f"Sensor has illegal state {self.my_climate.total_energy}")
|
raise ValueError(f"Sensor has illegal state {self.my_climate.total_energy}")
|
||||||
|
|
||||||
old_state = self._attr_native_value
|
old_state = self._attr_native_value
|
||||||
self._attr_native_value = round(
|
self._attr_native_value = round(energy, self.suggested_display_precision)
|
||||||
self.my_climate.total_energy, self.suggested_display_precision
|
|
||||||
)
|
|
||||||
if old_state != self._attr_native_value:
|
if old_state != self._attr_native_value:
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -581,7 +581,11 @@ class ThermostatOverClimate(BaseThermostat[UnderlyingClimate]):
|
|||||||
):
|
):
|
||||||
added_energy = self._device_power * self._underlying_climate_delta_t
|
added_energy = self._device_power * self._underlying_climate_delta_t
|
||||||
|
|
||||||
self._total_energy += added_energy
|
if self._total_energy is None:
|
||||||
|
self._total_energy = added_energy
|
||||||
|
else:
|
||||||
|
self._total_energy += added_energy
|
||||||
|
|
||||||
_LOGGER.debug(
|
_LOGGER.debug(
|
||||||
"%s - added energy is %.3f . Total energy is now: %.3f",
|
"%s - added energy is %.3f . Total energy is now: %.3f",
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -199,7 +199,11 @@ class ThermostatOverSwitch(BaseThermostat[UnderlyingSwitch]):
|
|||||||
if not self.is_over_climate and self.mean_cycle_power is not None:
|
if not self.is_over_climate and self.mean_cycle_power is not None:
|
||||||
added_energy = self.mean_cycle_power * float(self._cycle_min) / 60.0
|
added_energy = self.mean_cycle_power * float(self._cycle_min) / 60.0
|
||||||
|
|
||||||
self._total_energy += added_energy
|
if self._total_energy is None:
|
||||||
|
self._total_energy = added_energy
|
||||||
|
else:
|
||||||
|
self._total_energy += added_energy
|
||||||
|
|
||||||
_LOGGER.debug(
|
_LOGGER.debug(
|
||||||
"%s - added energy is %.3f . Total energy is now: %.3f",
|
"%s - added energy is %.3f . Total energy is now: %.3f",
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -279,7 +279,11 @@ class ThermostatOverValve(BaseThermostat[UnderlyingValve]): # pylint: disable=a
|
|||||||
if not self.is_over_climate and self.mean_cycle_power is not None:
|
if not self.is_over_climate and self.mean_cycle_power is not None:
|
||||||
added_energy = self.mean_cycle_power * float(self._cycle_min) / 60.0
|
added_energy = self.mean_cycle_power * float(self._cycle_min) / 60.0
|
||||||
|
|
||||||
self._total_energy += added_energy
|
if self._total_energy is None:
|
||||||
|
self._total_energy = added_energy
|
||||||
|
else:
|
||||||
|
self._total_energy += added_energy
|
||||||
|
|
||||||
_LOGGER.debug(
|
_LOGGER.debug(
|
||||||
"%s - added energy is %.3f . Total energy is now: %.3f",
|
"%s - added energy is %.3f . Total energy is now: %.3f",
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -3,5 +3,5 @@
|
|||||||
"content_in_root": false,
|
"content_in_root": false,
|
||||||
"render_readme": true,
|
"render_readme": true,
|
||||||
"hide_default_branch": false,
|
"hide_default_branch": false,
|
||||||
"homeassistant": "2024.3.1"
|
"homeassistant": "2024.4.3"
|
||||||
}
|
}
|
||||||
@@ -1 +1 @@
|
|||||||
homeassistant==2024.3.1
|
homeassistant==2024.4.3
|
||||||
|
|||||||
Reference in New Issue
Block a user