Реализация мониторинга зарядной станции EV через мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация мониторинга зарядной станции EV через мобильное приложение
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    864
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация мониторинга зарядной станции EV через мобильное приложение

Зарядная станция для электромобилей работает по OCPP — Open Charge Point Protocol. OCPP 1.6 — JSON поверх WebSocket, OCPP 2.0.1 — более сложная версия с улучшенной безопасностью. Мобильное приложение не говорит с зарядкой напрямую: между ними — Central System (CSMS), который управляет сессиями и хранит историю. Задача разработчика: интеграция с CSMS через REST API или WebSocket, плюс опционально — работа с OCPI для роуминга между сетями.

Архитектура: 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.

Мониторинг сессии зарядки

Ключевые данные сессии: статус коннектора (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+ точках карта тормозит при зуме.

Оплата и тарификация

Тарификация в EV-приложениях — сложная часть. Станция может тарифицировать по кВт·ч, по времени, с минимальной суммой сессии или по комбинированной схеме. OCPI TariffElement описывает все варианты. Оплата — через Stripe или локальный платёжный шлюз, интегрированный с CSMS.

Разработка приложения для мониторинга и управления зарядными станциями с интеграцией в существующий CSMS: 4-6 недель. Разработка с нуля включая CSMS-интеграцию, карту, оплату и роуминг через OCPI: 3-4 месяца. Стоимость рассчитывается после анализа стека и требований.