186 files
This commit is contained in:
@@ -8,7 +8,7 @@ from typing import Literal
|
||||
from datetime import datetime
|
||||
|
||||
from enum import Enum
|
||||
from homeassistant.const import STATE_UNKNOWN, STATE_UNAVAILABLE
|
||||
from homeassistant.const import STATE_UNKNOWN, STATE_UNAVAILABLE, UnitOfPower
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.const import CONF_NAME, Platform
|
||||
|
||||
@@ -41,7 +41,7 @@ from .vtherm_state import VThermState # pylint: disable=unused-import
|
||||
_LOGGER = get_vtherm_logger(__name__)
|
||||
|
||||
CONFIG_VERSION = 2
|
||||
CONFIG_MINOR_VERSION = 3
|
||||
CONFIG_MINOR_VERSION = 4
|
||||
|
||||
DEVICE_MANUFACTURER = "JMCOLLIN"
|
||||
DEVICE_MODEL = "Versatile Thermostat"
|
||||
@@ -70,6 +70,21 @@ CONF_MAX_POWER_SENSOR = "max_power_sensor_entity_id"
|
||||
CONF_WINDOW_SENSOR = "window_sensor_entity_id"
|
||||
CONF_MOTION_SENSOR = "motion_sensor_entity_id"
|
||||
CONF_DEVICE_POWER = "device_power"
|
||||
CONF_POWER_UNIT = "power_unit"
|
||||
|
||||
# Power unit values used by configuration selector translation keys.
|
||||
# Convert them to Home Assistant's "W" / "kW" values only at entity boundaries.
|
||||
POWER_UNIT_WATT = "w"
|
||||
POWER_UNIT_KILO_WATT = "kw"
|
||||
POWER_UNIT_MEGA_WATT = "mw"
|
||||
POWER_UNIT_AUTO = "auto"
|
||||
|
||||
# Selector options
|
||||
CONF_POWER_UNITS = [POWER_UNIT_WATT, POWER_UNIT_KILO_WATT]
|
||||
CONF_CENTRAL_POWER_UNITS = [POWER_UNIT_WATT, POWER_UNIT_KILO_WATT, POWER_UNIT_AUTO]
|
||||
|
||||
# Threshold used by the legacy unit heuristic and by the config migration
|
||||
THRESHOLD_POWER_WATT_KILO = 100
|
||||
CONF_CYCLE_MIN = "cycle_min"
|
||||
CONF_PROP_FUNCTION = "proportional_function"
|
||||
CONF_WINDOW_DELAY = "window_delay"
|
||||
@@ -360,6 +375,7 @@ ALL_CONF = (
|
||||
CONF_MOTION_PRESET,
|
||||
CONF_NO_MOTION_PRESET,
|
||||
CONF_DEVICE_POWER,
|
||||
CONF_POWER_UNIT,
|
||||
CONF_CYCLE_MIN,
|
||||
CONF_PROP_FUNCTION,
|
||||
CONF_TPI_COEF_INT,
|
||||
@@ -520,6 +536,7 @@ DEFAULT_HEATING_FAILURE_DETECTION_DELAY = 15 # 15 minutes
|
||||
DEFAULT_TEMPERATURE_CHANGE_TOLERANCE = 0.5 # 0.5°C
|
||||
|
||||
ATTR_TOTAL_ENERGY = "total_energy"
|
||||
ATTR_TOTAL_ENERGY_UNIT = "total_energy_unit"
|
||||
ATTR_MEAN_POWER_CYCLE = "mean_cycle_power"
|
||||
|
||||
AUTO_FAN_DTEMP_THRESHOLD = 2
|
||||
@@ -649,6 +666,54 @@ def get_safe_float_value(value):
|
||||
return None
|
||||
|
||||
|
||||
def power_to_watts(value: float | None, unit: str | None) -> float | None:
|
||||
"""Normalize a power (or energy) magnitude to Watts (or Watt-hours).
|
||||
The conversion accepts internal selector keys and Home Assistant units."""
|
||||
|
||||
if value is None:
|
||||
return None
|
||||
if to_internal_power_unit(unit) == POWER_UNIT_KILO_WATT:
|
||||
return value * 1000.0
|
||||
return value
|
||||
|
||||
|
||||
def power_from_watts(value_w: float | None, unit: str | None) -> float | None:
|
||||
"""Convert a Watts (or Watt-hours) magnitude to the target power unit.
|
||||
|
||||
The conversion accepts internal selector keys and Home Assistant units.
|
||||
"""
|
||||
|
||||
if value_w is None:
|
||||
return None
|
||||
if to_internal_power_unit(unit) == POWER_UNIT_KILO_WATT:
|
||||
return value_w / 1000.0
|
||||
return value_w
|
||||
|
||||
|
||||
def to_internal_power_unit(power_unit: str | None) -> str | None:
|
||||
"""Map a selector key or Home Assistant power unit to its internal key."""
|
||||
power_unit_mapping = {
|
||||
POWER_UNIT_WATT: POWER_UNIT_WATT,
|
||||
UnitOfPower.WATT: POWER_UNIT_WATT,
|
||||
POWER_UNIT_KILO_WATT: POWER_UNIT_KILO_WATT,
|
||||
UnitOfPower.KILO_WATT: POWER_UNIT_KILO_WATT,
|
||||
POWER_UNIT_MEGA_WATT: POWER_UNIT_MEGA_WATT,
|
||||
UnitOfPower.MEGA_WATT: POWER_UNIT_MEGA_WATT,
|
||||
}
|
||||
return power_unit_mapping.get(power_unit, power_unit)
|
||||
|
||||
|
||||
def to_legal_power_unit(power_unit: str) -> str:
|
||||
"""Map the power unit from the thermostat to Home Assistant's expected unit."""
|
||||
power_unit_mapping: dict[str, str] = {
|
||||
POWER_UNIT_WATT: UnitOfPower.WATT,
|
||||
POWER_UNIT_KILO_WATT: UnitOfPower.KILO_WATT,
|
||||
POWER_UNIT_MEGA_WATT: UnitOfPower.MEGA_WATT,
|
||||
}
|
||||
internal_power_unit = to_internal_power_unit(power_unit) or power_unit
|
||||
return power_unit_mapping.get(internal_power_unit, power_unit)
|
||||
|
||||
|
||||
class UnknownEntity(HomeAssistantError):
|
||||
"""Error to indicate there is an unknown entity_id given."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user