Skip to main content

New Page

Спецификация системы управления EV зарядными станциями

1. Обзор системы

1.1 Архитектура системы

graph TB
    subgraph "Backend Infrastructure"
        CSMS[Central System Management Service]
        API[REST API Gateway]
        DB[(Database)]
        WS[WebSocket Handler]
    end
    
    subgraph "EV Charging Station"
        CP[Charge Point]
        MODEM[4G Modem]
        BATTERY[Battery Management]
        CONNECTOR[Charging Connector]
    end
    
    subgraph "External Systems"
        MOBILE[Mobile App]
        WEB[Web Dashboard]
        BILLING[Billing System]
    end
    
    MOBILE --> API
    WEB --> API
    API --> CSMS
    CSMS --> DB
    CSMS <--> WS
    WS <--> MODEM
    MODEM <--> CP
    CP --> BATTERY
    CP --> CONNECTOR
    CSMS --> BILLING

1.2 Протокол коммуникации

Протокол: OCPP 2.0.1 (Open Charge Point Protocol)
Транспорт: WebSocket Secure (WSS) over 4G
Формат данных: JSON
Аутентификация: Certificate-based authentication + API Keys

2. Компоненты системы

2.1 Backend Service (CSMS - Central System Management Service)

Обязанности:

  • Управление пулом зарядных станций
  • Обработка OCPP сообщений
  • Мониторинг состояния станций
  • Управление транзакциями зарядки
  • Аналитика и отчетность
  • Интеграция с внешними системами

2.2 EV Charging Station (Charge Point)

Обязанности:

  • Выполнение команд от CSMS
  • Отправка телеметрии и событий
  • Управление процессом зарядки
  • Локальная авторизация (offline mode)
  • Диагностика и самотестирование

3. OCPP Message Flow

3.1 Инициализация соединения

sequenceDiagram
    participant CP as Charge Point
    participant CSMS as Backend CSMS
    
    CP->>CSMS: WebSocket Connection
    CP->>CSMS: BootNotification
    CSMS->>CP: BootNotification Response (Accepted)
    CP->>CSMS: StatusNotification (Available)
    
    loop Heartbeat
        CP->>CSMS: Heartbeat
        CSMS->>CP: Heartbeat Response
    end

3.2 Получение состояния станции (Backend-инициированное)

sequenceDiagram
    participant CSMS as Backend CSMS
    participant CP as Charge Point
    
    Note over CSMS,CP: Запрос состояния батареи
    CSMS->>CP: GetReport (component: Battery)
    CP->>CSMS: GetReport Response
    CP->>CSMS: NotifyReport (Battery Status)
    
    Note over CSMS,CP: Запрос статуса зарядки
    CSMS->>CP: GetTransactionStatus
    CP->>CSMS: GetTransactionStatus Response
    
    Note over CSMS,CP: Запрос местоположения
    CSMS->>CP: GetLocationInfo
    CP->>CSMS: GetLocationInfo Response (GPS coordinates)

3.3 События от станции (Station-инициированные)

sequenceDiagram
    participant CP as Charge Point
    participant CSMS as Backend CSMS
    participant USER as End User
    
    Note over CP,CSMS: Начало зарядки
    USER->>CP: Подключение автомобиля
    CP->>CSMS: StatusNotification (Preparing)
    CP->>CSMS: TransactionEvent (Started)
    CSMS->>CP: TransactionEvent Response
    
    Note over CP,CSMS: Процесс зарядки
    loop Во время зарядки
        CP->>CSMS: MeterValues (Energy, Power, Voltage, Current)
        CP->>CSMS: StatusNotification (Charging)
    end
    
    Note over CP,CSMS: Ошибка зарядки
    CP->>CSMS: StatusNotification (Faulted)
    CP->>CSMS: NotifyEvent (Error Details)
    
    Note over CP,CSMS: Окончание зарядки
    USER->>CP: Отключение автомобиля
    CP->>CSMS: TransactionEvent (Ended)
    CP->>CSMS: StatusNotification (Available)
    CSMS->>CP: TransactionEvent Response

3.4 Удаленное управление

sequenceDiagram
    participant API as REST API
    participant CSMS as Backend CSMS
    participant CP as Charge Point
    
    Note over API,CP: Удаленный запуск зарядки
    API->>CSMS: POST /stations/{id}/start
    CSMS->>CP: RequestStartTransaction
    CP->>CSMS: RequestStartTransaction Response
    CP->>CSMS: TransactionEvent (Started)
    CSMS->>API: 200 OK
    
    Note over API,CP: Удаленная остановка зарядки
    API->>CSMS: POST /stations/{id}/stop
    CSMS->>CP: RequestStopTransaction
    CP->>CSMS: RequestStopTransaction Response
    CP->>CSMS: TransactionEvent (Ended)
    CSMS->>API: 200 OK

4. Детальная спецификация сообщений

4.1 Запросы Backend → Station

4.1.1 Получение состояния батареи

OCPP Message: GetReport

{
  "requestId": 1,
  "componentVariable": [
    {
      "component": {
        "name": "BatteryManagement"
      },
      "variable": {
        "name": "StateOfCharge"
      }
    },
    {
      "component": {
        "name": "BatteryManagement"
      },
      "variable": {
        "name": "BatteryVoltage"
      }
    }
  ]
}

Response: NotifyReport

{
  "requestId": 1,
  "generatedAt": "2025-07-12T10:30:00Z",
  "reportData": [
    {
      "component": {
        "name": "BatteryManagement"
      },
      "variable": {
        "name": "StateOfCharge"
      },
      "variableAttribute": {
        "value": "85",
        "unit": "Percent"
      }
    },
    {
      "component": {
        "name": "BatteryManagement"
      },
      "variable": {
        "name": "BatteryVoltage"
      },
      "variableAttribute": {
        "value": "48.2",
        "unit": "V"
      }
    }
  ]
}

4.1.2 Получение статуса зарядки

OCPP Message: GetTransactionStatus

{
  "transactionId": "TXN_123456"
}

Response:

{
  "ongoingIndicator": true,
  "messagesInQueue": false
}

4.1.3 Получение местоположения

OCPP Message: GetLocationInfo

{
  "requestId": 2
}

Response:

{
  "location": {
    "latitude": "55.7558",
    "longitude": "37.6176",
    "altitude": "156.0"
  },
  "timestamp": "2025-07-12T10:30:00Z"
}

4.2 События Station → Backend

4.2.1 Начало зарядки

OCPP Message: TransactionEvent

{
  "eventType": "Started",
  "timestamp": "2025-07-12T10:30:00Z",
  "transactionInfo": {
    "transactionId": "TXN_123456",
    "chargingState": "Charging"
  },
  "evse": {
    "id": 1,
    "connectorId": 1
  },
  "meterValue": [
    {
      "timestamp": "2025-07-12T10:30:00Z",
      "sampledValue": [
        {
          "value": "0.0",
          "measurand": "Energy.Active.Import.Register",
          "unit": "kWh"
        }
      ]
    }
  ]
}

4.2.2 Ошибка зарядки

OCPP Message: NotifyEvent

{
  "generatedAt": "2025-07-12T10:35:00Z",
  "eventData": [
    {
      "eventId": 1,
      "timestamp": "2025-07-12T10:35:00Z",
      "trigger": "Alerting",
      "eventType": "FaultDetected",
      "component": {
        "name": "ChargingStation"
      },
      "variable": {
        "name": "OverCurrentProtection"
      },
      "eventNotificationType": "Alert"
    }
  ]
}

4.2.3 Телеметрия во время зарядки

OCPP Message: MeterValues

{
  "evseId": 1,
  "meterValue": [
    {
      "timestamp": "2025-07-12T10:30:00Z",
      "sampledValue": [
        {
          "value": "7.2",
          "measurand": "Power.Active.Import",
          "unit": "kW"
        },
        {
          "value": "230.5",
          "measurand": "Voltage",
          "unit": "V"
        },
        {
          "value": "31.2",
          "measurand": "Current.Import",
          "unit": "A"
        },
        {
          "value": "45.2",
          "measurand": "Temperature",
          "unit": "Celsius"
        }
      ]
    }
  ]
}

5. REST API для внешних систем

5.1 Эндпоинты управления станциями

GET    /api/v1/stations                    # Список всех станций
GET    /api/v1/stations/{id}               # Информация о станции
GET    /api/v1/stations/{id}/status        # Текущий статус станции
GET    /api/v1/stations/{id}/battery       # Состояние батареи
GET    /api/v1/stations/{id}/location      # Местоположение
POST   /api/v1/stations/{id}/start         # Запуск зарядки
POST   /api/v1/stations/{id}/stop          # Остановка зарядки
GET    /api/v1/stations/{id}/transactions  # История транзакций
GET    /api/v1/stations/{id}/events        # События станции

5.2 WebSocket для real-time событий

ws://backend.com/api/v1/stations/{id}/events

Пример сообщения:

{
  "stationId": "STATION_001",
  "timestamp": "2025-07-12T10:30:00Z",
  "eventType": "ChargingStarted",
  "data": {
    "transactionId": "TXN_123456",
    "connectorId": 1,
    "power": 7.2,
    "vehicleId": "RFID_CARD_123"
  }
}

6. Схема состояний зарядной станции

stateDiagram-v2
    [*] --> Offline
    Offline --> Available: BootNotification
    Available --> Preparing: Cable Connected
    Preparing --> Charging: Authorization Success
    Preparing --> Available: Authorization Failed
    Charging --> SuspendedEVSE: Station Fault
    Charging --> SuspendedEV: Vehicle Fault
    Charging --> Finishing: Charging Complete
    SuspendedEVSE --> Charging: Fault Cleared
    SuspendedEV --> Charging: Vehicle Resumed
    Finishing --> Available: Cable Disconnected
    Available --> Unavailable: Maintenance Mode
    Unavailable --> Available: Maintenance Complete
    Available --> Faulted: Critical Error
    Faulted --> Available: Error Resolved
    Faulted --> Offline: System Restart Required

7. Обработка ошибок и восстановление

7.1 Типы ошибок

  1. Коммуникационные ошибки

    • Потеря связи с backend
    • Timeout сообщений
    • Ошибки аутентификации
  2. Аппаратные ошибки

    • Неисправность коннектора
    • Превышение температуры
    • Проблемы с электропитанием
  3. Программные ошибки

    • Ошибки протокола OCPP
    • Неверные параметры конфигурации
    • Ошибки обработки транзакций

7.2 Стратегии восстановления

flowchart TD
    ERROR[Ошибка] --> CHECK{Тип ошибки}
    CHECK -->|Коммуникация| RECONNECT[Переподключение]
    CHECK -->|Аппаратная| HARDWARE[Диагностика]
    CHECK -->|Программная| SOFTWARE[Restart Service]
    
    RECONNECT --> BACKOFF[Exponential Backoff]
    BACKOFF --> SUCCESS{Успешно?}
    SUCCESS -->|Да| RESUME[Возобновление работы]
    SUCCESS -->|Нет| OFFLINE[Offline режим]
    
    HARDWARE --> REPAIR{Можно починить?}
    REPAIR -->|Да| FIX[Автоматическое исправление]
    REPAIR -->|Нет| MAINTENANCE[Режим обслуживания]
    
    SOFTWARE --> RESTART[Перезапуск]
    RESTART --> RESUME
    
    FIX --> RESUME

8. Безопасность

8.1 Аутентификация и авторизация

  • Certificate-based authentication для OCPP соединений
  • JWT токены для REST API
  • Role-based access control (RBAC)
  • API Rate limiting

8.2 Шифрование

  • TLS 1.3 для всех соединений
  • End-to-end encryption для критичных данных
  • Certificate pinning для mobile приложений

9. Мониторинг и логирование

9.1 Метрики мониторинга

  • Availability зарядных станций
  • Время отклика OCPP сообщений
  • Количество активных сессий зарядки
  • Энергопотребление и эффективность
  • Частота ошибок и типы неисправностей

9.2 Логирование событий

  • Все OCPP сообщения (request/response)
  • Системные события и ошибки
  • Транзакции зарядки
  • Изменения конфигурации
  • События безопасности

10. Требования к реализации

10.1 Backend Requirements

Технологии:

  • WebSocket server (Node.js/Python/Java)
  • REST API framework
  • База данных (PostgreSQL/MongoDB)
  • Message queue (Redis/RabbitMQ)
  • Monitoring (Prometheus/Grafana)

Функциональность:

  • OCPP 2.0.1 protocol handler
  • Station management interface
  • Real-time monitoring dashboard
  • Billing integration
  • Analytics and reporting

10.2 Station Requirements

Технологии:

  • Embedded Linux/RTOS
  • OCPP 2.0.1 client library
  • 4G/5G modem with static IP
  • Local storage for offline mode
  • Secure element for certificates

Функциональность:

  • OCPP message handling
  • Local authorization cache
  • Meter data collection
  • Hardware diagnostics
  • Firmware update support

11. Тестирование

11.1 Unit тесты

  • OCPP message parsing/generation
  • Business logic компонентов
  • API endpoints

11.2 Integration тесты

  • End-to-end OCPP flows
  • Database operations
  • External system integration

11.3 Load тесты

  • Concurrent charging sessions
  • High message volume
  • Network failure scenarios

Данная спецификация основана на стандарте OCPP 2.0.1 и лучших практиках индустрии EV charging infrastructure.