mod battery_bounds_tracker;
mod battery_pool;
pub use battery_pool::BatteryPool;
pub(crate) mod telemetry_tracker;
use crate::{Error, LogicalMeterConfig, LogicalMeterHandle, MicrogridClientHandle};
pub struct Microgrid {
client: MicrogridClientHandle,
logical_meter: LogicalMeterHandle,
}
impl Microgrid {
pub async fn try_new(
url: impl Into<String>,
config: LogicalMeterConfig,
) -> Result<Self, Error> {
let client = MicrogridClientHandle::try_new(url).await?;
let logical_meter = LogicalMeterHandle::try_new(client.clone(), config).await?;
Ok(Microgrid {
client,
logical_meter,
})
}
pub fn new_from_handles(
client: MicrogridClientHandle,
logical_meter: LogicalMeterHandle,
) -> Self {
Microgrid {
client,
logical_meter,
}
}
pub fn client(&self) -> MicrogridClientHandle {
self.client.clone()
}
pub fn logical_meter(&self) -> LogicalMeterHandle {
self.logical_meter.clone()
}
pub fn battery_pool(&self, component_ids: Option<Vec<u64>>) -> Result<BatteryPool, Error> {
BatteryPool::try_new(
component_ids.map(|ids| ids.into_iter().collect()),
self.client.clone(),
self.logical_meter.clone(),
)
}
}