OCPP 2.0.1 TransactionEvent 메시지

 

TransactionEvent 개요

TransactionEvent는 충전 트랜잭션의 시작, 진행, 종료와 관련된 모든 이벤트를 중앙 시스템(CSMS)에 실시간으로 알리는 핵심 메시지입니다. 이 메시지는 충전 세션의 전체 생명주기를 추적하고 관리하는 데 사용됩니다.

메시지 구조

Request (충전소 → CSMS)

{
  "eventType": "Started",
  "timestamp": "2024-08-20T14:30:00.000Z",
  "triggerReason": "Authorized",
  "seqNo": 1,
  "transactionInfo": {
    "transactionId": "TXN-2024-001234",
    "chargingState": "Charging"
  },
  "meterValue": [
    {
      "timestamp": "2024-08-20T14:30:00.000Z",
      "sampledValue": [
        {
          "value": 0.0,
          "measurand": "Energy.Active.Import.Register",
          "unit": "kWh"
        }
      ]
    }
  ],
  "evse": {
    "id": 1,
    "connectorId": 1
  },
  "idToken": {
    "idToken": "RFID123456789",
    "type": "ISO14443"
  }
}

Response (CSMS → 충전소)

{
  "totalCost": 0.0,
  "chargingPriority": 5,
  "idTokenInfo": {
    "status": "Accepted"
  },
  "updatedPersonalMessage": {
    "format": "UTF8",
    "content": "충전이 시작되었습니다"
  }
}

주요 필드 설명

Request 필드들

eventType 필드 (필수)

설명
Started 트랜잭션 시작
Updated 트랜잭션 진행 중 업데이트
Ended 트랜잭션 종료

triggerReason 필드 (필수)

설명
Authorized 인증 완료로 인한 이벤트
CablePluggedIn 케이블 연결로 인한 이벤트
ChargingRateChanged 충전 속도 변경으로 인한 이벤트
ChargingStateChanged 충전 상태 변경으로 인한 이벤트
Deauthorized 인증 해제로 인한 이벤트
EnergyLimitReached 에너지 한계 도달로 인한 이벤트
EVCommunicationLost 차량 통신 손실로 인한 이벤트
EVConnectTimeout 차량 연결 타임아웃으로 인한 이벤트
MeterValueClock 정기적인 미터값 전송
MeterValuePeriodic 주기적인 미터값 전송
TimeLimitReached 시간 한계 도달로 인한 이벤트
Trigger 수동 트리거로 인한 이벤트
UnlockCommand 잠금 해제 명령으로 인한 이벤트
StopAuthorized 정지 인증으로 인한 이벤트
EVDeparted 차량 출발로 인한 이벤트
EVDetected 차량 감지로 인한 이벤트
RemoteStart 원격 시작으로 인한 이벤트
RemoteStop 원격 정지로 인한 이벤트
AbnormalCondition 비정상 상황으로 인한 이벤트
SignedDataReceived 서명된 데이터 수신으로 인한 이벤트
ResetCommand 리셋 명령으로 인한 이벤트

transactionInfo 필드 (필수)

필드명 필수여부 타입 설명
transactionId 필수 String 고유한 트랜잭션 식별자
chargingState 선택사항 Enum 현재 충전 상태
timeSpentCharging 선택사항 Integer 충전 시간 (초 단위)
stoppedReason 선택사항 Enum 정지 이유 (종료 시)
remoteStartId 선택사항 Integer 원격 시작 요청 ID

chargingState 값들

설명
Charging 충전 중
EVConnected 차량 연결됨
SuspendedEV 차량에 의해 일시정지
SuspendedEVSE 충전소에 의해 일시정지
Idle 유휴 상태

Response 필드들

필드명 필수여부 타입 설명
totalCost 선택사항 Number 현재까지의 총 비용
chargingPriority 선택사항 Integer 충전 우선순위 (-9 ~ 9)
idTokenInfo 선택사항 Object ID 토큰 정보
updatedPersonalMessage 선택사항 Object 개인화된 메시지 업데이트

실제 사용 예제

예제 1: 충전 시작

// Request
{
  "eventType": "Started",
  "timestamp": "2024-08-20T14:30:00.000Z",
  "triggerReason": "Authorized",
  "seqNo": 1,
  "transactionInfo": {
    "transactionId": "TXN-2024-001234",
    "chargingState": "EVConnected"
  },
  "evse": {
    "id": 1,
    "connectorId": 1
  },
  "idToken": {
    "idToken": "RFID123456789",
    "type": "ISO14443"
  },
  "meterValue": [
    {
      "timestamp": "2024-08-20T14:30:00.000Z",
      "sampledValue": [
        {
          "value": 1250.5,
          "measurand": "Energy.Active.Import.Register",
          "unit": "kWh"
        }
      ]
    }
  ]
}

// Response
{
  "totalCost": 0.0,
  "chargingPriority": 5,
  "idTokenInfo": {
    "status": "Accepted"
  },
  "updatedPersonalMessage": {
    "format": "UTF8",
    "content": "충전을 시작합니다"
  }
}

예제 2: 충전 진행 중 업데이트

// Request
{
  "eventType": "Updated", 
  "timestamp": "2024-08-20T15:00:00.000Z",
  "triggerReason": "MeterValuePeriodic",
  "seqNo": 2,
  "transactionInfo": {
    "transactionId": "TXN-2024-001234",
    "chargingState": "Charging",
    "timeSpentCharging": 1800
  },
  "evse": {
    "id": 1,
    "connectorId": 1
  },
  "meterValue": [
    {
      "timestamp": "2024-08-20T15:00:00.000Z",
      "sampledValue": [
        {
          "value": 1265.8,
          "measurand": "Energy.Active.Import.Register", 
          "unit": "kWh"
        },
        {
          "value": 7200.0,
          "measurand": "Power.Active.Import",
          "unit": "W"
        }
      ]
    }
  ]
}

// Response  
{
  "totalCost": 3500.0,
  "chargingPriority": 5
}

예제 3: 충전 종료

// Request
{
  "eventType": "Ended",
  "timestamp": "2024-08-20T16:45:00.000Z", 
  "triggerReason": "StopAuthorized",
  "seqNo": 15,
  "transactionInfo": {
    "transactionId": "TXN-2024-001234",
    "chargingState": "Idle",
    "timeSpentCharging": 8100,
    "stoppedReason": "DeAuthorized"
  },
  "evse": {
    "id": 1,
    "connectorId": 1
  },
  "idToken": {
    "idToken": "RFID123456789", 
    "type": "ISO14443"
  },
  "meterValue": [
    {
      "timestamp": "2024-08-20T16:45:00.000Z",
      "sampledValue": [
        {
          "value": 1295.2,
          "measurand": "Energy.Active.Import.Register",
          "unit": "kWh"
        }
      ]
    }
  ]
}

// Response
{
  "totalCost": 12500.0,
  "idTokenInfo": {
    "status": "Accepted"  
  },
  "updatedPersonalMessage": {
    "format": "UTF8",
    "content": "충전이 완료되었습니다. 총 비용: 12,500원"
  }
}

처리 흐름

  1. 트랜잭션 시작: 사용자 인증 또는 케이블 연결 시 Started 이벤트 전송
  2. 진행 상황 업데이트: 주기적으로 또는 상태 변경 시 Updated 이벤트 전송
  3. 트랜잭션 종료: 충전 완료 또는 중단 시 Ended 이벤트 전송
  4. CSMS 응답: 각 이벤트에 대해 비용 정보, 우선순위, 메시지 등 응답

중요 포인트

  • TransactionEvent는 충전 세션의 모든 중요한 변화를 추적하는 핵심 메시지입니다
  • seqNo 필드를 통해 이벤트의 순서를 보장합니다
  • 미터값은 각 이벤트마다 포함되어 에너지 사용량을 정확히 추적합니다
  • 네트워크 연결이 끊어진 경우 재연결 후 누락된 이벤트들을 순서대로 전송해야 합니다
  • CSMS는 응답을 통해 실시간으로 요금 정보와 충전 우선순위를 업데이트할 수 있습니다

이 메시지를 통해 충전소와 중앙 시스템 간의 실시간 트랜잭션 모니터링과 제어가 가능하며, 정확한 과금과 충전 관리를 구현할 수 있습니다.