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원"
}
}
처리 흐름
- 트랜잭션 시작: 사용자 인증 또는 케이블 연결 시
Started
이벤트 전송
- 진행 상황 업데이트: 주기적으로 또는 상태 변경 시
Updated
이벤트 전송
- 트랜잭션 종료: 충전 완료 또는 중단 시
Ended
이벤트 전송
- CSMS 응답: 각 이벤트에 대해 비용 정보, 우선순위, 메시지 등 응답
중요 포인트
- TransactionEvent는 충전 세션의 모든 중요한 변화를 추적하는 핵심 메시지입니다
seqNo
필드를 통해 이벤트의 순서를 보장합니다
- 미터값은 각 이벤트마다 포함되어 에너지 사용량을 정확히 추적합니다
- 네트워크 연결이 끊어진 경우 재연결 후 누락된 이벤트들을 순서대로 전송해야 합니다
- CSMS는 응답을 통해 실시간으로 요금 정보와 충전 우선순위를 업데이트할 수 있습니다
이 메시지를 통해 충전소와 중앙 시스템 간의 실시간 트랜잭션 모니터링과 제어가 가능하며, 정확한 과금과 충전 관리를 구현할 수 있습니다.