If you operate any meaningful fleet of OCPP chargers, you have met a world of error codes that are not always clearly documented. Some are obvious. Some are vendor-specific. Some look identical across two OEMs and mean different things on each.
This article is a practitioner’s reference: the OCPP errors you actually see in production, what they mean, and how to handle each.
The two error layers
OCPP has two distinct error layers worth distinguishing.
Charger-level errors arrive in the errorCode field of StatusNotification. They describe physical conditions of the charger: a connector lock that failed, an over-current trip, a ground fault.
Protocol-level errors arrive in the CallError envelope, message type 4 in the JSON array. They describe what went wrong handling a specific OCPP message: an invalid format, an action the receiver does not implement.
A given problem appears at one layer, not both, and this is the distinction that decides where you go looking. A failed StartTransaction might surface as a CallError, meaning the charger rejected the request outright, or as a follow-up StatusNotification carrying an errorCode, meaning the charger accepted it and then faulted. Those are different investigations. If you are new to how these messages fit together, what OCPP is and how it works sets the context.
flowchart TD
P[OCPP message] --> Q{Problem type}
Q -->|Physical fault| C[StatusNotification<br/>errorCode field]
Q -->|Message handling| E[CallError envelope<br/>message type 4]
C --> C1[ConnectorLockFailure<br/>GroundFailure<br/>PowerMeterFailure]
E --> E1[NotImplemented<br/>FormationViolation<br/>SecurityError]
style C fill:#e8f5e9,stroke:#43a047
style E fill:#e3f2fd,stroke:#1e88e5
Charger-level errors (StatusNotification errorCode)
The OCPP 1.6 standard enum:
- NoError. Clears the error state. The charger is no longer reporting a fault.
- ConnectorLockFailure. The cable lock didn’t engage. Connector unsafe to use.
- EVCommunicationError. The charger cannot talk to the vehicle, whether from failed ISO 15118 communication or a pilot pin issue.
- GroundFailure. Ground fault detected. Safety system tripped.
- HighTemperature. Charger or internal component is too hot.
- InternalError. Generic fault, often vendor-specific.
- LocalListConflict. A conflict in the local authorization list.
- OtherError. Vendor-specific or unclassified.
- OverCurrentFailure. Too much current drawn; safety tripped.
- PowerMeterFailure. Meter is not reporting correctly.
- PowerSwitchFailure. Internal switch or contactor failed.
- ReaderFailure. The RFID reader is not working.
- ResetFailure. A reset command failed.
- UnderVoltage. Input voltage too low.
- OverVoltage. Input voltage too high.
- WeakSignal. Cellular or wifi signal too weak. Rarely used in practice.
OCPP 2.0.1 reports more granularly, through the device model and NotifyEvent messages. The codes are similar in spirit and better organized. This is one of several areas where OCPP 2.0.1 differs from 1.6.
What each common error actually means
ConnectorLockFailure
The cable lock didn’t engage when a vehicle plugged in (or didn’t disengage when the user tried to unplug). Mechanical issue with the connector lock mechanism.
Common causes:
- Worn or damaged lock motor.
- Debris in the connector.
- Cable not fully inserted.
- Lock mechanism stuck due to temperature or moisture.
Resolution:
- User can sometimes resolve by reseating the cable.
- Persistent issue requires technician visit to inspect / replace the lock motor.
- A charger frequently reporting this needs maintenance.
GroundFailure
Safety system detected current leaking to ground. Could be:
- Damaged charger internal wiring.
- Wet conditions affecting insulation.
- Faulty vehicle.
- Damaged cable.
Resolution:
- Charger goes offline for safety; will not allow further sessions until cleared.
- Often requires inspection.
- Recurring ground faults at one charger indicate a real issue.
HighTemperature
A component is too hot. Often the power module or the connector itself.
Common causes:
- Sustained high-power charging in hot ambient.
- Insufficient cooling.
- Sensor drift.
Resolution:
- Charger throttles or pauses until temperature drops.
- Usually self-resolves.
- Frequent high-temp events indicate a cooling issue.
InternalError
Generic. Could be anything. Vendor documentation needed.
Common causes:
- Firmware bug.
- Memory or storage issue on the charger.
- Software state inconsistency.
Resolution:
- Try a reset.
- Check firmware version; update if available.
- If recurring, escalate to OEM support.
OverCurrentFailure
Charging tried to deliver more current than the safety system allows.
Common causes:
- Vehicle requested more than the charger can provide (negotiation bug).
- Sensor drift causing false trip.
- A real fault, such as a short or partial short in the cable.
Resolution:
- Charger shuts down until cleared.
- Investigate cable; check vehicle behavior.
- Recurring across many cars suggests charger sensor issue.
PowerMeterFailure
The energy meter is not reporting. This one is critical, because without meter values you cannot bill the session correctly.
Common causes:
- Meter hardware failure.
- Communication failure between charger controller and meter.
- Calibration drift.
Resolution:
- Charger should refuse to allow sessions until meter is operational.
- Technician visit usually required.
EVCommunicationError
Charger can’t communicate with the vehicle via ISO 15118 or pilot-pin signaling.
Common causes:
- Vehicle hardware issue.
- Cable issue.
- ISO 15118 PLC interference.
- Vehicle and charger negotiating incompatible protocol versions.
Resolution:
- Session won’t start or stops mid-session.
- User can sometimes try a different charger to isolate vehicle vs charger.
- Persistent issue on one charger across many vehicles suggests charger problem.
Protocol-level errors (CallError envelope)
The standard OCPP error codes:
- NotImplemented. The receiver doesn’t support this action.
- NotSupported. The action is supported but not in this context.
- InternalError. Generic server-side error.
- ProtocolError. Message format is wrong.
- SecurityError. Security check failed (auth, signature, etc.).
- FormationViolation. Message structure violates the spec.
- PropertyConstraintViolation. A field violates its constraints.
- OccurrenceConstraintViolation. Required field is missing.
- TypeConstraintViolation. A field has the wrong type.
- GenericError. Fallback.
NotImplemented
The receiver doesn’t have a handler for this message.
Common causes:
- CSMS uses a new feature the charger doesn’t support.
- An OCPP version mismatch, where the CSMS speaks 2.0.1 and the charger registered as 2.0.1 but implements only a subset of it.
- Vendor-specific actions sent to a different vendor’s charger.
Resolution:
- Detect this at the CSMS and stop sending features the charger does not have.
- Drive that from real capability discovery rather than from the model number.
InternalError (protocol-level)
Receiver had an error processing the message.
Common causes:
- Bug in CSMS or charger firmware.
- Database error on the CSMS side.
- Resource exhaustion.
Resolution:
- Retry usually safe.
- Persistent InternalError on a specific message type indicates a bug.
FormationViolation
The message doesn’t conform to the OCPP JSON structure.
Common causes:
- Malformed JSON.
- Missing required fields.
- Wrong array structure (OCPP messages are arrays).
Resolution:
- Bug fix on the sender. Catch in your schema validation.
SecurityError
Authentication or security check failed.
Common causes:
- Wrong credentials on Profile 2 basic auth.
- Certificate validation failure on Profile 3 mTLS.
- An expired or revoked token.
Resolution:
- Rotate credentials.
- Renew certificates.
- Check trust roots.
Diagnostic patterns
A few patterns for troubleshooting OCPP errors in production.
Pattern: Charger going offline frequently
Investigate:
- BootNotification frequency. Is the charger rebooting?
- Heartbeat. Are they arriving on the interval?
- StatusNotification errorCode. Any faults being reported?
- Network connectivity. Is the WebSocket flapping?
Common conclusions:
- Cellular signal issue (look at iccid/imsi behavior).
- Watchdog reset (firmware instability).
- Power supply problem (intermittent voltage).
Pattern: Session won’t start
Investigate:
- The Authorize message. Did it succeed?
- The StartTransaction message. Was it sent, and did the CSMS respond?
- StatusNotification. What state is the connector actually in?
- Any errorCode reported alongside.
Common conclusions:
- Authorization rejected by eMSP.
- Connector in Faulted state.
- Charger in maintenance mode.
Pattern: Session ended unexpectedly
Investigate:
- StopTransaction reason field.
- StatusNotification just before/after.
- MeterValues sequence.
Common conclusions:
- EmergencyStop pressed.
- EVDisconnected (user unplugged).
- Charger faulted (StatusNotification with errorCode).
- DeAuthorized (auth expired).
Pattern: Meter values look wrong
Investigate:
- PowerMeterFailure errorCode (most direct indicator).
- Unit consistency in MeterValues (Wh vs kWh, A vs W).
- Start/Stop meter readings vs sum of periodic samples.
Common conclusions:
- Meter hardware issue.
- Implementation bug in unit handling.
- Reading-context interpretation issue.
Best practices for handling errors
A short list for CSMS implementers.
Categorize errors. Some are user-facing (“session failed”). Some are operational (“charger offline”). Some are bugs (“we sent a bad message”). Different handling.
Don’t silently swallow errors. Log everything. Surface to operations dashboards.
Distinguish transient from persistent. A transient error (one-off InternalError) shouldn’t trigger an alert. A persistent error (10 in a row) should.
Correlate before you dispatch. Errors on charger X at time T that also appear on Y and Z point at your CSMS or shared infrastructure, not at three simultaneous hardware failures. This is the check that saves a wasted truck roll.
Charger-specific knowledge base. Each OEM has its own quirks and vendor-specific error codes. Maintain a doc per OEM with known issues and resolutions.
Translate for customers. Never show a driver “ConnectorLockFailure”. Show them “There was a problem with the cable, try unplugging and plugging it back in.” The error code is for your operations team; the driver needs an action.
The honest summary
OCPP errors arrive on two layers, from four different kinds of cause: real hardware faults, network problems, firmware bugs, and configuration mistakes. Almost all wasted troubleshooting time comes from looking on the wrong layer, or from assuming the cause matches the category the code appears to belong to.
The practical habit worth building is to read every error as a question about where, not what. A CallError says the message was rejected, which is a conversation between two pieces of software. A StatusNotification errorCode says the hardware has a condition, which may be entirely unrelated to any message you sent. Teams that keep those separate resolve tickets quickly. Teams that treat the error log as one undifferentiated stream send technicians to sites where nothing is physically wrong.