Notice
Recent Posts
Recent Comments
Link
투케이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:15728x90
[개발 환경 설정]
개발 환경 : 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
반응형
'Aws (Amazon)' 카테고리의 다른 글
Comments
