OCPP 2.0.1 ChangeAvailability 메시지

ChangeAvailability 개요

ChangeAvailability는 중앙 시스템(CSMS)이 충전소의 특정 EVSE(Electric Vehicle Supply Equipment) 또는 커넥터의 가용성 상태를 원격으로 변경할 때 사용하는 메시지입니다. 이 메시지를 통해 충전소의 운영 상태를 현장 방문 없이 원격으로 제어할 수 있습니다.


메시지 구조

Request (CSMS → 충전소)

{
  "evseId": 1,
  "operationalStatus": "Operative"
}

Response (충전소 → CSMS)

{
  "status": "Accepted",
  "statusInfo": {
    "reasonCode": "NoError",
    "additionalInfo": "EVSE 1 status changed successfully"
  }
}

주요 필드 설명

Request 필드들

필드명 필수여부 타입 설명
evseId 필수 Integer 대상 EVSE ID (0이면 전체 충전소)
operationalStatus 필수 Enum 설정할 운영 상태

Response 필드들

필드명 필수여부 타입 설명
status 필수 Enum 상태 변경 결과
statusInfo 선택 Object 추가 상태 정보

status 필드 값

상태 설명
Accepted 승인됨 - 상태 변경 완료 또는 즉시 적용
Rejected 거부됨 - 상태 변경 불가
Scheduled 예약됨 - 현재 충전 완료 후 적용 예정

operationalStatus 필드 값

상태 설명
Operative 운영 가능 - 정상 작동 상태
Inoperative 운영 불가 - 서비스 중단 상태

실제 사용 예제

예제 1: 단일 EVSE 비활성화

// Request
{
  "evseId": 2,
  "operationalStatus": "Inoperative"
}

// Response
{
  "status": "Accepted",
  "statusInfo": {
    "reasonCode": "NoError"
  }
}

예제 2: 전체 충전소 활성화

// Request
{
  "evseId": 0,
  "operationalStatus": "Operative"
}

// Response
{
  "status": "Accepted",
  "statusInfo": {
    "reasonCode": "NoError",
    "additionalInfo": "All EVSEs activated"
  }
}

예제 3: 충전 중인 EVSE 상태 변경 (예약)

// Request
{
  "evseId": 1,
  "operationalStatus": "Inoperative"
}

// Response
{
  "status": "Scheduled",
  "statusInfo": {
    "reasonCode": "OngoingTransaction",
    "additionalInfo": "Will be applied after current transaction"
  }
}

예제 4: 거부된 상태 변경

// Request
{
  "evseId": 3,
  "operationalStatus": "Inoperative"
}

// Response
{
  "status": "Rejected",
  "statusInfo": {
    "reasonCode": "HardwareFault",
    "additionalInfo": "EVSE 3 hardware malfunction"
  }
}

상태 변경 시나리오

유지보수 모드 전환

// 정기 점검을 위한 EVSE 비활성화
{
  "evseId": 1,
  "operationalStatus": "Inoperative"
}

// 점검 완료 후 재활성화
{
  "evseId": 1,
  "operationalStatus": "Operative"
}

응급 상황 대응

// 안전 문제로 인한 전체 충전소 긴급 중단
{
  "evseId": 0,
  "operationalStatus": "Inoperative"
}

// 문제 해결 후 단계적 복구
{
  "evseId": 1,
  "operationalStatus": "Operative"
}

부하 관리

// 전력 부하 분산을 위한 일부 EVSE 일시 중단
{
  "evseId": 3,
  "operationalStatus": "Inoperative"
}

{
  "evseId": 4,
  "operationalStatus": "Inoperative"
}

고급 운영 시나리오

시간대별 운영 관리

// 야간 시간대 일부 EVSE 비활성화 (전력 절약)
{
  "evseId": 2,
  "operationalStatus": "Inoperative"  // 22:00~06:00 비활성
}

// 출근 시간대 모든 EVSE 활성화
{
  "evseId": 0,
  "operationalStatus": "Operative"    // 06:00~22:00 전체 활성
}

계층적 상태 관리

// 1단계: 특정 EVSE 비활성화
{
  "evseId": 4,
  "operationalStatus": "Inoperative"
}

// 2단계: 부하 상황에 따른 추가 비활성화
{
  "evseId": 3,
  "operationalStatus": "Inoperative"
}

// 3단계: 상황 안정화 후 순차 복구
{
  "evseId": 3,
  "operationalStatus": "Operative"
}

상태 변경 결과 처리

Accepted 처리

// 즉시 적용 완료
{
  "status": "Accepted"
}

// 후속 동작: StatusNotification으로 실제 상태 확인

Scheduled 처리

{
  "status": "Scheduled"
}

// 후속 동작
// 1. 현재 트랜잭션 모니터링
// 2. StopTransaction 수신 대기
// 3. StatusNotification으로 상태 변경 확인

Rejected 처리

{
  "status": "Rejected",
  "statusInfo": {
    "reasonCode": "HardwareFault"
  }
}

// 가능한 원인 분석
// - 하드웨어 오류
// - 잘못된 EVSE ID
// - 시스템 제약
// - 보안 정책 위반

evseId 값에 따른 동작

evseId = 0 (전체 충전소)

{
  "evseId": 0,
  "operationalStatus": "Inoperative"
}

// 결과: 모든 EVSE가 비활성화됨

특정 evseId (개별 EVSE)

{
  "evseId": 2,
  "operationalStatus": "Operative"
}

// 결과: EVSE 2번만 활성화됨

상태 동기화 및 모니터링

상태 변경 이력 관리

// 변경 로그 예제
{
  "timestamp": "2024-08-19T14:30:00Z",
  "evseId": 1,
  "previousStatus": "Operative",
  "newStatus": "Inoperative",
  "requestStatus": "Accepted",
  "reason": "Scheduled maintenance",
  "requestedBy": "maintenance@company.com"
}

실시간 상태 모니터링

  • ChangeAvailability 실행 → StatusNotification 수신 대기
  • 주기적 상태 확인: GetReport(EvseStatus) 활용
  • 상태 불일치 감지 시 알람 발생

오류 상황 및 처리

통신 오류 처리

// 타임아웃 발생 시 재시도 로직
{
  "evseId": 1,
  "operationalStatus": "Operative"
}

// 응답 없음 → 재시도 → GetReport로 상태 확인

부분적 실패 처리

// evseId=0 요청 시 일부 EVSE만 변경된 경우
{
  "status": "Accepted",
  "statusInfo": {
    "reasonCode": "PartialSuccess",
    "additionalInfo": "EVSE 1,2 changed, EVSE 3 failed due to hardware fault"
  }
}

보안 고려사항

권한 관리

  • 관리자별 EVSE 제어 권한 분리
  • 중요 EVSE는 별도 승인 절차 필요
  • 모든 상태 변경 이력 감사 로그 유지

무단 접근 방지

// 보안 정책 위반 시 거부 응답
{
  "status": "Rejected",
  "statusInfo": {
    "reasonCode": "SecurityError",
    "additionalInfo": "Insufficient privileges"
  }
}

관련 메시지와의 연관성

StatusNotification 연계

// ChangeAvailability 실행 후 자동 발생
// ChangeAvailability → StatusNotification(상태 변경 알림)

GetReport 연계

// 현재 상태 확인
// GetReport(EvseStatus) → ChangeAvailability → GetReport(EvseStatus)

TransactionEvent 연계

// 충전 중 상태 변경 시
// ChangeAvailability(Scheduled) → TransactionEvent(Ended) → StatusNotification

성능 최적화

배치 처리 최적화

// 개별 요청보다 그룹 단위 처리 권장
{
  "evseId": 0,  // 전체 처리로 네트워크 부하 감소
  "operationalStatus": "Operative"
}

응답 시간 개선

  • 즉시 응답 가능한 상태 변경: Accepted
  • 지연 처리 필요한 경우: Scheduled 응답 후 비동기 처리
  • 백그라운드 상태 동기화로 일관성 유지

모범 사례

예방적 관리

// 정기 점검 전 사전 알림
{
  "evseId": 1,
  "operationalStatus": "Inoperative"
}

// 점검 완료 후 즉시 복구
{
  "evseId": 1,
  "operationalStatus": "Operative"
}

단계적 복구

// 장애 복구 시 단계적 활성화
// 1단계: 핵심 EVSE 우선 복구
{
  "evseId": 1,
  "operationalStatus": "Operative"
}

// 2단계: 안정성 확인 후 추가 복구
{
  "evseId": 2,
  "operationalStatus": "Operative"
}

중요 포인트

  • 원격 제어: 현장 방문 없이 EVSE 상태 제어 가능
  • 실시간 적용: 즉시 적용 또는 예약 적용 지원
  • 안전 우선: 충전 중인 차량에 대한 안전한 처리
  • 상태 동기화: StatusNotification으로 실제 상태 확인 필수
  • 오류 처리: 다양한 실패 상황에 대한 적절한 대응
  • 보안 중요: 무단 접근 방지 및 권한 관리 필수
  • 이력 관리: 모든 상태 변경의 로그 보관 필요
  • 단계적 적용: 대규모 변경 시 순차적 처리 권장

ChangeAvailability는 충전소 운영의 유연성과 안정성을 크게 향상시키는 핵심 메시지입니다. 원격으로 EVSE 상태를 제어할 수 있어 운영 효율성을 높이고 사용자에게 안정적인 충전 서비스를 제공할 수 있습니다.