Charging Session Lifecycle
A charging session progresses through distinct phases from vehicle connection to completion.
Session States
Typical Flow
1. Authorization
User presents RFID or app triggers remote start.
The CSMS checks if the idTag is valid (not blocked, not expired, sufficient balance, etc.).
2. Transaction Start
Once authorized, the charger reports the transaction beginning.
Key data in StartTransaction:
connectorId- which plug on the chargeridTag- who is chargingmeterStart- Wh reading at starttimestamp- when it startedreservationId- if from a reservation
The CSMS assigns a transactionId used for all subsequent messages.
3. Charging
During charging, the charger sends meter readings and status updates.
MeterValues can include:
- Energy delivered (Wh)
- Power (W)
- Current (A)
- Voltage (V)
- State of Charge (%)
- Temperature
4. Transaction Stop
Charging ends when the user stops it, the vehicle is full, or the CSMS sends a remote stop.
Stop reasons:
| Reason | Description |
|---|---|
Local | User stopped via RFID or button |
Remote | CSMS sent RemoteStopTransaction |
EVDisconnected | Cable unplugged |
PowerLoss | Charger lost power |
Reboot | Charger rebooting |
DeAuthorized | Authorization revoked mid-session |
Remote Start/Stop
The CSMS can initiate sessions without user presence at the charger.
Suspended States
Charging can pause without ending the transaction:
| State | Meaning |
|---|---|
SuspendedEV | Vehicle is not accepting power (battery management, full, etc.) |
SuspendedEVSE | Charger is limiting power (smart charging, thermal limits) |
The transaction remains open. When conditions allow, charging resumes.
Transaction Data Integrity
- Transactions are uniquely identified by
transactionId - If connection is lost, the charger queues messages
- When reconnected, queued messages are delivered in order
- The CSMS should handle duplicate messages idempotently
Calculating Session Metrics
Energy Delivered = meterStop - meterStart (Wh)
Duration = stopTimestamp - startTimestamp
Average Power = Energy / Duration
For more detailed metering, use the transactionData array in StopTransaction.req which contains sampled values throughout the session.