Custom Messages
본 문서는 OCPP 버전별 SK일렉링크 커스텀 메시지 사용 방식을 정의합니다.
DataTransfer를 사용하는 경우vendorId는 항상com.skelectlink입니다.
OCPP 2.1
OCPP v2.1 표준 메시지는 이 부록에 중복 정의하지 않습니다. OCPP v2.1 표준 메시지로 표현되지 않는 SK일렉링크 확장 기능만 DataTransfer:com.skelectlink로 교환합니다.
단가와 결제 정보는 OCPP v2.1 표준 메시지 조합을 우선 사용합니다. RemoteStartTransactionAdditionalInfoType을 RequestStartTransaction에 그대로 넣지 말고, 아래 표준 위치로 나누어 표현합니다. 충전 중 비용 표시는 TransactionEventResponse.totalCost를 기본으로 사용하고, 정산 결과는 NotifySettlement를 우선 사용합니다.
OCPP v1.6 additionalInfo 항목 | OCPP v2.1 사용 방식 |
|---|---|
currency, unitPrice | EVSE 로컬 비용 계산이 필요한 경우 chargingProfile.chargingSchedule.absolutePriceSchedule 또는 Tariff 계열 메시지로 전달합니다. |
paymentMethod, demandValue | 요구 금액은 TransactionEventResponse.transactionLimit.maxCost, 요구 전력량은 TransactionEventResponse.transactionLimit.maxEnergy로 전달합니다. |
userTargetSoC | 충전 한도로 처리할 수 있는 경우 TransactionEventResponse.transactionLimit.maxSoC를 사용합니다. |
memberType, memberInfo | 항상 idToken.additionalInfo로 포함합니다. memberType은 type=MemberType으로 전달하고, 로밍 회원인 경우 memberInfo의 로밍 정보는 type=RoamingCompanyCode, type=RoamingCompanyName으로 나누어 전달합니다. |
consented | K-VAS 충전기인 경우 idToken.additionalInfo(type=VASPrivacyPolicyConsent, additionalIdToken=true/false)로 포함합니다. 충전 중 별도 갱신이 필요한 경우 SetPrivacyPolicyCheck 확장을 사용합니다. |
MAC 주소 인증은 OCPP v2.1 Authorize의 idToken.type=MacAddress로 처리할 수 있습니다. 단, 카드번호와 MAC 주소를 등록 또는 연결하는 MacRegister 동작은 OCPP v2.1 표준 메시지로 대체되지 않으므로 DataTransfer 확장으로 유지합니다.
Plug & Charge 등록에서 eMAID와 멤버십 카드를 연결하는 PncRegister 동작도 OCPP v2.1 표준 메시지로 대체되지 않으므로 DataTransfer 확장으로 유지합니다.
차량 판별 정보를 거래 중에 조회하는 GetVehicleInfo 동작도 OCPP v2.1 표준 메시지에 대응하는 자리가 없으므로 DataTransfer 확장으로 제공합니다.
DataTransfer 확장
| Message | messageId | Direction |
|---|---|---|
| MAC 주소 등록 | MacRegister | EVSE -> CSMS |
| 차량 판별 정보 조회 | GetVehicleInfo | EVSE -> CSMS |
| Plug & Charge (PnC) 등록 | PncRegister | EVSE -> CSMS |
| 스마트충전(VAS) 인증서 발급 요청 | GetSmartChargeCertificate | EVSE -> CSMS |
| 스마트충전(VAS) 인증서 설치 요청 | InstallSmartChargeCertificate | CSMS -> EVSE |
| 스마트충전(VAS) 인증서 정보 조회 | GetSmartChargeCertificateInfoType | CSMS -> EVSE |
| 스마트충전(VAS) 세션키 발급 요청 | GetSmartChargeSessionKey | EVSE -> CSMS |
| 스마트충전(VAS) 세션키 설치 요청 | InstallSmartChargeSessionKey | CSMS -> EVSE |
| 사용자 Target SoC 설정 | SetUserTargetSoC | CSMS -> EVSE 또는 EVSE -> CSMS |
| 스마트충전(VAS) 배터리 정보 전송 | BatteryInfo | EVSE -> CSMS |
| 스마트충전(VAS) 개인정보 동의 설정 | SetPrivacyPolicyCheck | CSMS -> EVSE 또는 EVSE -> CSMS |
| 충전 고유키 조회 | GetEssentialsKey | EVSE -> CSMS |
| 운영 스케줄 설정 | SetOperatingSchedule | CSMS -> EVSE |
| 광고 프로파일 조회 | GetAdProfile | EVSE -> CSMS |
| 광고 미디어 조회 | GetAdMedia | EVSE -> CSMS |
| 화면 캡처 트리거 | TriggerScreenCapture | CSMS -> EVSE |
| 화면 캡처 결과 전송 | ScreenCaptureResult | EVSE -> CSMS |
OCPP 1.6
OCPP v1.6 충전기는 아래 메시지를 DataTransfer:com.skelectlink로 교환합니다.
RemoteStartTransaction
CSMS가 EVSE로 전송하는 RemoteStartTransaction.req 메시지에는 다음 커스텀 확장 파라미터가 추가로 포함될 수 있습니다.
| Field Name | Type | Required | Description |
|---|---|---|---|
| connectorId | Number | Optional | 충전을 시작할 커넥터 번호 |
| idTag | String | Required | transactionId 수신 전 임시로 사용하는 임의의 식별자 |
| chargingProfile | Number | Optional | 스마트 충전 관련 규격 |
| additionalInfo | RemoteStartTransactionAdditionalInfoType | Optional | 추가 결제/단가/인증 정보 |
DataTransfer
이 절은 각 커스텀 messageId별 data 페이로드 규격을 정의합니다.
단가 조회(Legacy)
EVSE가 CSMS로 단가 정보를 요청할 때 사용합니다 (구버전 호환용).
messageId: getPrice.req
요청
data 필드를 포함하지 않습니다.예시
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| connectorId | Number | Required | 고정값: 0 |
| currency | String | Required | 고정값: "" |
| unitPrice | Number | Required | 원/kWh 단가 |
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"connectorId": 0,
"currency": "",
"unitPrice": 420
},
"status": "Accepted"
}
]
단가 조회
EVSE가 CSMS로 최신 단가 정보를 요청할 때 사용합니다.
messageId: GetUnitPrice
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| unitPriceEnumType | UnitPriceEnumType | Required | 요청할 단가 타입 구분 |
| connectorId | Number | Optional | 커넥터 식별자 (unitPriceEnumType이 "Proportional"인 경우 필수) |
예시 — Member 타입
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetUnitPrice",
"data": {
"unitPriceEnumType": "Member"
}
}
]
예시 — Proportional 타입
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetUnitPrice",
"data": {
"unitPriceEnumType": "Proportional",
"connectorId": 1
}
}
]
단가 조회 응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| currency | String | Required | fixed "KRW" |
| unitPrice | String | Required | kWh/원 단가 |
| memberInfo | MemberInfoType | Optional | 회원 유형 정보 (unitPriceEnumType이 "Proportional"인 경우에만 포함) |
예시 — 기본 응답
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"currency": "KRW",
"unitPrice": "324.4"
},
"status": "Accepted"
}
]
예시 — 회원 단가 (ST)
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"currency": "KRW",
"unitPrice": "292.9",
"memberInfo": {
"memberType": "MEMBER"
}
},
"status": "Accepted"
}
]
예시 — 로밍 단가 (ROAMING)
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"currency": "KRW",
"unitPrice": "350.0",
"memberInfo": {
"memberType": "ROAMING",
"roamingCompanyCode": "ME",
"roamingCompanyName": "한국전력"
}
},
"status": "Accepted"
}
]
구독 요금제 단가 조회
EVSE가 CSMS로 전송하는 메시지입니다. 구독 요금제가 적용되는 충전기에서 사용자에게 구독 요금제 구간 단가(최소~최대)와 적용 기간을 안내할 때 사용합니다.
messageId: GetSubscriptionPrice
요청
data가 없습니다. 대상 충전기는 세션 컨텍스트로 식별합니다.예시
구독 요금제 단가 조회 응답
구독 요금제가 적용되고 현재 유효한 구간이 있으면 status는 Accepted이며 아래 data를 포함합니다. 구독 요금제 대상이 아니거나 현재 유효한 구간이 없으면 status는 Rejected이며 data를 포함하지 않습니다.
maxPrice는 제공되지 않을 수 있으며, 이 경우minPrice하나만 표시합니다.- 충전기는 적용 시작~종료 일자 이내 시간 동안 구독 요금제 구간 가격을 표시합니다.
| Field Name | Type | Required | Description |
|---|---|---|---|
| applyStartAt | DateTime | Required | 구독 요금제 적용 시작 일시 (UTC, ISO 8601) |
| applyEndAt | DateTime | Required | 구독 요금제 적용 종료 일시 (UTC, ISO 8601) |
| minPrice | String | Required | 구간 최소 단가 (KRW/kWh) |
| maxPrice | String | Optional | 구간 최대 단가 (KRW/kWh). 미제공 시 minPrice만 표시 |
예시 — 구독 요금제 적용
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"applyStartAt": "2026-07-01T00:00:00Z",
"applyEndAt": "2026-09-30T23:59:59Z",
"minPrice": "290.0",
"maxPrice": "347.0"
},
"status": "Accepted"
}
]
예시 — 최대 단가 미제공 (최소 단가만 표시)
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"applyStartAt": "2026-07-01T00:00:00Z",
"applyEndAt": "2026-09-30T23:59:59Z",
"minPrice": "290.0"
},
"status": "Accepted"
}
]
예시 — 구독 요금제 미적용
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Rejected"
}
]
메시지 트리거
CSMS가 EVSE로 전송하는 메시지입니다. OCPP v1.6 세션에서 메시지 트리거 동작을 제공하기 위한 DataTransfer 호환 메시지입니다.
customTrigger값이 DataTransfer로 시작하는 경우, 콜론(:)으로 vendorId, messageId를 구분하여 요청합니다.
messageId: TriggerMessage
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| requestMessage | MessageTriggerEnumType | Required | Trigger할 메시지의 타입을 의미합니다. |
| customTrigger | String | Optional | requestMessage가 CustomTrigger인 경우 해당 필드가 포함됩니다. |
| evse | EVSEType | Optional | 사용하지 않습니다. |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "TriggerMessage",
"data": {
"requestMessage": "CustomTrigger",
"customTrigger": "DataTransfer:com.skelectlink:GetPrice"
}
}
]
예상되는 동작: EVSE는 CSMS로 DataTransfer 메시지를 보냅니다.
메시지 트리거 응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| status | TriggerMessageStatusEnumType | Required | 트리거 명령 수행 상태를 응답합니다. |
| statusInfo | StatusInfoType | Optional | 자세한 충전기의 상태의 포함합니다. |
충전기는 반드시 해당 요청을 받고, 해당 명령을 수행할 수 있는 상태를 즉시 응답한 이후 언급된 트리거 메시지를 동작시켜야한다.
statusInfo는 status가 Accepted가 아닌 경우 가급적 포함하십시오.예시
변수 조회
CSMS와 EVSE 간 양방향으로 송수신 가능한 메시지입니다.
messageId: GetVariables
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| getVariableData | Array<GetVariableDataType> | Required | 요청할 변수들의 리스트입니다. |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetVariables",
"data": {
"getVariableData": [
{
"component": {
"name": "SampledDataCtrlr"
},
"variable": {
"name": "TxStartedMeasurands"
}
},
{
"component": {
"name": "SampledDataCtrlr"
},
"variable": {
"name": "TxUpdatedMeasurands"
}
}
]
}
}
]
변수 조회 응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| getVariableResult | Array<GetVariableResultType> | Required | 변수 조회 결과 리스트입니다. |
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"getVariableResult": [
{
"attributeStatus": "Accepted",
"attributeType": "Actual",
"attributeValue": "Energy.Active.Import.Register,SoC",
"component": {
"name": "SampledDataCtrlr"
},
"variable": {
"name": "TxStartedMeasurands"
}
},
{
"attributeStatus": "Accepted",
"attributeType": "Actual",
"attributeValue": "300",
"component": {
"name": "SampledDataCtrlr"
},
"variable": {
"name": "TxUpdatedMeasurands"
}
}
]
},
"status": "Accepted"
}
]
변수 설정
CSMS와 EVSE 간 양방향으로 송수신 가능한 메시지입니다.
messageId: SetVariables
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| setVariableData | Array<SetVariableDataType> | Required | 설정할 컴포넌트-변수 쌍과 속성 값들입니다. |
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| setVariableResult | Array<SetVariableResultType> | Required | 변수 설정 결과 리스트입니다. |
리포트 조회
CSMS가 EVSE로 전송하는 메시지입니다.
CSMS가 디바이스 모델의 특정 컴포넌트-변수를 조회할 때 사용합니다.
충전기는 이 요청을 status 로 먼저 응답하고, 그 다음 리포트 알림(NotifyReport)으로
실제 컴포넌트-변수 데이터를 전송합니다. 이때 NotifyReport 의 requestId 는 이 요청의 requestId 와 동일해야 합니다.
messageId: GetReport
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| requestId | Integer | Required | 이 조회를 식별하는 ID입니다. 충전기는 후속 NotifyReport 에 같은 값을 반환해야 합니다. |
| componentCriteria | Array<ComponentCriterionEnumType> | Optional | 조회 대상을 상태로 한정합니다. Active, Available, Enabled, Problem. |
| componentVariable | Array<ComponentVariableType> | Optional | 조회 대상 컴포넌트-변수 쌍입니다. 생략하면 전체 인벤토리를 대상으로 합니다. |
ComponentVariableType 의 component.evse 에 id(EVSE 번호)와 connectorId(커넥터 번호)를 함께 지정하면
커넥터 단위로 대상을 좁힐 수 있습니다.예시
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| status | GenericDeviceModelStatusEnumType | Required | Accepted, Rejected, NotSupported, EmptyResultSet 중 하나입니다. |
| statusInfo | StatusInfoType | Optional | 상태에 대한 부가 정보입니다. |
조회 조건에 해당하는 컴포넌트-변수가 없으면 바깥쪽 EmptyResultSet 을 반환하고 NotifyReport 는 전송하지 않습니다.예시
status 는 DataTransfer 수신 결과이고, data.status 가 리포트 조회 처리 결과입니다.
리포트 알림
EVSE가 CSMS로 전송하는 메시지입니다. 리포트 조회(GetReport)에 대한 응답 보고 데이터 전송에 사용합니다.
OCPP 2.x 디바이스 모델의 NotifyReport 페이로드를 그대로 래핑하여 컴포넌트별 구성 정보를 보고합니다. 컴포넌트 이름은 OCPP 2.x 표준 컴포넌트 명칭을 우선 사용하고, 표준 목록에 없는 컴포넌트는 사전에 협의된 이름을 사용합니다.
보고 대상 컴포넌트-변수의 정의와 보고 규약(대상 식별, 값 제약, 분할 전송, 보고 시점)은 Report Components에 정의되어 있습니다.
messageId: NotifyReport
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| requestId | Integer | Required | 이 보고를 유발한 GetReport 요청의 requestId 를 그대로 반환합니다. |
| generatedAt | String (date-time) | Required | 보고 생성 시각입니다. |
| tbc | Boolean | Optional | 후속 분할 보고가 이어지는지 여부입니다. 기본값 false. |
| seqNo | Integer | Optional | 분할 보고의 순번입니다. 기본값 0. |
| reportData | Array<ReportDataType> | Optional | 컴포넌트-변수 보고 데이터 리스트입니다. |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "NotifyReport",
"data": {
"requestId": 1001,
"generatedAt": "2026-07-30T12:00:00Z",
"reportData": [
{
"component": {
"name": "HmiCtrlr"
},
"variable": {
"name": "FirmwareVersion"
},
"variableAttribute": [
{
"type": "Actual",
"value": "1.4.2",
"mutability": "ReadOnly"
}
]
},
{
"component": {
"name": "ISO15118Ctrlr"
},
"variable": {
"name": "FirmwareVersion"
},
"variableAttribute": [
{
"type": "Actual",
"value": "2.0.1",
"mutability": "ReadOnly"
}
]
}
]
}
}
]
리포트 알림 응답
응답 데이터 없이 수신 결과 상태만 반환합니다.예시
사용자 인증
EVSE가 CSMS로 사용자 인증을 요청할 때 사용합니다.
messageId: Authorize
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| certificate | String | Optional | EV가 제시한 X.509 인증서 체인으로 PEM 형식으로 인코딩됩니다. 검증이 필요한 경우에만 사용됩니다. |
| idToken | IdTokenType | Required | 인증이 필요한 식별자를 포함합니다. |
| iso15118CertificateHashData | OCSPRequestDataType | Optional | OCSP를 통해 EV 계약 인증서를 검증하는 데 필요한 정보를 포함합니다. |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "04D2A91234567890",
"type": "ISO14443"
}
}
}
]
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| idTokenInfo | IdTokenInfoType | Required | 인증 결과 및 추가 정보를 포함합니다. |
| certificateStatusEnumType | AuthorizeCertificateStatusEnumTypeEnumType | Optional | 인증서 상태 정보입니다. |
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"idTokenInfo": {
"status": "Accepted"
}
},
"status": "Accepted"
}
]
결제 정보 전송
EVSE가 CSMS로 결제 처리 정보를 전송할 때 사용합니다.
messageId: PaymentInfo
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| type | PaymentInfoEnumType | Required | 결제 처리 유형 |
| paymentMethod | PaymentMethodEnumType | Required | 결제 방식 |
| transactionId | String | Required | 거래 번호 |
| demandValue | Number | Required | 요구 값 (kWh: Wh 단위, Money: KRW 단위) |
| tradeApprovalId | String | Required | 결제 승인번호 |
| tradeUniqueId | String | Required | 결제 고유번호 |
| pgTradeUniqueId | String | Optional | PG 거래 고유번호(원TID) |
| deviceResponseCode | String | Required | 결제단말기 응답 코드 |
| deviceResponseMessage | String | Required | 결제단말기 응답 메시지 |
| deviceCardResponseCode | String | Required | 카드사 응답 코드 |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "PaymentInfo",
"data": {
"type": "Prepaid",
"paymentMethod": "kWh",
"transactionId": "6864827f-2b65-498d-8420-d5a0cf33dc80",
"demandValue": 50000.0,
"tradeApprovalId": "APPROVAL123456789",
"tradeUniqueId": "TXN987654321",
"deviceResponseCode": "00",
"deviceResponseMessage": "승인완료",
"deviceCardResponseCode": "00"
}
}
]
예시 — PG 결제 (pgTradeUniqueId 포함)
[
2,
"1f7c0a52-9f0e-4a1d-9d2c-3b7c5a1e4d90",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "PaymentInfo",
"data": {
"type": "PG_Prepaid",
"paymentMethod": "Money",
"transactionId": "6864827f-2b65-498d-8420-d5a0cf33dc80",
"demandValue": 8850.0,
"tradeApprovalId": "APPROVAL123456789",
"tradeUniqueId": "TXN987654321",
"pgTradeUniqueId": "sschar018m01042607280903281989",
"deviceResponseCode": "00",
"deviceResponseMessage": "승인완료",
"deviceCardResponseCode": "00"
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
MAC 주소 등록
EVSE가 CSMS로 MAC 주소와 회원 카드를 연결 등록할 때 사용합니다.
messageId: MacRegister
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| macAddress | String | Required | MAC 주소 |
| cardNumber | String | Required | 연결할 카드 번호 |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "MacRegister",
"data": {
"macAddress": "00-1A-2B-3C-4D-5E",
"cardNumber": "04D2A91234567890"
}
}
]
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| success | Boolean | Required | 등록 성공 여부 |
| message | String | Optional | 등록 결과 메시지(success == false 시 노출됩니다) |
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"success": true
},
"status": "Accepted"
}
]
차량 판별 정보 조회
EVSE가 CSMS로 차량 식별 정보를 조회할 때 사용합니다. 요청한 MAC 주소가 테슬라 차량의 주소 대역에 속하는지 여부를 확인하여 차량별 맞춤 UI를 제공하기 위한 용도입니다.
같은 정보가 맥인증 성공 응답에도 담길 수 있습니다. 이 메시지는 인증 시점을 지난 뒤, 예를 들어 충전이 이미 진행 중일 때 다시 확인해야 하는 경우에 사용합니다.
messageId: GetVehicleInfo
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| macAddress | String | Required | 판별할 차량의 MAC 주소 |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetVehicleInfo",
"data": {
"macAddress": "54-F8-F0-E5-4F-EE"
}
}
]
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| isTesla | Boolean | Optional | 요청한 MAC 주소가 테슬라 차량의 주소 대역에 속하는지 여부. 판별하지 못한 경우 담기지 않습니다. |
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"isTesla": true
},
"status": "Accepted"
}
]
MAC 주소로 읽을 수 없는 값을 보내면 status가 Rejected로 회신되고 data에 사유가 담깁니다. 16진수 12자리로 해석되지 않는 값과, 값이 없음을 뜻하는 00-00-00-00-00-00이 여기에 해당합니다.예시
EVSE 구현 시 유의할 점:
- 판별하지 못한 경우
isTesla항목이 담기지 않습니다.isTesla=false는 "테슬라가 아님"을 뜻하므로, 항목이 없을 때 이를false와 같게 해석해서는 안 됩니다. 판별 불가는 잠시 후 다시 요청하면 회신될 수 있습니다. - 테슬라 여부만 전달됩니다. 그 외 제조사·모델명은 전달되지 않습니다. MAC 주소를 세션마다 무작위로 바꾸는 차량은 주소로 제조사를 식별할 수 없기 때문입니다.
- 요청 시점에 제약이 없습니다. 거래 진행 여부와 무관하게 요청할 수 있으며, 같은 MAC 주소로 여러 번 요청해도 같은 결과를 회신합니다.
- 맥인증 응답에 차량 판별 정보를 담기 위한 사전 협의와는 별개로 동작합니다. 협의 여부와 관계없이 이 메시지로 조회할 수 있습니다.
Plug & Charge (PnC) 등록
EVSE가 계약 인증서를 보유하지 않은 차량에 대해 현장 등록 절차를 완료한 후 CSMS로 eMAID와 멤버십 카드 매핑을 요청할 때 사용합니다. CSMS는 전달받은 PCID, eMAID, 멤버십 카드 번호를 연결하여 이후 Plug & Charge 인증을 회원 계약 기준으로 처리합니다.
messageId: PncRegister
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| emaid | String | Required | 계약 인증서에 포함된 eMAID |
| cardNumber | String | Required | 연결할 멤버십 카드 번호 |
| pcid | String | Required | EV Provisioning Certificate Identifier |
| iso15118CertificateHashData | Array | Optional | 설치된 계약 인증서 식별을 위한 인증서 해시 정보 |
예시
[
2,
"uuid-pnc-register",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "PncRegister",
"data": {
"emaid": "DE*ABC*E1234567*1",
"cardNumber": "04D2A91234567890",
"pcid": "PCID-EXAMPLE-001",
"iso15118CertificateHashData": [
{
"hashAlgorithm": "SHA256",
"issuerNameHash": "BASE64_ISSUER_NAME_HASH",
"issuerKeyHash": "BASE64_ISSUER_KEY_HASH",
"serialNumber": "04A1B2C3D4"
}
]
}
}
]
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| success | Boolean | Required | 등록 성공 여부 |
| message | String | Optional | 등록 결과 메시지(success == false 시 노출됩니다) |
예시
[
3,
"uuid-pnc-register",
{
"status": "Accepted",
"data": {
"success": true
}
}
]
네트워크 프로파일 설정
CSMS가 EVSE의 네트워크 연결 프로파일을 설정할 때 사용하는 단일 제어 메시지입니다. 주로 SP3 승격 및 엔드포인트 URL 변경에 사용됩니다.
messageId: SetNetworkProfile
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| configurationSlot | Integer | Required | 설정을 저장할 슬롯 번호 |
| connectionData | NetworkConnectionProfileType | Required | 연결 상세 정보 |
예시
[
2,
"e1a2b3c4-d567-8901-2345-6789abcdef01",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "SetNetworkProfile",
"data": {
"configurationSlot": 1,
"connectionData": {
"ocppVersion": "1.6",
"ocppInterface": "Any",
"ocppTransport": "JSON",
"messageTimeout": 30,
"ocppCsmsUrl": "wss://csms.example.com/ocpp/",
"securityProfile": 2,
"identity": "6013ME53-01",
"basicAuthPassword": "?GJ1Hx1U0A]_~$)N)k3OTq5mLh8Pjb"
}
}
}
]
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| status | SetNetworkProfileStatusEnumType | Required | 작업 결과 상태 |
| statusInfo | StatusInfoType | Optional | 상세 상태 정보 |
예시
[
3,
"e1a2b3c4-d567-8901-2345-6789abcdef01",
{
"data": {
"status": "Accepted",
"statusInfo": {
"reasonCode": "Configured",
"additionalInfo": "네트워크 프로파일이 정상적으로 설정되었습니다."
}
},
"status": "Accepted"
}
]
스마트충전(VAS) 인증서 발급 요청
EVSE가 CSMS로 스마트충전(VAS) 인증서 발급을 요청할 때 사용합니다.
messageId: GetSmartChargeCertificate
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| timeStamp | String | Required | 인증서 요청 시간 |
| connectorId | Number | Required | 요청 커넥터 번호(Not 0) |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetSmartChargeCertificate",
"data": {
"timeStamp": "2024-01-15T10:30:00.000Z",
"connectorId": 1
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
스마트충전(VAS) 인증서 설치 요청
CSMS가 EVSE로 스마트충전(VAS) 인증서 설치를 지시할 때 사용합니다.
messageId: InstallSmartChargeCertificate
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| connectorId | Number | Required | 요청 커넥터 번호(Not 0) |
| certificates | SmartChargeCertificateInfoType | Required | 인증서 정보 |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "InstallSmartChargeCertificate",
"data": {
"connectorId": 1,
"certificates": {
"chargerCertificate": "LS0tLS1CRUdJTi...",
"chargerPrivateKey": "LS0tLS1CRUdJTi...",
"kecoServerCertificate": "LS0tLS1CRUdJTi..."
}
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
스마트충전(VAS) 인증서 정보 조회
CSMS가 EVSE에 설치된 스마트충전(VAS) 인증서 정보를 조회할 때 사용합니다.
messageId: GetSmartChargeCertificateInfoType
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| connectorId | Number | Required | 요청 커넥터 번호(Not 0) |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetSmartChargeCertificateInfoType",
"data": {
"connectorId": 1
}
}
]
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| certificates | SmartChargeCertificateInfoType | Optional | 설치된 인증서 정보 목록 |
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"certificates": {
"chargerCertificate": "LS0tLS1CRUdJTi...",
"chargerPrivateKey": "LS0tLS1CRUdJTi...",
"kecoServerCertificate": "LS0tLS1CRUdJTi..."
}
},
"status": "Accepted"
}
]
스마트충전(VAS) 세션키 발급 요청
EVSE가 CSMS로 스마트충전(VAS) 세션키 발급을 요청할 때 사용합니다.
messageId: GetSmartChargeSessionKey
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| timeStamp | DateTime | Required | 세션키 요청 시간 |
| keyType | String | Optional | 요청하는 키 타입 |
| connectorId | Number | Required | 요청 커넥터 번호(Not 0) |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetSmartChargeSessionKey",
"data": {
"timeStamp": "2024-01-15T10:30:00.000Z",
"connectorId": 1
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
스마트충전(VAS) 세션키 설치 요청
CSMS가 EVSE로 스마트충전(VAS) 세션키 설치를 지시할 때 사용합니다.
messageId: InstallSmartChargeSessionKey
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| signData | String | Required | 서명 데이터 |
| publicKey | String | Required | 공개키 |
| keyId | String | Required | 키 ID |
| keyType | String | Optional | 키 타입 |
| validFrom | String | Required | 유효 시작 시간 |
| validTo | String | Required | 유효 만료 시간 |
| connectorId | Number | Required | 요청 커넥터 번호(Not 0) |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "InstallSmartChargeSessionKey",
"data": {
"signData": "LS0tLS1CRUdJTi...",
"publicKey": "LS0tLS1CRUdJTi...",
"keyId": "195024035...",
"validFrom": "2024-01-15T00:00:00Z",
"validTo": "2024-02-15T23:59:59Z",
"connectorId": 1
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
사용자 Target SoC 설정
CSMS와 EVSE 간 양방향으로 송수신 가능한 메시지입니다.
messageId: SetUserTargetSoC
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| connectorId | Number | Required | 요청 커넥터 번호(Not 0) |
| userTargetSoC | String | Required | 사용자 설정 SoC (0~100) |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "SetUserTargetSoC",
"data": {
"connectorId": 1,
"userTargetSoC": "80"
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
스마트충전(VAS) 배터리 정보 전송
EVSE가 CSMS로 전송하는 메시지입니다.
messageId: BatteryInfo
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| connectorId | Number | Required | 요청 커넥터 번호(Not 0) |
| infoCount | Number | Required | Battery 데이터 수 |
| SmartChargeBatteryDataSetType | Array<SmartChargeBatteryDataSetType> | Required | BatteryData 배열 |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "BatteryInfo",
"data": {
"connectorId": 1,
"infoCount": 1,
"SmartChargeBatteryDataSetType": [
{
"timeStamp": "2024-01-15T10:30:00.000Z",
"sessionDuration": "1800",
"counter": "1",
"batteryData": "LS0tLS1CRUdJTi..."
}
]
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
스마트충전(VAS) 개인정보 동의 설정
CSMS와 EVSE 간 양방향으로 송수신 가능한 메시지입니다.
messageId: SetPrivacyPolicyCheck
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| connectorId | Number | Required | 요청 커넥터 번호(Not 0) |
| timeStamp | DateTime | Required | 개인정보 수집 및 동의 확인 시간 |
| consented | Boolean | Required | 개인정보 수집 및 동의여부 |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "SetPrivacyPolicyCheck",
"data": {
"connectorId": 1,
"timeStamp": "2024-01-15T10:30:00.000Z",
"consented": true
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
표시 메시지 설정
CSMS가 EVSE로 전송하는 메시지입니다.
messageId: SetDisplayMessage
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| message | MessageInfoType | Required | 표시할 메시지의 설정 정보를 포함합니다. |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "SetDisplayMessage",
"data": {
"message": {
"id": 2,
"priority": "InFront",
"message": {
"format": "UTF8",
"content": "고장 조치 중입니다. 불편을 드려 죄송합니다. (고객센터: 1566-1704)"
}
}
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"status": "Accepted"
},
"status": "Accepted"
}
]
충전 고유키 조회
EVSE가 CSMS로 충전 고유키(인증키)를 조회할 때 사용합니다.
messageId: GetEssentialsKey
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| connectorId | Number | Required | 커넥터 번호 |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetEssentialsKey",
"data": {
"connectorId": 1
}
}
]
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| essentialsKey | String | Required | 발급된 충전 고유키 |
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"essentialsKey": "4326342645265234MJUWXVCASUSDRGDDERDXGF"
},
"status": "Accepted"
}
]
운영 스케줄 설정
CSMS가 EVSE로 커넥터별/요일별 운영 스케줄을 배포할 때 사용합니다.
messageId: SetOperatingSchedule
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| profileId | Number | Required | 운영 스케줄 프로파일 ID |
| utcOffset | String | Required | UTC 오프셋 (예: "+09:00", "+00:00") |
| schedules | Array<OperatingScheduleEntryType> | Required | 스케줄 항목 목록 |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "SetOperatingSchedule",
"data": {
"profileId": 1,
"utcOffset": "+09:00",
"schedules": [
{
"connectorId": null,
"dayOfWeek": "MON",
"startTime": "09:00",
"endTime": "18:00"
},
{
"connectorId": null,
"dayOfWeek": "TUE",
"startTime": "09:00",
"endTime": "18:00"
},
{
"connectorId": null,
"dayOfWeek": "SAT",
"startTime": "10:00",
"endTime": "14:00"
}
]
}
}
]
위 예시에서 수~금, 일요일은 스케줄이 없으므로 24시간 운영됩니다. 토요일은 전체 커넥터가 10:00~14:00만 운영됩니다.
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| status | String | Required | 처리 결과 (Accepted / Rejected) |
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
광고 프로파일 조회
EVSE가 CSMS로 할당된 광고 프로파일을 조회할 때 사용합니다.
messageId: GetAdProfile
요청
data 필드를 포함하지 않습니다.예시
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| profile | AdProfileType | Optional | 광고 프로파일 |
활성 프로파일이 있는 경우:예시
활성 프로파일이 없는 경우:예시
광고 미디어 조회
EVSE가 CSMS로 광고 미디어 파일의 다운로드 URL을 요청할 때 사용합니다.
messageId: GetAdMedia
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| mediaKey | String | Required | 미디어 파일 식별 키 (UUID) |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetAdMedia",
"data": {
"mediaKey": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}
]
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| (fields) | AdMediaType | Required | 미디어 파일 정보 |
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"mediaKey": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"fileName": "spring-event-01.jpg",
"contentType": "image/jpeg",
"fileSize": 524288,
"uri": "https://cdn.example.com/ad-media/a1b2c3d4.jpg?token=eyJhbGci...&expires=1748293800"
},
"status": "Accepted"
}
]
화면 캡처 트리거
CSMS가 EVSE로 특정 화면 캡처 트리거를 설정할 때 사용합니다.
messageId: TriggerScreenCapture
요청
| Field Name | Type | Required | Description |
|---|---|---|---|
| screenId | String | Required | 캡처 대상 화면 식별자 (충전기 내부 화면 ID) |
| expireAt | DateTime | Required | 트리거 유효 만료 시각 (UTC, ISO 8601). 만료 시 트리거 자동 해제. |
| maxCaptures | Number | Optional | 최대 캡처 횟수. 생략 시 기본값 1. 해당 횟수 도달 시 트리거 자동 해제. |
| uploadUrl | String | Required | 캡처 이미지를 HTTP POST(multipart)로 업로드할 URL. CSMS가 메시지 ID 기반으로 생성한 엔드포인트. |
예시
[
2,
"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "TriggerScreenCapture",
"data": {
"screenId": "SCR_ERROR_01",
"expireAt": "2025-04-07T09:00:00Z",
"maxCaptures": 3,
"uploadUrl": "https://csms.example.com/v1/screen-capture/60130038-01/a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}
]
응답
| Field Name | Type | Required | Description |
|---|---|---|---|
| status | String | Required | 트리거 등록 결과 (Accepted, Rejected, NotSupported) |
| statusInfo | Object | Optional | 상세 상태 정보 (reasonCode, additionalInfo) |
예시
[
3,
"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
{
"data": {
"status": "Accepted"
},
"status": "Accepted"
}
]
화면 캡처 결과 전송
EVSE가 화면 캡처 및 이미지 업로드 완료 후 메타데이터를 CSMS로 보고할 때 사용합니다.
messageId: ScreenCaptureResult
요청
이미지 바이너리는 uploadUrl로 HTTP POST(multipart) 전송하며, DataTransfer로는 메타데이터만 전송합니다.
| Field Name | Type | Required | Description |
|---|---|---|---|
| screenId | String | Required | 캡처된 화면의 식별자 (트리거 설정 시 지정한 값) |
| capturedAt | DateTime | Required | 실제 캡처가 수행된 시각 (UTC, ISO 8601) |
| uploadStatus | String | Required | HTTP 업로드 결과 (Uploaded, UploadFailed) |
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "ScreenCaptureResult",
"data": {
"screenId": "SCR_ERROR_01",
"capturedAt": "2025-04-06T14:23:15Z",
"uploadStatus": "Uploaded"
}
}
]
응답
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]
StopTransaction
idTag필드는 CSMS에서 검증하지 않으므로 전송하지 않아도 무방합니다.reason필드는 필수 항목으로, 충전 종료 사유를 반드시 명시해야 합니다.- 종료 시점의 계량값은
transactionData대신MeterValues.req(context: Transaction.End)를 사용하여 전송하는 것을 권장합니다.