{"id":23856,"date":"2026-07-31T11:58:22","date_gmt":"2026-07-31T11:58:22","guid":{"rendered":"https:\/\/engineerbabu.com\/blog\/?p=23856"},"modified":"2026-07-31T11:58:22","modified_gmt":"2026-07-31T11:58:22","slug":"ev-charging-software-development","status":"publish","type":"post","link":"https:\/\/engineerbabu.com\/blog\/ev-charging-software-development\/","title":{"rendered":"How to Build an EV Charging Network Management Platform, OCPP, Smart Charging, Roaming, and Billing 2026"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">India\u2019s EV charging stations reached <\/span><a href=\"https:\/\/auto.economictimes.indiatimes.com\/news\/industry\/india-enhances-ev-charging-infrastructure-one-charger-for-every-175-electric-vehicles\/132728306\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">52,700 in 2026<\/span><\/a><span style=\"font-weight: 400;\">. The US has crossed <\/span><a href=\"https:\/\/www.evinfrastructurenews.com\/ev-networks\/us-public-ev-charging-network-surpasses-250-000-charging-ports\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">250,000 public charging points<\/span><\/a><span style=\"font-weight: 400;\">. The hardware is rolling out at scale. The software problem is acute, most charge point operators run fragmented systems where drivers cannot find available chargers, pricing is opaque, sessions fail without clear error messages, and the operator has no real-time visibility into network utilisation or revenue.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A charge point management system (CPMS) is the software that connects the charger hardware to the grid, the driver, the billing system, and the energy market, making an EV charging network commercially viable rather than just electrically functional.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Every charge point operator, whether a standalone network, a fuel retailer adding EV capability, a real estate developer adding amenity charging, or a fleet operator managing a private depot, needs software to make their charging investment generate revenue.<\/span><\/p>\n<p><a href=\"http:\/\/engineerbabu.com\"><span style=\"font-weight: 400;\">EngineerBabu<\/span><\/a><span style=\"font-weight: 400;\"> built enterprise operations management for Adani Group, one of India&#8217;s largest energy conglomerates actively deploying EV charging infrastructure. CMMI Level 5. Google AI Accelerator 2024 Top 20. Contact: <\/span><a href=\"mailto:mayank@engineerbabu.com\"><span style=\"font-weight: 400;\">mayank@engineerbabu.com<\/span><\/a><\/p>\n<h2><b>What an EV Charging Management Platform Must Do, The Complete System<\/b><\/h2>\n<table>\n<tbody>\n<tr>\n<td><b>Function<\/b><\/td>\n<td><b>Platform Module<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Charger connectivity<\/span><\/td>\n<td><span style=\"font-weight: 400;\">OCPP-based communication with charge point hardware<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Charger management<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Status monitoring, remote commands, firmware updates<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Session management<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Start, monitor, stop, and record every charging session<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Driver authentication<\/span><\/td>\n<td><span style=\"font-weight: 400;\">RFID, app, QR code, plug-and-charge<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Billing and payments<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Session pricing, payment processing, receipts<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Smart charging<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Load management, demand response, grid optimisation<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Driver app<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger discovery, navigation, session monitoring, payment<\/span><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/engineerbabu.com\/blog\/how-to-build-a-fleet-management-software\/\"><span style=\"font-weight: 400;\">Fleet management<\/span><\/a><\/td>\n<td><span style=\"font-weight: 400;\">Fleet-specific pricing, billing, usage reporting<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Roaming<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Enable drivers to use the network via partner networks<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Analytics and reporting<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Revenue, utilisation, energy, uptime per charger<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Remote diagnostics<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Fault detection, troubleshooting, firmware management<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Energy management<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Grid connection management, peak demand control<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-23868\" src=\"https:\/\/engineerbabu.com\/blog\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-31-2026-04_58_57-PM.png\" alt=\"EV software dashboard\" width=\"1536\" height=\"1024\" title=\"\"><\/p>\n<h2><b>Module 1 &#8211; OCPP Integration and Charger Connectivity<\/b><\/h2>\n<p><b>What is OCPP?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">OCPP (Open Charge Point Protocol) is the communication protocol between a charge point (the hardware) and a Charge Point Management System (CPMS). It defines how a charger reports its status, how it starts and stops sessions, how it authenticates drivers, and how it receives configuration updates.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">OCPP 1.6 is the current dominant version globally. OCPP 2.0.1 adds smart charging capabilities, plug-and-charge (ISO 15118), and improved security. A production CPMS must support both.<\/span><\/p>\n<p><b>What the OCPP connection enables:<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>OCPP Message<\/b><\/td>\n<td><b>Direction<\/b><\/td>\n<td><b>Function<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">BootNotification<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger \u2192 CPMS<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger announces itself on power-up<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">StatusNotification<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger \u2192 CPMS<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger reports status change (Available, Occupied, Faulted)<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">StartTransaction<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger \u2192 CPMS<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Driver starts a charging session<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">StopTransaction<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger \u2192 CPMS<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Session ends, with energy and duration data<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">MeterValues<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger \u2192 CPMS<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Periodic energy readings during session<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">RemoteStartTransaction<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CPMS \u2192 Charger<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CPMS remotely starts a session (app initiation)<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">RemoteStopTransaction<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CPMS \u2192 Charger<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CPMS remotely stops a session<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">ChangeConfiguration<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CPMS \u2192 Charger<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Update charger configuration parameters<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">UpdateFirmware<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CPMS \u2192 Charger<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Push firmware update<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">SetChargingProfile<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CPMS \u2192 Charger<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Smart charging, define power delivery schedule<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Reset<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CPMS \u2192 Charger<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Reboot a faulted charger remotely<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b>The OCPP server architecture:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">The CPMS runs a WebSocket server that maintains persistent connections to every charger in the network. Each charger connects on power-up and maintains the connection until powered off. OCPP messages flow over these WebSocket connections in both directions.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">At scale, 10,000 chargers, the WebSocket server must handle 10,000 concurrent persistent connections with high availability. A horizontal scaling architecture, multiple WebSocket server instances behind a load balancer with sticky sessions, handles this without architectural complexity.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-23867\" src=\"https:\/\/engineerbabu.com\/blog\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-31-2026-05_11_48-PM.png\" alt=\"Module EV software\" width=\"1536\" height=\"1024\" title=\"\"><\/p>\n<h2><b>Module 2 &#8211; Session Management<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Every charging session is a transaction. It begins when a driver plugs in and authenticates. It ends when they unplug or the session is manually stopped. The session record captures everything that happened in between.<\/span><\/p>\n<p><b>Session lifecycle:<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Event<\/b><\/td>\n<td><b>Trigger<\/b><\/td>\n<td><b>System Action<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Plug inserted<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Physical connection detected<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger status \u2192 Preparing<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Driver authentication<\/span><\/td>\n<td><span style=\"font-weight: 400;\">RFID tap, app start, QR scan, or plug-and-charge<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Identity verified, authorisation checked<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Authorisation response<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CPMS authorises or rejects<\/span><\/td>\n<td><span style=\"font-weight: 400;\">If authorised: session start; if rejected: display error<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Charging begins<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger energises the connector<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Session record created, timer starts<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Meter values (periodic)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Every 5 minutes or configurable interval<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Energy delivered logged, running cost calculated<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Session stop<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Driver stops via app, RFID tap, or session limit reached<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Final energy reading recorded, session closed<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Billing event<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Session data finalised<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Bill calculated, payment charged, receipt sent<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Charger available<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Connector de-energised<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charger status \u2192 Available<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b>Session pricing models:<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Pricing Model<\/b><\/td>\n<td><b>How Charged<\/b><\/td>\n<td><b>Use Case<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Per kWh<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Fixed rate per unit of energy<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Standard, most common<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Per minute<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Time-based pricing<\/span><\/td>\n<td><span style=\"font-weight: 400;\">AC charging where time is the constraint<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Per session<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Flat session fee<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Simple, predictable<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Time of use<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Different rates by time of day<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Peak\/off-peak pricing<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Member vs guest<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Discounted rate for registered members<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Loyalty and retention<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Fleet rate<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Volume-discounted rate for fleet accounts<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Fleet operators<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><b>Module 3 &#8211; Driver Authentication and Authorization<\/b><\/h2>\n<p><b>Authentication methods:<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Method<\/b><\/td>\n<td><b>Technology<\/b><\/td>\n<td><b>User Experience<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">RFID card<\/span><\/td>\n<td><span style=\"font-weight: 400;\">NFC\/RFID card tap at charger<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Simple, no phone required<\/span><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/engineerbabu.com\/services\/mobile-app-development\"><span style=\"font-weight: 400;\">Mobile app<\/span><\/a><\/td>\n<td><span style=\"font-weight: 400;\">QR scan or BLE beacon + app<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Feature-rich, session monitoring in app<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Plug-and-charge (PnC)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">ISO 15118, automatic authentication via cable<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Seamless, no action required<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Credit\/debit card<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Contactless payment terminal on charger<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Ad-hoc use without account<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">SMS\/QR code<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Driver scans QR, receives SMS OTP<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Fallback for app issues<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b>The authorisation check:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">When a driver authenticates, the CPMS checks: Is this ID (RFID number or account ID) in the authorised list? Is the account in good standing (not suspended, not overdue on payment)? If a payment method is required, is it validated? Has a roaming authorisation been received (for network roaming scenarios)?<\/span><\/p>\n<p><b>Offline authorisation:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">When a charger loses connectivity to the CPMS, it must still be able to authorise known drivers from a locally cached authorisation list. The CPMS pushes an updated authorisation list to each charger regularly, the charger stores it and uses it for local authorisation when offline. Sessions started offline are synchronised to the CPMS when connectivity is restored.<\/span><\/p>\n<h2><b>Module 4 &#8211; Smart Charging and Load Management<\/b><\/h2>\n<p><b>The smart charging problem:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">A charging station with 20 DC fast chargers at 150 kW each has a potential peak demand of 3,000 kW. The grid connection may be sized for 1,500 kW. Without smart charging, the 21st charging session cannot be served, the breaker trips.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">With smart charging, the CPMS dynamically allocates available power across active sessions, each session gets less than 150 kW when demand is high, but every driver continues charging rather than being cut off.<\/span><\/p>\n<p><b>OCPP 2.0.1 SetChargingProfile:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Smart charging is implemented through OCPP&#8217;s SetChargingProfile command. The CPMS sends a charging profile to each charger defining the maximum power delivery in each time slot. The charger respects this profile, it will not deliver more power than the profile allows, even if the vehicle could accept more.<\/span><\/p>\n<p><b>Smart charging scenarios:<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Scenario<\/b><\/td>\n<td><b>What Smart Charging Does<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Grid capacity constraint<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Distribute available grid capacity across active sessions<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Demand response<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Reduce charging power during grid peak hours to avoid demand charges<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Renewable integration<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Shift charging demand to periods of high solar or wind generation<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Fleet depot overnight<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Spread fleet charging across the night to avoid peak demand charges<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Dynamic pricing integration<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Charge at lower power during high-rate periods, faster during low-rate periods<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b>Load balancing algorithm:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">The CPMS continuously monitors total power draw across the site. When a new session starts or an existing session&#8217;s demand changes, the algorithm recalculates the optimal power allocation across all active sessions.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The allocation considers: minimum power required to keep each session active, session priority (fleet vs public, subscribed vs ad-hoc), and the site&#8217;s available grid capacity at the current moment.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-23869\" src=\"https:\/\/engineerbabu.com\/blog\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-31-2026-05_25_06-PM.png\" alt=\"Module 4\" width=\"1536\" height=\"1024\" title=\"\"><\/p>\n<h2><b>Module 5 &#8211; Billing, Payments, and Revenue Management<\/b><\/h2>\n<p><b>The billing flow:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">When a session ends, the CPMS has the complete session data, start time, end time, energy delivered in kWh, and the applicable pricing configuration. The billing engine calculates the session cost:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Session cost = Energy (kWh) \u00d7 Rate (per kWh) + Session fee + Parking fee (if applicable) + Applicable taxes<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The calculated amount is charged to the driver&#8217;s payment method, pre-authorised credit card, wallet balance, or fleet account. A receipt is sent via email and push notification.<\/span><\/p>\n<p><b>Payment methods:<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Market<\/b><\/td>\n<td><b>Payment Methods<\/b><\/td>\n<td><b>Integration<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">India<\/span><\/td>\n<td><span style=\"font-weight: 400;\">UPI (GPay, PhonePe, Paytm), credit\/debit cards, wallet<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Razorpay<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">US<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Credit\/debit, Apple Pay, Google Pay<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Stripe<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Global<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Cards + local wallets<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Stripe + regional processors<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b>Fleet billing:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Fleet operators, companies managing EV vehicle fleets, need consolidated billing rather than per-session individual payments. The CPMS supports:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Fleet accounts with credit limits and monthly billing cycles. Driver-level cost allocation, which driver charged, when, at which charger, for internal cost allocation. Vehicle-level reporting, energy consumed per vehicle per month.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Invoice generation, monthly consolidated invoice per fleet account. Budget alerts, notification when a fleet account approaches its monthly budget.<\/span><\/p>\n<h2><b>Module 6 &#8211; Driver App and Charger Discovery<\/b><\/h2>\n<p><b>Driver app features:<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Feature<\/b><\/td>\n<td><b>Details<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Charger map<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Real-time availability of all chargers in the network<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Charger details<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Connector types, power levels, pricing, amenities at location<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Navigation<\/span><\/td>\n<td><span style=\"font-weight: 400;\">In-app directions to selected charger<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Session start<\/span><\/td>\n<td><span style=\"font-weight: 400;\">QR scan or tap button, remote start via app<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Session monitoring<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Real-time energy delivered, cost accrued, estimated completion<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Session stop<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Remote stop from app<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Payment<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Saved card or UPI for instant post-session payment<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">History<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Past sessions, energy, cost, receipts<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Favourites<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Save frequently used chargers<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Notifications<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Session start, completion, charger issue alerts<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b>Real-time availability:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">The charger map shows every charger in the network with real-time status, available (green), occupied (orange), faulted (red), and offline (grey). The status updates within 10 seconds of any change, when a driver unplugs, the charger shows as available immediately, not after a polling delay.<\/span><\/p>\n<h2><b>Module 7 &#8211; Network Roaming<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Roaming allows a driver registered with Network A to use chargers on Network B, similar to how a mobile phone on Vodafone can make calls on Airtel&#8217;s network when Vodafone coverage is unavailable.<\/span><\/p>\n<p><b>The roaming protocol (OCPI):<\/b><\/p>\n<p><span style=\"font-weight: 400;\">OCPI (Open Charge Point Interface) is the standard protocol for EV charging network roaming. It defines how two CPMS platforms exchange: location and charger availability data, tariff information, session authorisation, and CDR (Charge Detail Record) for billing settlement.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A CPMS that implements OCPI can connect to the national roaming hub, in India, this is managed by BEE; in Europe, by Hubject, and immediately enable its drivers to use any participating network&#8217;s chargers.<\/span><\/p>\n<p><b>Roaming settlement:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">When a driver from Network A charges at Network B&#8217;s charger, Network B sends a CDR to Network A with the energy delivered and the applicable rate. Network A bills the driver at its own rate (which may be higher than Network B&#8217;s rate to cover the settlement cost).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Network A settles with Network B monthly for the difference. The roaming module tracks these cross-network CDRs and generates settlement invoices automatically.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-23870\" src=\"https:\/\/engineerbabu.com\/blog\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-31-2026-05_27_34-PM.png\" alt=\"Module 7 EV charging software\" width=\"1536\" height=\"1024\" title=\"\"><\/p>\n<h2><b>Build Cost: EV Charging Software Development<\/b><\/h2>\n<table>\n<tbody>\n<tr>\n<td><b>Module<\/b><\/td>\n<td><b>Cost Range (USD)<\/b><\/td>\n<td><b>Notes<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">OCPP 1.6 + 2.0.1 server implementation<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$10K \u2013 $20K<\/span><\/td>\n<td><span style=\"font-weight: 400;\">WebSocket server, OCPP message handling<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Charger management + remote commands<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$6K \u2013 $12K<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Status monitoring, reset, firmware update<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Session management engine<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$8K \u2013 $15K<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Full session lifecycle, meter values<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Driver authentication (RFID + app + PnC)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$6K \u2013 $12K<\/span><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Smart charging + load balancing<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$8K \u2013 $15K<\/span><\/td>\n<td><span style=\"font-weight: 400;\">SetChargingProfile, grid management<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Billing engine + payment integration<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$8K \u2013 $15K<\/span><\/td>\n<td><span style=\"font-weight: 400;\">All pricing models, fleet billing<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Driver mobile app (Flutter, iOS + Android)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$10K \u2013 $18K<\/span><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Roaming (OCPI implementation)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$6K \u2013 $12K<\/span><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Fleet management portal<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$5K \u2013 $10K<\/span><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Analytics dashboard (operator)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$6K \u2013 $12K<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Revenue, utilisation, uptime<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Remote diagnostics + firmware management<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$5K \u2013 $10K<\/span><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">AWS + VAPT + Year 1 ops<\/span><\/td>\n<td><span style=\"font-weight: 400;\">$5K \u2013 $10K<\/span><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><b>Total<\/b><\/td>\n<td><b>$83K \u2013 $161K<\/b><\/td>\n<td><span style=\"font-weight: 400;\">Full EV charging platform<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><i><span style=\"font-weight: 400;\">EngineerBabu built enterprise technology for Adani Group, actively deploying EV charging infrastructure across India. CMMI Level 5. Google AI Accelerator 2024 Top 20. Contact: <\/span><\/i><a href=\"mailto:mayank@engineerbabu.com\"><i><span style=\"font-weight: 400;\">mayank@engineerbabu.com<\/span><\/i><\/a><\/p>\n<h2><b>FAQs about EV Charging Software Development<\/b><\/h2>\n<ul>\n<li aria-level=\"1\">\n<h3><b>What is OCPP and why does every EV charging platform need to implement it?<\/b><\/h3>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">OCPP (Open Charge Point Protocol) is the open standard that defines the communication protocol between electric vehicle charge points (hardware) and the Charge Point Management System (software). It is maintained by the Open Charge Alliance and adopted by virtually every major charge point manufacturer globally, ABB, Schneider Electric, Delta Electronics, Exicom, and hundreds of others all implement OCPP in their chargers. A CPMS that implements OCPP can connect to any OCPP-compliant charger from any manufacturer without a custom integration per manufacturer. This is the critical advantage of OCPP, it prevents vendor lock-in and allows charge point operators to deploy hardware from multiple manufacturers in the same network, all managed through one platform. OCPP 1.6 is the dominant version in current deployments. OCPP 2.0.1 adds smart charging profiles, plug-and-charge (ISO 15118), and enhanced security that are essential for next-generation charging infrastructure.<\/span><\/p>\n<ul>\n<li aria-level=\"1\">\n<h3><b>What is smart charging and how does it prevent grid overload at a charging station?<\/b><\/h3>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Smart charging is the dynamic management of power delivery across multiple charging sessions to keep total power draw within the available grid connection capacity. Without smart charging, each charging session draws its maximum rated power independently, a site with 20 chargers at 150 kW each would theoretically draw 3,000 kW simultaneously, far exceeding the grid connection capacity and causing breaker trips. Smart charging works by having the Charge Point Management System continuously monitor total power draw and set charging profiles on each active charger, OCPP SetChargingProfile commands, that limit individual session power delivery so that the sum of all sessions stays within the available capacity. As sessions start and stop, the algorithm recalculates and updates profiles dynamically. Every driver continues charging, just at a reduced power level during peak demand periods rather than being refused service.<\/span><\/p>\n<ul>\n<li aria-level=\"1\">\n<h3><b>What is EV charging roaming and how does it work technically?<\/b><\/h3>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">EV charging roaming allows a driver registered with one charging network to use chargers operated by a different network, similar to mobile phone roaming. Technically, it is implemented through OCPI (Open Charge Point Interface), the standard API for inter-network communication. When a driver from Network A attempts to charge at Network B&#8217;s charger, Network B&#8217;s CPMS sends an authorisation request to the national roaming hub, which forwards it to Network A&#8217;s CPMS for approval. Network A&#8217;s CPMS confirms the driver&#8217;s account is valid and in good standing. Network B&#8217;s CPMS authorises the session. When the session ends, Network B sends a Charge Detail Record (CDR) to Network A with the energy delivered and applicable tariff. Network A bills the driver at its own rate and settles the wholesale amount with Network B on a monthly basis. A CPMS that implements OCPI can connect to national and international roaming hubs and immediately enable its drivers to use any connected network&#8217;s chargers.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>India\u2019s EV charging stations reached 52,700 in 2026. The US has crossed 250,000 public charging points. The hardware is rolling out at scale. The software problem is acute, most charge point operators run fragmented systems where drivers cannot find available chargers, pricing is opaque, sessions fail without clear error messages, and the operator has no [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":23857,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1271],"tags":[],"class_list":["post-23856","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"_links":{"self":[{"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/posts\/23856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/comments?post=23856"}],"version-history":[{"count":2,"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/posts\/23856\/revisions"}],"predecessor-version":[{"id":23871,"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/posts\/23856\/revisions\/23871"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/media\/23857"}],"wp:attachment":[{"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/media?parent=23856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/categories?post=23856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/engineerbabu.com\/blog\/wp-json\/wp\/v2\/tags?post=23856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}