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 Типы ошибок
-
Коммуникационные ошибки
- Потеря связи с backend
- Timeout сообщений
- Ошибки аутентификации
-
Аппаратные ошибки
- Неисправность коннектора
- Превышение температуры
- Проблемы с электропитанием
-
Программные ошибки
- Ошибки протокола 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.