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 common
  • Power.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 transaction
  • Sample.Clock: Clock-aligned sample
  • Transaction.Begin: Sample at transaction start
  • Transaction.End: Sample at transaction end
  • Trigger: 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

  1. Consistent intervals - Use configured MeterValueSampleInterval (typically 60-300s)
  2. Essential measurands - Always include Energy.Active.Import.Register for billing
  3. Multiple readings - Combine energy, power, current, and voltage in same sample
  4. Accurate timestamps - Use actual measurement time, not send time
  5. 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