MeterValues
Core CP->CSMS
Sent periodically during charging to report meter readings and other measurands.
Quick Reference
Required Fields
connectorId integer Connector ID where meter values are measured
meterValue array Array of meter value samples
Optional Fields
transactionId integer Transaction ID if values are transaction-related
Example Payload
{
"connectorId": 1,
"transactionId": 12345,
"meterValue": [
{
"timestamp": "2024-01-15T11:00:00Z",
"sampledValue": [
{
"value": "5000",
"context": "Sample.Periodic",
"measurand": "Energy.Active.Import.Register",
"unit": "Wh"
}
]
}
]
} Example Full Frame
[
2,
"msg-001",
"MeterValues",
{
"connectorId": 1,
"transactionId": 12345,
"meterValue": [
{
"timestamp": "2024-01-15T11:00:00Z",
"sampledValue": [
{
"value": "5000",
"context": "Sample.Periodic",
"measurand": "Energy.Active.Import.Register",
"unit": "Wh"
}
]
}
]
}
]
Format: [MessageType, MessageId, Action, Payload]
Overview
The MeterValues message sends periodic meter readings to the Central System during charging. This enables real-time monitoring, billing verification, and load management.
When to Send
- Periodically during transaction (interval configured via MeterValueSampleInterval)
- On clock-aligned intervals (if ClockAlignedDataInterval is set)
- When explicitly triggered by TriggerMessage
- At transaction start/stop (as configured in MeterValuesAlignedData)
Common Measurands
Energy.Active.Import.Register: Total energy (Wh) - most commonPower.Active.Import: Instantaneous power (W)Current.Import: Current (A)Voltage: Voltage (V)Temperature: Temperature (°C)SoC: State of Charge (%)
Sample Contexts
Sample.Periodic: Periodic sample during transactionSample.Clock: Clock-aligned sampleTransaction.Begin: Sample at transaction startTransaction.End: Sample at transaction endTrigger: Sample requested by TriggerMessage
Usage Notes
- Each meterValue element represents a sample at a specific timestamp
- Each sample can contain multiple sampledValue elements (different measurands)
- Values are transmitted as strings (e.g., “5000” not 5000)
- transactionId can be omitted for non-transaction-related samples
Best Practices
- Consistent intervals - Use configured MeterValueSampleInterval (typically 60-300s)
- Essential measurands - Always include Energy.Active.Import.Register for billing
- Multiple readings - Combine energy, power, current, and voltage in same sample
- Accurate timestamps - Use actual measurement time, not send time
- Data efficiency - Balance detail vs. bandwidth (don’t send every second)
Testing Tips
- Test with single measurand (Energy.Active.Import.Register)
- Test with multiple measurands in one sample
- Test with and without transactionId
- Test different contexts (Periodic, Clock, Transaction.Begin)
- Verify value format as string, not number
Common Errors
PropertyConstraintViolation
Cause: Invalid measurand or unit combination
Solution: Use standard OCPP measurand and unit values
TypeConstraintViolation
Cause: meterValue array is empty or malformed
Solution: Include at least one meter value sample