Asoba Ona Documentation

ODS-E & Architecture

ODS-E (Open Data Schema for Energy) is an open specification for interoperable energy asset data across generation, consumption, and net metering. It ships with versioned JSON schemas, vendor transforms, a Python reference runtime with CLI, and integration guides for inverters, industrial protocols, SCADA, and utility data portals.

The Problem

Every OEM — Huawei, Enphase, SolarEdge, Fronius, SMA, Vestas, and dozens more — exposes telemetry through proprietary APIs, CSV exports, and SCADA protocols with different field names, units, and error taxonomies. Integrating each new vendor typically costs 120–160 hours of engineering effort: mapping columns, normalizing timestamps, classifying error states, and writing bespoke validation. With 20+ common OEMs across solar PV, wind, BESS, and utility metering, the integration tax compounds rapidly.

ODS-E eliminates this by defining a single canonical schema. OEM-specific data is transformed into ODS-E records via declarative YAML specs, validated against versioned schemas, and then consumed by any downstream system — analytics platforms, ML pipelines, billing engines, or market settlement workflows — without re-integration.

Components

JSON Schemas

Versioned JSON Schema (Draft 2020-12) definitions for energy data structures:

Error Taxonomy

Seven standardized error categories that replace OEM-specific error codes:

Category Description
normal Equipment operating normally
warning Degraded but functional (e.g., grid over-voltage, temperature limited)
critical Severe condition requiring attention (e.g., DC arc fault, emergency stop)
fault Equipment fault (e.g., residual current fault, grid lost)
offline No data received from the asset
standby Asset idle (e.g., nighttime, initializing)
unknown Unclassified state

Transform Specifications

Declarative YAML files that map OEM-specific data to ODS-E records. Each spec defines input column aliases, output field mappings, error code mappings, and validation bounds. 20 vendor transforms are included — see Transform Specifications.

Python Reference Runtime + CLI

A Python package (odse) providing:

Quick Start

Install

pip install -e src/python[parquet]

Transform vendor data

odse transform --source generic_csv \
  --input examples/fixtures/quickstart_scada.csv \
  --column-map timestamp=Timestamp,kWh=ActiveEnergy,asset_id=Asset \
  --output examples/output/quickstart.cleaned.json

Validate

odse validate --input examples/output/quickstart.cleaned.json --level schema

Expected output:

3/3 valid, 0 errors

In Python

from pathlib import Path
from odse import transform, validate_batch, to_parquet

records = transform(
    Path("examples/fixtures/quickstart_scada.csv"),
    source="generic_csv",
    column_map={
        "timestamp": "Timestamp",
        "kWh": "ActiveEnergy",
        "asset_id": "Asset",
    },
)

result = validate_batch(records, level="schema")
print(result.summary)
# 3/3 valid, 0 errors

to_parquet(records, "output/", partition_by=["asset_id", "year", "month", "day"])

What’s Next

Repository

Source code and schemas: github.com/AsobaCloud/odse

Licensing:

Maintained by Asoba Corporation.