Skip to main content

Crate frequenz_microgrid

Crate frequenz_microgrid 

Source
Expand description

§frequenz-microgrid-rs

docs.rs Crates.io

High-level Rust interface for the Frequenz Microgrid API.

The crate connects to a Microgrid API server, builds a ComponentGraph from the live topology, and exposes typed, formula-driven streams of microgrid metrics — grid power, battery state-of-charge, PV reactive power, consumer current, and so on — without requiring callers to write the per-component formulas by hand.

Support for controlling components is coming soon.

§Quick start

[dependencies]
frequenz-microgrid = "0.4"
chrono = "0.4"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

Stream the grid’s active power once per second:

use chrono::TimeDelta;
use frequenz_microgrid::{Error, LogicalMeterConfig, Microgrid, metric};

#[tokio::main]
async fn main() -> Result<(), Error> {
    let microgrid = Microgrid::try_new(
        "http://[::1]:8800",
        LogicalMeterConfig::new(TimeDelta::try_seconds(1).unwrap()),
    )
    .await?;

    let mut grid = microgrid
        .logical_meter()
        .grid::<metric::AcPowerActive>()?
        .subscribe()
        .await?;

    while let Ok(sample) = grid.recv().await {
        println!("{:?}: {:?}", sample.timestamp(), sample.value());
    }
    Ok(())
}

Microgrid::try_new blocks (with retries) until the server is reachable and returns a graph that builds successfully, so applications can start before their backing service is ready.

§Testing with the in-crate mock

frequenz_microgrid::test_utils ships a MockMicrogridApiClient (plus MockComponent and TokioSyncedClock helpers) for downstream tests. Enable it as a dev-dependency feature:

[dev-dependencies]
frequenz-microgrid = { version = "0.4", features = ["test-utils"] }

§What’s included

§Configuring the underlying graph

LogicalMeterConfig::with_component_graph_config forwards a ComponentGraphConfig to the frequenz-microgrid-component-graph builder, exposing knobs like prefer_meters_in_component_formulas, include_phantom_loads_in_consumer_formula, and per-formula overrides. If not set, the graph crate’s Default::default() is used.

§Contributing

See the Contributing Guide.

Re-exports§

pub use client::MicrogridClientHandle;

Modules§

client
A clonable client for the microgrid API.
metric
Metrics supported by the logical meter.
quantity
This module defines various physical quantities and their operations.

Structs§

BatteryPool
An interface for abstracting over a pool of batteries in the microgrid.
Bounds
A set of lower and upper bounds for any metric.
Error
An error that occurred in frequenz_microgrid.
LogicalMeterConfig
LogicalMeterHandle
This provides an interface stream high-level metrics from a microgrid.
Microgrid
A high-level interface for the Microgrid API.
Sample
Represents a measurement of a microgrid metric, made at a specific time.

Enums§

ErrorKind
The kind of error that occurred.
Formula
A composable Formula.

Traits§

FormulaSubscriber