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 상태를 제어할 수 있어 운영 효율성을 높이고 사용자에게 안정적인 충전 서비스를 제공할 수 있습니다.