Skip to content

Commit 94616ee

Browse files
committed
Add updated value to avoid unchanged or out of date updates
1 parent d5d4a93 commit 94616ee

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

sense_energy/sense_api.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from enum import Enum, auto
2-
from datetime import datetime
2+
from datetime import datetime, timedelta, timezone
33
from typing import Optional
44
import ciso8601
55
import uuid
@@ -55,9 +55,11 @@ def __init__(
5555
self._realtime = {}
5656
self._devices: dict[str, SenseDevice] = {}
5757
self._trend_data: dict[Scale, dict] = {}
58+
self._trend_data_updated: dict[Scale, datetime] = {}
5859
self._monitor = {}
5960
for scale in Scale:
6061
self._trend_data[scale] = {}
62+
self._trend_data_updated[scale] = datetime(2000, 1, 1, tzinfo=timezone.utc)
6163
self.set_ssl_context(ssl_verify, ssl_cafile)
6264
if device_id:
6365
self.device_id = device_id
@@ -97,6 +99,10 @@ def _set_auth_data(self, data):
9799
def _update_device_trends(self, scale: Scale):
98100
if not self._trend_data[scale]["consumption"].get("devices"):
99101
return
102+
update = self.trend_update(scale)
103+
if not update or update < self._trend_data_updated[scale]:
104+
return
105+
100106
for d in self._devices.values():
101107
d.energy_kwh[scale] = 0
102108
for d in self._trend_data[scale]["consumption"]["devices"]:
@@ -286,6 +292,17 @@ def trend_start(self, scale: Scale) -> Optional[datetime]:
286292
pass
287293
return None
288294

295+
def trend_update(self, scale: Scale) -> Optional[datetime]:
296+
"""Return an update value of trend last updated."""
297+
298+
update = self.trend_start(scale)
299+
if not update:
300+
return None
301+
val = self._trend_data[scale]["from_grid"] / 100.0
302+
seconds = int(val)
303+
microseconds = int((val % 1) * 1000000)
304+
return update + timedelta(seconds=seconds, microseconds=microseconds)
305+
289306
def get_stat(self, scale: Scale, key: str) -> float:
290307
key = "consumption" if key == "usage" else key
291308
if scale not in self._trend_data or key not in self._trend_data[scale]:

0 commit comments

Comments
 (0)