CSMS 연동 문서
CSMS Integration
OCPP 2.0.1 연동 가이드
충전기 제조사용
본 문서는 충전기(Charging Station)를 CSMS(Charging Station Management System) OCPP 2.0.1로 연동하기 위한 규격을 정의합니다. 충전기 제조사 및 연동 개발자를 대상으로 합니다. OCPP 1.6 충전기는 OCPP 1.6 연동 가이드를 따르십시오.

0. 문서 개요

  • 표준 OCPP 2.0.1 메시지(payload 필드·enum·제약)는 OCA OCPP 2.0.1 규격(Part 2 / Part 4)을 그대로 따르므로 본 문서에서는 지원 여부만 목록화합니다(2장).
  • 2.0.1에는 자사 벤더 확장(DataTransfer)이 없습니다. 그 대신 표준 메시지에 대해 CSMS가 어떻게 판정·응답하는지(처리 규칙)를 상세히 기술합니다(4장). 충전기 구현은 이 처리 규칙을 전제로 해야 합니다.

대상 독자: 충전기 펌웨어/연동 개발자  |  전제 지식: OCPP 2.0.1 규격(Part 2 메시지, Part 4 JSON/WebSocket, Security), WebSocket, JSON, TLS

0.1 OCPP 1.6 대비 용어·구조 변화

OCPP 1.6OCPP 2.0.1비고
Charge Point / chargePointIdentityCharging Station / chargingStationIdURL 마지막 세그먼트 규칙은 동일
connector (connectorId)EVSE(evseId) + connector(connectorId)CSMS는 EVSE 단위로 상태·거래를 관리하며 어드민에는 "EVSE"로 표기
StartTransaction / StopTransaction / MeterValues(거래 중)TransactionEvent(Started / Updated / Ended)거래 ID는 충전기가 만드는 UUID 문자열
RemoteStartTransaction / RemoteStopTransactionRequestStartTransaction / RequestStopTransaction원격 시작에 remoteStartId·chargingProfile 동반
ChangeConfiguration / GetConfiguration(설정 키)Device ModelSetVariables / GetVariables / GetBaseReport / GetReportNotifyReport1.6 커스텀 설정 키(CsmsUrl 등)는 2.0.1에 없음 — SetNetworkProfile 등 표준 사용
idTag(문자열)idToken { idToken, type }type에 따라 CSMS 판정 규칙이 다름(4.2)
DataTransfer 벤더 확장(Bionever / AMANO / K-VAS / PnC 래핑)없음 — 모든 DataTransfer는 UnknownVendorIdISO 15118(PnC)은 2.0.1 네이티브 Action 사용(4.8)
Security Whitepaper 확장 메시지표준 본문에 포함(SignCertificate, SecurityEventNotification, SetNetworkProfile …)

1. 연결 개요

충전기는 OCPP 2.0.1 JSON(OCPP-J) 프로토콜로 CSMS에 WebSocket 연결합니다. 연결 시 반드시 아래 규격을 따라야 합니다.

항목값 / 설명
프로토콜OCPP 2.0.1 (JSON over WebSocket, "OCPP-J")
WebSocket subprotocolocpp2.0.1 — 핸드셰이크 시 Sec-WebSocket-Protocol: ocpp2.0.1 필수. 제시하지 않으면 CSMS가 업그레이드를 HTTP 400으로 거부합니다
엔드포인트wss://<csms-host>/ocpp2/<chargingStationId> — 경로 접두사 /ocpp2/에 주의(1.6은 /ocpp/)
chargingStationIdURL 경로 마지막 세그먼트. CSMS에 사전 등록된 식별자여야 합니다(미등록 → 소켓 종료 코드 1008 Charger not registered in API). 대소문자는 구분하지 않으며 CSMS는 대문자로 정규화합니다
전송 보안Security Profile 1 / 2 / 3 지원 — 1.3 참조. 운영 환경은 SP2 이상(TLS) 권장
Heartbeat 주기BootNotification 응답의 interval(기본 300초, 운영자가 충전기별로 변경 가능)
메시지 크기텍스트 프레임 최대 1 MB
유휴 타임아웃WebSocket 유휴 1시간 — interval 주기의 Heartbeat로 충분히 갱신됩니다

1.1 환경별 엔드포인트

환경Security ProfileURL비고
운영 cp2.oasis-arca.comSP2 / SP3 (TLS)wss://cp2.oasis-arca.com:443/ocpp2/{id} (또는 :8091)NLB TCP 패스스루 — TLS는 CSMS 컨테이너가 직접 종단하므로 SP3 클라이언트 인증서 검증 가능
운영SP1 (평문)ws://cp2.oasis-arca.com:8081/ocpp2/{id}Basic Auth 필수(1.3)
개발 cp2.dev.oasis-arca.comSP1 (평문)ws://cp2.dev.oasis-arca.com:8091/ocpp2/{id}연동 시험용
개발TLSwss://cp2.dev.oasis-arca.com/ocpp2/{id}아래 주의 참조
개발 환경 TLS 접속의 보안 프로파일 판정 주의 — 개발 환경은 로드밸런서(NLB)가 TLS를 종단하고 CSMS 컨테이너는 평문으로 받습니다. 따라서 wss://로 접속해도 CSMS는 SP1로 판정하며, 클라이언트 인증서(SP3)도 전달되지 않습니다. 개발 환경에서 시험할 충전기는 SP1로 등록해야 합니다 — SP2/SP3로 등록된 충전기가 개발 환경에 접속하면 "다운그레이드 거부"(1.3)로 HTTP 403이 납니다. 운영 환경은 컨테이너가 TLS를 종단하므로 이 제약이 없습니다.

1.2 연결 수립 순서

  1. 충전기가 wss://<host>/ocpp2/<id>로 WebSocket 핸드셰이크 — subprotocol ocpp2.0.1 + 보안 프로파일에 따른 인증 재료(Basic Auth 헤더 또는 클라이언트 인증서).
  2. CSMS가 핸드셰이크 단계에서 식별자 등록 여부·보안 프로파일·자격증명을 검증합니다 (실패 시 HTTP 400/401/403으로 업그레이드 거부).
  3. 연결 직후 충전기가 BootNotification 전송 → CSMS가 Accepted / Pending / Rejected + interval 응답(4.1).
  4. Accepted 이후 충전기는 interval 주기로 Heartbeat, EVSE·커넥터 상태는 StatusNotification(evseId, connectorId)로 통지합니다.
부팅 게이트: Pending / Rejected 판정을 받은 접속에서 BootNotification 외의 CALL을 보내면 CSMS는 CALLERROR SecurityError로 거부합니다. 충전기는 interval 경과 후(또는 TriggerMessage(BootNotification) 수신 시) 다시 BootNotification을 보내야 합니다. Pending 중에도 CSMS가 보내는 GetVariables / SetVariables / GetBaseReport CSMS 발신 명령에는 응답해야 합니다.
단일 연결 정책: 하나의 chargingStationId에 대해 동시 접속은 1개만 허용됩니다. 기본 동작은 새 연결이 기존 세션을 대체하는 것이며, 운영 설정에 따라 신규 접속을 거부(종료 코드 1008 Charger already connected)할 수 있습니다. 이 정책은 OCPP 1.6 서버와 공유되므로 같은 식별자로 1.6 서버와 2.0.1 서버에 동시에 접속할 수 없습니다.

1.3 보안 프로파일 (Security Profile)

CSMS는 접속의 전송 계층을 실측해 제시된 프로파일을 판정하고, 충전기 등록 정보(보안 프로파일 1/2/3, 기본 2 · Basic Auth 모드 기본/사용/미사용)와 대조합니다. 등록 값은 운영팀이 전달합니다.

프로파일전송인증CSMS 판정 근거
SP1평문 ws://HTTP Basic Auth평문 커넥터로 수신
SP2TLS wss://HTTP Basic Auth + 서버 인증서 신뢰TLS 커넥터로 수신, 클라이언트 인증서 없음
SP3TLS wss:// (상호 TLS)클라이언트 인증서CSMS-CA로 검증된 클라이언트 인증서 제시

핸드셰이크 판정 규칙

상황CSMS 응답비고
Basic Auth 헤더 누락 / username ≠ chargingStationId / 비밀번호 불일치401 + WWW-Authenticate: Basic realm="OCPP"username은 대소문자 무관. 비밀번호는 운영팀 발급
Basic Auth 미사용 모드로 등록된 충전기헤더 없이 접속 허용운영팀 협의 사항
등록 프로파일보다 낮은 프로파일로 접속(예: SP2 등록 → 평문 8081)403 (다운그레이드 거부)상향 접속(SP1 등록 → TLS)은 허용
SP3 — 클라이언트 인증서 CN ≠ chargingStationId403CN은 대소문자 무관
SP3 — 인증서가 CSMS-CA로 검증되지 않음인증서 미캡처 → SP2로 판정 → SP3 등록 충전기는 401CSMS-CA 서명 인증서만 유효
SP3로 등록되지 않은 충전기가 클라이언트 인증서 제시403
미등록 식별자 / 사용 중지 충전기404 / 403핸드셰이크 단계에서 거부

서버 인증서 · 비밀번호 · 프로파일 승격

  • 서버 인증서: RSA + ECDSA(P-256) 듀얼 인증서, 발급자는 공인 CA가 아닌 사설 CSMS-CA입니다. 서버 인증서 검증을 켜는 충전기는 CSMS-CA 루트 인증서를 사전 설치해야 합니다(운영팀 제공). TLS 1.2 이상, cipher는 TLS 1.3 3종 + ECDHE(RSA/ECDSA) GCM + TLS_RSA_WITH_AES_*(OCPP SP2/3 요구)를 지원합니다.
  • 비밀번호 변경: CSMS는 SetVariables(SecurityCtrlr.BasicAuthPassword)로 Basic Auth 비밀번호를 갱신합니다. 충전기가 Accepted로 응답하면 CSMS도 새 비밀번호로 전환하고, Rejected면 기존 비밀번호를 유지합니다.
  • 프로파일 승격: CSMS는 SetNetworkProfile로 새 접속 프로파일을 내려보낼 수 있습니다(SP1→2, SP2→3). 충전기는 규격에 따라 재접속합니다.

1.4 메시지 프레임 (OCPP-J) 과 오류 응답

모든 메시지는 JSON 배열입니다.

CALL       [2, "<messageId>", "<Action>", {<payload>}]
CALLRESULT [3, "<messageId>", {<payload>}]
CALLERROR  [4, "<messageId>", "<errorCode>", "<description>", {<details>}]
  • CSMS는 관용 파싱을 합니다 — 규격이 허용하는 customData 등 확장 필드가 포함되어도 거부하지 않습니다.
  • CSMS가 보내는 CALLERRORerrorCode는 OCPP 2.0.1 Part 4 정의를 따릅니다:
errorCodeCSMS가 보내는 경우
NotImplemented지원하지 않는 Action(2.1 목록 외)
FormatViolationJSON 파싱 실패
OccurrenceConstraintViolation필수 필드 누락
TypeConstraintViolation필드 타입·형식 불일치
PropertyConstraintViolation값 제약 위반
SecurityError부팅 게이트(Pending/Rejected 상태에서 Boot 외 CALL)
InternalErrorCSMS 내부 처리 실패

예시 — Heartbeat

→ [2, "msg-001", "Heartbeat", {}]
← [3, "msg-001", {"currentTime": "2026-09-18T09:00:00Z"}]

2. 표준 OCPP 2.0.1 메시지 지원 목록

아래 메시지의 payload 필드·enum·제약 조건은 OCPP 2.0.1 규격서를 그대로 따릅니다. 충전기는 규격서 기준으로 구현하면 되며, CSMS 고유의 판정·응답 규칙은 4장을 참조합니다.

2.1 Charging Station → CSMS (충전기가 전송)

Action지원CSMS 처리 / 비고
BootNotification지원Accepted / Pending / Rejected + interval — 4.1
Heartbeat지원currentTime 반환, 온라인 갱신
StatusNotification지원EVSE·커넥터 상태 반영 — 4.4
Authorize지원idToken.type별 판정, groupIdToken, 계약 인증서(eMAID) 인가 — 4.2
TransactionEvent지원Started / Updated / Ended 통합 처리, totalCost·idTokenInfo 응답 — 4.3
MeterValues지원거래 외 검침(TriggerMessage(MeterValues) 등) — 응답만 하며 저장하지 않음(4.5)
DataTransfer지원벤더 확장 없음 — 항상 UnknownVendorId(3장)
FirmwareStatusNotification지원펌웨어 상태 기록
LogStatusNotification지원로그 업로드 상태 기록
SecurityEventNotification지원보안 이벤트 기록
SignCertificate지원CSR 접수 → CSMS-CA 서명 → CertificateSigned 발신 — 4.8
Get15118EVCertificate지원ISO 15118 계약 인증서 설치/갱신 중계 — 4.8 (PnC 사용 설정 필요)
GetCertificateStatus지원OCSP 상태 조회 — 4.8 (PnC 사용 설정 필요)
NotifyReport지원GetBaseReport / GetReport 결과 조각(requestId·seqNo·tbc) 수신 — 4.11
NotifyEvent지원수신·응답
NotifyMonitoringReport지원모니터링 목록 조각 수신 — 4.11
NotifyCustomerInformation지원고객정보 조각 수신 — 4.11
NotifyDisplayMessages지원표시 메시지 목록 수신 — 4.12
ReportChargingProfiles지원GetChargingProfiles 결과 조각 수신 — 4.7
NotifyChargingLimit지원외부 충전 한계 통보 수신 — 4.7
ClearedChargingLimit지원한계 해제 통보 수신 — 4.7
NotifyEVChargingNeeds지원EV 충전 요구 → TxProfile 계산·전송, Accepted/Rejected — 4.7
NotifyEVChargingSchedule지원EV 스케줄 대조, 초과 시 Rejected + 재협상 — 4.7
ReservationStatusUpdate지원예약 만료/소멸 반영 — 4.9
PublishFirmwareStatusNotification미제공NotImplemented 응답. Local Controller 전용(현장 로컬 컨트롤러가 다른 충전기에 펌웨어를 배포한 진행 상태 보고) — 일반 충전기는 사용하지 않음

2.2 CSMS → Charging Station (CSMS가 전송, 충전기가 처리)

Action지원비고
RequestStartTransaction지원remoteStartId, idToken(type 기본 ISO14443, 운영자 선택 가능), evseId, chargingProfile(선택) — 4.6
RequestStopTransaction지원transactionId(UUID)
Reset지원Immediate / OnIdle, evseId(선택 — EVSE 단위 리셋)
UnlockConnector지원evseId + connectorId
ChangeAvailability지원operationalStatus, evse(선택 — 생략 시 충전기 전체)
ClearCache지원
TriggerMessage지원requestedMessage, evse(선택)
DataTransfer지원운영 진단용 발신 가능 — 충전기는 표준대로 응답(UnknownVendorId 허용)
SetVariables / GetVariables지원다중 항목 지원
GetBaseReport지원ConfigurationInventory / FullInventory / SummaryInventory
GetReport지원componentVariable / componentCriteria 조건 조회
SetNetworkProfile지원접속 프로파일 배포(보안 프로파일 승격 포함)
GetLog지원DiagnosticsLog / SecurityLog
UpdateFirmware지원서명 펌웨어(signingCertificate·signature) 및 retrieveDateTime / installDateTime 예약 지원
SetChargingProfile지원TxDefaultProfile / TxProfile / ChargingStationMaxProfile, evseId=0 포함 — 4.7
ClearChargingProfile지원chargingProfileId 또는 조건(evseId·purpose·stackLevel)
GetChargingProfiles지원requestId + 조건 → ReportChargingProfiles
GetCompositeSchedule지원evseId, duration, chargingRateUnit
ReserveNow지원id, expiryDateTime, idToken, evseId(선택), connectorType(선택) — 4.9
CancelReservation지원
SendLocalList지원versionNumber, updateType, localAuthorizationList[] — 4.10
GetLocalListVersion지원
GetTransactionStatus지원transactionId(선택)
SetVariableMonitoring / ClearVariableMonitoring지원4.11
GetMonitoringReport지원NotifyMonitoringReport
SetMonitoringBase / SetMonitoringLevel지원
CustomerInformation지원report / clear, customerIdentifier · idToken · customerCertificateNotifyCustomerInformation
SetDisplayMessage / GetDisplayMessages / ClearDisplayMessage지원4.12
CertificateSigned지원SignCertificate 응답 뒤에 전송(순서 보장) — 4.8
InstallCertificate지원CSMSRootCertificate / ManufacturerRootCertificate / V2GRootCertificate / MORootCertificate
GetInstalledCertificateIds지원certificateType[] 생략 시 전체 조회
DeleteCertificate지원certificateHashData
PublishFirmware / UnpublishFirmware미제공Local Controller 전용 — 로컬 컨트롤러에 펌웨어를 내려받아 현장 네트워크에 게시/게시 해제하라는 명령. CSMS는 UpdateFirmware로 충전기에 직접 배포하므로 사용하지 않음
CostUpdated미제공진행 요금을 CSMS가 임의 시점에 밀어 넣는 명령. CSMS는 대신 TransactionEvent 응답의 totalCost로 매 이벤트마다 요금을 전달하므로(4.3) 별도 발신하지 않음

2.3 기능 블록별 요약

기능 블록지원 기능관련 절
SecurityBasic Auth, TLS(SP2/3), 인증서 갱신, 보안 이벤트, 비밀번호 변경, 프로파일 승격1.3, 4.8
ProvisioningBoot(Accepted/Pending/Rejected), Device Model 조회·변경, 리포트, 네트워크 프로파일4.1, 4.11
AuthorizationidToken 유형별 인가, 그룹(마스터패스), 계약 인증서(eMAID) 인가, 캐시 만료4.2
Local Authorization ListSendLocalList / GetLocalListVersion4.10
TransactionsTransactionEvent 전 경로, 원격 시작 연계, 오프라인 거래, seqNo4.3
Remote ControlRequestStart/Stop, TriggerMessage, UnlockConnector4.6
AvailabilityChangeAvailability(충전기/EVSE/커넥터), StatusNotification4.4
ReservationReserveNow / CancelReservation / ReservationStatusUpdate4.9
Tariff & CostTransactionEvent.totalCost(진행·확정)4.3
Meter Values거래 검침(TransactionEvent) / 트리거 검침(MeterValues)4.3, 4.5
Smart Charging프로파일 3종, 합성 스케줄, 외부 한계, ISO 15118 협상4.7
Firmware ManagementUpdateFirmware(서명·예약), FirmwareStatusNotification4.11
ISO 15118 Certificate MgmtGet15118EVCertificate, GetCertificateStatus, 인증서 설치·조회·삭제4.8
Diagnostics변수 모니터링, 이벤트 통보, 고객정보, GetLog4.11
Display MessageSetDisplayMessage / GetDisplayMessages / ClearDisplayMessage / NotifyDisplayMessages4.12
Data Transfer양방향 DataTransfer 프레임 처리(벤더 확장 없음)3

3. 프로토콜 프로파일과 DataTransfer

CSMS는 충전기별로 프로토콜 프로파일을 지정합니다. OCPP 2.0.1 충전기의 프로파일은 OCPP_201_STANDARD 하나이며, 어드민에서 OCPP 버전을 2.0.1로 등록하면 자동 지정됩니다.
프로파일대상DataTransfer 벤더 확장
OCPP_201_STANDARD모든 OCPP 2.0.1 충전기없음 — CS → CSMS DataTransfer는 vendorId·messageId와 무관하게 status = "UnknownVendorId"로 응답
  • 1.6의 자사 확장(Bionever SetPaymentInfo·GetUnitPrices·SetChargePreference, AMANO, K-VAS 배터리 데이터, ChangeConfiguration 커스텀 키)은 2.0.1에 제공되지 않습니다. 해당 기능이 필요한 사업은 운영팀과 별도 협의합니다.
  • 1.6의 DataTransfer 래핑 PnC(org.openchargealliance.iso15118pnc)도 2.0.1에서는 사용하지 않습니다 — 네이티브 Action(Authorize의 인증서 필드, Get15118EVCertificate, GetCertificateStatus, 인증서 관리 4종)을 사용합니다(4.8).
  • CSMS → CS DataTransfer는 운영 진단 목적으로 발신될 수 있습니다. 충전기는 표준대로 UnknownVendorId / UnknownMessageId를 응답하면 됩니다.

4. CSMS 처리 규칙 (2.0.1 고유)

표준 메시지에 대해 CSMS가 어떻게 판정하고 무엇을 응답하는지 정리합니다. 충전기 펌웨어는 아래 규칙을 전제로 상태 전이·화면 처리를 구현해야 합니다.

4.1 BootNotification 판정과 부팅 게이트

조건statusinterval
미등록 식별자 / 비활성(사용 중지) 충전기Rejected300
운영자가 Pending 또는 Rejected를 지정한 충전기(2.0.1 전용 설정)지정값운영자 지정값(기본 300)
그 외Accepted운영자 지정값(기본 300)
→ [2, "b-01", "BootNotification", {"chargingStation": {"model": "EVC-200", "vendorName": "ACME"}, "reason": "PowerUp"}]
← [3, "b-01", {"currentTime": "2026-09-18T09:00:00Z", "interval": 300, "status": "Pending"}]
→ [2, "h-01", "Heartbeat", {}]
← [4, "h-01", "SecurityError", "BootNotification status is Pending", {}]
  • CSMS는 chargingStation.model / vendorName / reason을 기록하고 온라인 상태를 갱신합니다.
  • 부팅 게이트: Pending / Rejected 응답 이후 같은 접속에서 BootNotification 외의 CALL이 오면 위 예시처럼 SecurityError로 거부합니다. 게이트는 접속 단위이며 소켓이 끊기면 해제됩니다.
  • Pending은 운영자가 부팅 전 설정(GetVariables/SetVariables/GetBaseReport 등)을 마치는 용도입니다. 충전기는 Pending 중에도 CSMS 발신 명령에 응답해야 하며, interval 경과 후 또는 TriggerMessage(BootNotification) 수신 시 BootNotification을 재전송합니다.

4.2 Authorize — idToken 판정

Authorize.reqidToken.type에 따라 CSMS 판정 경로가 다릅니다.

idToken.typeCSMS 판정idTokenInfo.status
CentralCSMS가 발급한 토큰(원격 시작·그룹 토큰). 카드로 등록된 값이면 카드 그룹을 groupIdToken으로 함께 반환항상 Accepted
Local, NoAuthorization충전기 쪽에서 인가가 끝난 토큰 — CSMS 목록을 조회하지 않음. NoAuthorizationidToken이 빈 문자열이어도 정상Accepted
ISO14443, ISO15693, KeyCode, MacAddress충전카드 목록 조회Accepted / Blocked / Expired / Invalid(미등록)
eMAID (+ certificate 또는 iso15118CertificateHashData)ISO 15118 계약 인증서 인가 — 인증서 유효성(OCSP / 유효기간)으로 판정. certificateStatus·cacheExpiryDateTime 동봉. 충전기의 PnC 사용 설정이 꺼져 있으면 InvalidAccepted / Invalid

응답 예시 — 그룹 카드

{
  "idTokenInfo": {
    "status": "Accepted",
    "groupIdToken": { "idToken": "GROUP-A", "type": "Central" }
  }
}
  • groupIdToken: 카드에 그룹(1.6의 parentIdTag)이 설정되어 있으면 위처럼 type = "Central"로 반환합니다. 마스터패스·그룹 인가(같은 그룹 카드로 종료)에 사용됩니다.
  • Authorize 판정에는 예약 여부를 포함하지 않습니다(예약 매칭은 충전기 로컬 규칙 + TransactionEvent.reservationId).

4.3 TransactionEvent 처리

거래 ID(transactionInfo.transactionId)는 충전기가 생성한 UUID 문자열이며 CSMS는 이 값으로 거래를 식별합니다. evse.id / evse.connectorId로 EVSE·커넥터를 식별합니다.

4.3.1 Started — 거래 시작

  • idToken을 4.2 규칙으로 판정합니다. 비회원 선결제 토큰은 1회용이라 재사용 시 Invalid입니다.
  • 판정이 Accepted가 아니면 거래를 생성하지 않습니다. 응답의 idTokenInfo.statusInvalid면 충전기는 규격대로 충전을 중단해야 합니다.
  • transactionInfo.remoteStartId가 있으면 원격 시작 거래로 기록합니다. 동봉된 meterValue는 저장합니다.

4.3.2 Updated — 진행 중

  • meterValue를 저장하고, 응답에 진행 중 요금 totalCost를 싣습니다(조회 시점 계산).
  • idToken이 실려 오면 재인가로 보고 엄격 판정해 idTokenInfo를 응답합니다.
  • seqNo가 중복이면 무시(응답은 정상), 건너뛰면 유실 경고 후 반영합니다. 이미 종료된 거래의 Updated도 무시하고 정상 응답합니다.

4.3.3 Ended — 거래 종료

  • 거래를 종료하고 요금을 확정합니다(transactionInfo.stoppedReason 기록). 응답 totalCost는 확정 요금입니다.
  • 멱등입니다 — 중복 Ended도 정상 응답하며 확정 요금을 다시 싣습니다. 존재하지 않는 거래의 Ended에도 idToken 판정은 응답합니다.

응답 예시 — Updated

← [3, "t-12", {
  "totalCost": 4200.0,
  "idTokenInfo": { "status": "Accepted" }
}]
항목규칙
검침(measurand)정산 기준은 Energy.Active.Import.Register(Wh). measurand를 생략한 sampledValue는 전력량으로 간주. Power.Active.Import·SoC 등은 기록·화면 표시용
seqNo거래별 단조 증가를 전제로 중복·유실을 판정하므로 규격대로 채운다
offlinetrue인 거래도 동일하게 처리 — 오프라인 중 Started~Ended를 재접속 후 순서대로 전송

4.4 StatusNotification — EVSE·커넥터 상태

connectorStatusCSMS 반영
Available대기
Occupied충전 중 (Preparing · Charging · SuspendedEV · Finishing 포함)
Reserved예약
Unavailable사용 불가
Faulted고장
  • evseId가 CSMS 커넥터 행에 대응합니다(어드민 표기 "EVSE"). evseId = 0은 충전기 전체 상태로 취급하며 커넥터 행을 만들지 않습니다.
  • 커넥터 가용 상태 복귀는 충전기의 StatusNotification(Available)로만 반영됩니다 — 거래 종료가 상태를 선반영하지 않습니다.

4.5 MeterValues (거래 외 검침)

TriggerMessage(MeterValues) 등으로 전송되는 거래 외 MeterValues 정상 응답만 하고 저장하지 않습니다. 정산·이력에 쓰이는 검침은 TransactionEventmeterValue로 보냅니다.

4.6 원격 제어 (CSMS → CS)

ActionCSMS가 보내는 값충전기 요구사항
RequestStartTransactionremoteStartId(CSMS 발번), idToken{idToken, type}(type 기본 ISO14443, 운영자 선택 가능), evseId, chargingProfile(TxProfile, 선택)AcceptedTransactionEvent(Started)transactionInfo.remoteStartId에 같은 값을 넣어야 원격 시작 거래로 연결됨
RequestStopTransactiontransactionId(UUID)
Resettype = Immediate / OnIdle, evseId(선택)evseId가 있으면 해당 EVSE만 리셋
UnlockConnectorevseId, connectorId
ChangeAvailabilityoperationalStatus, evse{id, connectorId?}(선택)생략 시 충전기 전체
TriggerMessagerequestedMessage, evse(선택)BootNotification·Heartbeat·StatusNotification·MeterValues·TransactionEvent·LogStatusNotification·FirmwareStatusNotification·SignChargingStationCertificate 사용

예시 — RequestStartTransaction

← [2, "r-01", "RequestStartTransaction", {
  "remoteStartId": 1024,
  "idToken": { "idToken": "APP-7F3A", "type": "Central" },
  "evseId": 1
}]
→ [3, "r-01", { "status": "Accepted" }]
→ [2, "t-01", "TransactionEvent", { "eventType": "Started", "triggerReason": "RemoteStart",
     "transactionInfo": { "transactionId": "5f1c…", "remoteStartId": 1024 }, ... }]

CSMS는 응답 status를 명령 이력에 기록하며, 세션이 없으면 명령을 보내지 않고 실패로 기록합니다.

4.7 스마트 차징

Action방향CSMS 동작
SetChargingProfileCSMS → CSTxDefaultProfile(EVSE 또는 evseId=0 전체) / TxProfile(진행 거래, transactionId 지정) / ChargingStationMaxProfile(evseId=0). Absolute·Recurring·Relative 스케줄, chargingRateUnit W/A 모두 사용
ClearChargingProfileCSMS → CSID 또는 evseId·chargingProfilePurpose·stackLevel 조건
GetChargingProfilesReportChargingProfilesCSMS → CS → CSMSrequestId + 조건으로 조회, 충전기는 requestId·tbc로 보고
GetCompositeScheduleCSMS → CS결과는 어드민 차트에 표시
NotifyChargingLimit / ClearedChargingLimitCS → CSMS외부 한계 통보·해제를 수신·기록

ISO 15118 협상 (K15~K17)

CS → CSMSCSMS 판정응답 status
NotifyEVChargingNeeds해당 EVSE에 진행 중 거래가 있으면 TxProfile을 계산해 SetChargingProfile로 전송(응답 프레임이 나간 뒤). 진행 거래가 없으면 거절 — 충전기는 TxDefaultProfile로 진행Accepted / Rejected
NotifyEVChargingScheduleEV 스케줄이 마지막 TxProfile 한계 안이면 수락. 넘으면 거절하고 같은 한계의 TxProfile을 다시 내려 재협상 시작Accepted / Rejected

CSMS는 위 두 경우 외에는 프로파일을 자발적으로 재전송하지 않습니다.

4.8 인증서 관리 · ISO 15118

4.8.1 충전기 인증서 갱신 (SignCertificate → CertificateSigned)

→ [2, "c-01", "SignCertificate", { "csr": "-----BEGIN CERTIFICATE REQUEST-----…", "certificateType": "ChargingStationCertificate" }]
← [3, "c-01", { "status": "Accepted" }]                       // ① CSR 접수 응답이 먼저
← [2, "c-02", "CertificateSigned", { "certificateChain": "-----BEGIN CERTIFICATE-----…" }]   // ② CSMS-CA 서명 후 전송
→ [3, "c-02", { "status": "Accepted" }]
  • CSMS는 SignCertificate 응답이 소켓에 먼저 나간 뒤 CertificateSigned를 전송하도록 순서를 보장합니다.
  • certificateType = V2GCertificate의 CSR은 Rejected입니다 — V2G 충전기 인증서는 CSMS가 발급하지 않습니다.

4.8.2 인증서 설치·조회·삭제 (CSMS → CS)

Action필드비고
InstallCertificatecertificateType, certificateCSMSRootCertificate / ManufacturerRootCertificate / V2GRootCertificate / MORootCertificate
GetInstalledCertificateIdscertificateType[](선택)생략 시 전체 타입 조회
DeleteCertificatecertificateHashData
SecurityEventNotification (CS → CSMS)type, timestamp, techInfo보안 이벤트 기록

4.8.3 ISO 15118 (PnC) — 계약 인증서

충전기의 PnC 사용 설정이 켜져 있어야 합니다. 꺼져 있으면 Get15118EVCertificate / GetCertificateStatusstatus = "Failed", 계약 인증서 인가는 Invalid로 응답합니다.
CS → CSMS요청 필드CSMS 동작 / 응답
Get15118EVCertificateiso15118SchemaVersion, action(Install / Update), exiRequest계약 인증서 발급 체계에 중계 → status(Accepted / Failed), exiResponse
GetCertificateStatusocspRequestDataOCSP 조회 → status(Accepted / Failed), ocspResult
Authorize (eMAID)certificate(중앙 검증) 또는 iso15118CertificateHashData(로컬 검증)계약 인증서 인가 — 4.2

4.9 예약

Action방향필드 / CSMS 동작
ReserveNowCSMS → CSid, expiryDateTime, idToken, evseId(선택), connectorType(선택), groupIdToken(선택). 응답 status를 예약 상태에 반영
CancelReservationCSMS → CSreservationId
ReservationStatusUpdateCS → CSMSreservationId, reservationUpdateStatus(Expired / Removed) → 만료·소멸 반영
TransactionEvent(Started)CS → CSMS예약 사용 시 reservationId를 채운다

4.10 로컬 인가 목록

Action필드비고
SendLocalListversionNumber, updateType(Full / Differential), localAuthorizationList[]항목은 idToken{idToken, type} + idTokenInfo. 1.6 형식(listVersion, idTag)은 보내지 않음
GetLocalListVersion(없음)충전기는 versionNumber를 응답

4.11 장치 모델 · 진단 · 펌웨어

Action방향주요 필드CSMS 동작
GetVariables / SetVariablesCSMS → CSgetVariableData[] / setVariableData[](다중 항목)결과를 어드민 설정 화면에 표시
GetBaseReport / GetReportCSMS → CSrequestId, reportBase / componentVariable[]·componentCriteria[]충전기는 NotifyReport로 보고
NotifyReportCS → CSMSrequestId, generatedAt, seqNo, tbc, reportData[]조각을 그대로 어드민 화면에 전달(requestId·seqNo·tbc로 조립)
SetVariableMonitoring / ClearVariableMonitoring / GetMonitoringReport / SetMonitoringBase / SetMonitoringLevelCSMS → CS규격 필드결과·NotifyMonitoringReport·NotifyEvent를 수신. 모니터 ID의 정본은 충전기
CustomerInformationCSMS → CSrequestId, report, clear, customerIdentifier | idToken | customerCertificate충전기는 NotifyCustomerInformation(requestId, seqNo, tbc, data)로 보고
GetLogCSMS → CSlogType, requestId, log{remoteLocation, oldestTimestamp?, latestTimestamp?}충전기는 LogStatusNotification으로 진행 상태 보고
UpdateFirmwareCSMS → CSrequestId, firmware{location, retrieveDateTime, installDateTime?, signingCertificate?, signature?}, retries?, retryInterval?충전기는 FirmwareStatusNotification으로 진행 상태 보고
SetNetworkProfileCSMS → CSconfigurationSlot, connectionData{ocppVersion, ocppTransport, ocppCsmsUrl, messageTimeout, securityProfile, ocppInterface, …}접속 프로파일 배포(보안 프로파일 승격 포함)

4.12 표시 메시지

Action방향주요 필드
SetDisplayMessageCSMS → CSmessage.id, priority, state?, startDateTime?, endDateTime?, transactionId?, message{format, language?, content}, display?
GetDisplayMessagesCSMS → CSrequestId, id[]?, priority?, state?
NotifyDisplayMessagesCS → CSMSrequestId, tbc, messageInfo[]
ClearDisplayMessageCSMS → CSid

표시 메시지의 정본은 충전기이며 CSMS는 요청·조회 결과 표시만 합니다.

5. 운영 · 시험

5.1 어드민 등록 항목 (운영팀 수행)

항목설명
OCPP 버전2.0.1 선택 → 프로토콜 프로파일 OCPP_201_STANDARD 자동 지정
보안 프로파일 / Basic AuthsecurityProfile(1/2/3, 기본 2), Basic Auth 모드(기본/사용/미사용), 비밀번호
부팅 응답 지정Accepted(기본) / Pending / Rejected, 재시도 간격(초) — 2.0.1 전용
PnC 사용ISO 15118 계약 인증서 인가·Get15118EVCertificate·GetCertificateStatus 활성화
EVSE어드민 상세의 커넥터 영역은 2.0.1 충전기에서 "EVSE"로 표기됩니다

5.2 충전기 QR 생성

QR 규격은 OCPP 버전과 무관합니다 — OCPP 1.6 연동 가이드 5장 "충전기 QR 생성 가이드"를 그대로 따르십시오.

5.3 시험 환경

  • 연동 시험은 개발 환경(cp2.dev.oasis-arca.com)에서 진행합니다. 개발 환경은 TLS 접속도 SP1로 판정되므로 시험 충전기는 SP1로 등록합니다(1.1).
  • 식별자·자격증명·PnC 설정은 운영팀이 발급합니다.
  • 필요 시 CSMS 시뮬레이터의 "OCPP 2.0.1 Standard" 프로파일로 메시지 형태를 대조할 수 있습니다.

6. 부록

6.1 OCPP 1.6 ↔ 2.0.1 메시지 대응

1.62.0.1
StartTransaction / StopTransaction / MeterValues(거래)TransactionEvent(Started / Ended / Updated)
RemoteStartTransaction / RemoteStopTransactionRequestStartTransaction / RequestStopTransaction
ChangeConfiguration / GetConfigurationSetVariables / GetVariables (+ GetBaseReport / GetReport → NotifyReport)
GetDiagnostics / DiagnosticsStatusNotificationGetLog / LogStatusNotification
ExtendedTriggerMessageTriggerMessage
SignedUpdateFirmware / SignedFirmwareStatusNotificationUpdateFirmware(signingCertificate·signature) / FirmwareStatusNotification
DataTransfer(PnC 래핑: Authorize·Get15118EVCertificate·GetCertificateStatus·CertificateSigned·InstallCertificate·…)네이티브 Action
(없음)SetNetworkProfile, NotifyEvent, 변수 모니터링 5종, CustomerInformation, DisplayMessage 4종, NotifyEVChargingNeeds / NotifyEVChargingSchedule, ReservationStatusUpdate, GetTransactionStatus
DataTransfer 벤더 확장(Bionever / AMANO / K-VAS)(없음)

6.2 구현 체크리스트 (제조사)

  • subprotocol ocpp2.0.1/ocpp2/<chargingStationId>에 접속한다(미제시 시 400).
  • 할당된 보안 프로파일대로 접속한다 — Basic Auth username = chargingStationId, SP3는 CN = chargingStationId, CSMS-CA 루트 사전 설치(1.3). 개발 환경은 SP1로 시험한다(1.1).
  • BootNotificationPending / Rejected와 부팅 게이트를 처리한다 — 게이트 중 Boot 외 CALL은 SecurityError(4.1).
  • Authorize / TransactionEvent 응답의 idTokenInfo.statusgroupIdToken을 처리한다. Started에서 Invalid면 충전을 중단한다(4.2, 4.3).
  • TransactionEventseqNo를 단조 증가로 채우고, Energy.Active.Import.Register(Wh)를 반드시 포함한다. totalCost를 화면에 표시할 수 있다(4.3).
  • 거래 외 검침은 저장되지 않음을 전제로 한다 — 정산용 검침은 TransactionEvent로(4.5).
  • RequestStartTransactionremoteStartIdTransactionEvent(Started)에 반영한다(4.6).
  • DataTransfer 벤더 확장은 구현하지 않는다 — CS → CSMS DataTransfer는 UnknownVendorId를 받는다(3장).
  • (스마트 차징) 프로파일 3종·GetCompositeSchedule·ReportChargingProfiles와 ISO 15118 협상 응답(Accepted/Rejected 후 재협상)을 구현한다(4.7).
  • (PnC 대상) Authorize 인증서 필드, Get15118EVCertificate, GetCertificateStatus, 인증서 관리 4종을 네이티브로 구현한다. SignCertificateChargingStationCertificate만 CSMS가 서명한다(4.8).
  • SendLocalList는 2.0.1 형식(versionNumber, idToken{idToken,type})으로 받는다(4.10).

6.3 문의

식별자 등록, 보안 프로파일·Basic Auth 발급, CSMS-CA 루트 인증서, PnC 사용 설정 등은 CSMS 운영팀에 문의하십시오.

문의: axd@bionever.com

CSMS OCPP 2.0.1 Integration Guide · 충전기 제조사용