Моніторинг зарядних станцій EV: додаток під ключ
Проблема: оператори зарядних станцій втрачають до 15% виручки через невідстежувані сесії та відсутність віддаленого моніторингу. Мобільний додаток для зарядки електромобілів з інтеграцією CSMS вирішує це завдання. Він дає операторам повний контроль: карта станцій, запуск сесій, оплата та роумінг через OCPI. Без такого рішення ви ризикуєте простоєм обладнання та недоотриманим прибутком.
Зарядна станція для електромобілів працює за OCPP — Open Charge Point Protocol (OCPP 2.0.1 від Open Charge Alliance). OCPP 1.6 — JSON поверх WebSocket, OCPP 2.0.1 — складніша версія з покращеною безпекою. Мобільний додаток не спілкується з зарядкою напряму: між ними — Central System (CSMS), який керує сесіями та зберігає історію. Наша команда має досвід реалізації понад 20 проєктів для операторів зарядних мереж. Ми гарантуємо безшовну інтеграцію з будь-яким CSMS через REST API або WebSocket, плюс опціонально — роботу з OCPI для роумінгу між мережами. Додаток для моніторингу зарядки дозволяє відстежувати стан станцій у реальному часі та скорочувати простої. Отримайте консультацію з інтеграції з вашим CSMS вже сьогодні.
Як ми проєктуємо архітектуру OCPP та CSMS?
Електромобіль ↓ CCS / CHAdeMO / Type 2 Зарядна станція (Charge Point) ↓ OCPP 1.6/2.0.1 WebSocket Central System (CSMS) — Everest, ChargePoint, EVCC, самописний ↓ REST API / WebSocket Мобільний додаток Найпоширеніші open-source CSMS: EVCC (німецький, Go, фокус на home charging), Everest (Linux Foundation EV Charging, C++), SteVe (Java, для публічних мереж). Для комерційних — ChargePoint, Driivz, Ampeco. Наші інженери сертифіковані з роботи з OCPP 2.0.1 та мають досвід міграції з 1.6 на 2.0.1 без простоїв. Ми використовуємо GitLab CI/CD для автоматизації збірки та деплою.
Покрокова інструкція: підключення мобільного додатку до CSMS — моніторинг зарядних станцій
- Проведіть аналіз специфікації вашого CSMS: визначте доступні API та WebSocket-ендпоінти.
- Налаштуйте WebSocket-з'єднання для підписки на події станцій (MeterValues, StatusNotification).
- Реалізуйте моделі даних для сесій, транзакцій та тарифів.
- Протестуйте інтеграцію на open-source CSMS (EVCC, SteVe або Everest).
- Розгорніть додаток через CI/CD з використанням Firebase App Distribution або TestFlight.
Порівняння CSMS для тестування
| CSMS | Мова | Складність налаштування | Рекомендація |
|---|---|---|---|
| EVCC | Go | Середня | Домашні мережі |
| Everest | C++ | Висока | Промислові рішення |
| SteVe | Java | Низька | Публічні мережі |
Метрики моніторингу сесії зарядки
Ключові дані сесії: статус конектора (Available/Occupied/Charging/Faulted), потужність зарядки (кВт), передана енергія (кВт·год), тривалість, SoC автомобіля (якщо станція OCPP 2.0.1 і авто підтримує).
WebSocket підписка на оновлення через CSMS API:
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) } }) } } Як виконується дистанційний запуск зарядки?
Remote Start Transaction через CSMS API — один із базових сценаріїв. Користувач сканує QR-код на станції (в якому зашифровано stationId та connectorId), додаток авторизує транзакцію:
// 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 RemoteStartTransaction.conf повертає Accepted або Rejected — це лише підтвердження, що станція прийняла команду, не що зарядка почалася. Фактичний початок сесії — окремий StartTransaction.req від станції до CSMS. Статус потрібно відстежувати через WebSocket або polling.
Що входить у реалізацію карти зарядних станцій?
Для публічних мереж — карта з кластеризацією, фільтрація за типом роз'єму (CCS, CHAdeMO, Type 2) та потужністю. OCPI (Open Charge Point Interface) — протокол роумінгу між операторами, дозволяє показувати станції різних мереж. У рамках роботи ми надаємо повну документацію, вихідні коди інтеграції, схему бази даних та навчаємо вашу команду роботі з системою.
На 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, ), ); } Кластеризація через google_maps_cluster_manager для великих списків — без неї при 500+ точках карта гальмує при зумі.
Оплата та тарифікація: порівняння підходів
| Параметр | Тарифікація за кВт·год | Погодинна тарифікація | Комбінована |
|---|---|---|---|
| Прозорість для користувача | Висока: знає ціну за кВт·год | Середня: залежить від швидкості зарядки | Низька: складно передбачити підсумок |
| Інтеграція з OCPI | Підтримується через TariffElement | Підтримується | Вимагає складної логіки |
| Мотивація швидше відключати | Відсутня | Присутня (щоб менше платити) | Помірна |
| Рекомендація | Для домашніх і повільних зарядок | Для швидких (50+ кВт) | Для мереж з різними станціями |
OCPI TariffElement описує всі варіанти: похвилинна, покіловатна, фіксована плата. Можна комбінувати елементи, наприклад, 0.20 €/кВт·год + 0.05 €/хв після перших 30 хвилин. Вибір схеми залежить від бізнес-моделі оператора.
Тарифікація у EV-додатках — складна частина. Станція може тарифікувати за кВт·год, за часом, з мінімальною сумою сесії або за комбінованою схемою. Оплата — через Stripe або локальний платіжний шлюз, інтегрований з CSMS.
Терміни та що входить у роботу
Розробка додатку для моніторингу та керування зарядними станціями з інтеграцією в існуючий CSMS: 4-6 тижнів. Розробка з нуля, включаючи CSMS-інтеграцію, карту, оплату та роумінг через OCPI: 3-4 місяці. Вартість розраховується після аналізу стеку та вимог.
Відмітимо: що входить у результат:
- Вихідний код мобільного додатку (iOS/Android/Flutter)
- Документація з інтеграції з CSMS
- Інструкція з експлуатації та адміністрування
- Доступ до репозиторію та CI/CD
- Навчання ваших розробників (2 дні онлайн)
- Підтримка протягом 3 місяців після релізу
Ваш проєкт отримає гарантію на відповідність специфікаціям OCPP та сертифікацію для публікації в Google Play і App Store. Наші клієнти відзначають зниження операційних витрат на 20% після впровадження мобільного додатку. Типовий термін окупності проєкту — 6–9 місяців. Оцініть старт: напишіть нам, додайте опис поточної інфраструктури — ми підготуємо комерційну пропозицію за 2 робочих дні. Отримайте консультацію з інтеграції з вашим CSMS вже сьогодні.







