Normative Architecture and Information Model for Vendor-Independent Energy Telemetry Platforms
Document: 1 of 5
Type: Normative Standard
Version: 1.1
Status: Architecture Review Candidate
Release: July 2026
Compatibility: Reference Implementation 1.x
The Open Canonical Energy Telemetry Standard (OCETS) defines a vendor-independent information model for acquiring, validating, storing, and consuming telemetry from energy systems.
OCETS standardizes the semantic shape of observations and events: identities, metrics, units, labels, timestamps, quality, provenance, topology, registry requirements, security, and lifecycle behavior. It does not standardize a particular software stack or vendor integration method.
This document specifies:
This document does not specify implementation details such as collector configuration, transport topics, storage deployment, dashboard construction, vendor register maps, polling templates, or transformation scripts. Those topics belong to the Reference Implementation Guide.
OCETS v1.1 is telemetry-only. A controls relationship
describes topology; it does not authorize or define a write
operation.
OCETS intentionally does not standardize:
Externally generated forecasts MAY be represented as observations
with origin=forecast, but SHALL include both
issued_at and valid_at. Their generation,
model lifecycle, confidence model, and revision policy remain outside
OCETS v1.1.
Organization / Portfolio / Plant Registry
|
v
Configuration Generator
|
Field Device -> Edge or Central Collector -> Transport -> Storage -> API -> Grafana
| | |
+------ Observations --------+-----------+
+------ Events / Health / Quality / Provenance
Every component MAY be replaced independently if it preserves the canonical contracts defined by OCETS.
The key words SHALL, SHALL NOT,
SHOULD, SHOULD NOT, and MAY are
to be interpreted as normative requirement levels.
SHALL indicates a mandatory requirement.SHALL NOT indicates a mandatory prohibition.SHOULD indicates a recommended requirement that may be
waived only with documented rationale.MAY indicates an optional capability.| Term | Definition |
|---|---|
| Plant | A physical or operational site that produces, consumes, stores, converts, or measures energy. |
| Asset | A physical energy-system component within one Plant. |
| Device | A logical telemetry-producing or telemetry-relevant function within one Plant. |
| Measurement Point | A semantic location where a Metric applies. |
| Metric | A canonical physical or operational quantity identified by metric name only. |
| Capability | A declared ability of a Device or Measurement Point to provide one or more canonical Metrics. |
| Registry | The authoritative schema-enforced declaration of Plants, Assets, Devices, Measurement Points, Capabilities, and relationships. |
| Label | A bounded metadata field attached to telemetry to identify context without changing the Metric name. |
| Organization | A tenant and governance boundary that owns Plants and Portfolios. |
| Portfolio | A named grouping of Plants within one Organization. |
| Observation | A metric value with identity, acquisition time, quality, and provenance. |
| Event | A point-in-time or interval occurrence with lifecycle, severity, source, and correlation. |
| Relationship | A stable, typed connection between registered objects. |
| Topology | A versioned graph of Relationships for one Plant and one topology kind. |
The platform SHALL standardize physical and operational concepts rather than protocol objects, register names, addresses, hostnames, or vendor terminology.
Vendor-specific telemetry SHALL be mapped into canonical concepts before it is stored as OCETS telemetry.
Telemetry identity SHALL be independent of network addresses, collector placement, gateway topology, source file layout, and deployment topology.
Logical identities SHALL remain stable throughout the lifecycle of the platform. Replacing a collector, gateway, protocol adapter, or physical communication path SHALL NOT require a semantic identity change.
Every physical quantity SHALL have one canonical metric name, one canonical engineering unit, and one semantic definition.
The canonical metric representation is the metric name itself, such
as active_power, voltage, or
state_of_charge. OCETS telemetry SHALL NOT require or add a
redundant metric label to restate the metric name.
Multiple canonical representations of the same physical quantity SHALL NOT coexist in the canonical model. Domain-specific metric names SHALL be used only where the domain concept changes the meaning of the quantity.
The following concepts SHALL remain independent:
No concept SHALL implicitly define another. For example,
active_power defines what is measured; the Measurement
Point and labels define where and in what role it is measured.
The platform SHALL be described by an authoritative Plant Registry.
Operational configuration SHOULD be generated from the registry. Manual duplication of plant, asset, device, measurement point, and label definitions SHOULD be avoided.
The canonical model SHALL NOT depend on where telemetry acquisition takes place.
Central acquisition, edge acquisition, and hybrid acquisition are conformant if they emit identical canonical telemetry for identical measurements.
Operational health SHALL be represented explicitly.
Device health, communication health, collector health, timestamp synchronization, freshness, and validation health SHALL NOT be inferred only from process values.
The canonical information model defines the semantic structure of telemetry:
Plant
-> Asset
-> Device
-> Measurement Point
-> Metric
The ownership and grouping model is:
Organization
-> Portfolio
-> Plant
The telemetry model produces two distinct records: Observations and Events. Relationships form versioned physical, electrical, and telemetry Topologies around registered objects.
A Plant is a physical or operational site that produces, consumes, stores, converts, or measures energy.
A Plant SHALL have a globally unique stable identifier.
An Asset is a physical energy-system component, such as an inverter, meter, battery system, transformer, gateway enclosure, or switchgear cabinet.
An Asset SHALL belong to exactly one Plant. An Asset identifier SHALL be unique within its Plant.
A Device is a logical telemetry-producing or telemetry-relevant function.
A physical Asset MAY expose more than one Device. A Device SHALL belong to exactly one Plant and SHALL have an identifier unique within that Plant.
A Measurement Point is a semantic location where a Metric applies.
Examples include:
A Measurement Point SHALL belong to exactly one Plant and SHALL have an identifier unique within that Plant.
A Metric is a canonical physical or operational quantity.
Examples include active_power,
energy_import, voltage, current,
frequency, state_of_charge,
device_available, communication_status, and
timestamp_skew.
Raw vendor register names, dashboard aliases, protocol field names, and implementation-specific source names SHALL NOT be treated as canonical metric names.
The canonical identity of a telemetry series is the combination of:
plant;asset, where applicable;device, where applicable;measurement_point, where applicable;phase, string, mppt, or
direction.The plant label value SHALL be globally unique.
asset, device, and
measurement_point label values SHALL be unique within a
Plant.
Labels SHALL use controlled values where this standard or the Plant Registry Specification defines a vocabulary. Labels SHALL NOT encode multiple concepts in one field when separate fields are defined.
Implementation labels MAY exist outside the canonical model, but they SHALL NOT be required to interpret OCETS telemetry semantics.
OCETS v1.1 defines the following controlled vocabularies. The Plant Registry Specification may add stricter schema placement rules for these values.
Allowed role values:
| Value | Meaning |
|---|---|
grid |
Grid interconnection or utility-facing measurement. |
load |
Consumer or site load measurement. |
pv |
Photovoltaic generation measurement. |
battery |
Electrical storage measurement. |
inverter |
Power conversion device or measurement. |
meter |
Metering device or measurement. |
transformer |
Transformer device or measurement. |
busbar |
Electrical busbar or bus section. |
collector |
Telemetry acquisition or collection component. |
environment |
Environmental sensing component. |
Allowed energy_form values:
| Value | Meaning |
|---|---|
electricity_ac |
Alternating-current electricity. |
electricity_dc |
Direct-current electricity. |
thermal |
Thermal energy or temperature-related telemetry. |
environmental |
Environmental conditions. |
operational |
Platform or equipment health telemetry. |
Allowed status values:
| Value | Meaning |
|---|---|
planned |
Defined but not yet commissioned. |
active |
In normal service. |
maintenance |
Temporarily under maintenance. |
disabled |
Intentionally disabled. |
retired |
No longer active but retained for history. |
Allowed phase values are l1,
l2, l3, n, and
total.
Allowed direction values are import,
export, charge, discharge,
generation, consumption, and
bidirectional.
Allowed metric lifecycle values are active,
proposed, deprecated, and
removed.
OCETS v1.1 uses a role-based sign convention for instantaneous power metrics.
For active_power, reactive_power, and
apparent_power:
| Role or Measurement Context | Positive Value Means | Negative Value Means |
|---|---|---|
pv generation or export |
Generation/export from the PV source | Reverse flow into the PV source, if measured |
load or consumer |
Consumption by the load | Reverse export from the load context, if measured |
battery |
Charging into storage | Discharge/export from storage |
grid |
Import from grid into the plant | Export from plant to grid |
inverter |
Direction defined by the associated Measurement Point role | Opposite of the associated Measurement Point role |
Implementations SHALL apply this convention before canonical storage.
Where the physical source exposes only unsigned values, the Measurement
Point role and direction label SHALL make the
interpretation explicit.
Energy counters SHOULD use direction-specific metrics such as
energy_import, energy_export,
energy_charged, and energy_discharged rather
than signed accumulated counters.
Canonical metrics SHALL be defined in the Canonical Metric Catalogue.
Each canonical metric definition SHALL include:
Generic electrical metrics SHALL be preferred wherever possible. For
example, battery power is represented as active_power at a
battery Measurement Point, using the role-based sign convention.
Domain-specific metric names are reserved for true domain concepts such
as state_of_charge.
Each physical quantity SHALL use one canonical storage unit.
Unit conversion SHALL occur before canonical storage unless the source value is already in the canonical unit.
Reference canonical units include:
| Quantity | Canonical Unit |
|---|---|
| Active power | kW |
| Reactive power | kvar |
| Apparent power | kVA |
| Energy | kWh |
| Voltage | V |
| Current | A |
| Frequency | Hz |
| Temperature | degC |
| Ratio | percent |
Dashboards and downstream systems SHOULD NOT apply corrective unit conversion to canonical telemetry.
The Plant Registry SHALL be the authoritative source for:
The registry SHALL be schema-enforced. Registry data SHALL be validatable before generated configuration or documentation is produced.
Collectors, dashboards, alert rules, deployment artifacts, and implementation configuration SHOULD derive from the registry.
OCETS supports three acquisition topologies:
| Topology | Description |
|---|---|
| Central acquisition | Central systems acquire telemetry from plants. |
| Edge acquisition | Plant-local systems acquire and forward telemetry. |
| Hybrid acquisition | Edge and central systems share acquisition responsibilities. |
All acquisition topologies SHALL emit canonical telemetry with identical identity, units, metrics, labels, and timestamp semantics for the same physical measurement.
Telemetry timestamps SHALL represent acquisition time.
Processing time, transport time, receive time, storage write time, and dashboard render time SHALL NOT replace acquisition time.
All stored timestamps SHALL be represented in UTC.
Acquisition systems SHALL synchronize against a centrally managed platform time service or an equivalent redundant time source.
Telemetry health SHALL be modeled explicitly.
Health telemetry SHOULD include:
Missing values SHALL NOT be silently converted to zero.
Stale values SHALL NOT be presented as fresh measurements.
The Edge Collector Observability Profile is an optional OCETS
conformance profile for plant-local systems that acquire, buffer, or
forward telemetry. Implementations that claim this profile SHALL
represent the edge collector as a stable Device with
role=collector and
energy_form=operational.
The profile SHALL expose:
device_available for independently observed collector
availability;collector_status, pipeline_status, and
upstream communication_status;data_freshness as the age of the latest successful
acquisition;time_sync_status and timestamp_skew;buffer_utilization and
buffer_oldest_age;storage_utilization and
storage_status;transport_error_count,
collector_restart_count, mapping_error_count,
and validation_error_count.An implementation MAY additionally expose
cpu_utilization, memory_utilization, and
host_temperature. Where suitable power-monitoring hardware
exists, it MAY expose external_power_available,
backup_power_status, and
backup_power_runtime.
Unsupported optional metrics SHALL be absent, not reported as zero or
a healthy state. A required metric that cannot currently be determined
SHALL use its defined unknown state where the metric type
permits it. Hostnames, IP addresses, operating-system interface names,
mount paths, and hardware serial numbers SHALL NOT form canonical
identity.
Edge Collector Observability conformance SHALL NOT be required from central-only deployments or from implementations that do not claim the profile.
Telemetry SHALL progress through the following lifecycle:
Acquisition -> Validation -> Canonical Mapping -> Storage
-> Downsampling -> Long-Term Retention -> Consumption
Each lifecycle stage SHALL preserve semantic correctness.
Downsampling SHALL respect metric semantics. The aggregation behavior for each metric SHALL be defined in the Canonical Metric Catalogue.
Missing values SHALL NOT be converted to zero during downsampling.
Retention durations are reference policy, not normative OCETS v1.1 requirements. A conforming implementation MAY choose different retention durations if it preserves the normative downsampling semantics of each metric.
An Observation is the logical, implementation-independent representation of one telemetry value. Every Observation SHALL be resolvable to:
acquired_at in UTC;The logical model MAY be stored as one record, multiple fields, or coordinated series. A storage implementation SHALL preserve or reconstruct every required property. Quality, provenance, catalogue version, calculation identifiers, and source references SHALL NOT be encoded as unbounded TSDB labels.
Forecast-origin Observations SHALL additionally contain
issued_at and valid_at. Derived or calculated
Observations SHOULD identify the calculation definition and source
Observations or source series.
Every Observation SHALL carry or inherit exactly one quality value:
| Value | Meaning |
|---|---|
GOOD |
Valid according to all applicable acquisition and validation rules. |
BAD |
Known to be invalid and unsuitable for normal consumption. |
UNCERTAIN |
Available, but validity cannot be established completely. |
ESTIMATED |
Produced by an estimation method instead of direct acquisition. |
SUBSTITUTED |
Replaced by an approved alternate value. |
MISSING |
An explicit gap marker; it SHALL NOT contain a fabricated numeric zero. |
SIMULATED |
Produced by a simulation rather than the physical process. |
Downsampling SHALL report GOOD only when every
contributing Observation is GOOD. Otherwise the
conservative precedence from worst to best is BAD,
MISSING, UNCERTAIN, SUBSTITUTED,
ESTIMATED, SIMULATED, GOOD.
Implementations MAY retain additional contributing-quality detail.
Every Observation and Event SHALL declare one origin:
| Origin | Meaning |
|---|---|
device |
Directly acquired from a physical or logical Device. |
calculated |
Deterministically calculated from other data. |
forecast |
Produced externally as a prediction. |
estimated |
Inferred because a direct value was unavailable or incomplete. |
manual |
Supplied or corrected by an authenticated human workflow. |
simulated |
Produced by a simulation or test environment. |
Provenance SHALL identify the originating Device, calculation, model, or authenticated actor as applicable. Manual changes and substitutions SHALL be auditable. Provenance describes origin; quality describes confidence or usability, and neither SHALL replace the other.
Events are not Metrics and SHALL NOT be modeled as ordinary time-series samples. A canonical Event SHALL include:
event_id;event_type and severity;begin_at and optional end_at, in UTC;open, acknowledged,
closed, or cancelled;correlation_id and
causation_id.Severity values are info, warning,
minor, major, and critical.
Initial event types are alarm, warning,
fault, maintenance, restart,
firmware_update, and grid_failure.
Acknowledgement SHALL record actor, timestamp, and optional comment
without overwriting event history. Re-delivery or update of an
event_id SHALL be idempotent. end_at SHALL NOT
precede begin_at. Event payloads MAY contain bounded
type-specific attributes but SHALL NOT contain secrets.
A Relationship SHALL have a stable ID, Plant, Topology, type, typed
from and to endpoints, lifecycle status, and
validity interval. Allowed relationship types are:
contains;feeds;connected_to;measures;controls;powered_by.contains, feeds, measures,
controls, and powered_by are directed.
connected_to is symmetric and SHALL NOT be duplicated in
reverse order. A controls Relationship records semantic
responsibility only and SHALL NOT imply command authorization or OCETS
control conformance.
A Topology is an immutable versioned graph for exactly one Plant. Its
kind SHALL be electrical, physical, or
telemetry. Grid connections, transformers, busbars,
inverters, batteries, loads, collectors, Devices, and Measurement Points
SHALL be represented using registered objects rather than topology-only
identifiers.
contains Relationships SHALL be acyclic. Electrical
networks MAY be meshed; cycles in feeds and
connected_to are permitted. Topology versions SHALL have
non-overlapping validity intervals when they claim to be the active
version of the same topology.
An Organization is the tenant, ownership, authorization, and governance boundary. An Organization SHALL have a globally unique stable ID. A Portfolio SHALL belong to exactly one Organization. A Plant SHALL belong to exactly one Organization and MAY belong to zero or more Portfolios of that Organization.
Canonical Plant identity remains globally unique and SHALL NOT depend on an Organization or Portfolio name. Relationships and Topologies SHALL NOT cross Organization boundaries. Cross-organization analysis MAY occur in an authorized consumer but SHALL NOT create cross-tenant registry ownership.
Organization and Plant metadata MAY declare a data residency region. Such metadata informs deployment policy but does not replace applicable law or operator policy.
A conforming Registry API SHALL provide authenticated, read-only
HTTP/JSON access under /api/ocets/registry/v1 to:
Collections SHALL support opaque cursor pagination, a bounded
limit, and filters for tenant, lifecycle status, and
updated_since. Every response SHALL identify one immutable
Registry revision. Implementations SHALL support ETag and
If-None-Match; pagination across one traversal SHALL remain
snapshot-consistent.
Errors SHALL use a JSON object containing stable code,
human-readable message, and request_id.
Resource absence SHALL be distinguishable from lack of authorization
without leaking cross-tenant existence. Mutation, approval, and
deployment APIs are outside this profile.
OCETS implementations SHALL:
Network location alone SHALL NOT establish trust. Service and collector permissions SHALL follow least privilege. Audit records SHOULD be tamper-evident and retained under governed policy. Security incidents and credential compromise SHALL have documented revocation and recovery procedures.
OCETS uses semantic versioning. Governance roles are Maintainer, Architecture Review Board, and Extension Owner. Normative changes SHALL have an identified owner, review record, compatibility assessment, and, when architectural, an ADR.
Version 1.x releases MAY add canonical metrics, labels, capabilities, optional registry fields, event types, and non-breaking clarifications. Version 2.0 is required for changed identity semantics, changed canonical units, removed required fields, incompatible timestamp rules, or incompatible metric meanings.
Metric definitions SHALL record definition_version,
introduced_in, deprecated_in,
removed_in, and replaced_by where applicable.
A released definition is immutable. Deprecation SHALL provide a
replacement or rationale and remain supported for at least one
subsequent minor release before removal.
Local extensions SHALL use x-<organization>-
namespaces and SHALL NOT redefine canonical names or controlled values.
Released catalogue and conformance-profile versions SHALL remain
retrievable. Security reports SHALL have a documented confidential
disclosure and remediation process.
Core OCETS v1.1 conformance requires an implementation to:
SHALL requirements and preserve
implementation separation.Event, Topology, Multi-Tenancy, Registry API, and Edge Collector Observability are claimable conformance profiles. An implementation SHALL satisfy every mandatory rule of each profile it claims. Representing only one Organization does not waive tenant isolation requirements if the Multi-Tenancy profile is claimed.
Conformance does not require a specific software stack, control capability, or preservation of legacy and vendor-specific names.