mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Cleanup some duplicated code (#147439)
This commit is contained in:
parent
af6c2b5c8a
commit
657a068087
@ -336,13 +336,7 @@ class DerivativeSensor(RestoreSensor, SensorEntity):
|
|||||||
"" if unit is None else unit
|
"" if unit is None else unit
|
||||||
)
|
)
|
||||||
|
|
||||||
# filter out all derivatives older than `time_window` from our window list
|
self._prune_state_list(new_state.last_reported)
|
||||||
self._state_list = [
|
|
||||||
(time_start, time_end, state)
|
|
||||||
for time_start, time_end, state in self._state_list
|
|
||||||
if (new_state.last_reported - time_end).total_seconds()
|
|
||||||
< self._time_window
|
|
||||||
]
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
elapsed_time = (
|
elapsed_time = (
|
||||||
@ -380,25 +374,14 @@ class DerivativeSensor(RestoreSensor, SensorEntity):
|
|||||||
(old_last_reported, new_state.last_reported, new_derivative)
|
(old_last_reported, new_state.last_reported, new_derivative)
|
||||||
)
|
)
|
||||||
|
|
||||||
def calculate_weight(
|
|
||||||
start: datetime, end: datetime, now: datetime
|
|
||||||
) -> float:
|
|
||||||
window_start = now - timedelta(seconds=self._time_window)
|
|
||||||
if start < window_start:
|
|
||||||
weight = (end - window_start).total_seconds() / self._time_window
|
|
||||||
else:
|
|
||||||
weight = (end - start).total_seconds() / self._time_window
|
|
||||||
return weight
|
|
||||||
|
|
||||||
# If outside of time window just report derivative (is the same as modeling it in the window),
|
# If outside of time window just report derivative (is the same as modeling it in the window),
|
||||||
# otherwise take the weighted average with the previous derivatives
|
# otherwise take the weighted average with the previous derivatives
|
||||||
if elapsed_time > self._time_window:
|
if elapsed_time > self._time_window:
|
||||||
derivative = new_derivative
|
derivative = new_derivative
|
||||||
else:
|
else:
|
||||||
derivative = Decimal("0.00")
|
derivative = self._calc_derivative_from_state_list(
|
||||||
for start, end, value in self._state_list:
|
new_state.last_reported
|
||||||
weight = calculate_weight(start, end, new_state.last_reported)
|
)
|
||||||
derivative = derivative + (value * Decimal(weight))
|
|
||||||
self._attr_native_value = round(derivative, self._round_digits)
|
self._attr_native_value = round(derivative, self._round_digits)
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user