When EV chargers show up as offline, unavailable, or stuck in some confusing status, the hardware often gets blamed first.
But more often than not, the real issue isn’t the charger itself.
It’s the conversation between the charger and the software behind it.
That conversation happens through OCPP – and when it breaks down, chargers can look dead even when they’re standing there, powered on, doing absolutely nothing wrong.
This guide walks through OCPP troubleshooting the way operators actually experience it: step by step, without jargon overload, and without assuming everything is broken.
Ready? Let’s get started!
What is OCPP? (in simple terms)
OCPP, or Open Charge Point Protocol, is the standard “language” that lets an EV charger talk to a charging management system (often called a CSMS or backend).
In simple terms:
- The charger sends messages saying, “I’m here”, “I’m charging” or “Something’s wrong”.
- The backend system listens, responds, and decides how the charger should behave.
OCPP is maintained by the Open Charge Alliance and is widely used because it allows chargers and software from different vendors to work together.
When OCPP communication fails, chargers don’t necessarily stop working – but operators lose visibility and control.
Why do OCPP problems matter so much?
Because many of the most common EV charging issues are communication problems, not hardware failures.
A charger can be:
- powered on
- physically fine
- and still show as offline or unavailable simply because messages aren’t getting through.
Understanding OCPP lets operators:
- diagnose issues faster
- avoid unnecessary site visits
- and fix problems remotely when possible.
In short: fewer truck rolls, less downtime, fewer headaches.
The fastest way to troubleshoot an OCPP issue
Before diving deep, here’s the big picture:
- Confirm power and local network are stable
- Confirm the charger can reach the CSMS URL
- Check whether BootNotification is accepted
- Verify Heartbeats are being sent and received
- Confirm StatusNotification updates make sense
- Isolate whether the issue is network, charger config, or backend behavior
Now let’s slow that down and do it properly.
Before you touch anything: what information you need first
Jumping straight into resets without context usually makes things worse.
What OCPP version is the site running?
Most sites run OCPP 1.6, though OCPP 2.0.1 is becoming more common.
Why this matters:
- Message formats differ
- Status handling differs
- Troubleshooting steps can change depending on the version
(Open Charge Alliance overview: https://www.openchargealliance.org/protocols/)
Always confirm the version before troubleshooting.
What network path does the charger use?
This tells you where problems can hide.
- Ethernet
- Wi-Fi
- Cellular (SIM-based)
Also note:
- firewalls,
- proxies,
- private APNs,
- VPNs,
- or load balancers.
Most “mystery” OCPP issues live somewhere in this chain.
What evidence do you already have?
Before changing anything, gather:
- charger screen messages or LED indicators,
- backend logs (connects, disconnects, rejected messages),
- recent changes (firmware updates, router swaps, SIM changes, power events).
Troubleshooting without this context is guesswork.
OCPP basics you actually need for troubleshooting
You don’t need to memorize the entire protocol. You need to understand three messages.
The three OCPP messages that explain most problems
1. BootNotification
This is the charger saying: “Hi, I’m here. This is who I am”.
The backend replies with whether the charger is accepted and how to proceed.
If BootNotification fails, nothing else matters.
2. Heartbeat
Heartbeats are simple “I’m still alive” messages sent at regular intervals.
If the backend stops receiving heartbeats, it assumes the charger is offline – even if the charger thinks it’s connected.
3. StatusNotification
This tells the backend what the charger is doing:
- Available
- Charging
- Faulted
- Unavailable
(and others, depending on version)
If statuses don’t update correctly, operators get misleading dashboards.
What “offline” really means in OCPP terms
In most systems, offline means:
- the backend hasn’t received heartbeats recently, or
- the WebSocket connection dropped silently.
It does not always mean the charger lost power.
Start here: Offline charger troubleshooting (step by step)
Step 1: Is this one charger, or the whole site?
- Multiple chargers offline at once? Think network or power upstream.
- Only one charger offline? Think configuration, firmware, or that charger’s communication module.
Patterns matter more than symptoms.
Step 2: Can the charger reach the CSMS endpoint?
Check the basics:
- DNS resolution works
- Correct hostname or IP
- Correct port (often 443 for secure WebSockets)
- No captive portals
- No blocked outbound traffic
Many chargers fail quietly when one of these changes.
Step 3: Check WebSocket connection stability
OCPP usually runs over WebSockets, which stay open for long periods.
Common real-world problems:
- firewalls closing idle connections,
- cellular NAT timeouts,
- routers with buggy firmware,
- chargers that think they’re connected while the backend sees nothing.
This is a very common cause of “silent offline” chargers.
Step 4: Confirm BootNotification is accepted
In backend logs, look for:
Rejections often happen due to:
- wrong credentials,
- mismatched charger ID,
- security policy mismatches.
Boot loops – where the charger keeps rebooting and re-registering – are also a red flag.
Step 5: Check time synchronization (quiet but deadly)
Incorrect system time can cause:
- TLS certificate failures,
- confusing logs,
- failed scheduled operations.
If available, confirm the charger’s clock or NTP settings.
Step 6: Try safe remote recovery actions
In order:
- Soft reboot charger communication module
- Reboot router or modem
- Check SIM status or signal (for cellular)
- Roll back recent firmware changes if timing matches the issue
Avoid random resets. Always work from evidence.
Heartbeat troubleshooting: missing, irregular or ignored heartbeats
Heartbeat issues are one of the top causes of offline chargers.
What is the Heartbeat interval?
The heartbeat interval defines how often the charger sends “I’m alive” messages.
In theory, the backend influences this during registration. In practice:
- some chargers expose it as a setting,
- others hide it in firmware.
If the interval is too long, networks may drop the connection first.
Why heartbeats stop
Common causes include:
- idle connection timeouts,
- firmware bugs that stop sending heartbeats,
- backend rejections causing the charger to back off,
- resource exhaustion inside the charger (memory leaks do happen).
How to diagnose heartbeat problems from logs
Look for:
- the last heartbeat timestamp,
- disconnect events around that time,
- reconnect attempts,
- backend “no activity” warnings.
Logs tell a story – read them in order.
Fixes that actually work
Field-tested solutions include:
- shortening heartbeat intervals (within OEM limits),
- adjusting firewall idle timeouts,
- improving cellular signal quality,
- updating firmware that fixes known heartbeat bugs.
StatusNotification troubleshooting: wrong or stuck statuses
Status issues confuse operators more than almost anything else.
What StatusNotification is supposed to do
StatusNotification reports state changes.
If the charger goes from idle to charging, the backend should know.
If something faults, the backend should know.
When this breaks, dashboards lie.
Common status problems
- Charger works locally but shows Unavailable
- Charger faults but shows Available
- Status flips back and forth rapidly
All of these point to messaging or interpretation issues.
Why statuses go wrong
Common root causes:
- miswired sensors or connector locks,
- firmware bugs sending wrong status codes,
- backend systems mis-mapping vendor-specific behavior,
- message ordering issues after reboot.
Practical fixes
- Compare charger’s local display with backend status
- Pull raw OCPP logs to confirm payloads
- Check backend mapping rules for that charger model
- Apply known firmware fixes when confirmed by the vendor
Never assume the dashboard is right without logs.
BootNotification problems: rejected, looping or half-working
Why BootNotification gets rejected
Usually due to:
- incorrect credentials,
- charger ID mismatches,
- registration rules on the backend.
This is configuration, not hardware.
Why BootNotification loops happen
Often caused by:
- unstable power,
- chargers rebooting before config completes,
- backend sending commands too early after boot.
These loops are frustrating – but diagnosable.
How to fix BootNotification issues
- Confirm identity fields match backend records
- Reduce early server-initiated commands if possible
- Align firmware versions with backend expectations
Patience and clean logs help here.
Network and security issues that quietly break OCPP
TLS and certificates
Expired or mismatched certificates will break secure connections instantly.
Clock drift makes this worse.
Firewalls and proxies
Deep packet inspection and idle timeouts are common silent killers.
WebSockets need to stay open.
Cellular pitfalls
Cellular adds:
- NAT timeouts,
- signal variability,
- SIM throttling.
These aren’t charger problems – but they look like charger problems.
OCPP 1.6 vs OCPP 2.0.1: what operators should know
OCPP 2.0.1 expands functionality and security, but also adds complexity.
Troubleshooting depends heavily on:
- which version is deployed,
- which features are actually enabled,
- and what your backend supports.
Always align tooling and expectations with the deployed version.
A “choose-your-symptom” troubleshooting map
- Offline charger: check connectivity → BootNotification → Heartbeats
- Missing heartbeats: check idle timeouts → firmware → logs
- Status stuck: check StatusNotification payloads → backend mapping
- Status flapping: check unstable network or power
- BootNotification rejected: check credentials and identity
Start with symptoms. Follow the message flow.
Preventive monitoring: catching OCPP issues early
The best operators don’t wait for drivers to complain.
Set alerts for:
- missed heartbeats,
- excessive reconnects,
- repeated status flapping,
- long Unavailable or Faulted durations.
Prevention beats reaction every time.
What information to capture in every OCPP troubleshooting ticket
Save ‘future you’ some pain. Always record:
- charger ID and site,
- OCPP version,
- CSMS endpoint,
- last heartbeat timestamp,
- BootNotification status,
- current and last known status,
- recent changes.
Good tickets lead to fast fixes.
What tools help manage OCPP issues at scale?
OCPP issues create repeat work: tickets, dispatches, parts usage, follow-ups.
Maintenance and field service platforms help by:
- centralizing charger assets,
- tracking incident history,
- linking work orders and parts,
- analyzing repeat failures and repair times.
Tools like FieldEx help operators keep all this information in one place, so troubleshooting becomes repeatable instead of chaotic.
The value isn’t the tool – it’s the visibility.
Final thoughts
OCPP troubleshooting isn’t magic.
It’s message flow, network reality, and clean logs – handled in the right order.
Start with connectivity.
Confirm BootNotification.
Trust Heartbeats.
Validate StatusNotification.
Do that consistently, and “offline charger” stops being a mystery and starts being a process.
Want to see FieldEx in action? Book a free demo today, or simply get in touch. We'd love to chat!
Frequently Asked Questions (FAQs)
What does OCPP stand for?
OCPP stands for Open Charge Point Protocol, a standard for charger-to-backend communication.
Why does my charger show offline even though it has power?
Because the backend isn’t receiving heartbeats or the connection dropped silently.
What is an OCPP heartbeat?
A small “I’m alive” message sent regularly to keep the backend aware the charger is online.
Why are heartbeats missing?
Network timeouts, firmware bugs, or rejected messages are common causes.
What is BootNotification in OCPP?
It’s the charger’s initial registration message to the backend.
Why is my charger status stuck?
Usually due to StatusNotification issues, firmware bugs, or backend mapping problems.