Hệ thống Trạm Sạc Xe Điện
EV Charging Station Backend
Backend OCPP 1.6/2.0 cho cụm 18 trụ sạc — quản lý phiên, tariff theo giờ, đối soát thanh toán.
Bài toán
Đối tác triển khai cụm sạc thí điểm cho fleet 40 xe điện giao hàng. Trụ sạc ABB & Schneider chuẩn OCPP, nhưng phần mềm quản lý của hãng đắt + lock-in. Cần backend riêng để tự kiểm soát tariff và đối soát thanh toán Momo/VietQR.
Kiến trúc
OCPP 1.6 JSON over WebSocket (server side) → Python aiohttp → Postgres (sessions) + Redis (state cache) → tariff engine TOU 24h → webhook Momo/VietQR ↔ ledger. Auto-reconcile cuối ngày, mismatch >0.5% gửi report.
Stack & lý do
- OCPP 1.6 + 2.0 dual support: trụ ABB là 1.6, Schneider là 2.0 → server tự nhận diện qua handshake.
- aiohttp cho WebSocket: nhẹ, tích hợp tốt asyncio.
- Tariff TOU: 4 khung giá (off-peak/normal/peak/super-peak), config qua JSON hot-reload.
Kết quả (5 tháng vận hành)
| Metric | Số liệu |
|---|---|
| Phiên sạc | 14.300 |
| Uptime backend | 99.7% |
| Mismatch tài chính | 0.12% |
| Trung bình kWh/phiên | 24.8 |
Bài học
OCPP version handshake phải robust — trụ ABB report 1.6 nhưng dùng vài extension 2.0. Idempotency key cho transaction cực kỳ quan trọng (mất WebSocket reconnect dễ duplicate).