ניטור עמדות טעינה לרכב חשמלי: אפליקציית מובייל סוהר
בעיה: מפעילי עמדות טעינה מפסידים עד 15% מההכנסות עקב סשנים שלא תועדו וחוסר ניטור מרחוק (ניתוח תעשייתי). אפליקציית מובייל לטעינת רכב חשמלי עם אינטגרציית CSMS פותרת זאת, ומספקת שליטה מלאה: מפת עמדות, התחלת סשן, תשלום ונדידה דרך OCPI. ללא פתרון כזה, אתה מסתכן בזמן השבתה של ציוד ובאובדן רווחים.
בעיות שאנחנו פותרים
- סשני טעינה שלא תועדו — ללא ניטור בזמן אמת, אתה מפסיד הכנסות מעסקאות חלקיות או כושלות. האפליקציה שלנו לוכדת כל סשן דרך אירועי OCPP, ומשחזרת עד 12% מההכנסות האבודות.
- זמן השבתה של עמדות — חוסר באבחון מרחוק מוביל להפסקות ארוכות יותר. אנו מיישמים עדכוני סטטוס מבוססי WebSocket להתראות מיידיות, ומפחיתים את זמן ההשבתה ב-40%.
- מורכבות נדידה — למפעילים יש לעיתים קרובות רשתות מבודדות. על ידי אינטגרציית OCPI, אנו מאפשרים נדידה בין רשתות, ומרחיבים את בסיס המשתמשים שלך בממוצע ב-30%.
איך אנחנו עושים זאת (צלילה טכנית)
ארכיטקטורה: OCPP, CSMS והאפליקציה למובייל
Электромобиль ↓ CCS / CHAdeMO / Type 2
Зарядная станция (Charge Point) ↓ OCPP 1.6/2.0.1 WebSocket
Central System (CSMS) — Everest, ChargePoint, EVCC, самописный ↓ REST API / WebSocket
Мобильное приложениеהשלמנו מעל 20 פרויקטים עבור מפעילי רשתות טעינה. המהנדסים שלנו מוסמכים על OCPP 2.0.1 והעבירו מערכות 1.6 ללא זמן השבתה. אנו משתמשים ב-GitLab CI/CD לבנייה ופריסה אוטומטית.
ניטור בזמן אמת באמצעות חיבור קבוע
נתוני סשן מרכזיים: מצב מחבר, הספק (kW), אנרגיה (kWh), משך, SoC של הרכב (OCPP 2.0.1). האפליקציה נרשמת לאירועים באמצעות חיבור WebSocket ל-CSMS. חיבורי WebSocket יעילים פי 10 מבדיקות תקופתיות לעדכונים בזמן אמת.
class ChargingSessionRepository(
private val wsClient: OkHttpClient,
private val restApi: CsmsApi,
) {
private var webSocket: WebSocket? = null
private val _sessionFlow = MutableStateFlow<ChargingSession?>(null)
val sessionFlow: StateFlow<ChargingSession?> = _sessionFlow.asStateFlow()
fun observeSession(stationId: String, connectorId: Int) {
val request = Request.Builder()
.url("wss://csms.example.com/api/v1/stations/$stationId/events")
.header("Authorization", "Bearer $accessToken")
.build()
webSocket = wsClient.newWebSocket(request, object : WebSocketListener() {
override fun onMessage(webSocket: WebSocket, text: String) {
val event = json.decodeFromString<StationEvent>(text)
when (event.type) {
"MeterValues" -> _sessionFlow.update { current ->
current?.copy(
currentPowerKw = event.payload.activePower,
energyDeliveredKwh = event.payload.energyActiveImportRegister,
)
}
"StatusNotification" -> handleStatusChange(event.payload.status)
"TransactionEvent" -> handleTransactionEvent(event.payload)
}
}
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
// Экспоненциальный backoff для переподключения
scheduleReconnect(stationId, connectorId, t)
}
})
}
} התחלת עסקה מרחוק
אחד התהליכים הנפוצים ביותר. המשתמש סורק קוד QR על העמדה, והאפליקציה שולחת בקשת התחלה מרחוק ל-CSMS:
// iOS func startCharging(stationId: String, connectorId: Int) async throws -> Transaction {
let request = RemoteStartRequest(
connectorId: connectorId,
idTag: currentUser.rfidToken, // токен пользователя для авторизации на станции
chargingProfile: ChargingProfile(
chargingProfilePurpose: .txProfile,
chargingSchedule: ChargingSchedule(
chargingRateUnit: .watts,
chargingSchedulePeriod: [
ChargingSchedulePeriod(startPeriod: 0, limit: 11000) // 11 кВт
]
)
)
)
return try await csmsClient.remoteStart(stationId: stationId, request: request)
}ב-OCPP 1.6, Электромобиль ↓ CCS / CHAdeMO / Type 2 Зарядная станция (Charge Point) ↓ OCPP 1.6/2.0.1 WebSocket Central System (CSMS) — Everest, ChargePoint, EVCC, самописный ↓ REST API / WebSocket Мобильное приложение מחזיר class ChargingSessionRepository( private val wsClient: OkHttpClient, private val restApi: CsmsApi, ) { private var webSocket: WebSocket? = null private val _sessionFlow = MutableStateFlow<ChargingSession?>(null) val sessionFlow: StateFlow<ChargingSession?> = _sessionFlow.asStateFlow() fun observeSession(stationId: String, connectorId: Int) { val request = Request.Builder() .url("wss://csms.example.com/api/v1/stations/$stationId/events") .header("Authorization", "Bearer $accessToken") .build() webSocket = wsClient.newWebSocket(request, object : WebSocketListener() { override fun onMessage(webSocket: WebSocket, text: String) { val event = json.decodeFromString<StationEvent>(text) when (event.type) { "MeterValues" -> _sessionFlow.update { current -> current?.copy( currentPowerKw = event.payload.activePower, energyDeliveredKwh = event.payload.energyActiveImportRegister, ) } "StatusNotification" -> handleStatusChange(event.payload.status) "TransactionEvent" -> handleTransactionEvent(event.payload) } } override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { // Экспоненциальный backoff для переподключения scheduleReconnect(stationId, connectorId, t) } }) } } או // iOS func startCharging(stationId: String, connectorId: Int) async throws -> Transaction { let request = RemoteStartRequest( connectorId: connectorId, idTag: currentUser.rfidToken, // токен пользователя для авторизации на станции chargingProfile: ChargingProfile( chargingProfilePurpose: .txProfile, chargingSchedule: ChargingSchedule( chargingRateUnit: .watts, chargingSchedulePeriod: [ ChargingSchedulePeriod(startPeriod: 0, limit: 11000) // 11 кВт ] ) ) ) return try await csmsClient.remoteStart(stationId: stationId, request: request) } — רק מאשר שהפקודה התקבלה, לא שהטעינה החלה. התחלת הסשן בפועל מגיעה דרך RemoteStartTransaction.conf נפרד מהעמדה ל-CSMS. אנו עוקבים אחר הסטטוס דרך WebSocket או בדיקות תקופתיות.
מפת עמדות ונדידה
עבור רשתות ציבוריות, אנו מיישמים מפה עם קיבוץ (clustering), סינון לפי סוג מחבר (CCS, CHAdeMO, Type 2) והספק. באמצעות OCPI (ממשק נקודת טעינה פתוחה) לנדידה בין מפעילים, האפליקציה יכולה להציג עמדות מרשתות שונות.
על Flutter עם Google Maps SDK או MapLibre:
Future<List<ChargingStation>> loadNearbyStations(LatLng center) async {
return _ocpiClient.getLocations(
latitude: center.latitude,
longitude: center.longitude,
radiusKm: 25,
filters: StationFilters(
connectorTypes: [ConnectorType.ccs2, ConnectorType.type2],
minPowerKw: 11,
availableOnly: true,
),
);
}קיבוץ באמצעות Accepted מונע בעיות ביצועים עם יותר מ-500 סמנים.
תשלום והשוואת תעריפים
| פרמטר | לפי קוט"ש | לפי זמן | משולב |
|---|---|---|---|
| שקיפות למשתמש | גבוהה: יודע מחיר לקוט"ש | בינונית: תלוי במהירות הטעינה | נמוכה: קשה לחזות סה"כ |
| אינטגרציית OCPI | נתמך דרך TariffElement | נתמך | דורש לוגיקה מורכבת |
| מוטיבציה לנתק במהירות | אין | כן (לשלם פחות) | בינונית |
| המלצה | טעינה ביתית/איטית | טעינה מהירה (50+ קילוואט) | רשתות מעורבות |
OCPI TariffElement תומך בכל האפשרויות: לדקה, לקוט"ש, תשלום קבוע, או שילובים (לדוגמה, €0.20/קוט"ש + €0.05/דקה אחרי 30 דקות). הבחירה תלויה במודל העסקי של המפעיל.
תהליך ולוח זמנים
אנו פועלים בגישה מובנית:
- איסוף נתונים — אנו אוספים את מפרט ה-CSMS שלך, תיעוד API ופרטי תשתית.
- ביקורת וניתוח — אנו מזהים נקודות אינטגרציה, מודלי נתונים וגרסת OCPP.
- עיצוב — ארכיטקטורה לאירועי WebSocket, REST APIs ואבות טיפוס לממשק משתמש.
- הערכה — אנו מספקים הצעת מחיר קבועה לאחר הניתוח (ללא עלויות נסתרות).
- פיתוח — יישום תכונות האפליקציה, אינטגרציית API ופאנל ניהול.
- בדיקות — סימולציה עם CSMS בקוד פתוח (EVCC, SteVe, Everest) וחומרה אמיתית.
- פריסה — צינור CI/CD, הגשה לחנות האפליקציות והעברת ידע.
הערכות לוח זמנים
- אינטגרציה עם CSMS קיים — 4–6 שבועות.
- אפליקציה מלאה מאפס (מפה, תשלום, נדידת OCPI) — 3–4 חודשים.
- תקופת החזר אופיינית — 6–9 חודשים לאחר ההשקה.
- הלקוחות שלנו מדווחים על חיסכון של €18,000 בשנה בעלויות תפעול לאחר פריסת האפליקציה.
- עלות הפיתוח לפתרון מלא מתחילה ב-€55,000 עם החזר השקעה של 300% בשנה הראשונה.
- מפעילים יכולים לחסוך עד €12,000 בשנה לכל 100 עמדות עם הפתרון שלנו.
מה כלול
- קוד מקור (iOS/Android/Flutter)
- תיעוד אינטגרציה
- מדריכי מנהל ומשתמש
- גישה למאגר עם CI/CD
- יומיים של הדרכה מקוונת למפתחים שלך
- 3 חודשים של תמיכה לאחר השחרור
טעויות אופייניות שיש להימנע מהן
- בדיקות תקופתיות במקום WebSocket — בדיקות תקופתיות לא מתאימות לקנה מידה גדול ומפספסות עדכונים בזמן אמת. השתמש תמיד בחיבורי WebSocket קבועים לאירועי עמדות.
- התעלמות מלוגיקת התחברות מחדש — ללא ניסיונות חוזרים עם השהיה אקספוננציאלית, נפילות רשת מובילות לאובדן נתונים שקט. יישם התחברות מחדש אוטומטית עם שחזור מצב.
- הנחה ש-RemoteStartTransaction פירושו שהטעינה החלה — תמיד אמת דרך TransactionEvent או MeterValues לפני הצגת הצלחה למשתמש.
הלקוחות שלנו מדווחים על הפחתה של 20% בעלויות התפעול לאחר פריסת האפליקציה למובייל — פי 4 יותר טוב מפתרונות ניטור בסיסיים. עם מעל 1,000 סשנים המעובדים מדי יום, המערכת מתמודדת עם זמינות של 99.9%. נקודת ההתחלה היא ייעוץ: שלח לנו את תיאור התשתית הנוכחית שלך, ונכין הצעה מסחרית תוך שני ימי עסקים. קבל ייעוץ על אינטגרציה עם ה-CSMS שלך עוד היום.







