투케이2K

96. (Aws/Amazon) [Aws Iot Core] AWS 원격 펌웨어 업데이트 job 알림 수신 jobs/notify 토픽과 jobs/notify-next 토픽 차이점 정리 본문

Aws (Amazon)

96. (Aws/Amazon) [Aws Iot Core] AWS 원격 펌웨어 업데이트 job 알림 수신 jobs/notify 토픽과 jobs/notify-next 토픽 차이점 정리

투케이2K 2025. 7. 31. 21:15
728x90

[개발 환경 설정]

개발 환경 : Aws / Amazon Web Services

 

[설명 정리]

// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------

- 인프라 : Aws / Amazon Web Services


- 기술 구분 : Aws / Iot Core / OTA / job


- 사전) Aws Iot Core 간단 설명 : 

  >> AWS IoT 는 IoT 디바이스를 다른 디바이스 및 AWS 클라우드 서비스에 연결하는 클라우드 서비스를 제공합니다.

  >> 디바이스가에 연결할 수 있는 경우 AWS IoT는 AWS 가 제공하는 클라우드 서비스에 디바이스를 AWS IoT 연결할 수 있습니다.

  >> AWS IoT Core 메시지 브로커는 MQTT 및 MQTT over WSS 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스 및 클라이언트를 지원합니다. 
  
    - HTTPS 프로토콜을 사용하여 메시지를 게시하는 디바이스와 클라이언트도 지원합니다.


- 사전) AWS Iot Core Job 간단 설명 : 

  >> AWS 원격 작업 이란 작업자 또는 기술자의 물리적 존재 없이 원격으로 수행할 수 있는 업데이트 작업입니다 (무선 업데이트 (OTA) 수행)

  >> AWS IoT 작업 서비스는 AWS IoT 에 연결 되는 하나 이상의 디바이스로 전송 된 후 실행 되는 원격 작업 세트를 정의하는데 사용됩니다

    - 주목적 : 소프트웨어 및 펌웨어 업데이트를 디바이스 기기에게 알리는데 사용 (기기에게 작업 문서 전송)

    - 작업 문서 : AWS IoT Job 생성 시 대상이 되는 디바이스로 전송 되는 문서 (펌웨어 다운로드 URL 정보 등 포함)

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------

1. AWS IoT Jobs 에서 사용되는 MQTT 토픽인 jobs/notify 와 jobs/notify-next 는 모두 디바이스 (Thing) 에게 작업 (Job) 이 생성되었음을 알리는 역할을 합니다.


2. Subscribe 구독 형식 토픽 예시 : 

  >> jobs/notify : $aws/things/{ThingName}/jobs/notify

  >> jobs/notify-next : aws/things/{ThingName}/jobs/notify-next

  >> 해당 토픽을 모두 동시에 확인 하기 위한 와일드 카드 구독 형식 : $aws/things/{ThingName}/jobs/#


3. jobs/notify 토픽 설명

  >> 역할 : Thing(디바이스)에게 모든 pending 상태의 Job이 있음을 알려줍니다. (모든 Job 알림)

  >> 알림 수신 시기 : AWS 콘솔에서 Job 생성 직후 > $aws/things/{thingName}/jobs/notify 토픽에서 메시지 수신 확인

  >> 디바이스가 해당 토픽을 구독 한 상태에서 메시지 수신 시 해야 할 일 :

    - 디바이스는 특정 jobId 확인 후 $aws/things/{thingName}/jobs/{jobId}/get 토픽 publish 요청 후 특정 Job 문서 내용 확인 후 펌웨어 파일 다운로드를 진행할 수 있습니다

  >> 주요 용도 : 여러 작업이 대기 중이거나, 디바이스가 주기적으로 Job 상태를 점검해야 하는 경우 사용할 수 있습니다.

  >> jobs/notify 토픽으로 내려온 메시지 형식 예시 :

    W///===========//: ======================================================================    
    I/: [LOG :: DESCRIPTION :: [Aws] :: [MQTT] :: Subscribe 실시간 메시지 수신 확인 :: onMessageArrived]
    I/: ----------------------------------------------------
    I/: [LOG :: TOPIC :: $aws/things/TWOK_DEVICE_1234/jobs/notify]
    I/: ----------------------------------------------------
    I/: [LOG :: MESSAGE :: 

      {
        "timestamp": 1753864921,
        "jobs": {
          "IN_PROGRESS": [
            {
              "jobId": "tk_test_1",
              "queuedAt": 1752729994,
              "lastUpdatedAt": 1753857929,
              "startedAt": 1753857929,
              "executionNumber": 1,
              "versionNumber": 2
            }
          ],
          "QUEUED": [
            {
              "jobId": "TWOK_JOB_V1040_TEST_R0",
              "queuedAt": 1753862870,
              "lastUpdatedAt": 1753862870,
              "executionNumber": 1,
              "versionNumber": 1
            },
            {
              "jobId": "TWOK_JOB_V1040_TEST_R1",
              "queuedAt": 1753863574,
              "lastUpdatedAt": 1753863574,
              "executionNumber": 1,
              "versionNumber": 1
            },
            {
              "jobId": "TWOK_JOB_V1040_TEST_R2",
              "queuedAt": 1753863846,
              "lastUpdatedAt": 1753863846,
              "executionNumber": 1,
              "versionNumber": 1
            },
            {
              "jobId": "TWOK_JOB_V1040_TEST_R3",
              "queuedAt": 1753864921,
              "lastUpdatedAt": 1753864921,
              "executionNumber": 1,
              "versionNumber": 1
            }
          ]
        }
      }

    ]
    W///===========//: ======================================================================


4. jobs/notify-next 토픽 설명

  >> 역할 : Thing 에게 가장 우선순위가 높은 하나의 Job 이 있음을 알려줍니다. (다음 실행할 Job 이 존재할 경우 알림 메시지가 수신됨)

  >> 알림 수신 시기 : 대상 Thing 에 실행 가능한 Job 이 있고 조건 만족 시 $aws/things/{thingName}/jobs/notify-next 에 알림 메시지 도착

    - notify-next 는 실행 가능한 Job이 하나라도 있을 때만 발생합니다

    - Job 이 이미 실행 중 (IN_PROGRESS) 이거나 할당이 안 된 상태라면, notify-next는 오지 않습니다

  >> 디바이스가 해당 토픽을 구독 한 상태에서 메시지 수신 시 해야 할 일 :

    - jobDocument 파싱 후 > $aws/things/{thingName}/jobs/{jobId}/update 토픽으로 펌웨어 업데이트 진행 상태 publish 수행

  >> 주요 용도 : 디바이스가 Job을 순차적으로 하나씩 처리하는 방식일 때 유용합니다

  >> jobs/notify-next 토픽으로 내려온 메시지 형식 예시 :

    V///F==========//: ======================================================================
    I/: [LOG :: DESCRIPTION :: [Aws] :: Subscribe 실시간 메시지 수신 확인 :: onMessageArrived]
    I/: ----------------------------------------------------
    I/: [LOG :: TOPIC :: $aws/things/TWOK_DEVICE_1234/jobs/notify-next]
    I/: ----------------------------------------------------

    I/: [LOG :: MESSAGE :: 

      {
        "timestamp": 1752729995,
        "execution": {
          "jobId": "tk_test_1",
          "status": "QUEUED",
          "queuedAt": 1752729994,
          "lastUpdatedAt": 1752729994,
          "versionNumber": 1,
          "executionNumber": 1,
          "jobDocument": {
            "operation": "UPDATE",
            "description": "Request Update Firmware ({})",
            "target": [
              {
                "deviceType": "CAMERA",
                "deviceIdList": [
                  "TWOK_DEVICE_1234"
                ],
                "model": "device",
                "brand": "2k",
                "version": "1.0.1",
                "firmwareUrl": "https://...",
                "firmwareFileMd5": "ec...4d"
              }
            ],
            "jobExecutionsRolloutConfig": {
              "maximumPerMinutes": 60
            }
          }
        }
      }

    ]
    V///F==========//: ======================================================================


5. 참고 : job 펌웨어 업데이트에 사용 되는 주요 토픽 설명 정리

  >> $aws/things/{thingName}/jobs/start-next ✅ 다음 실행 가능한 Job 요청

  W///===========//: ======================================================================
  I/: [LOG :: DESCRIPTION :: [Aws] :: [MQTT] :: Subscribe 실시간 메시지 수신 확인 :: onMessageArrived]
  I/: ----------------------------------------------------
  I/: [LOG :: TOPIC :: $aws/things/TWOK1234/jobs/start-next/accepted]
  I/: ----------------------------------------------------
  I/: [LOG :: MESSAGE :: 
  
    {
      "timestamp": 1753864817,
      "execution": {
        "jobId": "tk_test_1",
        "status": "IN_PROGRESS",
        "queuedAt": 1752729994,
        "startedAt": 1753857929,
        "lastUpdatedAt": 1753857929,
        "versionNumber": 2,
        "executionNumber": 1,
        "jobDocument": {
          "operation": "UPDATE",
          "description": "Request Update Firmware ({})",
          "target": [
            {
              "deviceType": "CAMERA",
              "deviceIdList": [
                "TWOK1234"
              ],
              "model": "device",
              "brand": "2k",
              "version": "1.0.1",
              "firmwareUrl": "https://...",
              "firmwareFileMd5": "ec..4d"
            }
          ],
          "jobExecutionsRolloutConfig": {
            "maximumPerMinutes": 60
          }
        }
      }
    }

  ]
  W///===========//: ======================================================================


  >> $aws/things/{thingName}/jobs/get ✅ 전체 Job 목록 요청

  W///===========//: ======================================================================  
  I/: [LOG :: DESCRIPTION :: [Aws] :: [MQTT] :: Subscribe 실시간 메시지 수신 확인 :: onMessageArrived]
  I/: ----------------------------------------------------
  I/: [LOG :: TOPIC :: $aws/things/TWOK1234/jobs/get/accepted]
  I/: ----------------------------------------------------
  I/: [LOG :: MESSAGE :: 
  
    {
      "timestamp": 1753864190,
      "inProgressJobs": [
        {
          "jobId": "tk_test_1",
          "queuedAt": 1752729994,
          "lastUpdatedAt": 1753857929,
          "startedAt": 1753857929,
          "executionNumber": 1,
          "versionNumber": 2
        }
      ],
      "queuedJobs": [
        {
          "jobId": "TWOK1234_JOB_V1040_TEST_R0",
          "queuedAt": 1753862870,
          "lastUpdatedAt": 1753862870,
          "executionNumber": 1,
          "versionNumber": 1
        },
        {
          "jobId": "TWOK1234_JOB_V1040_TEST_R1",
          "queuedAt": 1753863574,
          "lastUpdatedAt": 1753863574,
          "executionNumber": 1,
          "versionNumber": 1
        },
        {
          "jobId": "TWOK1234_JOB_V1040_TEST_R2",
          "queuedAt": 1753863846,
          "lastUpdatedAt": 1753863846,
          "executionNumber": 1,
          "versionNumber": 1
        }
      ]
    }

  ]
  W///===========//: ======================================================================


  >> $aws/things/{thingName}/jobs/{jobId}/get ✅ 특정 Job 문서 요청

    // [응답 json 예시]
    
    {
      "execution": {
        "jobId": "firmware-update-001",
        "thingName": "MyDevice01",
        "status": "IN_PROGRESS",
        "statusDetails": {
          "progress": "50%"
        },
        "queuedAt": 1722225000,
        "startedAt": 1722225030,
        "lastUpdatedAt": 1722225090,
        "versionNumber": 2,
        "executionNumber": 1,
        "jobDocument": {
          "operation": "update-firmware",
          "firmwareUrl": "https://...",
          "version": "1.2.3"
        }
      },
      "timestamp": 1722225092
    }


  >> $aws/things/{thingName}/jobs/{jobId}/update ✅ 실행 상태 보고 (SUCCEEDED/FAILED 등)

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[Aws Iot Core] 원격 작업 무선 업데이트 (OTA) job 생성 목록 확인 방법

https://blog.naver.com/kkh0977/223926543824


[Aws Iot Core] 원격 작업 무선 업데이트 (OTA) job 개념 학습 및 펌웨어 업데이트 프로세스 정리

https://blog.naver.com/kkh0977/223926549194


[AWS 원격 펌웨어 업데이트 OTA 수동 job 생성 및 특정 사물 notify 펌웨어 업데이트 요청 방법 정리]

https://blog.naver.com/kkh0977/223944636139

// --------------------------------------------------------------------------------------
 
 



728x90
반응형
Comments