MeterValues

Meter readings for a connector outside a transaction. In-transaction readings ride in TransactionEvent instead.

Version
OCPP 2.0.1
Direction
Charge Point → CSMS
Functional block
Meter Values

MeterValues also exists in OCPP 1.6, with a different payload. See the OCPP 1.6 version.

MeterValues survives in 2.0.1 but its role shrank considerably. Readings that belong to a running session now travel inside TransactionEvent; this message is for readings that do not — an idle EVSE, or a station-level meter.

The sample structure also changed: value is a decimal rather than a string, and unit moves into a nested unitOfMeasure object with an optional multiplier.

Request

FieldTypeRequiredDescription
evseIdintegerRequiredThe EVSE being measured. 0 refers to the station as a whole.
meterValueMeterValue[]RequiredOne or more timestamped sample groups.
json
[2, "19223201", "MeterValues", {
  "evseId": 1,
  "meterValue": [{
    "timestamp": "2026-09-09T10:32:00Z",
    "sampledValue": [{
      "value": 1206300,
      "measurand": "Energy.Active.Import.Register",
      "context": "Sample.Periodic",
      "unitOfMeasure": { "unit": "Wh" }
    }]
  }]
}]

Response

No fields — the payload is an empty object {}.

json
[3, "19223201", {}]

Implementation notes

`value` is a number now, not a string. This is the opposite of 1.6, where it was defined as text. Code ported directly from a 1.6 implementation will be parsing a type that is no longer there.

`unit` moved. It is unitOfMeasure.unit in 2.0.1, and unitOfMeasure.multiplier applies a power of ten. The default is still Wh.

If you are looking for in-session meter data, it is in TransactionEvent's meterValue field, not here.