mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 14:17:45 +00:00
Use new enums in energy (#61386)
Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
fe17c9ffb6
commit
df608b56a5
@ -10,11 +10,9 @@ from typing import Any, Final, Literal, TypeVar, cast
|
|||||||
from homeassistant.components.sensor import (
|
from homeassistant.components.sensor import (
|
||||||
ATTR_LAST_RESET,
|
ATTR_LAST_RESET,
|
||||||
ATTR_STATE_CLASS,
|
ATTR_STATE_CLASS,
|
||||||
DEVICE_CLASS_MONETARY,
|
SensorDeviceClass,
|
||||||
STATE_CLASS_MEASUREMENT,
|
|
||||||
STATE_CLASS_TOTAL,
|
|
||||||
STATE_CLASS_TOTAL_INCREASING,
|
|
||||||
SensorEntity,
|
SensorEntity,
|
||||||
|
SensorStateClass,
|
||||||
)
|
)
|
||||||
from homeassistant.components.sensor.recorder import reset_detected
|
from homeassistant.components.sensor.recorder import reset_detected
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
@ -22,7 +20,6 @@ from homeassistant.const import (
|
|||||||
ENERGY_KILO_WATT_HOUR,
|
ENERGY_KILO_WATT_HOUR,
|
||||||
ENERGY_MEGA_WATT_HOUR,
|
ENERGY_MEGA_WATT_HOUR,
|
||||||
ENERGY_WATT_HOUR,
|
ENERGY_WATT_HOUR,
|
||||||
ENTITY_CATEGORY_SYSTEM,
|
|
||||||
VOLUME_CUBIC_METERS,
|
VOLUME_CUBIC_METERS,
|
||||||
)
|
)
|
||||||
from homeassistant.core import (
|
from homeassistant.core import (
|
||||||
@ -32,6 +29,7 @@ from homeassistant.core import (
|
|||||||
split_entity_id,
|
split_entity_id,
|
||||||
valid_entity_id,
|
valid_entity_id,
|
||||||
)
|
)
|
||||||
|
from homeassistant.helpers.entity import EntityCategory
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.event import async_track_state_change_event
|
from homeassistant.helpers.event import async_track_state_change_event
|
||||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||||
@ -41,9 +39,9 @@ from .const import DOMAIN
|
|||||||
from .data import EnergyManager, async_get_manager
|
from .data import EnergyManager, async_get_manager
|
||||||
|
|
||||||
SUPPORTED_STATE_CLASSES = [
|
SUPPORTED_STATE_CLASSES = [
|
||||||
STATE_CLASS_MEASUREMENT,
|
SensorStateClass.MEASUREMENT,
|
||||||
STATE_CLASS_TOTAL,
|
SensorStateClass.TOTAL,
|
||||||
STATE_CLASS_TOTAL_INCREASING,
|
SensorStateClass.TOTAL_INCREASING,
|
||||||
]
|
]
|
||||||
VALID_ENERGY_UNITS = [ENERGY_WATT_HOUR, ENERGY_KILO_WATT_HOUR, ENERGY_MEGA_WATT_HOUR]
|
VALID_ENERGY_UNITS = [ENERGY_WATT_HOUR, ENERGY_KILO_WATT_HOUR, ENERGY_MEGA_WATT_HOUR]
|
||||||
VALID_ENERGY_UNITS_GAS = [VOLUME_CUBIC_METERS] + VALID_ENERGY_UNITS
|
VALID_ENERGY_UNITS_GAS = [VOLUME_CUBIC_METERS] + VALID_ENERGY_UNITS
|
||||||
@ -215,7 +213,7 @@ class EnergyCostSensor(SensorEntity):
|
|||||||
utility.
|
utility.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_attr_entity_category = ENTITY_CATEGORY_SYSTEM
|
_attr_entity_category = EntityCategory.SYSTEM
|
||||||
_wrong_state_class_reported = False
|
_wrong_state_class_reported = False
|
||||||
_wrong_unit_reported = False
|
_wrong_unit_reported = False
|
||||||
|
|
||||||
@ -231,8 +229,8 @@ class EnergyCostSensor(SensorEntity):
|
|||||||
self.entity_id = (
|
self.entity_id = (
|
||||||
f"{config[adapter.entity_energy_key]}_{adapter.entity_id_suffix}"
|
f"{config[adapter.entity_energy_key]}_{adapter.entity_id_suffix}"
|
||||||
)
|
)
|
||||||
self._attr_device_class = DEVICE_CLASS_MONETARY
|
self._attr_device_class = SensorDeviceClass.MONETARY
|
||||||
self._attr_state_class = STATE_CLASS_TOTAL
|
self._attr_state_class = SensorStateClass.TOTAL
|
||||||
self._config = config
|
self._config = config
|
||||||
self._last_energy_sensor_state: State | None = None
|
self._last_energy_sensor_state: State | None = None
|
||||||
# add_finished is set when either of async_added_to_hass or add_to_platform_abort
|
# add_finished is set when either of async_added_to_hass or add_to_platform_abort
|
||||||
@ -267,9 +265,9 @@ class EnergyCostSensor(SensorEntity):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
# last_reset must be set if the sensor is STATE_CLASS_MEASUREMENT
|
# last_reset must be set if the sensor is SensorStateClass.MEASUREMENT
|
||||||
if (
|
if (
|
||||||
state_class == STATE_CLASS_MEASUREMENT
|
state_class == SensorStateClass.MEASUREMENT
|
||||||
and ATTR_LAST_RESET not in energy_state.attributes
|
and ATTR_LAST_RESET not in energy_state.attributes
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
@ -337,14 +335,16 @@ class EnergyCostSensor(SensorEntity):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
if state_class != STATE_CLASS_TOTAL_INCREASING and energy_state.attributes.get(
|
if (
|
||||||
ATTR_LAST_RESET
|
state_class != SensorStateClass.TOTAL_INCREASING
|
||||||
) != self._last_energy_sensor_state.attributes.get(ATTR_LAST_RESET):
|
and energy_state.attributes.get(ATTR_LAST_RESET)
|
||||||
|
!= self._last_energy_sensor_state.attributes.get(ATTR_LAST_RESET)
|
||||||
|
):
|
||||||
# Energy meter was reset, reset cost sensor too
|
# Energy meter was reset, reset cost sensor too
|
||||||
energy_state_copy = copy.copy(energy_state)
|
energy_state_copy = copy.copy(energy_state)
|
||||||
energy_state_copy.state = "0.0"
|
energy_state_copy.state = "0.0"
|
||||||
self._reset(energy_state_copy)
|
self._reset(energy_state_copy)
|
||||||
elif state_class == STATE_CLASS_TOTAL_INCREASING and reset_detected(
|
elif state_class == SensorStateClass.TOTAL_INCREASING and reset_detected(
|
||||||
self.hass,
|
self.hass,
|
||||||
cast(str, self._config[self._adapter.entity_energy_key]),
|
cast(str, self._config[self._adapter.entity_energy_key]),
|
||||||
energy,
|
energy,
|
||||||
|
@ -21,19 +21,22 @@ from homeassistant.core import HomeAssistant, callback, valid_entity_id
|
|||||||
from . import data
|
from . import data
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
|
|
||||||
ENERGY_USAGE_DEVICE_CLASSES = (sensor.DEVICE_CLASS_ENERGY,)
|
ENERGY_USAGE_DEVICE_CLASSES = (sensor.SensorDeviceClass.ENERGY,)
|
||||||
ENERGY_USAGE_UNITS = {
|
ENERGY_USAGE_UNITS = {
|
||||||
sensor.DEVICE_CLASS_ENERGY: (ENERGY_KILO_WATT_HOUR, ENERGY_WATT_HOUR)
|
sensor.SensorDeviceClass.ENERGY: (ENERGY_KILO_WATT_HOUR, ENERGY_WATT_HOUR)
|
||||||
}
|
}
|
||||||
ENERGY_PRICE_UNITS = tuple(
|
ENERGY_PRICE_UNITS = tuple(
|
||||||
f"/{unit}" for units in ENERGY_USAGE_UNITS.values() for unit in units
|
f"/{unit}" for units in ENERGY_USAGE_UNITS.values() for unit in units
|
||||||
)
|
)
|
||||||
ENERGY_UNIT_ERROR = "entity_unexpected_unit_energy"
|
ENERGY_UNIT_ERROR = "entity_unexpected_unit_energy"
|
||||||
ENERGY_PRICE_UNIT_ERROR = "entity_unexpected_unit_energy_price"
|
ENERGY_PRICE_UNIT_ERROR = "entity_unexpected_unit_energy_price"
|
||||||
GAS_USAGE_DEVICE_CLASSES = (sensor.DEVICE_CLASS_ENERGY, sensor.DEVICE_CLASS_GAS)
|
GAS_USAGE_DEVICE_CLASSES = (
|
||||||
|
sensor.SensorDeviceClass.ENERGY,
|
||||||
|
sensor.SensorDeviceClass.GAS,
|
||||||
|
)
|
||||||
GAS_USAGE_UNITS = {
|
GAS_USAGE_UNITS = {
|
||||||
sensor.DEVICE_CLASS_ENERGY: (ENERGY_WATT_HOUR, ENERGY_KILO_WATT_HOUR),
|
sensor.SensorDeviceClass.ENERGY: (ENERGY_WATT_HOUR, ENERGY_KILO_WATT_HOUR),
|
||||||
sensor.DEVICE_CLASS_GAS: (VOLUME_CUBIC_METERS, VOLUME_CUBIC_FEET),
|
sensor.SensorDeviceClass.GAS: (VOLUME_CUBIC_METERS, VOLUME_CUBIC_FEET),
|
||||||
}
|
}
|
||||||
GAS_PRICE_UNITS = tuple(
|
GAS_PRICE_UNITS = tuple(
|
||||||
f"/{unit}" for units in GAS_USAGE_UNITS.values() for unit in units
|
f"/{unit}" for units in GAS_USAGE_UNITS.values() for unit in units
|
||||||
@ -141,9 +144,9 @@ def _async_validate_usage_stat(
|
|||||||
state_class = state.attributes.get(sensor.ATTR_STATE_CLASS)
|
state_class = state.attributes.get(sensor.ATTR_STATE_CLASS)
|
||||||
|
|
||||||
allowed_state_classes = [
|
allowed_state_classes = [
|
||||||
sensor.STATE_CLASS_MEASUREMENT,
|
sensor.SensorStateClass.MEASUREMENT,
|
||||||
sensor.STATE_CLASS_TOTAL,
|
sensor.SensorStateClass.TOTAL,
|
||||||
sensor.STATE_CLASS_TOTAL_INCREASING,
|
sensor.SensorStateClass.TOTAL_INCREASING,
|
||||||
]
|
]
|
||||||
if state_class not in allowed_state_classes:
|
if state_class not in allowed_state_classes:
|
||||||
result.append(
|
result.append(
|
||||||
@ -155,7 +158,7 @@ def _async_validate_usage_stat(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
state_class == sensor.STATE_CLASS_MEASUREMENT
|
state_class == sensor.SensorStateClass.MEASUREMENT
|
||||||
and sensor.ATTR_LAST_RESET not in state.attributes
|
and sensor.ATTR_LAST_RESET not in state.attributes
|
||||||
):
|
):
|
||||||
result.append(
|
result.append(
|
||||||
@ -221,9 +224,9 @@ def _async_validate_cost_stat(
|
|||||||
state_class = state.attributes.get("state_class")
|
state_class = state.attributes.get("state_class")
|
||||||
|
|
||||||
supported_state_classes = [
|
supported_state_classes = [
|
||||||
sensor.STATE_CLASS_MEASUREMENT,
|
sensor.SensorStateClass.MEASUREMENT,
|
||||||
sensor.STATE_CLASS_TOTAL,
|
sensor.SensorStateClass.TOTAL,
|
||||||
sensor.STATE_CLASS_TOTAL_INCREASING,
|
sensor.SensorStateClass.TOTAL_INCREASING,
|
||||||
]
|
]
|
||||||
if state_class not in supported_state_classes:
|
if state_class not in supported_state_classes:
|
||||||
result.append(
|
result.append(
|
||||||
@ -231,7 +234,7 @@ def _async_validate_cost_stat(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
state_class == sensor.STATE_CLASS_MEASUREMENT
|
state_class == sensor.SensorStateClass.MEASUREMENT
|
||||||
and sensor.ATTR_LAST_RESET not in state.attributes
|
and sensor.ATTR_LAST_RESET not in state.attributes
|
||||||
):
|
):
|
||||||
result.append(
|
result.append(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user