Case Studies

A Telemetry Data Pipeline for a Multi-Site Renewable Generation Operator

Industry

Energy & Utilities

Core Technologies

DatabricksDelta LakeApache KafkaAuto LoaderPySparkUnity Catalog

Client Overview

The client operates a portfolio of renewable generation assets — utility-scale solar, onshore wind and grid-connected battery storage — across several sites and two market regions. Each site reports equipment telemetry through SCADA, and each grid connection is metered separately for settlement. The business depends on that data for three things: proving what each asset generated, understanding why it did not generate more, and forecasting what it will generate next.

TL;DR

How a renewable generation operator running solar, wind and battery storage sites brought SCADA telemetry, revenue meter data and weather reference data into a single lakehouse — handling vendor tag differences, late-arriving data from remote sites, and settlement figures that get restated after the fact.

The result is a pipeline where a backfill no longer double-counts generation, every settlement report can be reproduced exactly as it was filed, and lost generation can be attributed to curtailment, equipment fault or low resource rather than guessed at.

Challenges

Renewable telemetry is not a high-volume problem so much as an awkward-shape problem. A single inverter reports a few dozen signals every second, a turbine reports more, and a revenue meter reports once per settlement interval. All three describe the same asset at the same moment, at three different resolutions, and the business needs them reconciled.

The first difficulty was that no two vendors describe the same thing the same way. Active power arrives under a different tag name from each inverter manufacturer, sometimes in kilowatts and sometimes in watts, occasionally with a scaling factor documented only in a commissioning spreadsheet. Fault codes are worse: each vendor maintains its own vocabulary, so "why did this asset stop" could not be answered across the portfolio without a per-vendor lookup written into every query.

The second was connectivity. Remote sites run on cellular or satellite backhaul that drops out. When a link is restored, the site's collector flushes everything it buffered — hours or occasionally days of readings, arriving out of order and overlapping data already received. An append-only ingestion path treats that as new generation, and the portfolio total quietly inflates. The team had been correcting these by hand after noticing that a month's output did not reconcile against the meter.

The third was that settlement data does not stay still. Meter readings are revised by the metering agent after the fact, sometimes weeks later. The operator has to be able to answer what it reported on a given date, what it would report now, and what changed in between — a question the existing warehouse could not answer because each load overwrote the previous figure with no record of it.

Time handling compounded all of this. Settlement periods are defined in market local time while telemetry arrives in UTC, and daylight saving transitions produce days with 23 and 25 hours. A model that stores only local timestamps loses an hour twice a year and duplicates one; a model that stores only UTC cannot align to settlement periods without recomputing the offset for every row.

Finally, the numbers that matter commercially — availability, performance ratio, curtailment — are not raw telemetry. They require joining equipment state against irradiance and wind resource data, and against an asset register that itself changes as sites are re-powered or inverters replaced. Those joins were being done in spreadsheets, so operations and commercial reporting routinely disagreed about the same asset's performance.

Solution

Lucent Innovation built the pipeline around a principle that suits this data specifically: raw telemetry is never edited, and every derived figure is reproducible from it.

Site collectors publish over MQTT into Kafka, and Databricks Auto Loader streams that into a Bronze layer in Delta Lake. Bronze is append-only and keeps the original vendor payload intact alongside ingestion metadata — when it arrived, from which site, through which collector. Nothing is normalised at this stage, which is what makes it possible to reprocess history later when a mapping turns out to have been wrong.

Vendor differences are resolved through a governed mapping table rather than in code. Each vendor tag maps to a canonical signal name, a unit and a scaling factor, and the mapping is versioned with validity dates. Reprocessing a period from two years ago applies the mapping that was correct then, not today's. Fault codes map into a shared severity and cause taxonomy the same way, which is what makes a portfolio-wide question about downtime answerable in a single query.

The Silver layer is where late data stops being a problem. Rather than assuming ordered arrival, readings are upserted with a Delta MERGE keyed on asset, signal and event time, so a buffered flush from a site that has been offline reconciles against what is already stored instead of adding to it. Re-delivering the same reading is a no-op. A separate scheduled backfill path re-runs recent windows to pick up anything that arrived after its window first closed, so no manual correction is needed when a site returns.

Settlement data is modelled bi-temporally: each figure carries both the interval it describes and the period during which it was believed to be correct. A revision closes the previous version and opens a new one rather than overwriting it. That is what allows the operator to reproduce any past submission exactly as filed and show the revision history behind the current number — with Delta time travel retained across the dispute window as a second, independent check.

Timestamps are stored in UTC and carry an explicit market-local settlement period index computed at ingestion, so alignment is a stored fact rather than a calculation repeated in every query. The index accounts for short and long days directly, which is what keeps totals correct through the transitions.

The Gold layer then produces the figures the business actually uses: availability and performance ratio computed against resource data rather than nameplate assumptions, and curtailment attribution that separates grid-instructed reduction from equipment fault and from genuinely low wind or irradiance. Because settlement, operations reporting and forecasting all read from the same normalised signal layer, the disagreement between commercial and operational views resolved itself — they are now the same numbers, derived once.

Unity Catalog governs the settlement tables with column-level access control and end-to-end lineage, so any reported figure can be traced back through the Gold aggregation, the Silver normalisation and the mapping version that produced it, to the raw vendor payload in Bronze.

Technologies and Tools

Platform

Databricks Lakehouse

Storage Format

Delta Lake (time travel retained across the settlement dispute window)

Field Telemetry

OPC-UA and Modbus TCP collectors at each site, bridged to MQTT

Streaming Ingestion

Apache Kafka + Databricks Auto Loader (Structured Streaming)

Reference Data

Meter data management exports, asset register, numerical weather prediction feeds

Transformation

PySpark + Delta MERGE (idempotent upsert on asset, signal and event time)

Signal Normalisation

Versioned vendor tag mapping table — canonical signal names, units and scaling factors

Orchestration

Databricks Workflows, with a separate backfill path for late site data

Analytics & Reporting

Databricks SQL + Power BI (availability, performance ratio, curtailment attribution)

Governance

Unity Catalog — lineage and column-level access control on settlement tables

Results

  • 60% reduction in the time spent preparing monthly settlement submissions, with every filed figure reproducible exactly as filed alongside the revision history behind the current number.

  • 35% faster portfolio-wide analytical queries once vendor signals resolved to canonical names and units, removing the per-vendor special cases those queries previously carried.

  • Telemetry is available for analysis within minutes of arriving rather than in a next-day batch, so operations teams are no longer a day behind equipment behaviour.

  • Manual generation corrections eliminated: late and out-of-order data from sites on intermittent backhaul now reconciles automatically, so a site returning from an outage no longer inflates portfolio totals when its buffered readings arrive.

  • Lost generation is attributed to grid curtailment, equipment fault or low resource rather than reported as a single unexplained shortfall, which makes curtailment compensation claims straightforward to evidence.

  • Settlement periods stay correct through daylight saving transitions, including the 23- and 25-hour days that break a naive local-time model.

  • Availability and performance ratio are calculated from the same governed dataset that feeds settlement, so operations and commercial reporting no longer disagree about what an asset did.

Words of Appreciation

"Our data problem was never really about volume. It was that every vendor described the same reading differently, half our sites reported late, and the settlement numbers kept moving underneath us. Lucent Innovation took that seriously rather than treating it as a straightforward ingestion job. We can now show exactly what we filed and why it changed, and our operations and commercial teams have stopped arguing about whose figure is right."

Daniel Reyes

Head of Asset Performance

Future Scalability

The pipeline is asset-agnostic rather than technology-specific: adding a site means registering its assets and mapping its vendor tags to canonical signals, not writing a new ingestion path. The same normalised signal layer that supports availability and settlement reporting is the layer a generation forecasting model trains on, so forecasting, curtailment analysis and predictive maintenance can be added without restructuring the data underneath them.