본문으로 건너뛰기

광고 - Use Cases

CSMS는 충전기 HMI에 표시할 광고 콘텐츠를 관리하고 배포하는 기능을 제공합니다. 충전기는 OCPP DataTransfer를 통해 자신에게 할당된 광고 프로파일과 미디어 파일을 조회하며, CSMS는 필요 시 TriggerMessage를 통해 충전기에 프로파일 갱신을 명령할 수 있습니다.

OCPP v1.6/v2.1 공통

광고 기능은 SK일렉링크 커스텀 DataTransfer 메시지로 동작합니다. OCPP v1.6과 OCPP v2.1 세션 모두 DataTransfer:com.skelectlink:GetAdProfile, DataTransfer:com.skelectlink:GetAdMedia를 사용합니다.

개요

배포 방식

광고 배포는 기본적으로 Pull 방식으로 동작합니다. 충전기 HMI가 validUntil 도래 시 또는 부팅 시 GetAdProfile을 요청하여 프로파일을 갱신합니다. 추가로 CSMS는 TriggerMessage를 통해 충전기에 즉시 GetAdProfile 재요청을 명령할 수 있습니다.

광고 프로파일 조회

충전기 HMI는 부팅 시 또는 주기적으로 현재 활성화된 광고 프로파일을 조회합니다. CSMS는 충전기 정보를 기반으로 적절한 프로파일을 자동으로 반환합니다.

  1. EVSE: DataTransfer:com.skelectlink:GetAdProfile 전송
  2. CSMS: 충전기 정보를 기반으로 적절한 배포 그룹 매칭하여 프로파일을 응답합니다.
예시

요청

[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetAdProfile"
}
]

응답

[
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": 3,
"durationSec": 20
}
]
}
},
"status": "Accepted"
}
]

프로파일이 없는 경우

[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"data": {
"profile": null
},
"status": "Accepted"
}
]
버전 기반 변경 감지

EVSE는 version 필드를 캐싱하여, 이전 응답과 동일한 버전이면 미디어 파일을 다시 다운로드하지 않아도 됩니다. 버전이 변경된 경우에도 이미 로컬에 캐싱된 mediaKey의 미디어 파일은 다시 다운로드할 필요 없이, 새로 추가된 mediaKey만 다운로드하면 됩니다.

캐싱 및 폴링 규칙
  • validUntil 시각이 도래하면 반드시 GetAdProfile을 재요청하여 프로파일을 갱신해야 합니다.
  • validUntil 이전에는 재요청하지 않습니다.
  • 응답이 "profile": null이면 현재 표시 중인 광고를 즉시 중단합니다.

광고 미디어 다운로드

프로파일 조회 후, EVSE는 각 미디어 아이템의 mediaKey를 사용하여 실제 파일 데이터를 다운로드합니다.

  1. EVSE: DataTransfer:com.skelectlink:GetAdMedia 전송
  2. CSMS: 미디어 파일 검증 후 URL 응답
  3. EVSE: 응답받은 uri로 직접 파일 다운로드
예시

요청

[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"DataTransfer",
{
"vendorId": "com.skelectlink",
"messageId": "GetAdMedia",
"data": {
"mediaKey": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}
]

응답

[
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"
}
]
URL 유효 시간

uri 필드에 포함된 URL의 유효 시간은 10분입니다. EVSE는 URL 수신 후 가능한 빨리 다운로드를 시작해야 합니다.

전체 연동 흐름

충전기 HMI가 광고를 표시하기까지의 전체 흐름입니다:

EVSE 구현 권장사항

  1. 부팅 시 조회: BootNotification 완료 후 GetAdProfile을 요청하여 초기 광고 데이터를 로드합니다.
  2. validUntil 기반 갱신: validUntil 시각이 도래하면 GetAdProfile을 재요청합니다. validUntil 이전에는 재요청하지 않습니다.
  3. 버전 캐싱: version 값이 동일하면 미디어 파일을 다시 다운로드하지 않습니다.
  4. 미디어 캐싱: version이 변경되더라도 이미 로컬에 캐싱된 mediaKey의 미디어 파일은 재사용합니다. 새로 추가된 mediaKey만 다운로드합니다.
  5. 재생 규칙: items 배열의 displayOrder 순서대로, 각 아이템을 durationSec초 동안 표시한 후 다음 아이템으로 전환합니다. 마지막 아이템 이후 첫 번째 아이템으로 순환합니다.
  6. 프로파일 없음 처리: profilenull인 경우 현재 표시 중인 광고를 즉시 중단하고 기본 대기 화면을 표시합니다.
  7. 미디어 파일 정리: 현재 프로파일의 items에 포함되지 않는 mediaKey의 캐싱된 파일은 장시간 미사용 시 정리하여 저장 공간을 확보합니다.