Skip to content

Commit 657a068

Browse files
authored
Cleanup some duplicated code (home-assistant#147439)
1 parent af6c2b5 commit 657a068

File tree

1 file changed

+4
-21
lines changed

1 file changed

+4
-21
lines changed

homeassistant/components/derivative/sensor.py

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -336,13 +336,7 @@ def calc_derivative(
336336
"" if unit is None else unit
337337
)
338338

339-
# filter out all derivatives older than `time_window` from our window list
340-
self._state_list = [
341-
(time_start, time_end, state)
342-
for time_start, time_end, state in self._state_list
343-
if (new_state.last_reported - time_end).total_seconds()
344-
< self._time_window
345-
]
339+
self._prune_state_list(new_state.last_reported)
346340

347341
try:
348342
elapsed_time = (
@@ -380,25 +374,14 @@ def calc_derivative(
380374
(old_last_reported, new_state.last_reported, new_derivative)
381375
)
382376

383-
def calculate_weight(
384-
start: datetime, end: datetime, now: datetime
385-
) -> float:
386-
window_start = now - timedelta(seconds=self._time_window)
387-
if start < window_start:
388-
weight = (end - window_start).total_seconds() / self._time_window
389-
else:
390-
weight = (end - start).total_seconds() / self._time_window
391-
return weight
392-
393377
# If outside of time window just report derivative (is the same as modeling it in the window),
394378
# otherwise take the weighted average with the previous derivatives
395379
if elapsed_time > self._time_window:
396380
derivative = new_derivative
397381
else:
398-
derivative = Decimal("0.00")
399-
for start, end, value in self._state_list:
400-
weight = calculate_weight(start, end, new_state.last_reported)
401-
derivative = derivative + (value * Decimal(weight))
382+
derivative = self._calc_derivative_from_state_list(
383+
new_state.last_reported
384+
)
402385
self._attr_native_value = round(derivative, self._round_digits)
403386
self.async_write_ha_state()
404387

0 commit comments

Comments
 (0)