Skip to main content

Спецификация OCPP модуля для зарядных станций

Спецификация для разработчиков EV зарядных станций

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

1.1 Общая аАрхитектура взаимодействия

graph TB
    subgraph "Backend Infrastructure"
        CSMS[Central System Management Service]
    API[REST API Gateway]
        DB[(Database)]
    end
    
    subgraph "EV Charging StationStation"
        (subgraph "Ваша зона ответственности)"
            CP[ChargeOCPP[OCPP Point Controller]
        MODEM[4G Modem]
        BATTERY[Battery Management]
        CONNECTOR[Charging Connector]
        METER[Energy Meter]
        RFID[RFID Reader]
        DISPLAY[Display/UI]
        GPS[GPSCommunication Module]
            WS[WebSocket Client]
            PARSER[Message Parser/Generator]
            QUEUE[Message Queue]
        end
        
        subgraph "External"Station USER[EndSystem User](существующее)"
            VEHICLE[ElectricSTATION[Station Vehicle]Controller]
            HARDWARE[Hardware Controllers]
        end
    end
    
    CSMS <--> MODEMWS
    MODEMWS <--> CPOCPP
    CP --> BATTERY
    CP --> CONNECTOR
    CP --> METER
    CP --> RFID
    CP --> DISPLAY
    CP --> GPS
    USER --> RFID
    USER --> DISPLAY
    VEHICLEOCPP <--> CONNECTORPARSER
    OCPP <--> QUEUE
    OCPP <--> STATION
    STATION <--> HARDWARE

1.2 ПЗадача модуля

Основная функция: Обеспечить двустороннюю связь между зарядной станцией и CSMS по протокол коммуникации

Протокол: OCPP 2.0.1

(Open

Интерфейсы:

Charge
    Point Protocol)
  • ТраВнспортешний: WebSocket Secureсоединение (WSS)с overCSMS
  • 4G
  • ФоВнутрмат даенных: JSON
    Аутентификацияй: API Keyдля винтеграции заголовкес Authorization

    2. Зона ответсиственнмости разработчиковй станции

2. Интерфейс OCPP модуля

2.1 ОсAPI для иновные задачи

mindmap
  root((EV Station Tasks))
    OCPP Client
      WebSocket Connection
      Message Handling
      Error Recovery
    Hardware Integration
      Connector Control
      Meter Reading
      Battery Monitoring
      RFID Processing
    State Management
      Station Status
      Transaction Lifecycle
      Error States
    Local Features
      Offline Mode
      Local Authorization
      Display Management
    Monitoring
      Self Diagnostics
      Event Logging
      Telemetry Collection

2.2 Архитектуграции ПОс системой станции

flowchart TDLR
    subgraph "ApplicationStation Layer"System"
        OCPP[OCPPCONTROLLER[Station Client]
        SM[State Machine]
        AUTH[Authorization Manager]Controller]
    end
    
    subgraph "BusinessOCPP Logic"Module TXN[TransactionAPI"
        Manager]direction METER_MGR[MeterTB
        Manager]IN[Incoming EVENT[EventEvents]
        Manager]OUT[Outgoing Commands]
        STATUS[Status Queries]
        CONFIG[Configuration Manager]Configuration]
    end
    
    subgraph "HardwareCSMS"
        AbstractionBACKEND[Backend Layer"
        CONN_HAL[Connector HAL]
        METER_HAL[Meter HAL]
        BATTERY_HAL[Battery HAL]
        COMM_HAL[Communication HAL]
        RFID_HAL[RFID HAL]Server]
    end
    
    subgraphCONTROLLER "Hardware"
        HW[Physical Components]
    end
    
    OCPP <-->|Events| SMIN
    OCPPOUT <-->|Commands| TXNCONTROLLER
    SMCONTROLLER <-->|Query| AUTHSTATUS
    TXNCONTROLLER <-->|Setup| METER_MGRCONFIG
    
    TXNIN <-.->|OCPP EVENTMessages| METER_MGRBACKEND
    <BACKEND -.->|OCPP METER_HALMessages| CONN_HALOUT
<-->
HW

2.2 METER_HALВходящие <-->события HWот BATTERY_HALстанции

<-->
{
  HW"eventType": COMM_HAL"station_event",
  <-->"events": HW[
    RFID_HAL{
      <-->"type": HW"cable_connected",
      "evseId": 1,
      "connectorId": 1,
      "timestamp": "2025-07-12T10:30:00Z"
    },
    {
      "type": "rfid_scanned", 
      "rfidToken": "RFID_12345",
      "evseId": 1,
      "timestamp": "2025-07-12T10:30:00Z"
    },
    {
      "type": "charging_started",
      "transactionId": "TXN_123",
      "evseId": 1,
      "connectorId": 1,
      "timestamp": "2025-07-12T10:30:00Z"
    },
    {
      "type": "meter_reading",
      "evseId": 1,
      "readings": {
        "energy": 5.2,
        "power": 7.2,
        "voltage": 230.5,
        "current": 31.2
      },
      "timestamp": "2025-07-12T10:31:00Z"
    },
    {
      "type": "charging_stopped",
      "transactionId": "TXN_123", 
      "reason": "user_stopped",
      "finalEnergy": 8.5,
      "timestamp": "2025-07-12T10:45:00Z"
    },
    {
      "type": "error_detected",
      "errorCode": "connector_lock_failure",
      "severity": "alert",
      "component": "charging_connector",
      "timestamp": "2025-07-12T10:35:00Z"
    },
    {
      "type": "status_changed",
      "evseId": 1,
      "connectorId": 1,
      "newStatus": "available",
      "timestamp": "2025-07-12T10:30:00Z"
    }
  ]
}

2.3 Исходящие команды к станции

{
  "commandType": "csms_command",
  "commands": [
    {
      "type": "authorize_user",
      "rfidToken": "RFID_12345",
      "authStatus": "accepted",
      "expiryDate": "2025-12-31T23:59:59Z"
    },
    {
      "type": "start_charging",
      "evseId": 1,
      "rfidToken": "RFID_12345",
      "chargingProfile": {
        "maxPower": 7200,
        "phases": 1
      }
    },
    {
      "type": "stop_charging",
      "transactionId": "TXN_123",
      "reason": "remote_stop"
    },
    {
      "type": "request_data",
      "dataType": "battery_status",
      "requestId": "REQ_001"
    },
    {
      "type": "update_configuration",
      "parameters": {
        "heartbeatInterval": 300,
        "meterValueSampleInterval": 60
      }
    },
    {
      "type": "reset_station",
      "resetType": "soft"
    }
  ]
}

3. OCPP ClientCommunication ImplementationFlow

3.1 Установка соединения

sequenceDiagram
    participant CPStation as ChargeStation PointSystem
    participant OCPP as OCPP Module
    participant CSMS as BackendCSMS CSMSServer
    
    Station->>OCPP: Initialize Connection
    Note over CP:OCPP: PowerConfig: Onserver /URL, NetworkAPI Availablekey, CP-station ID
    
    OCPP->>CSMS: WebSocket ConnectionConnect
    Request<br/>Note over OCPP,CSMS: wss://csms.server.com/ocpp/{stationId}
    Note over CP: Headers: <br/>Authorization: Bearer {apiKey}
    
    CSMS->>CP: WebSocketOCPP: Connection Accepted
    
    CP-OCPP->>CSMS: BootNotification
    Note over CP:OCPP: {<br/>"reason":Station "PowerUp",<br/>"chargingStation":info, {<br/>"model":firmware "YourModel",<br/>"vendorName": "YourVendor",<br/>"firmwareVersion": "1.0.0"<br/>}<br/>}version
    
    CSMS->>CP:OCPP: BootNotification Response
    Note over CSMS: {<br/>"status":Status: "Accepted",<br/>"interval":Accepted, 300,<br/>"currentTime":Heartbeat "2025-07-12T10:00:00Z"<br/>}interval
    
    CP-OCPP->>CSMS:Station: StatusNotificationConnection Note over CP: Connector Status: "Available"Established
    
    loop Heartbeat
        Every 300s
        CP-OCPP->>CSMS: Heartbeat (every interval)
        CSMS->>CP:OCPP: Heartbeat Response
    end

3.2 Аутентификация

WebSocket Headers:

Authorization: Bearer your-api-key-here
Sec-WebSocket-Protocol: ocpp2.0.1

Reconnection Strategy:

flowchart TD
    DISCONNECT[Connection Lost] --> WAIT[Wait Period]
    WAIT --> RETRY[Retry Connection]
    RETRY --> SUCCESS{Connected?}
    SUCCESS -->|Yes| BOOT[Send BootNotification]
    SUCCESS -->|No| BACKOFF[Increase Wait Period]
    BACKOFF --> WAIT
    BOOT --> OPERATIONAL[Operational State]

4. Состояния зарядной станции

4.1 Основная диаграмма состояний

stateDiagram-v2
    [*] --> PowerOn
    PowerOn --> Connecting: Network Available
    Connecting --> Available: CSMS Connected
    Connecting --> Offline: Connection Failed
    
    Available --> Preparing: Cable Connected
    Available --> Reserved: RemoteStartTransaction
    Available --> Unavailable: SetChargingProfile(Unavailable)
    
    Preparing --> Charging: RFID Authorized
    Preparing --> Available: Authorization Failed
    Preparing --> Available: Cable Disconnected
    
    Reserved --> Preparing: Cable Connected
    Reserved --> Available: Reservation Expired
    
    Charging --> SuspendedEVSE: Station Error
    Charging --> SuspendedEV: Vehicle Error  
    Charging --> Finishing: Stop Requested
    
    SuspendedEVSE --> Charging: Error Cleared
    SuspendedEV --> Charging: Vehicle Ready
    SuspendedEVSE --> Faulted: Critical Error
    
    Finishing --> Available: Transaction Complete
    
    Faulted --> Available: Fault Cleared
    Faulted --> Unavailable: Manual Reset Required
    
    Offline --> Connecting: Retry Connection
    Unavailable --> Available: Reset Command

4.2 Обработка событий в каждом состояанции

flowchartsequenceDiagram
    TDparticipant subgraphStation "Availableas State"Station A1[CableSystem
    Connected]participant --OCPP as OCPP Module  
    participant CSMS as CSMS Server
    
    Note over Station,CSMS: Пользователь подключил кабель
    Station->>OCPP: A2[Sendcable_connected StatusNotification:event
    Preparing]OCPP->>CSMS: A3[RemoteStartTransaction]StatusNotification --(Preparing)
    CSMS->>OCPP: A4[SendStatusNotification StatusNotification:Response
    
    Reserved]Note A5[over Station,CSMS: Пользователь приложил RFID
    Scan]Station->>OCPP: --rfid_scanned event
    OCPP->>CSMS: A6[LocalAuthorize
    AuthorizationCSMS->>OCPP: Check]Authorize endResponse subgraph(Accepted)
    "ChargingOCPP->>Station: State"authorize_user C1[Metercommand
    
    ReadingNote Timer]over --Station,CSMS: Станция начала зарядку
    Station->>OCPP: C2[Sendcharging_started MeterValues]event
    C3[VehicleOCPP->>CSMS: Disconnected]TransactionEvent --(Started)
    CSMS->>OCPP: C4[SendTransactionEvent TransactionEvent:Response
    
    Ended]Note C5[Errorover Detected]Station,CSMS: --Периодические показания счетчика
    loop Every 60 seconds
        Station->>OCPP: C6[Sendmeter_reading StatusNotification:event
        SuspendedEVSE]OCPP->>CSMS: endMeterValues
        subgraphCSMS->>OCPP: "ErrorMeterValues Handling"
        E1[Hardware Error] --> E2[Log Error Locally]
        E2 --> E3[Send NotifyEvent]
        E3 --> E4[Update State to Faulted]Response
    end

5.

3.3 Обяработка команд от CSMS

sequenceDiagram
    participant CSMS as CSMS Server
    participant OCPP as OCPP Module
    participant Station as Station System
    
    Note over CSMS,Station: Удаленный запуск зарядки
    CSMS->>OCPP: RemoteStartTransaction
    OCPP->>Station: start_charging command
    Station->>OCPP: Command accepted
    OCPP->>CSMS: RemoteStartTransaction Response (Accepted)
    
    Note over CSMS,Station: Запрос данных о батарее
    CSMS->>OCPP: GetReport (Battery)
    OCPP->>Station: request_data command
    Station->>OCPP: Data response
    OCPP->>CSMS: GetReport Response
    OCPP->>CSMS: NotifyReport (Battery data)

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

5.4.1 Исходящие сообщенициализация и(Station статус→ CSMS)

BootNotification (при запустартке)

{
  "reason": "PowerUp",
  "chargingStation": {
    "model": "EV-CHARGER-V1"получить_от_station_system",
    "vendorName": "YourCompany"получить_от_station_system", 
    "firmwareVersion": "1.2.3"получить_от_station_system",
    "serialNumber": "SN123456789"получить_от_station_system"
  }
}

StatusNotification (при изменении сотатустоянияа)

{
  "timestamp": "2025-07-12T10:30:00Z"получить_от_station_system",
  "connectorStatus": "Available"Available|Preparing|Charging|SuspendedEVSE|SuspendedEV|Finishing|Reserved|Unavailable|Faulted",
  "evseId": 1,"получить_от_station_system",
  "connectorId": 1"получить_от_station_system"
}

HeartbeatTransactionEvent (периодически)

{
  "currentTime": "2025-07-12T10:30:00Z"
}

5.2 События транзакций

TransactionEvent (начало зарядки)

{
  "eventType": "Started"Started|Updated|Ended", 
  "timestamp": "2025-07-12T10:30:00Z"получить_от_station_system",
  "triggerReason": "Authorized"Authorized|CablePluggedIn|ChargingRateChanged|ChargingStateChanged|Deauthorized|EnergyLimitReached|EVCommunicationLost|EVConnectTimeout|MeterValueClock|MeterValuePeriodic|TimeLimitReached|Trigger|UnlockCommand|StopAuthorized|EVDeparted|EVDetected|RemoteStop|RemoteStart|AbnormalCondition|SignedDataReceived|ResetCommand",
  "seqNo": 0,"incremental_number",
  "transactionInfo": {
    "transactionId": "TXN_" + generateUniqueId()получить_от_station_system",
    "chargingState": "Charging"Charging|EVConnected|SuspendedEV|SuspendedEVSE|Idle"
  },
  "evse": {
    "id": 1,"получить_от_station_system",
    "connectorId": 1"получить_от_station_system"
  },
  "idToken": {
    "idToken": "получить_от_station_system",
    "type": "ISO14443|ISO15693|KeyCode|Local|MacAddress|NoAuthorization"
  },
  "meterValue": [
    {
      "timestamp": "получить_от_station_system",
      "sampledValue": [
        {
          "value": "получить_от_station_system",
          "measurand": "Energy.Active.Import.Register|Power.Active.Import|Voltage|Current.Import|Temperature",
          "unit": "kWh|kW|V|A|Celsius"
        }
      ]
    }
  ]
}

MeterValues (телеметрия)

{
  "evseId": "получить_от_station_system",
  "meterValue": [
    {
      "timestamp": "получить_от_station_system",
      "sampledValue": [
        {
          "value": "получить_от_station_system",
          "measurand": "Energy.Active.Import.Register|Power.Active.Import|Voltage|Current.Import|Temperature",
          "unit": "kWh|kW|V|A|Celsius"
        }
      ]
    }
  ]
}

NotifyEvent (ошибки и события)

{
  "generatedAt": "текущее_время",
  "eventData": [
    {
      "eventId": "уникальный_id",
      "timestamp": "получить_от_station_system",
      "trigger": "Alerting|Delta|Periodic",
      "eventType": "получить_от_station_system",
      "component": {
        "name": "получить_от_station_system"
      },
      "variable": {
        "name": "получить_от_station_system"
      },
      "eventNotificationType": "HardWiredNotification|HardWiredMonitor|PreconfiguredMonitor|CustomMonitor"
    }
  ]
}

Authorize (авторизация)

{
  "idToken": {
    "idToken": "получить_от_station_system",
    "type": "ISO14443|ISO15693|KeyCode|Local|MacAddress|NoAuthorization"
  },
  "evseId": "получить_от_station_system"
}

4.2 Входящие сообщения (CSMS → Station)

RemoteStartTransaction

Получили от CSMS:

{
  "idToken": {
    "idToken": "RFID_12345",
    "type": "ISO14443"
  },
  "meterValue"evseId": 1,
  "chargingProfile": {
    "id": 1,
    "stackLevel": 0,
    "chargingProfilePurpose": "TxProfile",
    "chargingProfileKind": "Absolute",
    "chargingSchedule": [
      {
        "timestamp"id": 1,
        "startSchedule": "2025-07-12T10:30:00Z",
        "sampledValue"duration": 3600,
        "chargingRateUnit": "W",
        "chargingSchedulePeriod": [
          {
            "value"startPeriod": "0.0",0,
            "measurand"limit": "Energy.Active.Import.Register",
          "unit": "kWh"7200
          }
        ]
      }
    ]
  }
}

MeterValues (

Отправоить время зарядки каждые 60 сек)

station_system:

{
  "type": "start_charging",
  "evseId": 1,
  "meterValue": [
    {
      "timestamp"rfidToken": "2025-07-12T10:31:00Z"RFID_12345", 
  "sampledValue"maxPower": [
        {7200,
  "value"duration": "7.2",
          "measurand": "Power.Active.Import",
          "unit": "kW"
        },
        {
          "value": "1.2",
          "measurand": "Energy.Active.Import.Register", 
          "unit": "kWh"
        },
        {
          "value": "230.5",
          "measurand": "Voltage",
          "unit": "V"
        },
        {
          "value": "31.2",
          "measurand": "Current.Import",
          "unit": "A"
        }
      ]
    }
  ]3600
}

5.3

Ответ События системы

NotifyEvent (ошибки и важные события)

CSMS:

{
  "generatedAt"status": "2025-07-12T10:35:00Z"Accepted|Rejected",
  "eventData": [
    {
      "eventId": 1,
      "timestamp": "2025-07-12T10:35:00Z",
      "trigger": "Alerting",
      "eventType": "FaultDetected",
      "component"statusInfo": {
    "name"reasonCode": "ChargingStation"
      },
      "variable": {
        "name": "ConnectorLockFailure"
      },
      "eventNotificationType": "Alert"NoError|Busy|Occupied|Faulted"
  }
]
}

6. Обработка команд от CSMS

6.1 Команды управления

RemoteStartTransaction

sequenceDiagram
    participant CSMS
    participant CP as Charge Point
    participant USER as User
    
    CSMS->>CP: RemoteStartTransaction
    Note over CSMS: {<br/>"idToken": {"idToken": "RFID_123", "type": "ISO14443"},<br/>"evseId": 1<br/>}
    
    CP->>CP: Check EVSE Availability
    alt EVSE Available
        CP->>CSMS: RemoteStartTransaction Response (Accepted)
        CP->>CSMS: StatusNotification (Reserved)
        
        USER->>CP: Connect Cable
        CP->>CSMS: StatusNotification (Preparing)
        CP->>CSMS: TransactionEvent (Started)
    else EVSE Occupied/Faulted
        CP->>CSMS: RemoteStartTransaction Response (Rejected)
    end

RemoteStopTransaction

Получили от CSMS:

sequenceDiagram{
  participant CSMS
    participant CP as Charge Point
    
    CSMS->>CP: RemoteStopTransaction
    Note over CSMS: {"transactionId": "TXN_123456"
}
    
    CP->>CP: Find Active Transaction
    alt Transaction Found
        CP->>CSMS: RemoteStopTransaction Response (Accepted)
        CP->>CP: Stop Power Delivery
        CP->>CSMS: TransactionEvent (Ended)
        CP->>CSMS: StatusNotification (Available)
    else Transaction Not Found
        CP->>CSMS: RemoteStopTransaction Response (Rejected)
    end

6.2 Ком

Отпранды монвиторинга

ь в station_system:

{
  "type": "stop_charging",
  "transactionId": "TXN_123456",
  "reason": "remote_stop"
}

GetReport (запрос данных)

ЗапрПослучили от CSMS:

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

Ваш ответ:

{
  "status": "Accepted",
  "statusInfo": {
    "reasonCode": "NoError"
  }
}

Затем оОтправить NotifyReport:в station_system:

{
  "type": "request_data",
  "requestId": 1,
  "dataType": "battery_status"
}

Получить от station_system:

{
  "requestId": 1,
  "batteryLevel": 85,
  "batteryVoltage": 48.2,
  "batteryTemperature": 25.5
}

Отправить CSMS (NotifyReport):

{
  "requestId": 1,
  "generatedAt": "2025-07-12T10:30:00Z"текущее_время",
  "reportData": [
    {
      "component": {"name": "BatteryManagement"},
      "variable": {"name": "StateOfCharge"},
      "variableAttribute": {
        "value": "85",
        "unit": "Percent"
      }
    }
  ]
}

7. Мониторинг компонентов станции

7.1 Компоненты для мониторинга

graph TD
    subgraph "Station Components"
        BATTERY[Battery Management]
        CONNECTOR[Charging Connector]
        METER[Energy Meter]
        TEMP[Temperature Sensors]
        RFID[RFID Reader]
        NETWORK[Network Module]
    end
    
    subgraph "Monitored Variables"
        BATTERY --> B1[StateOfCharge]
        BATTERY --> B2[BatteryVoltage]
        BATTERY --> B3[BatteryTemperature]
        
        CONNECTOR --> C1[ConnectorStatus]
        CONNECTOR --> C2[LockStatus]
        
        METER --> M1[Energy.Active.Import.Register]
        METER --> M2[Power.Active.Import]
        METER --> M3[Voltage]
        METER --> M4[Current.Import]
        
        TEMP --> T1[InletTemperature]
        TEMP --> T2[OutletTemperature]
        
        RFID --> R1[ReaderStatus]
        
        NETWORK --> N1[SignalStrength]
        NETWORK --> N2[NetworkStatus]
    end

7.2 Периодическая отправка данных

MeterValues каждые 60 секунд во время зарядки:

flowchart TD
    START[Transaction Started] --> TIMER[Start 60s Timer]
    TIMER --> READ[Read All Meters]
    READ --> SEND[Send MeterValues]
    SEND --> CHECK{Transaction Active?}
    CHECK -->|Yes| TIMER
    CHECK -->|No| END[Stop Reporting]

8. Локальная авторизация (Offline Mode)

8.1 Кэш авторизации

flowchart TD
    RFID[RFID Scanned] --> CACHE{In Local Cache?}
    CACHE -->|Yes| AUTH[Authorize Locally]
    CACHE -->|No| ONLINE{CSMS Online?}
    ONLINE -->|Yes| REMOTE[Request Remote Auth]
    ONLINE -->|No| REJECT[Reject Authorization]
    
    REMOTE --> RESPONSE{Authorized?}
    RESPONSE -->|Yes| CACHE_ADD[Add to Local Cache]
    RESPONSE -->|No| REJECT
    CACHE_ADD --> AUTH
    AUTH --> START[Start Transaction]

8.2 Управление кэшем

Структура записи в кэше:

{
  "idToken": "RFID_12345",
  "type": "ISO14443",
  "status": "Accepted",
  "expiryDate": "2025-12-31T23:59:59Z",
  "groupIdToken": "GROUP_001"
}

9.5. Обработка ошибок и переподключениагностикае

9.5.1 ТСтратегия пы ошибок и ереаподкцлючения

flowchart TD
    ERROR[Error Detected] --> TYPE{Error Type}
    
    TYPE -->|Communication| COMM[DISCONNECT[Connection Lost]
    TYPE -->|Hardware| HW[Hardware Fault]
    TYPE -->|Software| SW[Software Error]
    
    COMM --> RECONNECT[Start Reconnection]
    COMM --> OFFLINE[Switch to Offline Mode]
    
    HW --> DIAG[Run Diagnostics]
    HW --> NOTIFY[Send NotifyEvent]
    HW --> FAULT[Set Status to Faulted]
    
    SW --> LOG[Log ErrorDisconnect Details]Event]
    SWLOG --> RESTART[RestartQUEUE[Queue Component]Outgoing SWMessages]
    QUEUE --> NOTIFYWAIT[Wait RECONNECTPeriod]
    WAIT --> ONLINE{RETRY[Attempt Reconnection]
    RETRY --> SUCCESS{Connected?}
    
    ONLINESUCCESS -->|Yes| SYNC[SyncBOOT[Send OfflineBootNotification]
    Data]
    ONLINESUCCESS -->|No| OFFLINEBACKOFF[Increase 
Wait

9.2Period] Self-Diagnostics

Периодические проверки каждые 5 минут:

flowchart TD
    START[Diagnostic Timer]BACKOFF --> BATTERY[CheckMAXWAIT{Max BatteryWait Status]Reached?}
    BATTERYMAXWAIT -->|No| CONNECTOR[CheckWAIT
    Connector Status]
    CONNECTOR --> METER[Check Meter Communication]
    METER --> TEMP[Check Temperature Sensors]
    TEMP --> NETWORK[Check Network Signal]
    NETWORK --> RFID[Check RFID Reader]
    RFID --> RESULT{All OK?}
    RESULTMAXWAIT -->|Yes| SCHEDULE[ScheduleRESET[Reset NextWait Check]Period]
    RESULT -->|No| ALERT[Send Alert to CSMS]
    ALERTRESET --> SCHEDULEWAIT
    
    SCHEDULEBOOT --> STARTSYNC[Send Queued Messages]
    SYNC --> OPERATIONAL[Operational Mode]

5.2 Обработка таймаутов

sequenceDiagram
    participant OCPP as OCPP Module
    participant CSMS as CSMS Server
    participant Station as Station System
    
    OCPP->>CSMS: Request Message
    Note over OCPP: Start 30s timeout timer
    
    alt Response received
        CSMS->>OCPP: Response Message
        Note over OCPP: Clear timeout, process response
    else Timeout occurred
        Note over OCPP: 30s elapsed, no response
        OCPP->>Station: Notify timeout error
        OCPP->>OCPP: Queue message for retry
    end

10.6. СхеКонфигурация ма оданных дуля

лок

6.1 Пального хранметры подключения

10.1 Структура данных

erDiagram{
  TRANSACTIONS"connection": {
    string"serverUrl": transaction_id"wss://csms.example.com/ocpp",
    PK"stationId": datetime"STATION_001",
    start_time"apiKey": datetime"your-api-key-here",
    end_time"reconnectInterval": string30,
    rfid_token"maxReconnectInterval": float300,
    start_energy"messageTimeout": float30,
    end_energy"heartbeatInterval": string status
        json meter_values300
  },
  AUTH_CACHE"station": {
    string"model": rfid_token"EV-CHARGER-V1",
    PK"vendorName": string"YourCompany",
    status"serialNumber": datetime"SN123456789",
    expiry_date"firmwareVersion": string group_id"1.0.0"
  },
  ERROR_LOG"intervals": {
    int"meterValueSampleInterval": id60,
    PK"clockAlignedDataInterval": datetime900,
    timestamp"connectionTimeOut": string error_type
        string component
        string description
        string status60
  }
    
    CONFIG {
        string key PK
        string value
        datetime updated_at
}

11.

6.2 ПримМертоды управлеалнизации ключевых функций

11.1 OCPP Message Handlerя

// Псевдокод API модуля
class OCPPModule {
    // Инициализация
    initialize(config) { }
    
    // Управление соединением
    connect() { }
    disconnect() { }
    isConnected() { }
    
    // Отправка событий от станции
    sendStationEvent(event) { }
    
    // Получение команд для обрстаботкнции входящих(callback)
    сообщений
function handleOCPPMessage(messageType, messageId, payload)onStationCommand(callback) { switch(messageType)}
    
    // Статус модуля
    getStatus() { case}
    'RemoteStartTransaction':
            return handleRemoteStart(payload);
        case 'RemoteStopTransaction':
            return handleRemoteStop(payload);
        case 'GetReport':
            return handleGetReport(payload);
        case 'Reset':
            return handleReset(payload);
        default:
            returngetLastError() { status:}
    
    'NotSupported',// statusInfo:Логирование
    enableLogging(level) {
                    reasonCode: 'MessageNotSupported'
                }
            }; }
}

7. Протокол взаимодействия с системой станции

11.27.1 StateИнициализация Machine Implementationмодуля

//sequenceDiagram
    Пparticipant Station as Station System
    participant OCPP as OCPP Module
    
    Station->>OCPP: Initialize(config)
    OCPP->>OCPP: Load configuration
    OCPP->>Station: Initialization complete
    
    Station->>OCPP: SetEventHandler(callback)
    OCPP->>Station: Handler registered
    
    Station->>OCPP: Connect()
    OCPP->>OCPP: Establish WebSocket connection
    OCPP->>Station: onStationCommand("connection_established")

7.2 Обработка сеобытий вд runtime

sequenceDiagram
    participant Station as Station System
    participant OCPP as OCPP Module
    participant CSMS as CSMS Server
    
    Note over Station,CSMS: Обычный поток событий
    Station->>OCPP: sendStationEvent(cable_connected)
    OCPP->>CSMS: StatusNotification
    CSMS->>OCPP: StatusNotification Response
    
    Note over Station,CSMS: Команда дляот stateCSMS
    machineCSMS->>OCPP: classRemoteStartTransaction
    ChargingStationStateMachineOCPP->>Station: {onStationCommand(start_charging)
    constructor()Station->>OCPP: {Command this.currentState = 'Available';
        this.allowedTransitions = {
            'Available': ['Preparing', 'Reserved', 'Unavailable'],
            'Preparing': ['Available', 'Charging'],
            'Charging': ['Finishing', 'SuspendedEVSE', 'SuspendedEV'],
            'Finishing': ['Available']
        };
    }
    
    transitionTo(newState, reason) {
        ifresponse (this.allowedTransitions[this.currentState].includes(newState))accepted)
    {OCPP->>CSMS: this.currentStateRemoteStartTransaction = newState;
            this.sendStatusNotification(newState, reason);
            return true;
        }
        return false;
    }
}Response

Данная спецификация опредназначена для разрабоетчиков ПО зарядных станций и содержит все необходимые требования к модуляю реалOCPP коммунизкации OCPPдля 2.0.1 клиентеграции с системой зарядной станции.