본문으로 건너뛰기

Report Components

이 부록은 충전기가 리포트 알림(NotifyReport)으로 CSMS에 보고하는 컴포넌트-변수 항목들을 가리킵니다.

Custom Variables가 CSMS와 충전기가 GetVariables / SetVariables 로 주고받는 설정 값이라면, 이 부록의 항목은 충전기가 자신의 구성을 CSMS에 알리는 값입니다. 따라서 조회·보고 메시지가 다르고, CSMS는 이 값들을 충전기 구성 정보의 기준 데이터로 관리합니다.

컴포넌트보고 내용
공통 변수컴포넌트별 펌웨어 버전
Connector커넥터별 커넥터 타입
CustomSystemInfo제어 PC의 운영체제·메인보드 정보
CustomNetworkInterface제어 PC의 네트워크 어댑터 정보
CustomStorage제어 PC의 저장 장치 정보

보고 규약

이 부록의 모든 항목은 같은 메시지와 같은 규칙으로 보고합니다.

보고 절차

CSMS가 리포트 조회(GetReport)로 대상을 지정하면, 충전기는 먼저 status 로 수용 여부를 응답하고 이어서 NotifyReport 로 실제 데이터를 전송합니다.

  • OCPP v1.6: DataTransfer:com.skelectlink:GetReport / DataTransfer:com.skelectlink:NotifyReport 로 payload를 래핑합니다.
  • OCPP v2.1: 표준 GetReport / NotifyReport 메시지 본문에 동일한 payload를 직접 담습니다.
GetReport 수신 경로는 필수입니다

requestId 는 보고를 유발한 GetReport 의 값을 그대로 되돌려주는 상관(correlation) 값입니다. OCPP 표준에는 자발 보고를 위한 예약 requestId 가 없으므로, 충전기는 GetReport 를 수신했을 때 그 requestId 로 응답하는 경로를 반드시 구현해야 합니다.

CSMS는 하위 호환을 위해 대응되는 GetReport 가 없는 보고도 거부하지 않고 수신하지만, 상관 관계를 추적할 수 없는 보조 경로이므로 신규 연동에서는 사용하지 않습니다.

보고 시점

CSMS는 필요한 시점에 GetReport 를 발행합니다. 충전기가 접속할 때마다 자동으로 발행하지는 않습니다.

이 부록의 값은 대부분 자주 바뀌지 않는 준정적(quasi-static) 데이터입니다. 부팅할 때마다 전체를 다시 보내지 말고 다음 시점에만 전송합니다.

  • CSMS가 GetReport 를 발행했을 때 (필수)
  • 보고 대상 값이 실제로 변경되었을 때 (권장)

대상 식별

CSMS는 아래 네 값의 조합을 하나의 변수로 취급합니다.

필드설명
component.name컴포넌트 이름
component.instance같은 컴포넌트가 여러 개일 때 이를 구분하는 인스턴스 이름
component.evseEVSE 번호(id)와 커넥터 번호(connectorId)
variable.name변수 이름
variableAttribute[].type속성 종류. 이 부록의 변수는 모두 Actual 입니다

컴포넌트 이름은 OCPP 2.x 표준 컴포넌트 명칭을 우선 사용하고, 표준 목록에 없는 컴포넌트는 사전에 협의된 이름을 사용합니다.

같은 컴포넌트가 여러 개면 instance 를 반드시 채웁니다

네트워크 어댑터가 두 장인데 둘 다 component.instance 없이 같은 컴포넌트 이름으로 보고하면, CSMS는 두 보고를 같은 변수로 보고 나중에 도착한 값이 앞의 값을 덮어씁니다. 커넥터 단위 항목도 마찬가지로 component.evse.connectorId 로 구분해야 합니다.

값 제약

  • 변수 값(variableAttribute[].value)은 최대 1,000자입니다. 이를 넘는 값은 저장 시 잘립니다.
  • 한 변수에는 값 하나만 담습니다. 여러 항목을 JSON 문자열로 직렬화해 한 변수에 몰아 담지 않습니다. 항목마다 변수를 나누어 보고해야 CSMS에서 항목별 조회와 변경 추적이 가능합니다.
  • 이 부록의 변수는 모두 mutability: "ReadOnly" 로 보고합니다. CSMS가 SetVariables 로 쓰지 않습니다.
  • 부품을 교체하지 않는 한 바뀌지 않는 식별자는 constant: true 로 보고합니다.
  • attributeType 을 생략하면 OCPP 기본값인 Actual 로 해석합니다.

생략한 필드의 처리

갱신 보고 — CSMS에 이미 그 변수가 있으면 value, mutability, dataType, persistent, constant 를 생략해도 저장된 기존 값을 그대로 유지합니다. 보고에서 빠졌다는 이유로 기본값으로 되돌리지 않습니다.

첫 보고 — CSMS에 그 변수가 아직 없으면 유지할 기존 값이 없으므로 아래 기본값이 적용됩니다.

필드생략 시 저장되는 값
mutabilityReadWrite
dataTypestring
persistenttrue
constantfalse
첫 보고에서는 생략하지 마십시오

이 부록의 컴포넌트를 처음 연동할 때는 모든 변수가 첫 보고에 해당합니다. mutability 를 생략하면 ReadWrite 로 저장되어 읽기 전용이라는 정의와 어긋나고, dataType 을 생략하면 MemorySize 같은 정수 값이 string 으로 저장됩니다. 첫 보고에서는 mutabilityvariableCharacteristics 를 반드시 채워서 보냅니다.

variableCharacteristics

variableCharacteristics 는 변수의 완전한 명세로 취급합니다. 이 객체를 보내면 아래와 같이 통째로 반영되므로 일부 필드만 갱신할 수는 없습니다. 보낼 때는 항상 완전한 형태로 채워서 보냅니다.

필드필수생략 시
dataType필수메시지 거부 (아래 참고)
unit, minLimit, maxLimit, valuesList선택저장된 값이 지워집니다
supportsMonitoring선택false 로 덮어씁니다
dataType 을 빼면 리포트 전체가 거부됩니다

variableCharacteristics 를 보낼 때 dataType 은 생략할 수 없습니다. CSMS는 reportData 배열을 한 번에 해석하므로, 한 항목에서 dataType 이 빠지면 그 항목만 실패하는 것이 아니라 같은 프레임에 담긴 모든 항목이 Rejected 로 거부됩니다. variableCharacteristics 를 채우지 않을 항목은 필드를 비우지 말고 객체 자체를 생략하십시오.

분할 전송과 변경 이력

보고할 항목이 많아 한 번에 담을 수 없으면 tbcseqNo 로 분할 전송합니다. seqNo 는 0부터 시작하고, 후속 프레임이 이어지면 tbctrue 로 둡니다. 분할된 모든 프레임은 같은 requestId 를 사용합니다.

CSMS는 보고된 값을 컴포넌트-변수 단위로 저장하고, 값이 바뀌면 변경 이력을 남깁니다. 따라서 부품 교체나 펌웨어 업데이트 같은 구성 변경이 이력으로 추적됩니다. 값이 바뀌지 않았다면 같은 값을 다시 보고해도 새 이력이 쌓이지 않습니다.

공통 변수

특정 컴포넌트에 종속되지 않고 여러 컴포넌트에 공통으로 쓰이는 변수입니다.

Field NameTypeEVSE 권한CSMS 권한Description
FirmwareVersionStringReadOnlyReadOnly해당 컴포넌트의 설치 펌웨어 버전

FirmwareVersion

충전기 대표(메인) 펌웨어 버전은 부팅 알림firmwareVersion 으로 이미 관리됩니다. 따라서 이 변수는 대표 버전 외의 개별 컴포넌트(HMI, ISO 15118 모듈 등) 버전 보고에 사용하며, 대표 버전을 이 경로로 중복 보고하지 않습니다.

같은 종류의 컴포넌트가 여러 개인 경우(예: EVSE마다 별도 HMI)에는 component.instance 또는 component.evse 로 대상을 구분해야 합니다.

예시 (OCPP v1.6)
[
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"
}
]
}
]
}
}
]
예시 (OCPP v2.1)
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"NotifyReport",
{
"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"
}
]
}
]
}
]

Connector

Component

OCPP 표준 컴포넌트입니다

Connector 는 CSMS의 커스텀 컴포넌트가 아니라 OCPP 2.x 디바이스 모델의 표준 컴포넌트입니다. 커스텀 항목이 아니므로 변수명·값은 임의로 정하지 않고 OCPP 표준 정의를 그대로 사용합니다. 이 절은 CSMS가 보고를 요구하는 항목을 명시하기 위해 수록합니다.

커넥터 단위 정보를 담는 컴포넌트입니다. component.evse.id(EVSE 번호)와 component.evse.connectorId(커넥터 번호)로 대상 커넥터를 식별합니다.

Variables

Field NameTypeEVSE 권한CSMS 권한Description
ConnectorTypeStringReadOnlyReadOnly커넥터의 물리 커넥터 타입

ConnectorType

본체(모델) 단위로 등록된 커넥터 구성만으로는 그 본체가 어떤 커넥터를 갖고 있는지까지만 알 수 있고, 어떤 커넥터 아이디가 어떤 커넥터 타입인지는 알 수 없습니다. 따라서 충전기는 커넥터마다 자신의 커넥터 타입을 보고해야 합니다. CSMS는 이 값을 커넥터 단위 커넥터 타입의 기준 데이터로 관리합니다.

값은 OCPP 표준 ConnectorEnumType 을 사용합니다. 국내에서 사용되는 값은 다음과 같습니다.

ConnectorType커넥터CSMS 표기
cCCS1DC 콤보 (CCS1)DC 콤보
cCCS2DC 콤보 (CCS2)DC 콤보
cG105차데모 (CHAdeMO)차데모
cTesla테슬라 (NACS)테슬라
cType1AC 단상 5핀 (Type 1)AC 단상 5핀
cType2AC 3상 7핀 (Type 2)AC 3상 7핀
sType2AC 3상 7핀 소켓 (Type 2)AC 3상 7핀

타입을 확정할 수 없는 경우에만 Undetermined 또는 Unknown 을 사용합니다. 이 두 값은 커넥터 타입으로 확정되지 않으며, CSMS는 미보고와 동일하게 취급합니다.

위 표에 없는 표준값(s309-*, sBS1361, sCEE-7-7, sType3, Other1PhMax16A, Other1PhOver16A, Other3Ph, Pan, wInductive, wResonant)도 전송할 수 있으나, 국내 충전기에서는 사용하지 않습니다. 사용이 필요하면 사전에 협의합니다.

예시 (OCPP v1.6, 2채널)
[
2,
"6f1a2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "NotifyReport",
"data": {
"requestId": 1001,
"generatedAt": "2026-07-30T12:00:00Z",
"reportData": [
{
"component": {
"name": "Connector",
"evse": {
"id": 1,
"connectorId": 1
}
},
"variable": {
"name": "ConnectorType"
},
"variableAttribute": [
{
"type": "Actual",
"value": "cCCS1",
"mutability": "ReadOnly"
}
]
},
{
"component": {
"name": "Connector",
"evse": {
"id": 1,
"connectorId": 2
}
},
"variable": {
"name": "ConnectorType"
},
"variableAttribute": [
{
"type": "Actual",
"value": "cG105",
"mutability": "ReadOnly"
}
]
}
]
}
}
]
예시 (OCPP v2.1, 2채널)
[
2,
"6f1a2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
"NotifyReport",
{
"requestId": 1001,
"generatedAt": "2026-07-30T12:00:00Z",
"reportData": [
{
"component": {
"name": "Connector",
"evse": {
"id": 1,
"connectorId": 1
}
},
"variable": {
"name": "ConnectorType"
},
"variableAttribute": [
{
"type": "Actual",
"value": "cCCS1",
"mutability": "ReadOnly"
}
]
},
{
"component": {
"name": "Connector",
"evse": {
"id": 1,
"connectorId": 2
}
},
"variable": {
"name": "ConnectorType"
},
"variableAttribute": [
{
"type": "Actual",
"value": "cG105",
"mutability": "ReadOnly"
}
]
}
]
}
]

CustomSystemInfo

Component

충전기 제어 PC의 시스템·메인보드 정보를 담는 컴포넌트입니다. 충전기당 하나만 존재하므로 component.instance 를 사용하지 않습니다.

Variables

Field NameTypeEVSE 권한CSMS 권한Description
OSNameStringReadOnlyReadOnly운영체제 이름 (예: Windows 10 IoT Enterprise)
OSVersionStringReadOnlyReadOnly운영체제 버전 또는 빌드 번호
MachineIdStringReadOnlyReadOnly제어 PC를 식별하는 고유 ID (UUID 등)
BoardVendorStringReadOnlyReadOnly메인보드 제조사
BoardModelStringReadOnlyReadOnly메인보드 모델명
BoardSerialNumberStringReadOnlyReadOnly메인보드 시리얼 번호
BiosVersionStringReadOnlyReadOnlyBIOS/UEFI 버전
CpuModelStringReadOnlyReadOnlyCPU 모델명
MemorySizeIntegerReadOnlyReadOnly전체 메모리 크기 (단위 MB)

MachineId, BoardSerialNumber 는 부품을 교체하지 않는 한 바뀌지 않으므로 constant: true 로 보고합니다.

CustomNetworkInterface

Component

제어 PC의 네트워크 어댑터 정보를 담는 컴포넌트입니다.

어댑터가 여러 개이므로 component.instance 에 운영체제가 인식하는 인터페이스 이름 (예: eth0, wlan0, lte0)을 반드시 채워 어댑터를 구분합니다. instance 없이 보고하면 CSMS가 모든 어댑터를 같은 변수로 취급해 값이 서로 덮어써집니다.

Variables

Field NameTypeEVSE 권한CSMS 권한Description
MacAddressStringReadOnlyReadOnlyMAC 주소 (00:1A:2B:3C:4D:5E 형식)
VendorStringReadOnlyReadOnly어댑터 제조사
ModelStringReadOnlyReadOnly어댑터 모델명
SerialNumberStringReadOnlyReadOnly어댑터 시리얼 번호
InterfaceTypeStringReadOnlyReadOnly인터페이스 종류 — Ethernet, WiFi, Cellular 중 하나
IpAddressStringReadOnlyReadOnly보고 시점의 IP 주소
LinkSpeedIntegerReadOnlyReadOnly링크 속도 (단위 Mbps)

MacAddress, SerialNumberconstant: true 로 보고합니다. IpAddress 는 접속 환경에 따라 바뀌므로 constant 를 설정하지 않습니다.

CustomStorage

Component

제어 PC의 저장 장치 정보를 담는 컴포넌트입니다.

저장 장치가 여러 개일 수 있으므로 component.instance 에 장치 식별자 (예: disk0, disk1)를 반드시 채워 장치를 구분합니다.

Variables

Field NameTypeEVSE 권한CSMS 권한Description
ModelStringReadOnlyReadOnly저장 장치 모델명
SerialNumberStringReadOnlyReadOnly저장 장치 시리얼 번호
StorageTypeStringReadOnlyReadOnly장치 종류 — SSD, HDD, eMMC 중 하나
CapacityIntegerReadOnlyReadOnly전체 용량 (단위 GB)
HealthStatusStringReadOnlyReadOnly장치가 보고하는 건강 상태 (예: Healthy, Warning)
PowerOnHoursIntegerReadOnlyReadOnly누적 전원 인가 시간 (단위 h)

SerialNumberconstant: true 로 보고합니다. HealthStatus, PowerOnHours 는 운영 중 변하므로 constant 를 설정하지 않습니다.

하드웨어 인벤토리 보고 예시

CustomSystemInfo, CustomNetworkInterface, CustomStorage 는 한 번의 리포트로 함께 보고합니다. 항목 수가 많아 한 프레임에 담기 어려우면 tbcseqNo 로 분할 전송합니다.

단위가 있는 값(MemorySize, LinkSpeed, Capacity, PowerOnHours)은 variableCharacteristics.unit 으로 단위를 명시합니다.

조회 요청 예시

특정 컴포넌트만 조회하려면 componentVariable 로 대상을 좁힙니다. 생략하면 전체 인벤토리가 대상이 됩니다.

[
2,
"3d9e1f20-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetReport",
"data": {
"requestId": 2001,
"componentVariable": [
{
"component": {
"name": "CustomSystemInfo"
}
},
{
"component": {
"name": "CustomNetworkInterface"
}
},
{
"component": {
"name": "CustomStorage"
}
}
]
}
}
]
보고 예시 (OCPP v1.6)
[
2,
"3d9e1f20-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "NotifyReport",
"data": {
"requestId": 2001,
"generatedAt": "2026-07-30T12:00:00Z",
"seqNo": 0,
"tbc": false,
"reportData": [
{
"component": {
"name": "CustomSystemInfo"
},
"variable": {
"name": "BoardSerialNumber"
},
"variableAttribute": [
{
"type": "Actual",
"value": "MB-2024-00193847",
"mutability": "ReadOnly",
"constant": true
}
],
"variableCharacteristics": {
"dataType": "string",
"supportsMonitoring": false
}
},
{
"component": {
"name": "CustomSystemInfo"
},
"variable": {
"name": "MemorySize"
},
"variableAttribute": [
{
"type": "Actual",
"value": "8192",
"mutability": "ReadOnly"
}
],
"variableCharacteristics": {
"dataType": "integer",
"unit": "MB",
"supportsMonitoring": false
}
},
{
"component": {
"name": "CustomNetworkInterface",
"instance": "eth0"
},
"variable": {
"name": "MacAddress"
},
"variableAttribute": [
{
"type": "Actual",
"value": "00:1A:2B:3C:4D:5E",
"mutability": "ReadOnly",
"constant": true
}
],
"variableCharacteristics": {
"dataType": "string",
"supportsMonitoring": false
}
},
{
"component": {
"name": "CustomNetworkInterface",
"instance": "lte0"
},
"variable": {
"name": "MacAddress"
},
"variableAttribute": [
{
"type": "Actual",
"value": "00:1A:2B:3C:4D:5F",
"mutability": "ReadOnly",
"constant": true
}
],
"variableCharacteristics": {
"dataType": "string",
"supportsMonitoring": false
}
},
{
"component": {
"name": "CustomStorage",
"instance": "disk0"
},
"variable": {
"name": "SerialNumber"
},
"variableAttribute": [
{
"type": "Actual",
"value": "S4EWNX0N512345",
"mutability": "ReadOnly",
"constant": true
}
],
"variableCharacteristics": {
"dataType": "string",
"supportsMonitoring": false
}
}
]
}
}
]
보고 예시 (OCPP v2.1)
[
2,
"3d9e1f20-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"NotifyReport",
{
"requestId": 2001,
"generatedAt": "2026-07-30T12:00:00Z",
"seqNo": 0,
"tbc": false,
"reportData": [
{
"component": {
"name": "CustomSystemInfo"
},
"variable": {
"name": "BoardSerialNumber"
},
"variableAttribute": [
{
"type": "Actual",
"value": "MB-2024-00193847",
"mutability": "ReadOnly",
"constant": true
}
],
"variableCharacteristics": {
"dataType": "string",
"supportsMonitoring": false
}
},
{
"component": {
"name": "CustomNetworkInterface",
"instance": "eth0"
},
"variable": {
"name": "MacAddress"
},
"variableAttribute": [
{
"type": "Actual",
"value": "00:1A:2B:3C:4D:5E",
"mutability": "ReadOnly",
"constant": true
}
],
"variableCharacteristics": {
"dataType": "string",
"supportsMonitoring": false
}
},
{
"component": {
"name": "CustomStorage",
"instance": "disk0"
},
"variable": {
"name": "Capacity"
},
"variableAttribute": [
{
"type": "Actual",
"value": "512",
"mutability": "ReadOnly"
}
],
"variableCharacteristics": {
"dataType": "integer",
"unit": "GB",
"supportsMonitoring": false
}
}
]
}
]