The message
// Charge point -> CSMS
[2, "19223202", "StatusNotification", {
"connectorId": 1,
"errorCode": "NoError",
"status": "Charging",
"timestamp": "2026-08-11T09:12:04Z",
"info": "Session active",
"vendorId": "ExampleVendor",
"vendorErrorCode": ""
}]
// CSMS -> charge point
[3, "19223202", {}]Note the empty response. The CSMS acknowledges but cannot reject — this is the charger reporting reality, not requesting permission.
connectorId: 0 means the charge point itself, not a connector. A status on connector 0 describes the whole unit — typically Unavailable or Faulted for a cabinet-level problem. Treating it as a socket creates a phantom connector in your data model, and it is one of the most common integration bugs in OCPP.The nine states
| Status | Means | Driver-facing |
|---|---|---|
Available | Free and operational | Available |
Preparing | Cable plugged or authorised, not yet charging | Starting |
Charging | Energy flowing | Charging |
SuspendedEV | Vehicle paused it — usually a full battery | Charge complete |
SuspendedEVSE | Charger paused it — load management or grid limit | Paused |
Finishing | Session ended, cable still connected | Please unplug |
Reserved | Held for a specific driver | Reserved |
Unavailable | Administratively disabled | Out of service |
Faulted | Hardware fault | Out of order |
The two suspends are not the same
This distinction is worth getting right because it changes what you tell the driver and what you tell operations.
SuspendedEV— the car stopped drawing. Usually a full battery. Nothing is wrong; the driver should be told charging is complete and asked to move the vehicle.SuspendedEVSE— the charger stopped supplying, typically because of smart charging limits or a site power constraint. The driver is waiting on you, not on their car.
Reporting both as “paused” means a driver whose car is full sits waiting, and a driver being curtailed thinks their car is finished.
Error codes
errorCode is present on every StatusNotification, and NoError is the normal value. When it is not, it is telling you something specific:
| Error code | Indicates | Action |
|---|---|---|
ConnectorLockFailure | The latch did not engage or release | May need UNLOCK_CONNECTOR or a site visit |
GroundFailure | Earth fault detected | Safety — take out of service immediately |
OverCurrentFailure | Current exceeded limits | Investigate; possible cable or vehicle fault |
OverVoltage / UnderVoltage | Supply outside tolerance | Grid or site electrical issue |
HighTemperature | Thermal limit reached | Often derating, not failure — watch for repeats |
PowerMeterFailure | Metering hardware fault | Billing integrity risk — stop transactions |
PowerSwitchFailure | Contactor fault | Take out of service |
ReaderFailure | RFID reader fault | Remote start still works; local auth does not |
EVCommunicationError | Charger cannot talk to the vehicle | Frequently the cable or the car, not the charger |
WeakSignal | Poor connectivity | Expect offline behaviour and queued transactions |
InternalError / OtherError | Unspecified | Check vendorErrorCode |
PowerMeterFailure deserves special handling. A charger with a broken meter can still deliver energy, and it will still send MeterValues — they just will not be true. Any transaction on a connector reporting this is a billing dispute waiting to happen; block it rather than invoice from it.
The state machine
A normal session walks a predictable path, and deviations from it are diagnostic:
Available ──plug in──► Preparing ──authorised──► Charging
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
SuspendedEV SuspendedEVSE Finishing
(battery full) (curtailed by CSMS) (session over)
│ │ │
└─────────────────────┴────────► Finishing ─┴──unplug──► AvailableWhat the deviations tell you:
- Stuck in
Preparing— authorisation is failing, or the vehicle is not handshaking. A cluster of these at one site points at a reader or connectivity problem. - Stuck in
Finishing— the driver has not unplugged. This is the state to trigger idle fees and notifications from. Availablestraight toFaultedwith no session — hardware degrading on its own.- Rapid oscillation between states — usually a flapping connection rather than genuine state changes.
Mapping to OCPI
If you operate a CPO platform, this message is the origin of the EVSE status you publish to roaming partners through OCPI Locations.
| OCPP status | OCPI EVSE status |
|---|---|
Available | AVAILABLE |
Preparing, Charging, SuspendedEV, SuspendedEVSE, Finishing | CHARGING or OCCUPIED |
Reserved | RESERVED |
Unavailable | INOPERATIVE |
Faulted | OUTOFORDER |
| No recent contact | UNKNOWN |
The last row is the one teams forget. A charger that has gone silent has no OCPP status at all, and the honest OCPI answer is UNKNOWN rather than the last value you happened to receive. Publishing a stale AVAILABLE is how a roaming partner sends a driver to a dead charger.
Production lessons
- Handle
connectorId: 0as the charge point. Never create a connector record for it. - Distinguish the two suspends in your UI. They mean opposite things to a driver.
- Block transactions on
PowerMeterFailure. Energy without trustworthy metering is unbillable. - Store status history, not just current state. Fault patterns are only visible over time, and it is the evidence for a warranty claim.
- Alert on
GroundFailureimmediately — it is a safety condition, not an availability one. - Age out status. A status is only as good as the connection that delivered it; combine it with Heartbeat liveness before publishing availability.
- Watch
Preparingdwell time per site. It is one of the earliest indicators of an authorisation or hardware problem.
Frequently asked questions
It refers to the charge point as a whole rather than an individual socket, and is used for cabinet-level conditions such as Unavailable or Faulted. Treating it as a connector creates a phantom connector in your data model and is one of the most common OCPP integration bugs.
SuspendedEV means the vehicle stopped drawing power, usually because the battery is full — nothing is wrong. SuspendedEVSE means the charger stopped supplying, typically due to smart charging limits or a site power constraint. They require opposite messages to the driver.
Available, Preparing, Charging, SuspendedEV, SuspendedEVSE, Finishing, Reserved, Unavailable and Faulted. Only Available means a driver can start a new session.
Available maps to AVAILABLE, the active states map to CHARGING or OCCUPIED, Reserved to RESERVED, Unavailable to INOPERATIVE and Faulted to OUTOFORDER. Critically, a charger that has gone silent should be published as UNKNOWN rather than its last received status.
Block transactions on that connector. The charger can still deliver energy and will still send MeterValues, but those readings cannot be trusted, so any resulting transaction is a billing dispute waiting to happen.