7
7
statistics_during_period )
8
8
from homeassistant .const import ENERGY_KILO_WATT_HOUR
9
9
from homeassistant .core import HomeAssistant
10
- from homeassistant .util .dt import get_time_zone , utc_from_timestamp
10
+ from homeassistant .util .dt import get_time_zone , utc_from_timestamp , as_utc
11
11
12
12
from .connector import TauronAmiplusConnector , TauronAmiplusRawData
13
13
from .const import CONST_BALANCED , CONST_CONSUMPTION , CONST_GENERATION , DEFAULT_NAME , STATISTICS_DOMAIN
@@ -37,7 +37,7 @@ async def update_all(self, last_data: TauronAmiplusRawData) -> None:
37
37
38
38
all_stat_ids = await self .prepare_stats_ids (zones )
39
39
40
- if not all ([v ["has_stats" ] for v in all_stat_ids .values ()]):
40
+ if not all ([self . are_stats_up_to_date ( v ["last_stats_end" ]) for v in all_stat_ids .values ()]):
41
41
now = datetime .datetime .now ()
42
42
start_range = (now - datetime .timedelta (365 )).replace (day = 1 )
43
43
data_consumption = await self .hass .async_add_executor_job (self .connector .get_raw_values_daily_for_range ,
@@ -56,7 +56,7 @@ async def update_all(self, last_data: TauronAmiplusRawData) -> None:
56
56
raw_data [f"{ CONST_BALANCED } _{ CONST_GENERATION } " ] = balanced_generation
57
57
58
58
for s , v in all_stat_ids .items ():
59
- if v ["has_stats" ] :
59
+ if v ["last_stats_end" ] is not None :
60
60
stat = await self .get_stats (raw_data [v ["data_source" ]], s )
61
61
v ["sum" ] = stat [s ][0 ]["sum" ]
62
62
start = stat [s ][0 ]["start" ]
@@ -113,12 +113,12 @@ async def prepare_stats_ids(self, zones):
113
113
"data_source" : s ["data" ],
114
114
"sum" : 0 ,
115
115
"last_stats_time" : None ,
116
- "has_stats " : False
116
+ "last_stats_end " : None
117
117
}
118
118
for s in suffixes
119
119
}
120
120
for k , v in all_stat_ids .items ():
121
- v ["has_stats " ] = await self .has_stats (k )
121
+ v ["last_stats_end " ] = await self .get_last_stats_date (k )
122
122
return all_stat_ids
123
123
124
124
def get_stats_id (self , suffix ):
@@ -127,6 +127,13 @@ def get_stats_id(self, suffix):
127
127
def get_stats_name (self , suffix ):
128
128
return f"{ DEFAULT_NAME } { self .meter_id } { suffix } "
129
129
130
+ @staticmethod
131
+ def are_stats_up_to_date (last_stats_end ):
132
+ if last_stats_end is None :
133
+ return False
134
+ now = datetime .datetime .now ()
135
+ return (as_utc (now ) - last_stats_end ).days < 30
136
+
130
137
@staticmethod
131
138
def prepare_balanced_raw_data (raw_data ) -> (dict , dict ):
132
139
consumption_data = raw_data [CONST_CONSUMPTION ]
@@ -198,8 +205,14 @@ async def update_stats(self, statistic_id, statistic_name, initial_sum, last_sta
198
205
statistic_data .append (stats )
199
206
async_add_external_statistics (self .hass , metadata , statistic_data )
200
207
201
- async def has_stats (self , statistic_id ):
202
- return len (await self .get_last_stats (statistic_id )) > 0
208
+ async def get_last_stats_date (self , statistic_id ):
209
+ last_stats = await self .get_last_stats (statistic_id )
210
+ if statistic_id in last_stats and len (last_stats [statistic_id ]) > 0 :
211
+ end = last_stats [statistic_id ][0 ]["end" ]
212
+ if isinstance (end , float ):
213
+ end = utc_from_timestamp (end )
214
+ return end
215
+ return None
203
216
204
217
async def get_last_stats (self , statistic_id ):
205
218
return await get_instance (self .hass ).async_add_executor_job (
0 commit comments