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