Remove STATE_CLASS_TOTAL and last_reset from sensor (#54755)
* Remove STATE_CLASS_TOTAL * Update mill sensor * Update tests * Kill last_reset * Return ATTR_LAST_RESET to utility_meter * Update energy cost sensor * Restore last_reset for backwards compatibility * Re-add and update deprecation warning * Update tests * Fix utility_meter * Update EnergyCostSensor * Tweak * Fix rebase mistake * Fix test
This commit is contained in:
parent
85d9890447
commit
e1926caeb9
12 changed files with 68 additions and 251 deletions
|
@ -17,7 +17,6 @@ from homeassistant.components.sensor import (
|
|||
DEVICE_CLASS_PRESSURE,
|
||||
DEVICE_CLASS_TEMPERATURE,
|
||||
STATE_CLASS_MEASUREMENT,
|
||||
STATE_CLASS_TOTAL,
|
||||
STATE_CLASS_TOTAL_INCREASING,
|
||||
STATE_CLASSES,
|
||||
)
|
||||
|
@ -43,7 +42,6 @@ from homeassistant.const import (
|
|||
VOLUME_CUBIC_METERS,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, State
|
||||
import homeassistant.util.dt as dt_util
|
||||
import homeassistant.util.pressure as pressure_util
|
||||
import homeassistant.util.temperature as temperature_util
|
||||
import homeassistant.util.volume as volume_util
|
||||
|
@ -53,11 +51,6 @@ from . import ATTR_LAST_RESET, DOMAIN
|
|||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
DEVICE_CLASS_OR_UNIT_STATISTICS = {
|
||||
STATE_CLASS_TOTAL: {
|
||||
DEVICE_CLASS_ENERGY: {"sum"},
|
||||
DEVICE_CLASS_GAS: {"sum"},
|
||||
DEVICE_CLASS_MONETARY: {"sum"},
|
||||
},
|
||||
STATE_CLASS_MEASUREMENT: {
|
||||
DEVICE_CLASS_BATTERY: {"mean", "min", "max"},
|
||||
DEVICE_CLASS_HUMIDITY: {"mean", "min", "max"},
|
||||
|
@ -65,7 +58,7 @@ DEVICE_CLASS_OR_UNIT_STATISTICS = {
|
|||
DEVICE_CLASS_PRESSURE: {"mean", "min", "max"},
|
||||
DEVICE_CLASS_TEMPERATURE: {"mean", "min", "max"},
|
||||
PERCENTAGE: {"mean", "min", "max"},
|
||||
# Deprecated, support will be removed in Home Assistant 2021.10
|
||||
# Deprecated, support will be removed in Home Assistant 2021.11
|
||||
DEVICE_CLASS_ENERGY: {"sum"},
|
||||
DEVICE_CLASS_GAS: {"sum"},
|
||||
DEVICE_CLASS_MONETARY: {"sum"},
|
||||
|
@ -73,6 +66,7 @@ DEVICE_CLASS_OR_UNIT_STATISTICS = {
|
|||
STATE_CLASS_TOTAL_INCREASING: {
|
||||
DEVICE_CLASS_ENERGY: {"sum"},
|
||||
DEVICE_CLASS_GAS: {"sum"},
|
||||
DEVICE_CLASS_MONETARY: {"sum"},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -279,13 +273,11 @@ def compile_statistics(
|
|||
stat["mean"] = _time_weighted_average(fstates, start, end)
|
||||
|
||||
if "sum" in wanted_statistics:
|
||||
last_reset = old_last_reset = None
|
||||
new_state = old_state = None
|
||||
_sum = 0
|
||||
last_stats = statistics.get_last_statistics(hass, 1, entity_id)
|
||||
if entity_id in last_stats:
|
||||
# We have compiled history for this sensor before, use that as a starting point
|
||||
last_reset = old_last_reset = last_stats[entity_id][0]["last_reset"]
|
||||
new_state = old_state = last_stats[entity_id][0]["state"]
|
||||
_sum = last_stats[entity_id][0]["sum"]
|
||||
|
||||
|
@ -299,13 +291,7 @@ def compile_statistics(
|
|||
continue
|
||||
|
||||
reset = False
|
||||
if (
|
||||
state_class != STATE_CLASS_TOTAL_INCREASING
|
||||
and (last_reset := state.attributes.get("last_reset"))
|
||||
!= old_last_reset
|
||||
):
|
||||
reset = True
|
||||
elif old_state is None and last_reset is None:
|
||||
if old_state is None:
|
||||
reset = True
|
||||
elif state_class == STATE_CLASS_TOTAL_INCREASING and (
|
||||
old_state is None or (new_state is not None and fstate < new_state)
|
||||
|
@ -318,21 +304,14 @@ def compile_statistics(
|
|||
_sum += new_state - old_state
|
||||
# ..and update the starting point
|
||||
new_state = fstate
|
||||
old_last_reset = last_reset
|
||||
# Force a new cycle for STATE_CLASS_TOTAL_INCREASING to start at 0
|
||||
if state_class == STATE_CLASS_TOTAL_INCREASING and old_state:
|
||||
old_state = 0
|
||||
# Force a new cycle to start at 0
|
||||
if old_state is not None:
|
||||
old_state = 0.0
|
||||
else:
|
||||
old_state = new_state
|
||||
else:
|
||||
new_state = fstate
|
||||
|
||||
# Deprecated, will be removed in Home Assistant 2021.10
|
||||
if last_reset is None and state_class == STATE_CLASS_MEASUREMENT:
|
||||
# No valid updates
|
||||
result.pop(entity_id)
|
||||
continue
|
||||
|
||||
if new_state is None or old_state is None:
|
||||
# No valid updates
|
||||
result.pop(entity_id)
|
||||
|
@ -340,8 +319,6 @@ def compile_statistics(
|
|||
|
||||
# Update the sum with the last state
|
||||
_sum += new_state - old_state
|
||||
if last_reset is not None:
|
||||
stat["last_reset"] = dt_util.parse_datetime(last_reset)
|
||||
stat["sum"] = _sum
|
||||
stat["state"] = new_state
|
||||
|
||||
|
@ -365,7 +342,11 @@ def list_statistic_ids(hass: HomeAssistant, statistic_type: str | None = None) -
|
|||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
|
||||
if "sum" in provided_statistics and ATTR_LAST_RESET not in state.attributes:
|
||||
if (
|
||||
"sum" in provided_statistics
|
||||
and ATTR_LAST_RESET not in state.attributes
|
||||
and state.attributes.get(ATTR_STATE_CLASS) == STATE_CLASS_MEASUREMENT
|
||||
):
|
||||
continue
|
||||
|
||||
native_unit = state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue