Skip to content

Commit c210207

Browse files
Merge pull request #21 from flora-hofmann-frequenz/mvp_metric
Add common metric to test with reporting client mvp
2 parents 9e01c25 + bd4e9cf commit c210207

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
# License: MIT
2+
# Copyright © 2024 Frequenz Energy-as-a-Service GmbH
3+
4+
"""Module to define the metrics used with the common client."""
5+
6+
from enum import Enum
7+
from typing import Self
8+
9+
# pylint: disable=no-name-in-module
10+
from frequenz.api.common.v1.metrics.metric_sample_pb2 import Metric as PBMetric
11+
12+
# pylint: enable=no-name-in-module
13+
14+
15+
class Metric(Enum):
16+
"""List of supported metrics."""
17+
18+
# Default value
19+
UNSPECIFIED = PBMetric.METRIC_UNSPECIFIED
20+
21+
# DC electricity metrics
22+
DC_VOLTAGE = PBMetric.METRIC_DC_VOLTAGE
23+
DC_CURRENT = PBMetric.METRIC_DC_CURRENT
24+
DC_POWER = PBMetric.METRIC_DC_POWER
25+
26+
# General AC electricity metrics
27+
AC_FREQUENCY = PBMetric.METRIC_AC_FREQUENCY
28+
AC_VOLTAGE = PBMetric.METRIC_AC_VOLTAGE
29+
AC_VOLTAGE_PHASE_1 = PBMetric.METRIC_AC_VOLTAGE_PHASE_1
30+
AC_VOLTAGE_PHASE_2 = PBMetric.METRIC_AC_VOLTAGE_PHASE_2
31+
AC_VOLTAGE_PHASE_3 = PBMetric.METRIC_AC_VOLTAGE_PHASE_3
32+
AC_APPARENT_CURRENT = PBMetric.METRIC_AC_APPARENT_CURRENT
33+
AC_APPARENT_CURRENT_PHASE_1 = PBMetric.METRIC_AC_APPARENT_CURRENT_PHASE_1
34+
AC_APPARENT_CURRENT_PHASE_2 = PBMetric.METRIC_AC_APPARENT_CURRENT_PHASE_2
35+
AC_APPARENT_CURRENT_PHASE_3 = PBMetric.METRIC_AC_APPARENT_CURRENT_PHASE_3
36+
37+
# AC power metrics
38+
AC_APPARENT_POWER = PBMetric.METRIC_AC_APPARENT_POWER
39+
AC_APPARENT_POWER_PHASE_1 = PBMetric.METRIC_AC_APPARENT_POWER_PHASE_1
40+
AC_APPARENT_POWER_PHASE_2 = PBMetric.METRIC_AC_APPARENT_POWER_PHASE_2
41+
AC_APPARENT_POWER_PHASE_3 = PBMetric.METRIC_AC_APPARENT_POWER_PHASE_3
42+
AC_ACTIVE_POWER = PBMetric.METRIC_AC_ACTIVE_POWER
43+
AC_ACTIVE_POWER_PHASE_1 = PBMetric.METRIC_AC_ACTIVE_POWER_PHASE_1
44+
AC_ACTIVE_POWER_PHASE_2 = PBMetric.METRIC_AC_ACTIVE_POWER_PHASE_2
45+
AC_ACTIVE_POWER_PHASE_3 = PBMetric.METRIC_AC_ACTIVE_POWER_PHASE_3
46+
AC_REACTIVE_POWER = PBMetric.METRIC_AC_REACTIVE_POWER
47+
AC_REACTIVE_POWER_PHASE_1 = PBMetric.METRIC_AC_REACTIVE_POWER_PHASE_1
48+
AC_REACTIVE_POWER_PHASE_2 = PBMetric.METRIC_AC_REACTIVE_POWER_PHASE_2
49+
AC_REACTIVE_POWER_PHASE_3 = PBMetric.METRIC_AC_REACTIVE_POWER_PHASE_3
50+
51+
# AC power factor
52+
AC_POWER_FACTOR = PBMetric.METRIC_AC_POWER_FACTOR
53+
AC_POWER_FACTOR_PHASE_1 = PBMetric.METRIC_AC_POWER_FACTOR_PHASE_1
54+
AC_POWER_FACTOR_PHASE_2 = PBMetric.METRIC_AC_POWER_FACTOR_PHASE_2
55+
AC_POWER_FACTOR_PHASE_3 = PBMetric.METRIC_AC_POWER_FACTOR_PHASE_3
56+
57+
# AC energy metrics
58+
AC_APPARENT_ENERGY = PBMetric.METRIC_AC_APPARENT_ENERGY
59+
AC_APPARENT_ENERGY_PHASE_1 = PBMetric.METRIC_AC_APPARENT_ENERGY_PHASE_1
60+
AC_APPARENT_ENERGY_PHASE_2 = PBMetric.METRIC_AC_APPARENT_ENERGY_PHASE_2
61+
AC_APPARENT_ENERGY_PHASE_3 = PBMetric.METRIC_AC_APPARENT_ENERGY_PHASE_3
62+
AC_ACTIVE_ENERGY = PBMetric.METRIC_AC_ACTIVE_ENERGY
63+
AC_ACTIVE_ENERGY_PHASE_1 = PBMetric.METRIC_AC_ACTIVE_ENERGY_PHASE_1
64+
AC_ACTIVE_ENERGY_PHASE_2 = PBMetric.METRIC_AC_ACTIVE_ENERGY_PHASE_2
65+
AC_ACTIVE_ENERGY_PHASE_3 = PBMetric.METRIC_AC_ACTIVE_ENERGY_PHASE_3
66+
AC_ACTIVE_ENERGY_CONSUMED = PBMetric.METRIC_AC_ACTIVE_ENERGY_CONSUMED
67+
AC_ACTIVE_ENERGY_CONSUMED_PHASE_1 = (
68+
PBMetric.METRIC_AC_ACTIVE_ENERGY_CONSUMED_PHASE_1
69+
)
70+
AC_ACTIVE_ENERGY_CONSUMED_PHASE_2 = (
71+
PBMetric.METRIC_AC_ACTIVE_ENERGY_CONSUMED_PHASE_2
72+
)
73+
AC_ACTIVE_ENERGY_CONSUMED_PHASE_3 = (
74+
PBMetric.METRIC_AC_ACTIVE_ENERGY_CONSUMED_PHASE_3
75+
)
76+
AC_ACTIVE_ENERGY_DELIVERED = PBMetric.METRIC_AC_ACTIVE_ENERGY_DELIVERED
77+
AC_ACTIVE_ENERGY_DELIVERED_PHASE_1 = (
78+
PBMetric.METRIC_AC_ACTIVE_ENERGY_DELIVERED_PHASE_1
79+
)
80+
AC_ACTIVE_ENERGY_DELIVERED_PHASE_2 = (
81+
PBMetric.METRIC_AC_ACTIVE_ENERGY_DELIVERED_PHASE_2
82+
)
83+
AC_ACTIVE_ENERGY_DELIVERED_PHASE_3 = (
84+
PBMetric.METRIC_AC_ACTIVE_ENERGY_DELIVERED_PHASE_3
85+
)
86+
AC_REACTIVE_ENERGY = PBMetric.METRIC_AC_REACTIVE_ENERGY
87+
AC_REACTIVE_ENERGY_PHASE_1 = PBMetric.METRIC_AC_REACTIVE_ENERGY_PHASE_1
88+
AC_REACTIVE_ENERGY_PHASE_2 = PBMetric.METRIC_AC_REACTIVE_ENERGY_PHASE_2
89+
AC_REACTIVE_ENERGY_PHASE_3 = PBMetric.METRIC_AC_REACTIVE_ENERGY_PHASE_3
90+
91+
# AC harmonics
92+
AC_THD_CURRENT = PBMetric.METRIC_AC_THD_CURRENT
93+
AC_THD_CURRENT_PHASE_1 = PBMetric.METRIC_AC_THD_CURRENT_PHASE_1
94+
AC_THD_CURRENT_PHASE_2 = PBMetric.METRIC_AC_THD_CURRENT_PHASE_2
95+
AC_THD_CURRENT_PHASE_3 = PBMetric.METRIC_AC_THD_CURRENT_PHASE_3
96+
97+
# General BMS metrics
98+
BATTERY_CAPACITY = PBMetric.METRIC_BATTERY_CAPACITY
99+
BATTERY_SOC_PCT = PBMetric.METRIC_BATTERY_SOC_PCT
100+
BATTERY_TEMPERATURE = PBMetric.METRIC_BATTERY_TEMPERATURE
101+
102+
# General inverter metrics
103+
INVERTER_TEMPERATURE = PBMetric.METRIC_INVERTER_TEMPERATURE
104+
INVERTER_TEMPERATURE_CABINET = PBMetric.METRIC_INVERTER_TEMPERATURE_CABINET
105+
INVERTER_TEMPERATURE_HEATSINK = PBMetric.METRIC_INVERTER_TEMPERATURE_HEATSINK
106+
INVERTER_TEMPERATURE_TRANSFORMER = PBMetric.METRIC_INVERTER_TEMPERATURE_TRANSFORMER
107+
108+
# EV charging station metrics
109+
EV_CHARGER_TEMPERATURE = PBMetric.METRIC_EV_CHARGER_TEMPERATURE
110+
111+
# General sensor metrics
112+
SENSOR_WIND_SPEED = PBMetric.METRIC_SENSOR_WIND_SPEED
113+
SENSOR_WIND_DIRECTION = PBMetric.METRIC_SENSOR_WIND_DIRECTION
114+
SENSOR_TEMPERATURE = PBMetric.METRIC_SENSOR_TEMPERATURE
115+
SENSOR_RELATIVE_HUMIDITY = PBMetric.METRIC_SENSOR_RELATIVE_HUMIDITY
116+
SENSOR_DEW_POINT = PBMetric.METRIC_SENSOR_DEW_POINT
117+
SENSOR_AIR_PRESSURE = PBMetric.METRIC_SENSOR_AIR_PRESSURE
118+
SENSOR_IRRADIANCE = PBMetric.METRIC_SENSOR_IRRADIANCE
119+
120+
@classmethod
121+
def from_proto(cls, metric: PBMetric.ValueType) -> Self:
122+
"""Convert a protobuf Metric value to Metric enum.
123+
124+
Args:
125+
metric: Metric to convert.
126+
Returns:
127+
Enum value corresponding to the protobuf message.
128+
"""
129+
if not any(m.value == metric for m in cls):
130+
return cls(Metric.UNSPECIFIED)
131+
132+
return cls(metric)
133+
134+
def to_proto(self) -> PBMetric.ValueType:
135+
"""Convert a Metric object to protobuf Metric.
136+
137+
Returns:
138+
Protobuf message corresponding to the Metric object.
139+
"""
140+
return self.value

0 commit comments

Comments
 (0)