Skip to content

Commit c4831b7

Browse files
committed
Use new microgrid API wrapped types
This removes all uses of raw protobuf bindings. Signed-off-by: Leandro Lucarella <[email protected]>
1 parent 8c048f4 commit c4831b7

File tree

7 files changed

+132
-166
lines changed

7 files changed

+132
-166
lines changed

src/frequenz/sdk/actor/power_distributing/_component_status/_battery_status_tracker.py

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,16 @@
2121
from dataclasses import dataclass
2222
from datetime import datetime, timedelta, timezone
2323

24-
# pylint: disable=no-name-in-module
25-
from frequenz.api.microgrid.battery_pb2 import ComponentState as BatteryComponentState
26-
from frequenz.api.microgrid.battery_pb2 import RelayState as BatteryRelayState
27-
from frequenz.api.microgrid.common_pb2 import ErrorLevel
28-
from frequenz.api.microgrid.inverter_pb2 import ComponentState as InverterComponentState
29-
30-
# pylint: enable=no-name-in-module
3124
from frequenz.channels import Receiver, Sender, select, selected_from
3225
from frequenz.channels.timer import SkipMissedAndDrift, Timer
3326
from frequenz.client.microgrid import (
27+
BatteryComponentState,
3428
BatteryData,
29+
BatteryRelayState,
3530
ComponentCategory,
3631
ComponentData,
32+
ErrorLevel,
33+
InverterComponentState,
3734
InverterData,
3835
)
3936
from typing_extensions import override
@@ -72,29 +69,27 @@ class BatteryStatusTracker(ComponentStatusTracker, BackgroundService):
7269
Status updates are sent out only when there is a status change.
7370
"""
7471

75-
_battery_valid_relay: set[BatteryRelayState.ValueType] = {
76-
BatteryRelayState.RELAY_STATE_CLOSED
77-
}
72+
_battery_valid_relay: set[BatteryRelayState] = {BatteryRelayState.CLOSED}
7873
"""The list of valid relay states of a battery.
7974
8075
A working battery in any other battery relay state will be reported as failing.
8176
"""
8277

83-
_battery_valid_state: set[BatteryComponentState.ValueType] = {
84-
BatteryComponentState.COMPONENT_STATE_IDLE,
85-
BatteryComponentState.COMPONENT_STATE_CHARGING,
86-
BatteryComponentState.COMPONENT_STATE_DISCHARGING,
78+
_battery_valid_state: set[BatteryComponentState] = {
79+
BatteryComponentState.IDLE,
80+
BatteryComponentState.CHARGING,
81+
BatteryComponentState.DISCHARGING,
8782
}
8883
"""The list of valid states of a battery.
8984
9085
A working battery in any other battery state will be reported as failing.
9186
"""
9287

93-
_inverter_valid_state: set[InverterComponentState.ValueType] = {
94-
InverterComponentState.COMPONENT_STATE_STANDBY,
95-
InverterComponentState.COMPONENT_STATE_IDLE,
96-
InverterComponentState.COMPONENT_STATE_CHARGING,
97-
InverterComponentState.COMPONENT_STATE_DISCHARGING,
88+
_inverter_valid_state: set[InverterComponentState] = {
89+
InverterComponentState.STANDBY,
90+
InverterComponentState.IDLE,
91+
InverterComponentState.CHARGING,
92+
InverterComponentState.DISCHARGING,
9893
}
9994
"""The list of valid states of an inverter.
10095
@@ -370,11 +365,11 @@ def _no_critical_error(self, msg: BatteryData | InverterData) -> bool:
370365
Returns:
371366
True if message has no critical error, False otherwise.
372367
"""
373-
critical = ErrorLevel.ERROR_LEVEL_CRITICAL
374-
# pylint: disable=protected-access
375-
critical_err = next((err for err in msg._errors if err.level == critical), None)
368+
critical = ErrorLevel.CRITICAL
369+
critical_err = next((err for err in msg.errors if err.level == critical), None)
376370
if critical_err is not None:
377-
if self._last_status == ComponentStatusEnum.WORKING:
371+
last_status = self._last_status # pylint: disable=protected-access
372+
if last_status == ComponentStatusEnum.WORKING:
378373
_logger.warning(
379374
"Component %d has critical error: %s",
380375
msg.component_id,
@@ -394,13 +389,13 @@ def _is_inverter_state_correct(self, msg: InverterData) -> bool:
394389
"""
395390
# Component state is not exposed to the user.
396391
# pylint: disable=protected-access
397-
state = msg._component_state
392+
state = msg.component_state
398393
if state not in BatteryStatusTracker._inverter_valid_state:
399394
if self._last_status == ComponentStatusEnum.WORKING:
400395
_logger.warning(
401396
"Inverter %d has invalid state: %s",
402397
msg.component_id,
403-
InverterComponentState.Name(state),
398+
state.name,
404399
)
405400
return False
406401
return True
@@ -416,25 +411,25 @@ def _is_battery_state_correct(self, msg: BatteryData) -> bool:
416411
"""
417412
# Component state is not exposed to the user.
418413
# pylint: disable=protected-access
419-
state = msg._component_state
414+
state = msg.component_state
420415
if state not in BatteryStatusTracker._battery_valid_state:
421416
if self._last_status == ComponentStatusEnum.WORKING:
422417
_logger.warning(
423418
"Battery %d has invalid state: %s",
424419
self.battery_id,
425-
BatteryComponentState.Name(state),
420+
state.name,
426421
)
427422
return False
428423

429424
# Component state is not exposed to the user.
430425
# pylint: disable=protected-access
431-
relay_state = msg._relay_state
426+
relay_state = msg.relay_state
432427
if relay_state not in BatteryStatusTracker._battery_valid_relay:
433428
if self._last_status == ComponentStatusEnum.WORKING:
434429
_logger.warning(
435430
"Battery %d has invalid relay state: %s",
436431
self.battery_id,
437-
BatteryRelayState.Name(relay_state),
432+
relay_state.name,
438433
)
439434
return False
440435
return True

src/frequenz/sdk/actor/power_distributing/_component_status/_pv_inverter_status_tracker.py

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,9 @@
77
import logging
88
from datetime import datetime, timedelta, timezone
99

10-
# Component state for inverters and batteries is not wrapped by the
11-
# microgrid client currently, so it needs to be imported directly from
12-
# the api repo.
13-
# pylint: disable=no-name-in-module
14-
from frequenz.api.microgrid.inverter_pb2 import (
15-
ComponentState as PbInverterComponentState,
16-
)
17-
18-
# pylint: enable=no-name-in-module
1910
from frequenz.channels import Receiver, Sender, select, selected_from
2011
from frequenz.channels.timer import SkipMissedAndDrift, Timer
21-
from frequenz.client.microgrid import InverterData
12+
from frequenz.client.microgrid import InverterComponentState, InverterData
2213
from typing_extensions import override
2314

2415
from ....microgrid import connection_manager
@@ -89,11 +80,11 @@ def start(self) -> None:
8980

9081
def _is_working(self, pv_data: InverterData) -> bool:
9182
"""Return whether the given data indicates that the PV inverter is working."""
92-
return pv_data._component_state in ( # pylint: disable=protected-access
93-
PbInverterComponentState.COMPONENT_STATE_DISCHARGING,
94-
PbInverterComponentState.COMPONENT_STATE_CHARGING,
95-
PbInverterComponentState.COMPONENT_STATE_IDLE,
96-
PbInverterComponentState.COMPONENT_STATE_STANDBY,
83+
return pv_data.component_state in (
84+
InverterComponentState.DISCHARGING,
85+
InverterComponentState.CHARGING,
86+
InverterComponentState.IDLE,
87+
InverterComponentState.STANDBY,
9788
)
9889

9990
async def _run_forever(self) -> None:
@@ -151,7 +142,7 @@ def _handle_pv_inverter_data(self, pv_data: InverterData) -> ComponentStatusEnum
151142
_logger.warning(
152143
"PV inverter %s is in NOT_WORKING state. Component state: %s",
153144
self._component_id,
154-
pv_data._component_state, # pylint: disable=protected-access
145+
pv_data.component_state,
155146
)
156147
return ComponentStatusEnum.NOT_WORKING
157148

0 commit comments

Comments
 (0)