186 files
This commit is contained in:
@@ -9,8 +9,6 @@ from homeassistant.core import HomeAssistant, callback, Event, State
|
||||
|
||||
from homeassistant.const import (
|
||||
UnitOfTime,
|
||||
UnitOfPower,
|
||||
UnitOfEnergy,
|
||||
PERCENTAGE,
|
||||
)
|
||||
|
||||
@@ -59,8 +57,6 @@ from .const import (
|
||||
overrides,
|
||||
)
|
||||
|
||||
THRESHOLD_WATT_KILO = 100
|
||||
|
||||
_LOGGER = get_vtherm_logger(__name__)
|
||||
|
||||
|
||||
@@ -166,15 +162,18 @@ class EnergySensor(VersatileThermostatBaseEntity, SensorEntity):
|
||||
"""Called when my climate have change"""
|
||||
# _LOGGER.debug("%s - climate state change", self._attr_unique_id)
|
||||
|
||||
energy = self.my_climate.total_energy
|
||||
if energy is None:
|
||||
energy_wh = self.my_climate.total_energy
|
||||
if energy_wh is None:
|
||||
return
|
||||
|
||||
if math.isnan(energy) or math.isinf(energy):
|
||||
if math.isnan(energy_wh) or math.isinf(energy_wh):
|
||||
raise ValueError(f"Sensor has illegal state {self.my_climate.total_energy}")
|
||||
|
||||
# Convert from internal Wh to display unit (Wh or kWh)
|
||||
displayed_energy = self.my_climate.power_manager.from_watts(energy_wh, self.my_climate.power_manager.power_unit)
|
||||
|
||||
old_state = self._attr_native_value
|
||||
self._attr_native_value = round(energy, self.suggested_display_precision)
|
||||
self._attr_native_value = round(displayed_energy, self.suggested_display_precision)
|
||||
if old_state != self._attr_native_value:
|
||||
self.async_write_ha_state()
|
||||
return
|
||||
@@ -200,10 +199,7 @@ class EnergySensor(VersatileThermostatBaseEntity, SensorEntity):
|
||||
if not self.my_climate:
|
||||
return None
|
||||
|
||||
if self.my_climate.power_manager.device_power > THRESHOLD_WATT_KILO:
|
||||
return UnitOfEnergy.WATT_HOUR
|
||||
else:
|
||||
return UnitOfEnergy.KILO_WATT_HOUR
|
||||
return self.my_climate.power_manager.energy_unit
|
||||
|
||||
@property
|
||||
def suggested_display_precision(self) -> int | None:
|
||||
@@ -233,12 +229,17 @@ class MeanPowerSensor(VersatileThermostatBaseEntity, SensorEntity):
|
||||
raise ValueError(f"Sensor has illegal state {mean_cycle_power}")
|
||||
|
||||
mean_cycle_power = float(mean_cycle_power)
|
||||
# Convert from internal Watts to display unit
|
||||
displayed_power = self.my_climate.power_manager.from_watts(mean_cycle_power, self.my_climate.power_manager.power_unit)
|
||||
|
||||
old_state = self._attr_native_value
|
||||
self._attr_native_value = round(
|
||||
mean_cycle_power,
|
||||
self.suggested_display_precision,
|
||||
)
|
||||
if displayed_power is None:
|
||||
self._attr_native_value = None
|
||||
else:
|
||||
self._attr_native_value = round(
|
||||
displayed_power,
|
||||
self.suggested_display_precision,
|
||||
)
|
||||
if old_state != self._attr_native_value:
|
||||
self.async_write_ha_state()
|
||||
return
|
||||
@@ -260,13 +261,10 @@ class MeanPowerSensor(VersatileThermostatBaseEntity, SensorEntity):
|
||||
if not self.my_climate:
|
||||
return None
|
||||
|
||||
if self.my_climate.power_manager.device_power > THRESHOLD_WATT_KILO:
|
||||
return UnitOfPower.WATT
|
||||
else:
|
||||
return UnitOfPower.KILO_WATT
|
||||
return self.my_climate.power_manager.power_unit
|
||||
|
||||
@property
|
||||
def suggested_display_precision(self) -> int | None:
|
||||
def suggested_display_precision(self) -> int:
|
||||
"""Return the suggested number of decimal digits for display."""
|
||||
return 3
|
||||
|
||||
@@ -969,6 +967,10 @@ class TotalPowerActiveDeviceForBoilerSensor(NbActiveDeviceForBoilerSensor):
|
||||
def device_class(self) -> SensorDeviceClass | None:
|
||||
return SensorDeviceClass.POWER
|
||||
|
||||
@property
|
||||
def native_unit_of_measurement(self) -> str | None:
|
||||
return VersatileThermostatAPI.get_vtherm_api(self._hass).central_power_manager.power_unit
|
||||
|
||||
@property
|
||||
def suggested_display_precision(self) -> int | None:
|
||||
"""Return the suggested number of decimal digits for display."""
|
||||
@@ -1074,7 +1076,11 @@ class TotalPowerActiveDeviceForBoilerSensor(NbActiveDeviceForBoilerSensor):
|
||||
|
||||
total_active_power += mean_cycle_power
|
||||
|
||||
self._attr_native_value = total_active_power
|
||||
central_power_manager = VersatileThermostatAPI.get_vtherm_api(self._hass).central_power_manager
|
||||
self._attr_native_value = central_power_manager.from_watts(
|
||||
total_active_power,
|
||||
central_power_manager.power_unit,
|
||||
)
|
||||
self._attr_active_device_ids = active_device_ids
|
||||
|
||||
self.async_write_ha_state()
|
||||
|
||||
Reference in New Issue
Block a user