Use new enums in energy (#61386)

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2021-12-10 08:40:53 +01:00 committed by GitHub
parent fe17c9ffb6
commit df608b56a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 30 deletions

View File

@ -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,

View File

@ -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(