Skip to main content
Interval meters often report at irregular times, in mixed units, with gaps and glitches. Normalization converts those readings into a uniform dataset: one row per meter per 15-minute or daily interval, in standard units, with quality labels on every row. This page explains why that process matters and what you get from it. Normalized interval data powers Interval Trends, M&V, and Forecasting. Connect the feed through the KODE OS data source. For label definitions, see Interval normalization labels.

Why normalization matters

Raw interval data is messy. Without cleanup, charts and totals mislead.

What goes in and what comes out

Input: Irregular readings from accumulators, sensors, and pulse meters, with different units, gaps, duplicates, and outliers. Output: A uniform dataset with:
  • One row per meter per 15-minute interval (and a daily consumption row)
  • Standardized units by meter type
  • Quality labels that show how each value was produced or why it is empty
The pipeline runs daily for each building. Each run processes the previous day so raw readings are complete before normalization starts.

Virtual points

For each meter, normalization produces three virtual points.

Output units by meter type

How the process works

Normalization follows a fixed sequence.
  1. Validate meter configuration — Flag duplicate fields, cooling and heating conflicts, and invalid units before processing.
  2. Clean raw readings — Drop nulls and duplicates. Remove negative values, zero accumulators, and spike or dip outliers.
  3. Standardize units — Convert every reading to the target unit for that meter type.
  4. Align to 15 minutes — Map irregular timestamps to a uniform grid. Accumulators become interval consumption by differencing. Sensors convert rate to consumption.
  5. Apply physical limits — Nullify values that exceed meter-type limits for a 15-minute window.
  6. Select the best field — When a meter has multiple fields, prefer total accumulators over differentials and sensors.
  7. Fill short gaps — Linear interpolation covers gaps up to two hours. Longer gaps stay empty.
  8. Label every row — Attach configuration, validation, and interpolation labels so you can trust or investigate each value.
Meters with no raw data still appear in the output with empty values and a missing-data label. Nothing is silently dropped.

Data quality labels

Every normalized row carries a labels dictionary. Empty braces {} mean clean measured data. Treat configuration and validation labels as signals to fix mapping or sensors. Treat interpolation labels as estimates for short gaps. Full definitions live on Interval normalization labels.

Next steps

Interval normalization labels

Look up virtual point fields, limits, and quality label meanings.

KODE OS data source

Connect interval meters that feed normalization.

Data sources and meters

See how bills and interval reads fit together in EnerG.

Meter comparisons

Compare utility bills against interval totals after data is clean.
Last modified on August 18, 2026