@@ -98,26 +98,46 @@ async def cumulative_energy(
9898 production += last_value_production
9999
100100 else :
101- # Directly use energy values if using AC_ACTIVE_ENERGY
102- consumption = sum (
103- m2 .value - m1 .value
104- for m1 , m2 in zip (metric_samples , metric_samples [1 :])
105- if m2 .value - m1 .value > 0
106- )
107- production = sum (
108- m2 .value - m1 .value
109- for m1 , m2 in zip (metric_samples , metric_samples [1 :])
110- if m2 .value - m1 .value < 0
101+ # Fetch energy consumption and production metrics separately
102+ consumption_samples = [
103+ sample
104+ async for sample in client .list_microgrid_components_data (
105+ microgrid_components = [(microgrid_id , [component_id ])],
106+ metrics = Metric .AC_ACTIVE_ENERGY_CONSUMED ,
107+ start_dt = start_time ,
108+ end_dt = end_time ,
109+ resampling_period = resampling_period ,
110+ )
111+ ]
112+
113+ production_samples = [
114+ sample
115+ async for sample in client .list_microgrid_components_data (
116+ microgrid_components = [(microgrid_id , [component_id ])],
117+ metrics = Metric .AC_ACTIVE_ENERGY_DELIVERED ,
118+ start_dt = start_time ,
119+ end_dt = end_time ,
120+ resampling_period = resampling_period ,
121+ )
122+ ]
123+
124+ consumption = (
125+ sum (
126+ max (0 , m2 .value - m1 .value )
127+ for m1 , m2 in zip (consumption_samples , consumption_samples [1 :])
128+ )
129+ if len (consumption_samples ) > 1
130+ else float ("nan" )
111131 )
112132
113- if len ( metric_samples ) > 1 :
114- last_value_diff = metric_samples [ - 1 ]. value - metric_samples [ - 2 ]. value
115- if last_value_diff > 0 :
116- consumption += last_value_diff
117- elif last_value_diff < 0 :
118- production += last_value_diff
119- else :
120- consumption = production = float ( "nan" )
133+ production = (
134+ sum (
135+ max ( 0 , m2 . value - m1 . value )
136+ for m1 , m2 in zip ( production_samples , production_samples [ 1 :])
137+ )
138+ if len ( production_samples ) > 1
139+ else float ( "nan" )
140+ )
121141
122142 return CumulativeEnergy (
123143 start_time = start_time ,
0 commit comments