Developer

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.

OCPP 1.6 & 2.0.1SP 1–3HMAC SHA-256
verify-webhook.jsNode.js
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);
}
OCPP

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.

1.6

OCPP 1.6 (JSON)

Versi yang paling luas dipakai di pasar. Sesi memakai StartTransaction/StopTransaction, konfigurasi lewat GetConfiguration/ChangeConfiguration.

2.0.1

OCPP 2.0.1

Model perangkat yang lebih kaya: sesi lewat TransactionEvent, konfigurasi lewat GetVariables/SetVariables, dan event keamanan.

Koneksi chargerOCPP-J
# 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, … }]
KelompokOCPP 1.6OCPP 2.0.1
Koneksi & identitasBootNotificationHeartbeatBootNotificationHeartbeat
Status konektorStatusNotificationStatusNotificationNotifyEvent
Otorisasi RFIDAuthorizeAuthorize
Sesi chargingStartTransactionStopTransactionTransactionEvent
EnergiMeterValuesMeterValuesTransactionEvent
Perintah jarak jauhRemoteStartTransactionRemoteStopTransactionResetChangeAvailabilityTriggerMessageRequestStartTransactionRequestStopTransactionResetChangeAvailabilityTriggerMessage
KonfigurasiGetConfigurationChangeConfigurationGetVariablesSetVariablesNotifyReport
Firmware & diagnostikUpdateFirmwareFirmwareStatusNotificationDiagnosticsStatusNotificationUpdateFirmwareFirmwareStatusNotificationLogStatusNotification
KeamananSecurity Profile 1–3Security Profile 1–3SecurityEventNotification
Keamanan koneksi

Security Profile 1–3

Pilih tingkat keamanan per stasiun sesuai kemampuan charger dan kebijakan TI Anda.

Security Profile 1

Basic authentication

Charger mengirim ID stasiun dan kata sandi lewat HTTP Basic Auth. Cocok untuk jaringan tertutup atau tahap uji.

Security Profile 2

TLS + basic auth

Koneksi WebSocket terenkripsi TLS (wss://); charger memverifikasi sertifikat server dan tetap memakai kata sandi.

Security Profile 3

TLS + sertifikat klien

Autentikasi dua arah (mTLS): charger membuktikan identitasnya dengan sertifikat klien. Sertifikat dikelola dari dashboard.

Arsitektur

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.

Aplikasi selulerDashboard webREST + webhook

Lapisan platform

Layanan modular: stasiun, konektor, tarif, transaksi, dompet, pembayaran, bagi hasil, notifikasi, dan analitik.

ModularMulti-tenantLedger append-only

Lapisan perangkat

Gateway OCPP menerima koneksi WebSocket dari charger, mengenali versi protokol, mengautentikasi sesuai Security Profile, lalu meneruskan pesan.

OCPP 1.6OCPP 2.0.1WebSocket
Open API

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.

ScopeAkses
cs:readMembaca data stasiun dan konektor beserta statusnya.
cs:writeMengubah data atau mengirim perintah ke stasiun.
tx:readMembaca transaksi dan sesi charging.
token:readMembaca token atau kartu RFID.
  • Autentikasi lewat Authorization: Bearer atau X-API-Key
  • Key bisa dinonaktifkan atau dihapus kapan saja
  • Setiap key terikat pada tenant Anda
  • Dokumentasi endpoint lengkap diberikan saat akses API diaktifkan
Autentikasi API keyHTTP
# 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>"
Webhook

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.test untuk menguji endpoint
POST https://sistem-anda.example/webhooks/evoneJSON
// 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" }
}
verify-webhook.jsNode.js
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 data

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.