Standar terbuka. Siap diintegrasikan.
Charger berbicara dengan EVONE lewat OCPP 1.6 dan 2.0.1. Sistem Anda berbicara lewat Open API dan webhook bertanda tangan. Semuanya dirancang aman, terisolasi per tenant, dan mudah diaudit.
import crypto from 'node:crypto';
// body = Buffer mentah, secret = whsec_…
export function verifyEvone(body, h, secret) {
const ts = h['x-evone-timestamp'];
const mac = crypto
.createHmac('sha256', secret)
.update(`${ts}.`).update(body)
.digest('hex');
const a = Buffer.from('sha256=' + mac);
const b = Buffer.from(h['x-evone-signature'] || '');
const age = Date.now() / 1000 - Number(ts);
return Math.abs(age) < 300
&& a.length === b.length
&& crypto.timingSafeEqual(a, b);
}Dua versi OCPP, satu cara mengelola
Open Charge Point Protocol adalah standar komunikasi terbuka antara charger dan CSMS. Setiap stasiun memilih versinya sendiri saat onboarding, dan keduanya dikelola dengan cara yang sama di dashboard.
OCPP 1.6 (JSON)
Versi yang paling luas dipakai di pasar. Sesi memakai StartTransaction/StopTransaction, konfigurasi lewat GetConfiguration/ChangeConfiguration.
OCPP 2.0.1
Model perangkat yang lebih kaya: sesi lewat TransactionEvent, konfigurasi lewat GetVariables/SetVariables, dan event keamanan.
# Endpoint per stasiun (didapat saat onboarding)
wss://csms.evone.id/ws/CS-JKT-014
Sec-WebSocket-Protocol: ocpp1.6 # atau ocpp2.0.1
// Charger → CSMS (OCPP 1.6, CALL)
[2, "19223201", "BootNotification", {
"chargePointVendor": "Merek A",
"chargePointModel": "AC-22"
}]
// CSMS → Charger (CALLRESULT)
[3, "19223201", { "status": "Accepted", "interval": 30, … }]| Kelompok | OCPP 1.6 | OCPP 2.0.1 |
|---|---|---|
| Koneksi & identitas | BootNotificationHeartbeat | BootNotificationHeartbeat |
| Status konektor | StatusNotification | StatusNotificationNotifyEvent |
| Otorisasi RFID | Authorize | Authorize |
| Sesi charging | StartTransactionStopTransaction | TransactionEvent |
| Energi | MeterValues | MeterValuesTransactionEvent |
| Perintah jarak jauh | RemoteStartTransactionRemoteStopTransactionResetChangeAvailabilityTriggerMessage | RequestStartTransactionRequestStopTransactionResetChangeAvailabilityTriggerMessage |
| Konfigurasi | GetConfigurationChangeConfiguration | GetVariablesSetVariablesNotifyReport |
| Firmware & diagnostik | UpdateFirmwareFirmwareStatusNotificationDiagnosticsStatusNotification | UpdateFirmwareFirmwareStatusNotificationLogStatusNotification |
| Keamanan | Security Profile 1–3 | Security Profile 1–3SecurityEventNotification |
Security Profile 1–3
Pilih tingkat keamanan per stasiun sesuai kemampuan charger dan kebijakan TI Anda.
Security Profile 1
Basic authenticationCharger mengirim ID stasiun dan kata sandi lewat HTTP Basic Auth. Cocok untuk jaringan tertutup atau tahap uji.
Security Profile 2
TLS + basic authKoneksi WebSocket terenkripsi TLS (wss://); charger memverifikasi sertifikat server dan tetap memakai kata sandi.
Security Profile 3
TLS + sertifikat klienAutentikasi dua arah (mTLS): charger membuktikan identitasnya dengan sertifikat klien. Sertifikat dikelola dari dashboard.
Tiga lapisan, tanggung jawab yang jelas
Setiap lapisan bisa berkembang tanpa saling mengganggu — charger baru, fitur baru, atau integrasi baru.
Lapisan aplikasi
Aplikasi pengemudi, dashboard web, dan Open API untuk sistem pihak ketiga memakai API yang sama.
Lapisan platform
Layanan modular: stasiun, konektor, tarif, transaksi, dompet, pembayaran, bagi hasil, notifikasi, dan analitik.
Lapisan perangkat
Gateway OCPP menerima koneksi WebSocket dari charger, mengenali versi protokol, mengautentikasi sesuai Security Profile, lalu meneruskan pesan.
API key ber-scope untuk sistem Anda
Buat API key dari dashboard, beri nama, lalu pilih scope seperlunya. Key mentah hanya ditampilkan sekali saat dibuat dan disimpan dalam bentuk hash.
| Scope | Akses |
|---|---|
cs:read | Membaca data stasiun dan konektor beserta statusnya. |
cs:write | Mengubah data atau mengirim perintah ke stasiun. |
tx:read | Membaca transaksi dan sesi charging. |
token:read | Membaca token atau kartu RFID. |
- Autentikasi lewat
Authorization: BeareratauX-API-Key - Key bisa dinonaktifkan atau dihapus kapan saja
- Setiap key terikat pada tenant Anda
- Dokumentasi endpoint lengkap diberikan saat akses API diaktifkan
# Kirim API key di header Authorization (disarankan)…
curl https://<host-api>/<endpoint> \
-H "Authorization: Bearer <API_KEY>"
# …atau di header X-API-Key
curl https://<host-api>/<endpoint> \
-H "X-API-Key: <API_KEY>"Event real-time, bertanda tangan HMAC
Daftarkan URL HTTPS Anda, pilih event, dan simpan secret webhook. Setiap pengiriman ditandatangani agar Anda bisa memastikan asalnya.
Event
transaction.completedSesi charging selesai dan transaksi tercatat.payment.failedPembayaran sebuah transaksi gagal.station.offlineStasiun berhenti mengirim heartbeat.connector.faultedKonektor melaporkan status Faulted.firmware.availableVersi firmware baru tersedia untuk charger.webhook.testEvent uji yang dikirim dari dashboard.
Header setiap pengiriman
X-Evone-EventNama event.X-Evone-DeliveryID pengiriman — tetap sama saat dikirim ulang, pakai untuk deduplikasi.X-Evone-TimestampWaktu Unix pengiriman.X-Evone-Signaturesha256=+ HMAC-SHA256 dari<timestamp>.<body>.
- Hanya URL HTTPS publik; alamat lokal & privat ditolak
- Riwayat pengiriman dan kode respons tersimpan
- Pengiriman yang gagal dapat dikirim ulang (retry) dari dashboard
- Kirim event
webhook.testuntuk menguji endpoint
// Header: X-Evone-Event, X-Evone-Delivery, X-Evone-Timestamp,
// X-Evone-Signature: sha256=…
{
"event": "transaction.completed",
"station_id": "CS-JKT-001",
"connector": 2,
"energy_kwh": 18.4,
"duration_s": 1267,
"amount_idr": 48760,
"id_token": { "type": "RFID", "group": "ARMADA" }
}import crypto from 'node:crypto';
// body = Buffer mentah, secret = whsec_…
export function verifyEvone(body, h, secret) {
const ts = h['x-evone-timestamp'];
const mac = crypto
.createHmac('sha256', secret)
.update(`${ts}.`).update(body)
.digest('hex');
const a = Buffer.from('sha256=' + mac);
const b = Buffer.from(h['x-evone-signature'] || '');
const age = Date.now() / 1000 - Number(ts);
return Math.abs(age) < 300
&& a.length === b.length
&& crypto.timingSafeEqual(a, b);
}Keamanan berlapis, dari charger sampai rekening
RBAC
Hak akses berbasis peran memisahkan admin, operator, mitra, dan pelanggan.
Ledger append-only
Mutasi saldo tidak pernah ditimpa; setiap koreksi tercatat sebagai entri baru yang bisa diaudit.
Isolasi tenant
Setiap tenant hanya bisa mengakses stasiun, pengguna, dan transaksinya sendiri.
Webhook bertanda tangan
HMAC-SHA256 dengan timestamp untuk mencegah pemalsuan dan replay.
Kredensial terlindungi
API key disimpan sebagai hash; rekening ditampilkan tersamarkan.
Koneksi charger aman
TLS dan sertifikat klien lewat Security Profile 2 dan 3.
Mau menghubungkan charger atau sistem Anda?
Tim teknis kami siap membahas integrasi charger, ERP, fleet management, atau aplikasi internal Anda.