Skip to content
MyOCPP

MyOCPP

What is MyOCPP?

MyOCPP is a complete electric vehicle charging management platform that speaks the Open Charge Point Protocol (OCPP). It connects physical wallboxes and charging stations to a central management system and exposes everything through two frontends: a Blazor Server web portal for full administration and a .NET MAUI mobile app for on-the-go charging control.

The system handles the entire lifecycle — stations boot and authenticate via OCPP over WebSocket, the backend processes every protocol message and persists transaction data, users control sessions from their phone or browser in real time, and scheduled charging kicks off automatically without any manual action.

OCPP 1.6J (JSON) and OCPP 2.0 are both supported. A single backend handles both protocol versions in parallel.

Tech Stack

LayerChoice
Backend API.NET 10, ASP.NET Core, WebSockets
Web UIBlazor Server, MudBlazor 9.3, ApexCharts
Mobile.NET MAUI (Android, iOS, macOS, Windows)
ArchitectureClean Architecture + CQRS (MediatR)
DatabaseSQL Server, Entity Framework Core
Real-timeSignalR (hub → web and mobile clients)
Message QueueRabbitMQ (OCPP gateway ↔ web app)
AuthASP.NET Identity + JWT refresh tokens
CI/CDAzure Pipelines → Azure Container Registry
VersioningNerdbank.GitVersioning (git-derived semver)

Architecture

The solution is split into four independently deployable services:

Altbrot.Mobility.Api          — OCPP WebSocket gateway
                                ws://host:8081/OCPP/{stationId}

Altbrot.Mobility.Web.App      — Blazor Server management portal
                                http://host:8080

Altbrot.Mobility.Mobile.Api   — REST + JWT API for the mobile client

Altbrot.Mobility.Mobile.App   — .NET MAUI cross-platform mobile app

The OCPP gateway and the web portal are decoupled via RabbitMQ. Inbound messages from charging stations arrive on the api.csms / api.evse queues; outbound commands leave on webapp.csms / webapp.evse. Neither service needs a direct connection to the other.

Real-time updates reach browser and mobile clients via SignalR. When a station sends a StatusNotification or a transaction event, the new connector state is broadcast to all connected clients immediately.

Internally all four services follow Clean Architecture. The Application layer is composed entirely of CQRS request types (*Command, *Query) dispatched through a MediatR pipeline with three cross-cutting behaviours: FluentValidation, authorization checks, and structured exception handling.

Explore

Last updated on