본문으로 건너뛰기

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, unitPriceEVSE 로컬 비용 계산이 필요한 경우 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으로 나누어 전달합니다.
consentedK-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 확장​

MessagemessageIdDirection
MAC 주소 등록MacRegisterEVSE -> CSMS
차량 판별 정보 조회GetVehicleInfoEVSE -> CSMS
Plug & Charge (PnC) 등록PncRegisterEVSE -> CSMS
스마트충전(VAS) 인증서 발급 요청GetSmartChargeCertificateEVSE -> CSMS
스마트충전(VAS) 인증서 설치 요청InstallSmartChargeCertificateCSMS -> EVSE
스마트충전(VAS) 인증서 정보 조회GetSmartChargeCertificateInfoTypeCSMS -> EVSE
스마트충전(VAS) 세션키 발급 요청GetSmartChargeSessionKeyEVSE -> CSMS
스마트충전(VAS) 세션키 설치 요청InstallSmartChargeSessionKeyCSMS -> EVSE
사용자 Target SoC 설정SetUserTargetSoCCSMS -> EVSE 또는 EVSE -> CSMS
스마트충전(VAS) 배터리 정보 전송BatteryInfoEVSE -> CSMS
스마트충전(VAS) 개인정보 동의 설정SetPrivacyPolicyCheckCSMS -> EVSE 또는 EVSE -> CSMS
충전 고유키 조회GetEssentialsKeyEVSE -> CSMS
운영 스케줄 설정SetOperatingScheduleCSMS -> EVSE
광고 프로파일 조회GetAdProfileEVSE -> CSMS
광고 미디어 조회GetAdMediaEVSE -> CSMS
화면 캡처 트리거TriggerScreenCaptureCSMS -> EVSE
화면 캡처 결과 전송ScreenCaptureResultEVSE -> CSMS

OCPP 1.6​

OCPP v1.6 충전기는 아래 메시지를 DataTransfer:com.skelectlink로 교환합니다.

RemoteStartTransaction​

CSMS가 EVSE로 전송하는 RemoteStartTransaction.req 메시지에는 다음 커스텀 확장 파라미터가 추가로 포함될 수 있습니다.

Field NameTypeRequiredDescription
connectorIdNumberOptional충전을 시작할 커넥터 번호
idTagStringRequiredtransactionId 수신 전 임시로 사용하는 임의의 식별자
chargingProfileNumberOptional스마트 충전 관련 규격
additionalInfoRemoteStartTransactionAdditionalInfoTypeOptional추가 결제/단가/인증 정보

DataTransfer​

이 절은 각 커스텀 messageId별 data 페이로드 규격을 정의합니다.

단가 조회(Legacy)​

EVSE가 CSMS로 단가 정보를 요청할 때 사용합니다 (구버전 호환용).

messageId: getPrice.req

요청​

data 필드를 포함하지 않습니다.

예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "getPrice.req"
}
]
응답​
Field NameTypeRequiredDescription
connectorIdNumberRequired고정값: 0
currencyStringRequired고정값: ""
unitPriceNumberRequired원/kWh 단가
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"connectorId": 0,
"currency": "",
"unitPrice": 420
},
"status": "Accepted"
}
]

단가 조회​

EVSE가 CSMS로 최신 단가 정보를 요청할 때 사용합니다.

messageId: GetUnitPrice

요청​
Field NameTypeRequiredDescription
unitPriceEnumTypeUnitPriceEnumTypeRequired요청할 단가 타입 구분
connectorIdNumberOptional커넥터 식별자 (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 NameTypeRequiredDescription
currencyStringRequiredfixed "KRW"
unitPriceStringRequiredkWh/원 단가
memberInfoMemberInfoTypeOptional회원 유형 정보 (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가 없습니다. 대상 충전기는 세션 컨텍스트로 식별합니다.

예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetSubscriptionPrice"
}
]
구독 요금제 단가 조회 응답​

구독 요금제가 적용되고 현재 유효한 구간이 있으면 status는 Accepted이며 아래 data를 포함합니다. 구독 요금제 대상이 아니거나 현재 유효한 구간이 없으면 status는 Rejected이며 data를 포함하지 않습니다.

  • maxPrice는 제공되지 않을 수 있으며, 이 경우 minPrice 하나만 표시합니다.
  • 충전기는 적용 시작~종료 일자 이내 시간 동안 구독 요금제 구간 가격을 표시합니다.
Field NameTypeRequiredDescription
applyStartAtDateTimeRequired구독 요금제 적용 시작 일시 (UTC, ISO 8601)
applyEndAtDateTimeRequired구독 요금제 적용 종료 일시 (UTC, ISO 8601)
minPriceStringRequired구간 최소 단가 (KRW/kWh)
maxPriceStringOptional구간 최대 단가 (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 NameTypeRequiredDescription
requestMessageMessageTriggerEnumTypeRequiredTrigger할 메시지의 타입을 의미합니다.
customTriggerStringOptionalrequestMessage가 CustomTrigger인 경우 해당 필드가 포함됩니다.
evseEVSETypeOptional사용하지 않습니다.
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "TriggerMessage",
"data": {
"requestMessage": "CustomTrigger",
"customTrigger": "DataTransfer:com.skelectlink:GetPrice"
}
}
]

예상되는 동작: EVSE는 CSMS로 DataTransfer 메시지를 보냅니다.

메시지 트리거 응답​
Field NameTypeRequiredDescription
statusTriggerMessageStatusEnumTypeRequired트리거 명령 수행 상태를 응답합니다.
statusInfoStatusInfoTypeOptional자세한 충전기의 상태의 포함합니다.

충전기는 반드시 해당 요청을 받고, 해당 명령을 수행할 수 있는 상태를 즉시 응답한 이후 언급된 트리거 메시지를 동작시켜야한다. statusInfo는 status가 Accepted가 아닌 경우 가급적 포함하십시오.

예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted",
"data": {
"status": "Rejected",
"statusInfo": {
"reasonCode": "{제조사별 임의 코드}",
"additionalInfo": "충전기가 작동 준비중입니다."
}
}
}
]

변수 조회​

CSMS와 EVSE 간 양방향으로 송수신 가능한 메시지입니다.

messageId: GetVariables

요청​
Field NameTypeRequiredDescription
getVariableDataArray<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 NameTypeRequiredDescription
getVariableResultArray<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 NameTypeRequiredDescription
setVariableDataArray<SetVariableDataType>Required설정할 컴포넌트-변수 쌍과 속성 값들입니다.
응답​
Field NameTypeRequiredDescription
setVariableResultArray<SetVariableResultType>Required변수 설정 결과 리스트입니다.

리포트 조회​

CSMS가 EVSE로 전송하는 메시지입니다.

CSMS가 디바이스 모델의 특정 컴포넌트-변수를 조회할 때 사용합니다. 충전기는 이 요청을 status 로 먼저 응답하고, 그 다음 리포트 알림(NotifyReport)으로 실제 컴포넌트-변수 데이터를 전송합니다. 이때 NotifyReport 의 requestId 는 이 요청의 requestId 와 동일해야 합니다.

messageId: GetReport

요청​
Field NameTypeRequiredDescription
requestIdIntegerRequired이 조회를 식별하는 ID입니다. 충전기는 후속 NotifyReport 에 같은 값을 반환해야 합니다.
componentCriteriaArray<ComponentCriterionEnumType>Optional조회 대상을 상태로 한정합니다. Active, Available, Enabled, Problem.
componentVariableArray<ComponentVariableType>Optional조회 대상 컴포넌트-변수 쌍입니다. 생략하면 전체 인벤토리를 대상으로 합니다.

ComponentVariableType 의 component.evse 에 id(EVSE 번호)와 connectorId(커넥터 번호)를 함께 지정하면 커넥터 단위로 대상을 좁힐 수 있습니다.

예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetReport",
"data": {
"requestId": 1001,
"componentVariable": [
{
"component": {
"name": "Connector",
"evse": {
"id": 1,
"connectorId": 1
}
},
"variable": {
"name": "ConnectorType"
}
},
{
"component": {
"name": "Connector",
"evse": {
"id": 1,
"connectorId": 2
}
},
"variable": {
"name": "ConnectorType"
}
}
]
}
}
]
응답​
Field NameTypeRequiredDescription
statusGenericDeviceModelStatusEnumTypeRequiredAccepted, Rejected, NotSupported, EmptyResultSet 중 하나입니다.
statusInfoStatusInfoTypeOptional상태에 대한 부가 정보입니다.

조회 조건에 해당하는 컴포넌트-변수가 없으면 EmptyResultSet 을 반환하고 NotifyReport 는 전송하지 않습니다.

예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted",
"data": {
"status": "Accepted"
}
}
]

바깥쪽 status 는 DataTransfer 수신 결과이고, data.status 가 리포트 조회 처리 결과입니다.

리포트 알림​

EVSE가 CSMS로 전송하는 메시지입니다. 리포트 조회(GetReport)에 대한 응답 보고 데이터 전송에 사용합니다.

OCPP 2.x 디바이스 모델의 NotifyReport 페이로드를 그대로 래핑하여 컴포넌트별 구성 정보를 보고합니다. 컴포넌트 이름은 OCPP 2.x 표준 컴포넌트 명칭을 우선 사용하고, 표준 목록에 없는 컴포넌트는 사전에 협의된 이름을 사용합니다.

보고 대상 컴포넌트-변수의 정의와 보고 규약(대상 식별, 값 제약, 분할 전송, 보고 시점)은 Report Components에 정의되어 있습니다.

messageId: NotifyReport

요청​
Field NameTypeRequiredDescription
requestIdIntegerRequired이 보고를 유발한 GetReport 요청의 requestId 를 그대로 반환합니다.
generatedAtString (date-time)Required보고 생성 시각입니다.
tbcBooleanOptional후속 분할 보고가 이어지는지 여부입니다. 기본값 false.
seqNoIntegerOptional분할 보고의 순번입니다. 기본값 0.
reportDataArray<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"
}
]
}
]
}
}
]
리포트 알림 응답​

응답 데이터 없이 수신 결과 상태만 반환합니다.

예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]

사용자 인증​

EVSE가 CSMS로 사용자 인증을 요청할 때 사용합니다.

messageId: Authorize

요청​
Field NameTypeRequiredDescription
certificateStringOptionalEV가 제시한 X.509 인증서 체인으로 PEM 형식으로 인코딩됩니다. 검증이 필요한 경우에만 사용됩니다.
idTokenIdTokenTypeRequired인증이 필요한 식별자를 포함합니다.
iso15118CertificateHashDataOCSPRequestDataTypeOptionalOCSP를 통해 EV 계약 인증서를 검증하는 데 필요한 정보를 포함합니다.
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "04D2A91234567890",
"type": "ISO14443"
}
}
}
]
응답​
Field NameTypeRequiredDescription
idTokenInfoIdTokenInfoTypeRequired인증 결과 및 추가 정보를 포함합니다.
certificateStatusEnumTypeAuthorizeCertificateStatusEnumTypeEnumTypeOptional인증서 상태 정보입니다.
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"idTokenInfo": {
"status": "Accepted"
}
},
"status": "Accepted"
}
]

결제 정보 전송​

EVSE가 CSMS로 결제 처리 정보를 전송할 때 사용합니다.

messageId: PaymentInfo

요청​
Field NameTypeRequiredDescription
typePaymentInfoEnumTypeRequired결제 처리 유형
paymentMethodPaymentMethodEnumTypeRequired결제 방식
transactionIdStringRequired거래 번호
demandValueNumberRequired요구 값 (kWh: Wh 단위, Money: KRW 단위)
tradeApprovalIdStringRequired결제 승인번호
tradeUniqueIdStringRequired결제 고유번호
pgTradeUniqueIdStringOptionalPG 거래 고유번호(원TID)
deviceResponseCodeStringRequired결제단말기 응답 코드
deviceResponseMessageStringRequired결제단말기 응답 메시지
deviceCardResponseCodeStringRequired카드사 응답 코드
예시
[
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 NameTypeRequiredDescription
macAddressStringRequiredMAC 주소
cardNumberStringRequired연결할 카드 번호
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "MacRegister",
"data": {
"macAddress": "00-1A-2B-3C-4D-5E",
"cardNumber": "04D2A91234567890"
}
}
]
응답​
Field NameTypeRequiredDescription
successBooleanRequired등록 성공 여부
messageStringOptional등록 결과 메시지(success == false 시 노출됩니다)
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"success": true
},
"status": "Accepted"
}
]

차량 판별 정보 조회​

EVSE가 CSMS로 차량 식별 정보를 조회할 때 사용합니다. 요청한 MAC 주소가 테슬라 차량의 주소 대역에 속하는지 여부를 확인하여 차량별 맞춤 UI를 제공하기 위한 용도입니다.

같은 정보가 맥인증 성공 응답에도 담길 수 있습니다. 이 메시지는 인증 시점을 지난 뒤, 예를 들어 충전이 이미 진행 중일 때 다시 확인해야 하는 경우에 사용합니다.

messageId: GetVehicleInfo

요청​
Field NameTypeRequiredDescription
macAddressStringRequired판별할 차량의 MAC 주소
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetVehicleInfo",
"data": {
"macAddress": "54-F8-F0-E5-4F-EE"
}
}
]
응답​
Field NameTypeRequiredDescription
isTeslaBooleanOptional요청한 MAC 주소가 테슬라 차량의 주소 대역에 속하는지 여부. 판별하지 못한 경우 담기지 않습니다.
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"isTesla": true
},
"status": "Accepted"
}
]

MAC 주소로 읽을 수 없는 값을 보내면 status가 Rejected로 회신되고 data에 사유가 담깁니다. 16진수 12자리로 해석되지 않는 값과, 값이 없음을 뜻하는 00-00-00-00-00-00이 여기에 해당합니다.

예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": "macAddress must be a 12-digit hexadecimal MAC address",
"status": "Rejected"
}
]

EVSE 구현 시 유의할 점:

  • 판별하지 못한 경우 isTesla 항목이 담기지 않습니다. isTesla=false는 "테슬라가 아님"을 뜻하므로, 항목이 없을 때 이를 false와 같게 해석해서는 안 됩니다. 판별 불가는 잠시 후 다시 요청하면 회신될 수 있습니다.
  • 테슬라 여부만 전달됩니다. 그 외 제조사·모델명은 전달되지 않습니다. MAC 주소를 세션마다 무작위로 바꾸는 차량은 주소로 제조사를 식별할 수 없기 때문입니다.
  • 요청 시점에 제약이 없습니다. 거래 진행 여부와 무관하게 요청할 수 있으며, 같은 MAC 주소로 여러 번 요청해도 같은 결과를 회신합니다.
  • 맥인증 응답에 차량 판별 정보를 담기 위한 사전 협의와는 별개로 동작합니다. 협의 여부와 관계없이 이 메시지로 조회할 수 있습니다.

Plug & Charge (PnC) 등록​

EVSE가 계약 인증서를 보유하지 않은 차량에 대해 현장 등록 절차를 완료한 후 CSMS로 eMAID와 멤버십 카드 매핑을 요청할 때 사용합니다. CSMS는 전달받은 PCID, eMAID, 멤버십 카드 번호를 연결하여 이후 Plug & Charge 인증을 회원 계약 기준으로 처리합니다.

messageId: PncRegister

요청​
Field NameTypeRequiredDescription
emaidStringRequired계약 인증서에 포함된 eMAID
cardNumberStringRequired연결할 멤버십 카드 번호
pcidStringRequiredEV Provisioning Certificate Identifier
iso15118CertificateHashDataArrayOptional설치된 계약 인증서 식별을 위한 인증서 해시 정보
예시
[
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 NameTypeRequiredDescription
successBooleanRequired등록 성공 여부
messageStringOptional등록 결과 메시지(success == false 시 노출됩니다)
예시
[
3,
"uuid-pnc-register",
{
"status": "Accepted",
"data": {
"success": true
}
}
]

네트워크 프로파일 설정​

CSMS가 EVSE의 네트워크 연결 프로파일을 설정할 때 사용하는 단일 제어 메시지입니다. 주로 SP3 승격 및 엔드포인트 URL 변경에 사용됩니다.

messageId: SetNetworkProfile

요청​
Field NameTypeRequiredDescription
configurationSlotIntegerRequired설정을 저장할 슬롯 번호
connectionDataNetworkConnectionProfileTypeRequired연결 상세 정보
예시
[
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 NameTypeRequiredDescription
statusSetNetworkProfileStatusEnumTypeRequired작업 결과 상태
statusInfoStatusInfoTypeOptional상세 상태 정보
예시
[
3,
"e1a2b3c4-d567-8901-2345-6789abcdef01",
{
"data": {
"status": "Accepted",
"statusInfo": {
"reasonCode": "Configured",
"additionalInfo": "네트워크 프로파일이 정상적으로 설정되었습니다."
}
},
"status": "Accepted"
}
]

스마트충전(VAS) 인증서 발급 요청​

EVSE가 CSMS로 스마트충전(VAS) 인증서 발급을 요청할 때 사용합니다.

messageId: GetSmartChargeCertificate

요청​
Field NameTypeRequiredDescription
timeStampStringRequired인증서 요청 시간
connectorIdNumberRequired요청 커넥터 번호(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 NameTypeRequiredDescription
connectorIdNumberRequired요청 커넥터 번호(Not 0)
certificatesSmartChargeCertificateInfoTypeRequired인증서 정보
예시
[
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 NameTypeRequiredDescription
connectorIdNumberRequired요청 커넥터 번호(Not 0)
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetSmartChargeCertificateInfoType",
"data": {
"connectorId": 1
}
}
]
응답​
Field NameTypeRequiredDescription
certificatesSmartChargeCertificateInfoTypeOptional설치된 인증서 정보 목록
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"certificates": {
"chargerCertificate": "LS0tLS1CRUdJTi...",
"chargerPrivateKey": "LS0tLS1CRUdJTi...",
"kecoServerCertificate": "LS0tLS1CRUdJTi..."
}
},
"status": "Accepted"
}
]

스마트충전(VAS) 세션키 발급 요청​

EVSE가 CSMS로 스마트충전(VAS) 세션키 발급을 요청할 때 사용합니다.

messageId: GetSmartChargeSessionKey

요청​
Field NameTypeRequiredDescription
timeStampDateTimeRequired세션키 요청 시간
keyTypeStringOptional요청하는 키 타입
connectorIdNumberRequired요청 커넥터 번호(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 NameTypeRequiredDescription
signDataStringRequired서명 데이터
publicKeyStringRequired공개키
keyIdStringRequired키 ID
keyTypeStringOptional키 타입
validFromStringRequired유효 시작 시간
validToStringRequired유효 만료 시간
connectorIdNumberRequired요청 커넥터 번호(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 NameTypeRequiredDescription
connectorIdNumberRequired요청 커넥터 번호(Not 0)
userTargetSoCStringRequired사용자 설정 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 NameTypeRequiredDescription
connectorIdNumberRequired요청 커넥터 번호(Not 0)
infoCountNumberRequiredBattery 데이터 수
SmartChargeBatteryDataSetTypeArray<SmartChargeBatteryDataSetType>RequiredBatteryData 배열
예시
[
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 NameTypeRequiredDescription
connectorIdNumberRequired요청 커넥터 번호(Not 0)
timeStampDateTimeRequired개인정보 수집 및 동의 확인 시간
consentedBooleanRequired개인정보 수집 및 동의여부
예시
[
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 NameTypeRequiredDescription
messageMessageInfoTypeRequired표시할 메시지의 설정 정보를 포함합니다.
예시
[
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 NameTypeRequiredDescription
connectorIdNumberRequired커넥터 번호
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetEssentialsKey",
"data": {
"connectorId": 1
}
}
]
응답​
Field NameTypeRequiredDescription
essentialsKeyStringRequired발급된 충전 고유키
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"essentialsKey": "4326342645265234MJUWXVCASUSDRGDDERDXGF"
},
"status": "Accepted"
}
]

운영 스케줄 설정​

CSMS가 EVSE로 커넥터별/요일별 운영 스케줄을 배포할 때 사용합니다.

messageId: SetOperatingSchedule

요청​
Field NameTypeRequiredDescription
profileIdNumberRequired운영 스케줄 프로파일 ID
utcOffsetStringRequiredUTC 오프셋 (예: "+09:00", "+00:00")
schedulesArray<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 NameTypeRequiredDescription
statusStringRequired처리 결과 (Accepted / Rejected)
예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"status": "Accepted"
}
]

광고 프로파일 조회​

EVSE가 CSMS로 할당된 광고 프로파일을 조회할 때 사용합니다.

messageId: GetAdProfile

요청​

data 필드를 포함하지 않습니다.

예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetAdProfile"
}
]
응답​
Field NameTypeRequiredDescription
profileAdProfileTypeOptional광고 프로파일

활성 프로파일이 있는 경우:

예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"profile": {
"version": "1.0.0-5-20260326150000|1.0.0-7-open",
"validUntil": "2026-03-26T15:00:00Z",
"items": [
{
"mediaKey": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"displayOrder": 1,
"durationSec": 10
},
{
"mediaKey": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"displayOrder": 2,
"durationSec": 15
},
{
"mediaKey": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"displayOrder": 1,
"durationSec": 20
}
]
}
},
"status": "Accepted"
}
]

활성 프로파일이 없는 경우:

예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"profile": null
},
"status": "Accepted"
}
]

광고 미디어 조회​

EVSE가 CSMS로 광고 미디어 파일의 다운로드 URL을 요청할 때 사용합니다.

messageId: GetAdMedia

요청​
Field NameTypeRequiredDescription
mediaKeyStringRequired미디어 파일 식별 키 (UUID)
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetAdMedia",
"data": {
"mediaKey": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}
]
응답​
Field NameTypeRequiredDescription
(fields)AdMediaTypeRequired미디어 파일 정보
예시
[
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 NameTypeRequiredDescription
screenIdStringRequired캡처 대상 화면 식별자 (충전기 내부 화면 ID)
expireAtDateTimeRequired트리거 유효 만료 시각 (UTC, ISO 8601). 만료 시 트리거 자동 해제.
maxCapturesNumberOptional최대 캡처 횟수. 생략 시 기본값 1. 해당 횟수 도달 시 트리거 자동 해제.
uploadUrlStringRequired캡처 이미지를 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 NameTypeRequiredDescription
statusStringRequired트리거 등록 결과 (Accepted, Rejected, NotSupported)
statusInfoObjectOptional상세 상태 정보 (reasonCode, additionalInfo)
예시
[
3,
"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
{
"data": {
"status": "Accepted"
},
"status": "Accepted"
}
]

화면 캡처 결과 전송​

EVSE가 화면 캡처 및 이미지 업로드 완료 후 메타데이터를 CSMS로 보고할 때 사용합니다.

messageId: ScreenCaptureResult

요청​

이미지 바이너리는 uploadUrl로 HTTP POST(multipart) 전송하며, DataTransfer로는 메타데이터만 전송합니다.

Field NameTypeRequiredDescription
screenIdStringRequired캡처된 화면의 식별자 (트리거 설정 시 지정한 값)
capturedAtDateTimeRequired실제 캡처가 수행된 시각 (UTC, ISO 8601)
uploadStatusStringRequiredHTTP 업로드 결과 (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​

  1. idTag 필드는 CSMS에서 검증하지 않으므로 전송하지 않아도 무방합니다.
  2. reason 필드는 필수 항목으로, 충전 종료 사유를 반드시 명시해야 합니다.
  3. 종료 시점의 계량값은 transactionData 대신 MeterValues.req(context: Transaction.End)를 사용하여 전송하는 것을 권장합니다.