MeterValues
Sends periodic or clock-aligned meter readings, either for a running transaction or for an idle connector.
- Version
- OCPP 1.6
- Direction
- Charge Point → CSMS
- Feature profile
- Core
MeterValues also exists in OCPP 2.0.1, with a different payload. See the OCPP 2.0.1 version.
MeterValues carries the actual measurements: energy, power, current, voltage, temperature, state of charge. Each sample is a timestamp plus a list of sampledValue entries, and each of those is a reading tagged with what it measures and in which unit.
The structure is deeply nested and the defaults are where the bugs live — every attribute of sampledValue is optional, and each has a default that is easy to assume wrongly.
Request
| Field | Type | Required | Description |
|---|---|---|---|
connectorId | integer | Required | The connector being measured. 0 refers to the charge point as a whole. |
meterValue | MeterValue[] | Required | One or more timestamped sample groups. |
transactionId | integer | Optional | Present when the readings belong to a running transaction. |
[2, "19223201", "MeterValues", {
"connectorId": 1,
"transactionId": 8814,
"meterValue": [{
"timestamp": "2026-09-09T10:32:00.000Z",
"sampledValue": [
{ "value": "1206300", "measurand": "Energy.Active.Import.Register", "unit": "Wh", "context": "Sample.Periodic" },
{ "value": "7360", "measurand": "Power.Active.Import", "unit": "W" },
{ "value": "32.0", "measurand": "Current.Import", "phase": "L1", "unit": "A" }
]
}]
}]Response
No fields — the payload is an empty object {}.
[3, "19223201", {}]Values
sampledValue defaults
| Value | Meaning |
|---|---|
measurand | Defaults to Energy.Active.Import.Register when omitted. |
context | Defaults to Sample.Periodic. |
format | Defaults to Raw. The alternative is SignedData. |
location | Defaults to Outlet. |
unit | Defaults to Wh. Not kWh — a reading in kWh with the unit omitted is out by a factor of 1000. |
Implementation notes
`value` is a string, always. It is defined as text so that signed meter data and high-precision decimals survive transport. Parsing it as a number is fine; assuming the JSON type is a number is not.
The default unit is Wh. The most expensive MeterValues bug is a charger reporting kWh without setting unit, which a conformant CSMS reads as Wh.
Which measurands a charger sends is configuration, not spec: MeterValuesSampledData and MeterValuesAlignedData control it, and MeterValueSampleInterval controls the rate.
context distinguishes Transaction.Begin, Sample.Periodic, Sample.Clock and Transaction.End. Billing logic that ignores it will double-count the boundary samples.