feat: add reactor control persistence and tests
This commit is contained in:
40
src/reactor_sim/consumer.py
Normal file
40
src/reactor_sim/consumer.py
Normal file
@@ -0,0 +1,40 @@
|
||||
"""External electrical consumer/load models."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
import logging
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@dataclass
|
||||
class ElectricalConsumer:
|
||||
name: str
|
||||
demand_mw: float
|
||||
online: bool = False
|
||||
power_received_mw: float = 0.0
|
||||
|
||||
def request_power(self) -> float:
|
||||
return self.demand_mw if self.online else 0.0
|
||||
|
||||
def set_demand(self, demand_mw: float) -> None:
|
||||
previous = self.demand_mw
|
||||
self.demand_mw = max(0.0, demand_mw)
|
||||
LOGGER.info("%s demand %.1f -> %.1f MW", self.name, previous, self.demand_mw)
|
||||
|
||||
def set_online(self, online: bool) -> None:
|
||||
if self.online != online:
|
||||
self.online = online
|
||||
LOGGER.info("%s %s", self.name, "online" if online else "offline")
|
||||
|
||||
def update_power_received(self, supplied_mw: float) -> None:
|
||||
self.power_received_mw = supplied_mw
|
||||
if supplied_mw < self.request_power():
|
||||
LOGGER.warning(
|
||||
"%s under-supplied: %.1f/%.1f MW",
|
||||
self.name,
|
||||
supplied_mw,
|
||||
self.request_power(),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user