본문으로 건너뛰기

단가 수신 및 표시 절차 - Use Cases

충전기는 사용자에게 표시할 단가나 요금을 OCPP 버전에 맞는 방식으로 수신하거나 조회합니다.

OCPP v1.6

OCPP v1.6 충전기는 다음 시점에 단가를 조회합니다.

1. 기본 회원/비회원 단가 표시

  • 조회 시점: BootNotification.conf 수신 이후
  • 요청 값: unitPriceEnumType=Member 또는 비회원 단가 타입
  • 목적: 충전 대기 화면에 기본 회원/비회원 단가를 표시합니다.

2. 거래별 비례 단가 표시

  • 조회 시점: Authorize.confidTagInfo.status=Accepted 이후 또는 StartTransaction.conf 수신 이후
  • 요청 값: unitPriceEnumType=Proportional, connectorId 포함
  • 기준: StartTransaction.req 또는 Authorize.req에서 사용한 idTag

거래별 단가는 StartTransaction.req 또는 Authorize.req에서 사용한 idTag 기준으로 계산됩니다. 충전 진행 중 올바른 금액을 표시하려면 거래가 승인된 이후 Proportional 단가를 다시 조회해야 합니다.

OCPP v2.1

1. 대기 화면 단가 안내

회원가/비회원가처럼 사용자가 충전 전 화면에서 확인해야 하는 단가 안내는 CSMS가 EVSE로 전송하는 SetDisplayMessageRequest를 우선 사용합니다.

  • 목적: 사용자 화면에 CSMS 관리 단가 안내 메시지 표시
  • 관리 메시지 content: {{memberPrice}}/{{nonMemberPrice}} 변수 템플릿
  • EVSE 수신 content 예: 300/350 (memberPrice/nonMemberPrice가 KRW/kWh 기준으로 치환된 값이며, 화면의 라벨·줄바꿈·강조 등 레이아웃은 EVSE 표시 정책에 따릅니다.)
  • 자동 전송 시점: BootNotificationResponse(Accepted) 직후
  • 기타 전송 시점: 운영 정책 변경, 화면 문구 초기화/갱신이 필요한 시점

2. 충전 중 누적 비용 표시

충전 중 사용자에게 보여줄 현재 비용은 TransactionEventRequest에 대한 CSMS 응답의 totalCost를 기본 경로로 사용합니다.

  • Updated: 충전 중 비용 갱신
  • Ended: 최종 비용 표시
  • 적용 대상: CSMS가 중앙에서 비용을 계산하는 일반 거래

3. 별도 비용 갱신

CostUpdatedRequestTransactionEventResponse.totalCost와 별개로 CSMS가 비용을 즉시 갱신해야 할 때 사용하는 보조 경로입니다.

  • 목적: TransactionEvent 응답 주기와 무관한 비용 갱신
  • 사용 예: 비용 변경을 별도 Push로 즉시 표시해야 하는 경우

4. 로컬 비용 계산이 필요한 경우

SetDefaultTariffRequest는 화면 안내용 단가표가 아니라 EVSE가 로컬에서 비용을 계산할 수 있도록 Tariff 구조를 설치하는 메시지입니다.

다음 조건에서만 필수에 가깝습니다.

  • EVSE가 오프라인 또는 로컬 모드에서 비용을 계산해야 함 (당사와 특수한 조건에 의하여)
  • EVSE가 idleTime 요금 등을 로컬에서 계산/표시해야 함

Tariff 자동 전송 시점

CSMS는 다음 시점에 SetDefaultTariffRequest를 자동으로 전송합니다.

시점설명
EVSE 부팅 시BootNotificationResponse(Accepted) 직후, 해당 EVSE에 유휴 요금 정책이 적용되어 있으면 자동 전송
정책 생성/수정 시관리자가 유휴 요금 정책을 생성하거나 수정하면 대상 그룹 소속 모든 EVSE에 전송

Tariff 구조 예시

{
"evseId": 1,
"tariff": {
"tariffId": "01966a3b-7c00-7000-8000-abc123def456",
"currency": "KRW",
"tariffKind": "DefaultTariff",
"tariffElement": [
{
"priceComponent": [
{
"type": "IdleTime",
"price": 100.0,
"stepSize": 60
}
],
"tariffRestriction": {
"minDuration": 600
}
}
]
}
}

위 예시에서:

  • IdleTime: 유예 시간 600초(10분) 경과 후 60초 단위로 분당 100원 부과

5. 저장된 Tariff 점검

GetTariffsRequest는 EVSE가 CSMS에 단가표를 요청하는 메시지가 아닙니다. CSMS가 EVSE에 저장된 Tariff와 할당 상태를 조회하는 운영/점검용 메시지입니다.

  • 방향: CSMS → EVSE
  • 목적: EVSE에 저장된 Tariff assignment 확인
  • 사용 예: Tariff 동기화 점검, 운영자가 설치 상태 확인, 장애 분석

6. 거래 중 Tariff 변경

ChangeTransactionTariffRequest는 이미 진행 중인 거래의 Tariff를 변경해야 할 때 사용합니다.

자동 전송 시점

CSMS는 유휴 요금 정책이 변경될 때, 해당 정책이 적용되는 그룹 소속 EVSE 중 현재 충전 중인 거래가 있으면 ChangeTransactionTariffRequest를 자동으로 전송합니다.

기타 사용 예시

  • 인증 시점에는 Tariff를 확정하지 못했음
  • 프로모션, 로밍, 정산 조건이 거래 중 뒤늦게 확정됨
  • EVSE가 로컬 비용 계산을 수행 중이고 거래별 Tariff를 교체해야 함

EVSE 구현 지침

  • ChangeTransactionTariffRequest 수신 시, 해당 transactionId에 대한 로컬 비용 계산을 새 Tariff 기준으로 전환합니다.
  • 이미 계산된 비용은 유지하고, 수신 시점 이후부터 새 Tariff를 적용합니다.
  • 해당 transactionId가 존재하지 않으면 Rejected로 응답합니다.

v2.1 EVSE 구현 지침

  1. 대기 화면의 회원가/비회원가 안내는 CSMS가 BootNotificationResponse(Accepted) 직후 전송하는 관리 메시지 기반 SetDisplayMessageRequest를 수신하여 표시합니다. CSMS는 관리 메시지 템플릿의 {{memberPrice}}/{{nonMemberPrice}} 변수를 EVSE별 단가로 치환해 300/350처럼 값만 전달하고, EVSE는 자체 화면 정책에 맞게 라벨과 레이아웃을 적용합니다.
  2. 충전 중 비용은 TransactionEventResponse.totalCost를 기본으로 표시합니다.
  3. SetDefaultTariffRequestidleTime 요금 또는 로컬 비용 계산이 필요한 EVSE에서만 필수로 봅니다.
  4. GetTariffsRequest는 CSMS가 EVSE의 Tariff 설치 상태를 점검할 때 사용하며, EVSE가 단가표를 요청하는 흐름으로 구현하지 않습니다.
  5. ChangeTransactionTariffRequest는 거래 중 Tariff 변경이 필요한 경우에만 사용합니다.
  6. CostUpdatedRequest는 TransactionEvent 응답과 별도 Push가 필요한 EVSE에서만 보조 경로로 사용합니다.
  7. 표준 메시지만으로 기존 요청-응답형 단가 조회가 필요한 경우를 표현하기 어렵다면 DataTransfer:com.skelectlink:GetUnitPrice를 하위 호환 fallback으로 유지합니다.