Skip to content

Commit 46687f9

Browse files
Merge pull request #20 from flora-hofmann-frequenz/change_delivered_consumed
Change energy to use energy_consumed and energy_delivered
2 parents b54506f + 2ae6df7 commit 46687f9

File tree

2 files changed

+39
-18
lines changed

2 files changed

+39
-18
lines changed

RELEASE_NOTES.md

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
* Add Readme information
1515
* Added functionality to extract state durations and filter alerts.
16+
* Energy metrics updated to METRIC_AC_ACTIVE_ENERGY_CONSUMED and METRIC_AC_ACTIVE_ENERGY_DELIVERED for independent tracking of consumption and production.
1617

1718
## Bug Fixes
1819

src/frequenz/reporting/_reporting.py

+38-18
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)