How to Remotely Start EV Charging Using the OCPP Protocol

The Open Charge Point Protocol (OCPP) is the global standard for communication between EV chargers (Charge Points) and Central Management Systems (CMS).
It enables features such as remote start/stop of charging, firmware updates, diagnostics, and session reporting.

Among these operations, RemoteStartTransaction allows a CMS to start a charging session remotely—for example, when a driver taps “Start Charging” in a mobile app.

In this article, we’ll cover how this process works, show JSON message examples for OCPP 1.6 and 2.0.1, and include a sequence diagram illustrating the entire flow.


🔄 Remote Start Charging Overview

High-Level Steps

  1. User action:
    The EV driver requests charging via an app or web portal.
  2. CMS request:
    The CMS sends a RemoteStartTransaction to the charger via WebSocket.
  3. Charger validation:
    The charger checks its availability and validates the driver’s idTag.
  4. Vehicle connection:
    Once the EV is plugged in, the charger starts energy delivery.
  5. CMS monitoring:
    The CMS receives StartTransaction, MeterValues, and session updates in real time.

📊 Sequence Diagram

Below is a visual representation of how the RemoteStartTransaction flow works:


Diagram Description (for rendering or design team):

🟢 Actors:

  • CMS (Central Management System)
  • Charge Point (EVSE / Charger)
  • EV (Electric Vehicle)

🟣 Flow:

  1. CMS → Charger: RemoteStartTransaction(idTag, connectorId)
  2. Charger → CMS: Accepted (status)
  3. Charger → EV: Prepare for charging
  4. EV plugs in and signals readiness
  5. Charger → CMS: StartTransaction(connectorId, idTag, meterStart, timestamp)
  6. CMS → Charger: Accepted (transactionId)
  7. Charger → CMS: StatusNotification(Charging)
  8. CMS ↔ Charger: MeterValues updates periodically
  9. CMS → Charger: RemoteStopTransaction (when charging ends)
  10. Charger → CMS: StopTransaction(transactionId, meterStop, timestamp)

You can include the following PlantUML-style markup (convertible to image via plugin or generator):

@startuml
actor "Driver" as D
participant "CMS" as CMS
participant "Charge Point" as CP
participant "EV" as EV

D -> CMS: Tap "Start Charging" (via App)
CMS -> CP: RemoteStartTransaction(idTag, connectorId)
CP -> CMS: Response(status=Accepted)
CP -> EV: Prepare to charge
EV -> CP: Plugged-in / Ready signal
CP -> CMS: StartTransaction(connectorId, idTag, meterStart, timestamp)
CMS -> CP: Response(transactionId, status=Accepted)
loop During Charging
  CP -> CMS: MeterValues(energy usage)
  CP -> CMS: StatusNotification(Charging)
end
CMS -> CP: RemoteStopTransaction(transactionId)
CP -> CMS: StopTransaction(meterStop, timestamp)
@enduml

If you’d like, I can generate this diagram as a 1200 × 630 image optimized for WordPress (light or dark theme, matching your previous article banners).


💬 Example: RemoteStartTransaction (OCPP 1.6 JSON)

[
  2,
  "19223201",
  "RemoteStartTransaction",
  {
    "idTag": "ABC123RFID",
    "connectorId": 1
  }
]

Response:

[
  3,
  "19223201",
  {
    "status": "Accepted"
  }
]

⚙️ StartTransaction Message

When the EV is connected:

[
  2,
  "19223202",
  "StartTransaction",
  {
    "connectorId": 1,
    "idTag": "ABC123RFID",
    "meterStart": 0,
    "timestamp": "2025-11-01T15:23:45Z"
  }
]

Response:

[
  3,
  "19223202",
  {
    "transactionId": 10123,
    "idTagInfo": {
      "status": "Accepted"
    }
  }
]

🔐 OCPP 2.0.1 JSON-RPC Example

{
  "jsonrpc": "2.0",
  "id": "f9b8c1f3-9b45-42e6-9ef8-1e33b7b6e9a4",
  "method": "RemoteStartTransaction",
  "params": {
    "idToken": {
      "idToken": "ABC123RFID",
      "type": "ISO14443"
    },
    "evseId": [1]
  }
}

Response:

{
  "jsonrpc": "2.0",
  "id": "f9b8c1f3-9b45-42e6-9ef8-1e33b7b6e9a4",
  "result": {
    "status": "Accepted"
  }
}

🔒 Security and Best Practices

  • Always use secure WebSocket (wss://) with TLS for all OCPP communications.
  • Validate all incoming IDs (idTag, evseId) to prevent misuse.
  • Log every transaction for auditing and billing accuracy.
  • If a request fails with "Rejected" or "Unavailable", retry after confirming the charger’s availability.

✅ Conclusion

The RemoteStartTransaction command is the cornerstone of remote EV charging control.
It enables a seamless, app-based experience for drivers while allowing operators to automate energy delivery, session monitoring, and billing.

By understanding the OCPP message sequence and implementing it correctly, you can build a scalable, interoperable EV charging network that communicates securely and efficiently across thousands of charging points.

This article is inspired by real-world challenges we tackle in our projects. If you're looking for expert solutions or need a team to bring your idea to life,

Let's talk!

    Please fill your details, and we will contact you back

      Please fill your details, and we will contact you back