OCPP MESSAGE · UPDATED 11 AUG 2026

Firmware updates and diagnostics

Firmware update is the highest-risk operation in OCPP. Every other message can fail and be retried; this one can turn a charger into a locked cabinet requiring a site visit and an engineer with a laptop.

PART OF THE OCPP COMPLETE GUIDE · 14 MESSAGE GUIDES

IN ONE PARAGRAPH

UpdateFirmware points a charger at a download URL and a retrieval time; FirmwareStatusNotification reports progress through download, install and reboot. The protocol is simple. The discipline around it — staged rollout, rollback plan, never updating mid-session — is what keeps a fleet alive.

UpdateFirmware

// CSMS -> charge point
[2, "19223240", "UpdateFirmware", {
  "location": "https://firmware.example.com/model-x/v2.4.1.bin",
  "retrieveDate": "2026-08-12T02:00:00Z",
  "retries": 3,
  "retryInterval": 600
}]

// Charge point -> CSMS
[3, "19223240", {}]

The empty response is significant: the charger acknowledges receipt and nothing else. There is no accept or reject. The only visibility into what happens next comes from FirmwareStatusNotification.

FieldNotes
locationURL the charger fetches from — must be reachable from the charger's network, which is not your office network
retrieveDateWhen to start downloading. Schedule for low-usage hours.
retries / retryIntervalDownload retry policy for weak cellular links
retrieveDate is when the download begins, not when installation happens. Most chargers install once the download completes and no transaction is active. A busy charger can therefore sit downloaded-but-not-installed for hours, which means “update deployed” and “update running” are different fleet states you must track separately.

FirmwareStatusNotification

StatusMeansConcern level
IdleNothing in progress
DownloadingFetching the imageNormal; watch duration on weak links
DownloadedImage retrieved, awaiting installNormal — may sit here
DownloadFailedCould not fetchConnectivity or URL reachability
InstallingWriting the imageDo not interrupt power
InstalledCompleteVerify version and re-apply configuration
InstallationFailedInstall failedCharger may be in an unknown state — investigate immediately

InstallationFailed is the status that costs money. Depending on the vendor's bootloader the charger may recover to the previous image, boot into a recovery mode, or fail to come back at all. That last case is a truck roll.

A charger that goes silent during Installing and does not reconnect within a reasonable window should be escalated rather than waited on.

Rollout discipline

The protocol lets you update the whole fleet at once. Doing so is how an operator turns a firmware bug into an outage.

  1. Lab first. One unit of the exact model and hardware revision, on the bench.
  2. Canary. A handful of units on a low-traffic site you can physically reach. Run them for days, not hours.
  3. Staged rollout. 5%, then 25%, then the rest, with a hold between each stage.
  4. Never all at once, and never across multiple models in the same window — you lose the ability to attribute a regression.

What to watch between stages, all of which are available for free from messages you already receive:

  • Reconnection rate after install — units that never come back.
  • Stop reason distribution — a rise in Reboot or Other means instability.
  • StatusNotification error codes — new fault types appearing after an update.
  • Transaction success rate on updated versus not-yet-updated units of the same model.
Assume there is no remote rollback. Many chargers cannot be reverted over OCPP; recovery means a site visit. Plan the update as though it is one-way, because for a meaningful share of hardware it is.

Diagnostics

GetDiagnostics tells the charger to upload a log bundle to a location you provide:

[2, "19223245", "GetDiagnostics", {
  "location": "ftp://diag.example.com/upload/",
  "startTime": "2026-08-10T00:00:00Z",
  "stopTime":  "2026-08-11T00:00:00Z",
  "retries": 2
}]

[3, "19223245", { "fileName": "CP014_diag_20260811.tar.gz" }]

DiagnosticsStatusNotification then reports Uploading, Uploaded or UploadFailed.

Two practical notes. The upload target is often FTP, which many vendors still assume — check what the model supports before promising a secure endpoint. And diagnostics bundles are frequently large; pulling them across a metered cellular link is expensive, so request bounded time windows rather than everything.

Production lessons

  • Never update during an active transaction. Gate on idle state.
  • Stage every rollout. Lab, canary, then percentage bands with holds.
  • Re-apply configuration after every install. Updates commonly reset keys to defaults.
  • Verify the firmware URL is reachable from the charger's network, not just from yours.
  • Track downloaded-versus-installed separately. They are different fleet states.
  • Escalate silence during Installing rather than waiting indefinitely.
  • Schedule retrieveDate for low-usage hours and stagger it across the fleet so downloads do not all hit at once.
  • Keep a per-charger firmware version inventory. Without it you cannot attribute a regression to a version.

Frequently asked questions

What does OCPP UpdateFirmware do?

It gives the charger a download URL and a retrieveDate, plus a retry policy. The charger acknowledges with an empty response — there is no accept or reject — and all subsequent visibility comes from FirmwareStatusNotification.

Does retrieveDate control when firmware is installed?

No, it controls when the download begins. Most chargers install once the download completes and no transaction is active, so a busy charger can remain downloaded but not installed for hours. Deployed and running are separate fleet states.

Can you roll back OCPP firmware remotely?

Usually not. Many chargers cannot be reverted over OCPP and recovery requires a site visit, so a firmware update should be planned as a one-way operation with staged rollout and a canary group you can physically reach.

How should you stage an OCPP firmware rollout?

Lab test on the exact model and hardware revision, then a canary group on a low-traffic reachable site for several days, then percentage bands with holds between them. Watch reconnection rate, stop reason distribution, new StatusNotification error codes, and transaction success rate against not-yet-updated units.