OCPP 1.6 / 2.0.1 · OCPI 2.2.1 · self-hosted

One charging network. Every party on the network, covered.

A self-hosted platform for running EV charge points end to end — the operator dashboard, the driver's charging app, a portal for whoever hosts the charger, and roaming to other networks — all backed by one shared database and five focused services.

5
services, one Mongo db
4
apps for 4 audiences
2.2.1
OCPI roaming spec
1.6 / 2.0.1
OCPP protocol versions

Architecture

Five services, one shared database

Each service fronts a different audience and protocol, but they all read and write the same MongoDB collections directly — no internal message bus, no duplicated state. A few calls cross service boundaries where one audience's action has to reach the charge point itself.

%%{init: {
  "theme":"base",
  "themeVariables": {
    "background":"#11150f",
    "primaryColor":"#12261c",
    "primaryTextColor":"#eef1ea",
    "primaryBorderColor":"#3fd694",
    "secondaryColor":"#171b14",
    "tertiaryColor":"#171b14",
    "lineColor":"#aeb5a6",
    "textColor":"#eef1ea",
    "fontFamily":"IBM Plex Mono, monospace",
    "fontSize":"15px"
  },
  "flowchart": { "htmlLabels": false, "curve": "basis", "nodeSpacing": 55, "rankSpacing": 90, "padding": 14 }
}}%%
flowchart LR
  subgraph actors[ ]
    direction TB
    CP["⚡ Charge Points
    physical hardware"]
    BR["🌐 Browsers
    admin · driver · owner"]
    RP["🤝 Roaming Partners
    other OCPI networks"]
  end

  subgraph services[ ]
    direction TB
    WS["ocpp_ws
    WebSocket + control API"]
    DB["dashboard
    Flask + Jinja2"]
    FA["fastapi
    async REST + JWT"]
    OC["ocpi
    CPO + eMSP"]
  end

  Mongo[("MongoDB
  shared by all 5 services")]

  CP -- "OCPP 1.6 / 2.0.1" --> WS
  BR -- "pages" --> DB
  BR -- "driver actions" --> FA
  RP <-- "OCPI 2.2.1" --> OC

  DB -.->|control API| WS
  OC -.->|control API| WS
  FA -.->|roaming bridge| OC

  WS --> Mongo
  DB --> Mongo
  FA --> Mongo
  OC --> Mongo

  classDef svc fill:#12261c,stroke:#3fd694,color:#eef1ea
  classDef actor fill:#171b14,stroke:#232922,color:#eef1ea
  classDef store fill:#171b14,stroke:#3fd694,color:#eef1ea
  class WS,DB,FA,OC svc
  class CP,BR,RP actor
  class Mongo store
external traffic internal service call shared MongoDB access

Screens

What each audience actually sees

Live captures from a running instance — real sessions, real roaming partners, real charge points, not mockups.


Features

Built for four audiences, not one

Most OCPP backends stop at "connect a charger." This one also covers who's charging, who owns the charger, and who else's network it can roam onto.

🖥️

Operators

Admin Dashboard · :5050
  • Live operations viewactive sessions, faulted connectors, and today's revenue on one screen.
  • Fleet managementstations, connectors, vehicles, users, RFID tags, and remote start/stop control.
  • Payments & auditsession/payment history, wallet transactions, and a full audit log.
  • Public setup guidea no-login walkthrough for connecting a new charge point, in 5 languages.
📱

EV Drivers

EV Driver App · zero install
  • Scan and chargea QR code at the charger opens a mobile web page, no app store required.
  • Budget-based chargingset a spend limit, watch live energy and cost, stop any time.
  • Nearby chargersgeolocation-based search across the local network and roaming partners.
  • Roaming, transparentlystart a session on a partner network the same way as on the home network.
🔌

Charge Point Owners

Owner App · same credential as the charger
  • No separate accountlogs in with the exact OCPP Basic Auth password already on the charger.
  • Revenue & statustoday's and all-time earnings, live connector state, recent sessions.
  • Self-service pricingset the rate per kWh, or hide a connector for maintenance.
  • One-tap password resetgenerates an OCPP-compliant key and pushes it to the charger live.
🤝

Roaming Partners

OCPI 2.2.1 · CPO + eMSP, both roles
  • Standard onboardingthe OCPI Credentials handshake registers both directions in one call.
  • Full module setLocations, Tariffs, Tokens, Sessions, CDRs, and remote-start/stop Commands.
  • Durable settlementsessions and CDRs push through a retrying outbox, no lost billing data.
  • Hub-mode readyroutes through a roaming hub or bilaterally, same code path either way.
FlaskFastAPIMongoDB / Motor / PyMongo python-ocppAlpine.jsDocker Compose OCPP 1.6 & 2.0.1OCPI 2.2.1

Get in touch

Questions about running this on your own network?

Tell us your site, your charger count, and your timeline — Simplico builds and operates platforms like this one for EV charging operators across Thailand and SEA.

LINE
ID: iiitum1984
WhatsApp
+66 83 001 0222

Bangkok-based · Thai & English · 48-hour scoped proposal turnaround

Email us Call us WhatsApp LINE: iiitum1984 LINE