OCPP 2.0.1 FirmwareStatusNotification 메시지

 

FirmwareStatusNotification 개요

FirmwareStatusNotification은 충전소에서 중앙 시스템(CSMS)으로 보내는 펌웨어 업데이트 상태 알림 메시지입니다. 이 메시지는 UpdateFirmware 요청에 대한 응답으로 펌웨어 다운로드, 설치, 검증의 전체 과정에서 발생하는 상태 변화를 실시간으로 CSMS에 보고하여 펌웨어 업데이트 프로세스의 완전한 가시성을 제공합니다.

메시지 구조

Request (충전소 → CSMS)

{
  "status": "Downloading",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "NoError",
    "additionalInfo": "펌웨어 다운로드 진행률: 65% (32.5MB / 50.0MB)"
  }
}

Response (CSMS → 충전소)

{
  "customData": {
    "vendorId": "FirmwareManager",
    "data": "Download progress acknowledged"
  }
}

주요 필드 설명

Request 필드들

status 필드 (필수)

설명
Downloaded 다운로드 완료됨
DownloadFailed 다운로드 실패
Downloading 다운로드 진행 중
DownloadScheduled 다운로드 예약됨
DownloadPaused 다운로드 일시정지
Idle 유휴 상태 - 펌웨어 작업 없음
InstallationFailed 설치 실패
Installing 설치 진행 중
Installed 설치 완료됨
InstallRebooting 설치를 위한 재부팅 중
InstallScheduled 설치 예약됨
InstallVerificationFailed 설치 검증 실패
InvalidSignature 잘못된 서명
SignatureVerified 서명 검증 완료

requestId 필드 (필수)

필드명 필수여부 타입 설명
requestId 필수 Integer UpdateFirmware 요청의 requestId (요청-응답 매칭용)

statusInfo 필드 (선택사항)

필드명 필수여부 타입 설명
reasonCode 선택사항 String 상태 이유 코드
additionalInfo 선택사항 String 추가 상세 정보 (진행률, 오류 메시지 등)

Response 필드들

필드명 필수여부 타입 설명
customData 선택사항 Object 벤더별 사용자 정의 데이터

실제 사용 예제

예제 1: 다운로드 예약 확인

// Request
{
  "status": "DownloadScheduled",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "ScheduleAccepted",
    "additionalInfo": "펌웨어 v2.1.5 다운로드 예약됨."
  }
}

// Response
{
  "customData": {
    "vendorId": "ScheduleManager",
    "data": "Download schedule confirmed"
  }
}

예제 2: 다운로드 진행률 업데이트

// Request
{
  "status": "Downloading",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "DownloadInProgress",
    "additionalInfo": "다운로드 진행률: 45% (22.5MB / 50.0MB)"
  }
}

// Response
{
  "customData": {
    "vendorId": "ProgressTracker",
    "data": "Progress update received"
  }
}

예제 3: 다운로드 완료 및 서명 검증

// Request
{
  "status": "Downloaded",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "DownloadCompleted",
    "additionalInfo": "펌웨어 다운로드 완료."
  }
}

// Response
{
  "customData": {
    "vendorId": "SecurityValidator",
    "action": "verify_signature",
    "data": "Initiating signature verification"
  }
}

예제 4: 서명 검증 성공

// Request
{
  "status": "SignatureVerified",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "SignatureValid",
    "additionalInfo": "디지털 서명 검증 성공"
  }
}

// Response
{
  "customData": {
    "vendorId": "SecurityValidator",
    "data": "Signature verification successful"
  }
}

예제 5: 설치 시작

// Request
{
  "status": "Installing",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "InstallationStarted",
    "additionalInfo": "펌웨어 설치 시작."
  }
}

// Response
{
  "customData": {
    "vendorId": "InstallManager",
    "data": "Installation process initiated"
  }
}

예제 6: 설치 완료

// Request
{
  "status": "Installed",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "InstallationSuccessful",
    "additionalInfo": "펌웨어 v2.1.5 설치 완료."
  }
}

// Response
{
  "customData": {
    "vendorId": "VersionManager",
    "action": "update_registry",
    "data": "Firmware version registry updated"
  }
}

예제 7: 다운로드 실패

// Request
{
  "status": "DownloadFailed",
  "requestId": 12346,
  "statusInfo": {
    "reasonCode": "NetworkTimeout",
    "additionalInfo": "네트워크 타임아웃으로 다운로드 실패."
  }
}

// Response
{
  "customData": {
    "vendorId": "RetryManager",
    "action": "schedule_retry",
    "data": "Retry scheduled with increased timeout"
  }
}

예제 8: 서명 검증 실패

// Request
{
  "status": "InvalidSignature",
  "requestId": 12347,
  "statusInfo": {
    "reasonCode": "SignatureVerificationFailed",
    "additionalInfo": "디지털 서명 검증 실패"
  }
}

// Response
{
  "customData": {
    "vendorId": "SecurityManager",
    "action": "security_alert",
    "data": "Invalid firmware signature reported to security team"
  }
}

예제 9: 설치 실패 및 롤백

// Request
{
  "status": "InstallationFailed",
  "requestId": 12348,
  "statusInfo": {
    "reasonCode": "BootloaderError",
    "additionalInfo": "부트로더 오류로 설치 실패."
  }
}

// Response
{
  "customData": {
    "vendorId": "RecoveryManager",
    "action": "initiate_rollback",
    "data": "Automatic rollback procedure activated"
  }
}

펌웨어 업데이트 상태 흐름

성공적인 업데이트 시나리오

  1. DownloadScheduled: "다운로드가 예약되었습니다"
  2. Downloading: "다운로드 진행 중: 25%, 50%, 75%..."
  3. Downloaded: "다운로드 완료되었습니다"
  4. SignatureVerified: "서명 검증이 성공했습니다"
  5. InstallScheduled: "설치가 예약되었습니다"
  6. Installing: "설치 진행 중입니다"
  7. InstallRebooting: "설치를 위해 재부팅 중입니다"
  8. Installed: "설치가 완료되었습니다"

다운로드 실패 및 재시도 시나리오

  1. DownloadScheduled: "다운로드 예약"
  2. Downloading: "다운로드 진행 중"
  3. DownloadFailed: "네트워크 오류로 실패"
  4. Downloading: "재시도 중"
  5. Downloaded: "재시도 후 성공"

보안 검증 실패 시나리오

  1. Downloaded: "다운로드 완료"
  2. InvalidSignature: "서명 검증 실패"
  3. Idle: "대기 상태로 복귀"

진행률 모니터링

다운로드 진행률

{
  "status": "Downloading",
  "statusInfo": {
    "additionalInfo": "진행률: 73% (36.5MB/50.0MB)"
  }
}

설치 진행률

{
  "status": "Installing",
  "statusInfo": {
    "additionalInfo": "설치 단계: 부트로더 업데이트 (2/4), 진행률: 50%"
  }
}

검증 과정

{
  "status": "SignatureVerified",
  "statusInfo": {
    "additionalInfo": "체크섬 검증: 통과"
  }
}

오류 분류 및 처리

네트워크 관련 오류

  • DownloadFailed: 연결 타임아웃, 속도 저하
  • 자동 재시도 메커니즘 활성화
  • 재시도 간격 조정

보안 관련 오류

  • InvalidSignature: 서명 불일치, 인증서 만료
  • 파일 즉시 삭제
  • 보안 팀 알림

시스템 관련 오류

  • InstallationFailed: 저장 공간 부족
  • 자동 롤백 실행
  • 기술 지원팀 알림

성능 지표 및 분석

다운로드 성능

  • 평균 다운로드 속도: MB/s
  • 완료율: 성공/실패 비율
  • 재시도 빈도 분석

설치 성능

  • 평균 설치 시간: 분/초
  • 재부팅 횟수와 소요 시간
  • 롤백 발생 빈도

보안 지표

  • 서명 검증 성공률
  • 잘못된 펌웨어 탐지 횟수
  • 보안 정책 위반 사례

중요 포인트

  • FirmwareStatusNotification은 펌웨어 업데이트의 전체 생명주기를 추적하는 핵심 메시지입니다
  • 실시간 진행률 업데이트를 통해 관리자와 사용자에게 투명성을 제공합니다
  • requestId를 통해 여러 동시 업데이트 요청을 구별하고 추적할 수 있습니다
  • 상세한 additionalInfo는 문제 진단과 성능 분석에 중요한 데이터를 제공합니다
  • 보안 검증 실패 시 즉시 알림하여 악성 펌웨어 설치를 방지합니다
  • 설치 실패 시 자동 롤백 메커니즘이 시스템 안정성을 보장합니다
  • 네트워크 문제 시 재시도 로직이 업데이트 성공률을 향상시킵니다
  • CSMS는 상태 정보를 바탕으로 업데이트 정책을 최적화할 수 있습니다

이 메시지를 통해 펌웨어 업데이트 과정의 완전한 가시성을 확보하고, 문제 발생 시 신속한 대응이 가능하며, 전체 충전소 네트워크의 펌웨어 관리를 효율적이고 안전하게 수행할 수 있습니다.