Skip to main content

Crate metering

Crate metering 

Source
Expand description

German energy metering domain library.

A standalone, pure library for meter data calculations required by BDEW MaKo, MessZV, GasGVV, and EnWG. Zero I/O, no async, no float money.

This crate supersedes the meter-quality crate, which has been folded in.

§Modules

ModuleContents
intervalMeterInterval, Sparte, QualityFlag, demand_kw()
conversionGas m³ → kWh_Hs (§24 GasGVV / DVGW G 685)
aggregationBilling period: arbeitsmenge_kwh, spitzenleistung_kw, HT/NT
classificationSLP/RLM/iMSys detection, interval length
imbalanceMehr-/Mindermengensaldo (§27 MessZV, compute_imbalance)
qualityHampel-filter quality scoring (M7), score_intervals_raw for f64

§Quick start — billing period

use metering::{MeterInterval, QualityFlag, aggregate, AggregationConfig};
use rust_decimal::Decimal;
use time::macros::datetime;

let iv = MeterInterval {
    from: datetime!(2026-06-01 0:00 UTC),
    to:   datetime!(2026-06-01 0:15 UTC),
    value_kwh: Decimal::from_str_exact("2.345").unwrap(),
    quality: QualityFlag::Measured,
    obis_code: None,
};
let period = aggregate(&[iv], AggregationConfig::rlm_strom());
assert!(period.arbeitsmenge_kwh > Decimal::ZERO);

§Quick start — Gas m³ → kWh_Hs

use metering::gas_m3_to_kwh_hs;
use rust_decimal::Decimal;

let kwh = gas_m3_to_kwh_hs(
    Decimal::from(100u32),
    Decimal::from_str_exact("10.55").unwrap(),
    Decimal::from_str_exact("0.9764").unwrap(),
);
assert!(kwh > Decimal::from(1000u32));

§Quick start — quality scoring (f64 API, e.g. from DB)

use metering::{score_intervals_raw, QualityGrade};

let values = vec![2.3_f64, 2.4, 2.3, 2.5, 2.2, 2.4, 2.3];
let grade = score_intervals_raw(&values, 3, 3.0);
assert_eq!(grade, QualityGrade::A);

Re-exports§

pub use aggregation::AggregationConfig;
pub use aggregation::BillingPeriod;
pub use aggregation::HtNtSplit;
pub use aggregation::aggregate;
pub use classification::IntervalLengthClass;
pub use classification::Messtyp;
pub use classification::classify_messtyp;
pub use classification::detect_interval_length;
pub use conversion::GasConversionParams;
pub use conversion::gas_m3_to_kwh_hs;
pub use conversion::normalize_interval_to_kwh;
pub use imbalance::ImbalanceSaldo;
pub use imbalance::compute_imbalance;
pub use interval::MeterInterval;
pub use interval::QualityFlag;
pub use interval::Sparte;
pub use quality::QualityConfig;
pub use quality::QualityGrade;
pub use quality::QualityReport;
pub use quality::hampel_filter;
pub use quality::score_intervals;
pub use quality::score_intervals_raw;

Modules§

aggregation
Billing period aggregation: arbeitsmenge_kwh, spitzenleistung_kw, HT/NT split.
classification
SLP/RLM/iMSys classification and interval length detection.
conversion
Gas unit conversion: m³ → kWh_Hs.
imbalance
Mehr-/Mindermengensaldo (imbalance) calculation.
interval
Core metering types: MeterInterval, Sparte, QualityFlag.
quality
Hampel-filter quality scoring (M7).