OCPP 2.0.1 UpdateFirmware 메시지

 

UpdateFirmware 개요

UpdateFirmware는 중앙 시스템(CSMS)에서 충전소로 보내는 펌웨어 업데이트 요청 메시지입니다. 이 메시지를 통해 CSMS는 충전소의 펌웨어를 원격으로 업데이트할 수 있으며, 보안 패치, 기능 개선, 버그 수정 등을 효율적으로 배포하여 충전 네트워크의 안정성과 보안성을 유지할 수 있습니다.

메시지 구조

Request (CSMS → 충전소)

{
  "requestId": 12345,
  "firmware": {
    "location": "https://firmware.csms.com/updates/station_fw_v2.1.5.bin",
    "retrieveDateTime": "2024-08-20T23:00:00.000Z",
    "installDateTime": "2024-08-21T02:00:00.000Z",
    "signingCertificate": "-----BEGIN CERTIFICATE-----\nMIIC...certificate content...
                          \n-----END CERTIFICATE-----",
    "signature": "SHA256:a1b2c3d4e5f6..."
  },
  "retries": 3,
  "retryInterval": 300
}

Response (충전소 → CSMS)

{
  "status": "Accepted",
  "statusInfo": {
    "reasonCode": "NoError",
    "additionalInfo": "펌웨어 업데이트가 예약되었습니다. 설치 예정: 2024-08-21 02:00:00"
  }
}

주요 필드 설명

Request 필드들

requestId 필드 (필수)

필드명 필수여부 타입 설명
requestId 필수 Integer 고유한 요청 식별자 (FirmwareStatusNotification에서 참조)

firmware 필드 (필수)

필드명 필수여부 타입 설명
location 필수 String 펌웨어 파일 다운로드 URL
retrieveDateTime 필수 DateTime 펌웨어 다운로드 시작 시간
installDateTime 선택사항 DateTime 펌웨어 설치 시작 시간
signingCertificate 선택사항 String 펌웨어 서명 검증용 인증서
signature 선택사항 String 펌웨어 파일의 디지털 서명

retries 필드 (선택사항)

필드명 필수여부 타입 설명
retries 선택사항 Integer 다운로드 실패 시 재시도 횟수 (기본값: 3)

retryInterval 필드 (선택사항)

필드명 필수여부 타입 설명
retryInterval 선택사항 Integer 재시도 간격 (초 단위, 기본값: 300)

Response 필드들

status 필드 (필수)

설명
Accepted 승인됨 - 펌웨어 업데이트 요청 수락
Rejected 거부됨 - 펌웨어 업데이트 불가
AcceptedCanceled 승인되었으나 취소됨 - 이전 업데이트 취소 후 새 요청 수행

statusInfo 필드 (선택사항)

필드명 필수여부 타입 설명
reasonCode 선택사항 String 상태 이유 코드
additionalInfo 선택사항 String 추가 상세 정보

실제 사용 예제

예제 1: 일반적인 펌웨어 업데이트

// Request
{
  "requestId": 12345,
  "firmware": {
    "location": "https://secure-fw.csms.com/v2.1.5/charger_firmware.bin",
    "retrieveDateTime": "2024-08-20T23:30:00.000Z",
    "installDateTime": "2024-08-21T02:00:00.000Z",
    "signingCertificate": "-----BEGIN CERTIFICATE-----\nMIIEpDCCAowCCQC4vC8...
                         \n-----END CERTIFICATE-----",
    "signature": "SHA256:a1b2c3d4e5f6789012345678901234567890abcdef"
  },
  "retries": 3,
  "retryInterval": 600
}

// Response
{
  "status": "Accepted",
  "statusInfo": {
    "reasonCode": "NoError",
    "additionalInfo": "펌웨어 v2.1.5 업데이트 예약됨. 다운로드: 23:30, 설치: 02:00"
  }
}

예제 2: 즉시 설치 (installDateTime 미지정)

// Request
{
  "requestId": 12346,
  "firmware": {
    "location": "https://hotfix.csms.com/security_patch_v2.1.4.1.bin",
    "retrieveDateTime": "2024-08-20T15:00:00.000Z",
    "signingCertificate": "-----BEGIN CERTIFICATE-----\nMIIEpDCCAowCCQC...
                          \n-----END CERTIFICATE-----",
    "signature": "SHA256:hotfix123456789abcdef0123456789"
  },
  "retries": 5,
  "retryInterval": 180
}

// Response
{
  "status": "Accepted",
  "statusInfo": {
    "reasonCode": "UrgentSecurityPatch",
    "additionalInfo": "보안 핫픽스 다운로드 후 즉시 설치 예정. 충전 서비스는 약 
                      10분간 중단됩니다"
  }
}

예제 3: 업데이트 거부 (진행 중인 충전)

// Request
{
  "requestId": 12347,
  "firmware": {
    "location": "https://firmware.csms.com/v2.2.0/major_update.bin",
    "retrieveDateTime": "2024-08-20T14:00:00.000Z",
    "installDateTime": "2024-08-20T14:30:00.000Z"
  }
}

// Response
{
  "status": "Rejected",
  "statusInfo": {
    "reasonCode": "ActiveTransactions",
    "additionalInfo": "활성 충전 세션 3개가 진행 중입니다. 예상 완료 시간: 16:30"
  }
}

예제 4: 저장 공간 부족으로 거부

// Request
{
  "requestId": 12348,
  "firmware": {
    "location": "https://firmware.csms.com/v3.0.0/full_system_update.bin",
    "retrieveDateTime": "2024-08-20T20:00:00.000Z",
    "installDateTime": "2024-08-21T01:00:00.000Z"
  }
}

// Response
{
  "status": "Rejected",
  "statusInfo": {
    "reasonCode": "InsufficientStorage",
    "additionalInfo": "저장 공간 부족. 필요: 128MB, 사용 가능: 45MB. 
                       로그 정리 후 재시도 권장"
  }
}

예제 5: 이전 업데이트 취소 후 새 요청 수행

// Request
{
  "requestId": 12349,
  "firmware": {
    "location": "https://priority-fw.csms.com/critical_fix_v2.1.6.bin",
    "retrieveDateTime": "2024-08-20T16:00:00.000Z",
    "installDateTime": "2024-08-20T16:15:00.000Z",
    "signature": "SHA256:critical987654321fedcba"
  },
  "retries": 1,
  "retryInterval": 60
}

// Response
{
  "status": "AcceptedCanceled",
  "statusInfo": {
    "reasonCode": "HigherPriority",
    "additionalInfo": "이전 업데이트(ID: 12345) 취소됨. 긴급 수정사항 우선 적용"
  }
}

예제 6: 서명 검증 실패

// Request
{
  "requestId": 12350,
  "firmware": {
    "location": "https://firmware.csms.com/test/unsigned_firmware.bin",
    "retrieveDateTime": "2024-08-20T17:00:00.000Z"
  }
}

// Response
{
  "status": "Rejected",
  "statusInfo": {
    "reasonCode": "SecurityPolicy",
    "additionalInfo": "서명되지 않은 펌웨어는 보안 정책에 의해 설치할 수 없습니다"
  }
}

펌웨어 업데이트 프로세스

1단계: 업데이트 요청 및 승인

CSMS → UpdateFirmware → 충전소
충전소 → Response(Accepted) → CSMS

2단계: 다운로드 프로세스

충전소 → FirmwareStatusNotification(Downloading) → CSMS
충전소 → FirmwareStatusNotification(Downloaded) → CSMS

3단계: 설치 프로세스

충전소 → FirmwareStatusNotification(Installing) → CSMS
충전소 → 시스템 재시작
충전소 → BootNotification(FirmwareUpdate) → CSMS
충전소 → FirmwareStatusNotification(Installed) → CSMS

안전 및 보안 고려사항

디지털 서명 검증

  • 펌웨어 파일 무결성 확인
  • 인증된 소스에서 제공된 펌웨어 검증
  • 서명 인증서 체인 검증

백업 및 복구

  • 현재 펌웨어 백업 생성
  • 업데이트 실패 시 롤백 메커니즘
  • 부트로더 보호 및 복구 모드

타이밍 제어

  • 충전 서비스 영향 최소화
  • 유지보수 시간대 활용
  • 단계적 배포 (Staged Rollout)

오류 처리 시나리오

다운로드 실패

{
  "status": "Rejected",
  "statusInfo": {
    "reasonCode": "DownloadFailed",
    "additionalInfo": "네트워크 연결 불안정. 3회 재시도 후 실패"
  }
}

서명 검증 실패

{
  "status": "Rejected", 
  "statusInfo": {
    "reasonCode": "InvalidSignature",
    "additionalInfo": "펌웨어 서명 검증 실패. 파일 무결성 확인 불가"
  }
}

호환성 문제

{
  "status": "Rejected",
  "statusInfo": {
    "reasonCode": "IncompatibleFirmware",
    "additionalInfo": "하드웨어 v1.2와 호환되지 않는 펌웨어입니다"
  }
}

모니터링 및 관리

진행 상황 추적

  • FirmwareStatusNotification을 통한 실시간 상태 모니터링
  • 다운로드 진행률 및 설치 단계 추적
  • 오류 발생 시 즉시 알림

배치 업데이트 관리

  • 충전소 그룹별 순차 업데이트
  • 테스트 그룹 우선 배포
  • 전체 네트워크 영향도 분석

성능 지표

  • 업데이트 성공률 모니터링
  • 평균 다운로드/설치 시간 측정
  • 업데이트 후 안정성 확인

중요 포인트

  • UpdateFirmware는 충전소 네트워크의 보안과 기능 향상을 위한 핵심 메시지입니다
  • 디지털 서명을 통한 펌웨어 무결성 검증이 보안상 필수적입니다
  • 충전 중인 세션이 있을 때는 업데이트를 연기하여 서비스 연속성을 보장해야 합니다
  • retrieveDateTimeinstallDateTime을 분리하여 업데이트 타이밍을 세밀하게 제어할 수 있습니다
  • 재시도 메커니즘을 통해 네트워크 불안정 상황에서도 안정적인 업데이트가 가능합니다
  • 백업 및 롤백 메커니즘을 통해 업데이트 실패 시 시스템 복구가 가능해야 합니다
  • FirmwareStatusNotification을 통해 전체 업데이트 과정을 투명하게 모니터링할 수 있습니다
  • 보안 패치와 같은 긴급 업데이트는 우선순위를 두어 신속하게 배포해야 합니다

이 메시지를 통해 충전소 네트워크의 펌웨어를 효율적이고 안전하게 관리할 수 있으며, 지속적인 보안 강화와 기능 개선을 통해 안정적인 충전 서비스를 제공할 수 있습니다.