ElectricalTS: Structuring Time Series Data for Smarter, Context-Rich Energy Insights
- jmh044
- Aug 19
- 4 min read
Updated: Sep 2

In the world of distributed energy resources (DERs), time series data isn’t just “a data type” — it’s the pulse of the system. Every inverter output, voltage reading, current measurement, and power factor point tells part of an operational story.
It fuels performance monitoring, predictive maintenance, and operational optimization across solar, storage, and hybrid portfolios. But in the real world, these datasets come from heterogeneous sources — each with its own structure, naming quirks, and missing context. Without consistency and metadata, they’re harder to trust, integrate, and act on.
That’s why we created ElectricalTS — our first composite time series concept for the electrical domain, designed to standardize context and metadata while remaining flexible enough to fit real-world workflows.
Why ElectricalTS Matters
Operators and analysts face the same daily challenge: a constant flow of power, voltage, current, and energy readings — with little uniformity in how that data is represented. ElectricalTS solves this by embedding context directly alongside the values.
It delivers:
Context-Aware Data — pairing values with rich metadata that defines where they came from, which device produced them, and under what conditions.
Structured Flexibility — a standardized schema that avoids overly prescriptive column names or rigid formats, so it works with your existing mapping logic.
Cross-Domain Reusability — reusing familiar objects like Device and Scope so teams can adopt it without re-learning the basics.
The result? More reliable pipelines, higher AI model accuracy, and faster, more confident decision-making.
Inside ElectricalTS
ElectricalTS is both a container for your measurements and the contextual data that gives them meaning.
Metadata Layer Captures descriptive and traceability details — from file locations and dataset descriptions to IDs and classifications.
Scope & Location Scope defines what the data represents; location pinpoints where it originated. Geographic coordinates, altitude, and determination methods enable precise geospatial analysis.
Device Context Every time series belongs to a device, which retains:
Manufacturer IDs and product codes
Service and calibration dates
Firmware versions and warranties
Subcomponent references
Time Series Arrays ElectricalTS supports multiple parallel datasets, each with its own device and scope references:
EnergyTSArray — cumulative or interval energy readings
PowerTSArray — active, reactive, or apparent power
VoltageTSArray — single-phase, three-phase, or phase-to-phase voltage
CurrentTSArray — current by phase
PowerFactorTSArray — efficiency and quality metrics
Because each array retains its own context, you can extract, aggregate, or correlate them later without losing meaning.

Before & After: What ElectricalTS Changes
Raw inverter output (CSV):
timestamp,kw,vdc,idc,temp
2025-08-13 10:00:00,45,600.2,75.3,38.1
2025-08-13 10:01:00,46,599.8,76.0,38.3
The same data inside ElectricalTS:
{"ElectricalTS": {
"Scope": {
"ScopeID": {"Value": "abc123"},
"ScopeType": {"Value": "Device"},
"Location": {"Elevation": {"Unit": "ft","Value": 100},
"Latitude": {"Unit": "Degree","Value": 34.0522},
"Longitude": {"Unit": "Degree","Value": -108.5203597}}},
"FileFolderURL": {
"Value": "https://oballiance.org/ElectricalTS.xlsx"},
"PowerTSArray": [
{"PowerType": {"Value": "Active"},
"Device": {"DeviceName": {"Value": "Inverter_01"},
"DeviceType": {"Value": "Inverter"},
"DeviceUUID": {"Value": "abc123"}},
"PowerArray": [{
"Value": 45,
"Unit": "kW",
"StartTime": "2025-08-13T10:00:00Z",
"EndTime": "2025-08-13T10:04:59Z"},
{"Value": 46,
"Unit": "kW",
"StartTime": "2025-08-13T10:05:00Z",
"EndTime": "2025-08-13T10:09:59Z"}]}],
"VoltageTSArray": [
{"PowerType": {"Value": "Direct"},
"Device": {"DeviceName": {"Value": "Inverter_01_Input1"},
"DeviceType": {"Value": "Inverter"},
"DeviceUUID": {"Value": "abc123"}},
"VoltageArray": [{
"Value": 600.2,
"Unit": "V",
"StartTime": "2025-08-13T10:00:00Z",
"EndTime": "2025-08-13T10:04:59Z"},
{"Value": 599.8,
"Unit": "V",
"StartTime": "2025-08-13T10:05:00Z",
"EndTime": "2025-08-13T10:09:59Z"}]}],
"CurrentTSArray": [
{"PowerType": {"Value": "Direct"},
"Device": {"DeviceName": {"Value": "Inverter_01_Input1"},
"DeviceType": {"Value": "Inverter"},
"DeviceUUID": {"Value": "abc123"}},
"CurrentArray": [{
"Value": 75.3,
"Unit": "A",
"StartTime": "2025-08-13T10:00:00Z",
"EndTime": "2025-08-13T10:04:59Z"},
{"Value": 76,
"Unit": "A",
"StartTime": "2025-08-13T10:05:00Z",
"EndTime": "2025-08-13T10:09:59Z"}]}],
"TemperatureTSArray": [
{"TemperatureType": {"Value": "Internal"},
"Device": {"DeviceName": {"Value": "Inverter_01"},
"DeviceType": {"Value": "Inverter"},
"DeviceUUID": {"Value": "abc123"}},
"TemperatureArray": [{
"Value": 38.1,
"Unit": "C",
"StartTime": "2025-08-13T10:00:00Z",
"EndTime": "2025-08-13T10:04:59Z"},
{"Value": 38.3,
"Unit": "C",
"StartTime": "2025-08-13T10:05:00Z",
"EndTime": "2025-08-13T10:09:59Z"}]}
]}}
How ElectricalTS Removes Ambiguity
Raw inverter CSV data only shows numbers and headings: kw, vdc, idc, temp — with no explanation of where the data came from, what device produced it, or how it should be interpreted.
ElectricalTS wraps the same values with rich contextual metadata so that every reading is traceable and meaningful:
Device Identity
Each time series is tied to a specific device with name, type, and UUID.
No confusion about which inverter or sensor produced the values.
Geospatial & Scope Context
ScopeID and ScopeType define whether data belongs to a device, subsystem, or site.
Latitude, longitude, and elevation pinpoint the exact physical location.
Units & Measurement Windows
Every value carries its unit (kW, V, A, °C) and time boundaries (StartTime / EndTime).
Removes guesswork about whether readings are instantaneous or aggregated.
Categorized Arrays
Data is organized into PowerTSArray, VoltageTSArray, CurrentTSArray, TemperatureTSArray.
Each array explicitly states what type of measurement it represents (Active power, Direct voltage, Internal temperature, etc.).
Traceability & Governance
FileFolderURL links to the source dataset for auditing.
Metadata ensures long-term reproducibility and validation.
The Clarity Gain
With ElectricalTS, the same numbers now tell a complete story:
45 kW active power, produced by Inverter_01 at 10:00–10:04:59, located at 34.0522°N, –108.5203°W, elevation 100 ft, measured in kW, linked to file reference for validation.
Instead of a flat row of numbers, ElectricalTS creates a self-describing, context-rich dataset that can be trusted, reused, and integrated across platforms — eliminating ambiguity at every step.
Practical Benefits
Reduced Data Prep — Ingest from multiple devices without rewriting ETL logic from scratch.
Better Data Governance — Context travels with the values, making audits easier.
Future-Proofing — Scope and device metadata support long-term correlation and AI applications.
Interoperability — Fits naturally into existing systems while enabling cross-platform integration.
The Bigger Vision: A Reusable Design Pattern
ElectricalTS is just the first example of a reusable time series design pattern that will extend into other domains. The same structural principles, metadata approach, and flexibility will apply to upcoming datasets — bringing the industry closer to consistent, interoperable, and analytics-ready time series frameworks.
Think of it as the first building block in a much larger foundation for clean energy data exchange — one that will accelerate AI adoption, improve digital twin modeling, and enable context-aware analytics.
What’s Next
We’ve published the full ElectricalTS schema in OBEditor. Explore it, map it to your own datasets, and see how it can streamline your workflows.
More patterns are on the way — each designed to unify messy, multi-source data into something usable, scalable, and future-ready.
💡 Your turn: Kick the tires. Imagine how your future datasets could follow the same pattern. And get ready — the next evolution in standardized time series data is just getting started.
Comments