Minimal OpenADR 3.1.0-aligned sidecar declaring what telemetry a seller commits to providing under a contract.
Part of the DEG Schema · BecknReportDescriptors
| File | Description |
|---|---|
| attributes.yaml | OpenAPI 3.1.1 components.schemas.BecknReportDescriptors (array) and BecknReportPayloadDescriptor (allOf OpenADR3 reportPayloadDescriptor + cardinality) |
| context.jsonld | JSON-LD context |
| vocab.jsonld | RDF vocabulary |
A flat array of OpenADR3 reportPayloadDescriptor objects, with one DEG extension — cardinality — to disambiguate signals reported every interval (USAGE, POWER, SOC_END) from signals reported once per event (GPS_LAT/LON).
The descriptors live in the seller’s input on the offer. Pairs with BecknTimeSeries, which carries the values themselves.
offerAttributes.inputs[seller].inputs.reportDescriptors: BecknReportDescriptors | null
null means the contract requires no telemetry. When non-null, the seller commits to delivering a BecknTimeSeries whose payloadDescriptors cover every entry in this list.
| Field | OpenADR3? | Required | Description |
|---|---|---|---|
objectType |
yes | ✓ | Always "REPORT_PAYLOAD_DESCRIPTOR". |
payloadType |
yes | ✓ | Open string — see canonical vocabulary below. |
readingType |
yes | — | E.g. DIRECT_READ. |
units |
yes | — | E.g. KW, PERCENT, DEGREES. |
accuracy |
yes | — | Numeric — quantification of accuracy. |
confidence |
yes | — | Integer 0–100. |
cardinality |
DEG | — | PER_INTERVAL (default) or PER_EVENT. |
payloadType vocabulary (demand-flex EV vendor telemetry)| payloadType | units | readingType | cardinality | what it means |
|---|---|---|---|---|
BASELINE |
KW |
DIRECT_READ |
PER_INTERVAL |
Reference (vendor-rated) charge power per interval |
USAGE |
KW |
DIRECT_READ |
PER_INTERVAL |
Measured charge power per interval during the event |
POWER |
KW |
DIRECT_READ |
PER_INTERVAL |
Signed instantaneous power (charge=+, discharge=−) |
SOC_END |
PERCENT |
DIRECT_READ |
PER_INTERVAL |
State of charge at end of each interval |
GPS_LAT |
DEGREES |
DIRECT_READ |
PER_EVENT |
Vehicle latitude at start of event |
GPS_LON |
DEGREES |
DIRECT_READ |
PER_EVENT |
Vehicle longitude at start of event |
This list is open — extend it for other devices (heat pumps, batteries, etc.) by adding entries.
PER_EVENT values appear in the time-seriesPer-interval values (BASELINE, USAGE, POWER, SOC_END) appear in every intervals[*].payloads[*] row. Per-event values (GPS_LAT, GPS_LON) appear only on interval 0. Consumers iterate intervals normally; per-event rows are simply absent on subsequent intervals. This is enforced by the network rego.
[
{ "objectType": "REPORT_PAYLOAD_DESCRIPTOR", "payloadType": "BASELINE", "readingType": "DIRECT_READ", "units": "KW", "cardinality": "PER_INTERVAL" },
{ "objectType": "REPORT_PAYLOAD_DESCRIPTOR", "payloadType": "USAGE", "readingType": "DIRECT_READ", "units": "KW", "cardinality": "PER_INTERVAL" },
{ "objectType": "REPORT_PAYLOAD_DESCRIPTOR", "payloadType": "POWER", "readingType": "DIRECT_READ", "units": "KW", "cardinality": "PER_INTERVAL" },
{ "objectType": "REPORT_PAYLOAD_DESCRIPTOR", "payloadType": "SOC_END", "readingType": "DIRECT_READ", "units": "PERCENT", "cardinality": "PER_INTERVAL" },
{ "objectType": "REPORT_PAYLOAD_DESCRIPTOR", "payloadType": "GPS_LAT", "readingType": "DIRECT_READ", "units": "DEGREES", "cardinality": "PER_EVENT" },
{ "objectType": "REPORT_PAYLOAD_DESCRIPTOR", "payloadType": "GPS_LON", "readingType": "DIRECT_READ", "units": "DEGREES", "cardinality": "PER_EVENT" }
]
null when no telemetry is neededFor a contract that doesn’t require vendor reports (e.g. a tariff-only opt-in), the seller’s input is:
{ "role": "seller", "participantId": "…", "inputs": { "reportDescriptors": null, … } }
This is the explicit “no report” signal — distinct from “field omitted, ask later”.