작업 디바이스 MQTT API 작업 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

작업 디바이스 MQTT API 작업

작업 명령에 사용되는 예약된 주제에 MQTT 메시지를 게시하여 작업 디바이스 명령을 발행할 수 있습니다.

디바이스 측 클라이언트는 이러한 명령의 응답 메시지 항목을 구독해야 합니다. AWS IoT 디바이스 클라이언트를 사용하면 디바이스가 응답 주제를 자동으로 구독합니다. 즉, 클라이언트가 응답 메시지 주제를 구독했는지 여부에 관계없이 메시지 브로커가 명령 메시지를 게시한 클라이언트에 응답 메시지 주제를 게시합니다. 이러한 응답 메시지는 메시지 브로커를 통과하지 않으며 다른 클라이언트나 규칙에 의해 구독될 수 없습니다.

플릿 모니터링 솔루션에 대한 작업 및 jobExecution 이벤트 주제를 구독할 때 먼저 작업 및 작업 실행 이벤트를 사용하여 클라우드 측에서 이벤트를 수신합니다. 메시지 브로커를 통해 처리되고 AWS IoT 규칙에서 사용할 수 있는 작업 진행 메시지는 작업 이벤트로 게시됩니다. 메시지 브로커가 응답 메시지를 게시하기 때문에, 명시적인 구독을 하지 않더라도 수신하는 메시지를 수신하고 식별하도록 클라이언트를 구성해야 합니다. 또한 클라이언트는 클라이언트가 메시지에 대해 작업을 수행하기 전에 수신 메시지 주제의 thingName이 클라이언트의 사물 이름에 적용되는지 확인해야 합니다.

참고

AWS IoT가 MQTT 작업 API 명령 메시지에 대한 응답으로 전송하는 메시지는 명시적으로 구독했는지와 관계없이 계정에 비용이 청구됩니다.

다음은 MQTT API 작업과 해당 요청 및 응답 구문을 보여 줍니다. 모든 MQTT API 작업에는 다음 파라미터가 있습니다.

clientToken

요청과 응답의 연관성을 나타내는 데 사용하는 선택적 클라이언트 토큰입니다. 여기에 임의 값을 입력하면 응답에 반영됩니다.

timestamp

메시지가 전송된 Epoch 이후 경과 시간(초)입니다.

지정된 사물에 대해 종료 상태가 아닌 사물의 모든 작업 목록을 가져옵니다.

이 API를 호출하려면 $aws/things/thingName/jobs/get 주제에 메시지를 게시합니다.

요청 페이로드:

{ "clientToken": "string" }

메시지 브로커는 특정 구독 없이도 $aws/things/thingName/jobs/get/accepted$aws/things/thingName/jobs/get/rejected를 게시합니다. 그러나 클라이언트가 메시지를 수신하려면 메시지를 수신 대기해야 합니다. 자세한 내용은 작업 API 메시지에 대한 참고 사항을 참조하세요.

응답 페이로드:

{ "inProgressJobs" : [ JobExecutionSummary ... ], "queuedJobs" : [ JobExecutionSummary ... ], "timestamp" : 1489096425069, "clientToken" : "client-001" }

여기서 inProgressJobsqueuedJobs에서는 상태가 IN_PROGRESS 또는 QUEUEDJobExecutionSummary 객체 목록을 반환합니다.

사물의 다음 번 대기 중 작업 실행을 가져오고 시작합니다(IN_PROGRESS 또는 QUEUED 상태).

  • 상태가 IN_PROGRESS인 모든 작업 실행이 먼저 반환됩니다.

  • 작업 실행이 대기열에 추가된 순서대로 반환됩니다. 작업의 대상 그룹에 사물이 추가 또는 제거되면 새 작업 실행의 롤아웃 순서를 기존 작업 실행과 비교하여 확인하세요.

  • 다음 대기 중인 작업 실행이 QUEUED 상태이면, 상태가 IN_PROGRESS로 바뀌고 작업 실행의 상태 세부 정보가 지정한 대로 설정됩니다.

  • 다음 보류 중인 작업 실행이 이미 IN_PROGRESS 상태이면 상태 세부 정보가 바뀌지 않습니다.

  • 보류 중인 작업 실행이 없으면 응답에 execution 필드가 포함되지 않습니다.

  • 선택적으로 stepTimeoutInMinutes 속성에 대한 값을 설정하여 단계 타이머를 생성할 수 있습니다. UpdateJobExecution를 실행하여 이 속성 값을 업데이트하지 않은 경우 단계 타이머가 만료할 때 작업 실행이 시간 초과됩니다.

이 API를 호출하려면 $aws/things/thingName/jobs/start-next 주제에 메시지를 게시합니다.

요청 페이로드:

{ "statusDetails": { "string": "job-execution-state" ... }, "stepTimeoutInMinutes": long, "clientToken": "string" }
statusDetails

작업 실행 상태를 설명하는 이름-값 페어의 모음입니다. 지정하지 않으면 statusDetails가 바뀌지 않습니다.

stepTimeOutInMinutes

이 디바이스가 이 작업 실행을 마쳐야 하는 시간을 지정합니다. 이 타이머가 완료하기 전에 또는 타이머가 재설정되면(UpdateJobExecution를 호출하고, 상태를 IN_PROGRESS에 설정하고, 새로운 제한 시간 값을 필드 stepTimeoutInMinutes에 지정하여) 작업 실행 상태는 TIMED_OUT로 설정됩니다. 이 시간 초과를 설정해도 작업이 생성되었을 때(CreateJob 필드를 사용하는timeoutConfig) 지정했을 수도 있는 이 작업 실행 시간 초과에는 영향을 주지 않는다는 점을 유의하세요.

메시지 브로커는 특정 구독 없이도 $aws/things/thingName/jobs/start-next/accepted$aws/things/thingName/jobs/start-next/rejected를 게시합니다. 그러나 클라이언트가 메시지를 수신하려면 메시지를 수신 대기해야 합니다. 자세한 내용은 작업 API 메시지에 대한 참고 사항을 참조하세요.

응답 페이로드:

{ "execution" : JobExecutionData, "timestamp" : timestamp, "clientToken" : "string" }

여기서 executionJobExecution 객체입니다. 예:

{ "execution" : { "jobId" : "022", "thingName" : "MyThing", "jobDocument" : "< contents of job document >", "status" : "IN_PROGRESS", "queuedAt" : 1489096123309, "lastUpdatedAt" : 1489096123309, "versionNumber" : 1, "executionNumber" : 1234567890 }, "clientToken" : "client-1", "timestamp" : 1489088524284, }

작업 실행에 대한 세부 정보를 가져옵니다.

jobId$next로 설정하여 다음 대기 중인(IN_PROGRESS 또는 QUEUED 상태) 사물의 작업 실행을 반환할 수 있습니다.

이 API를 호출하려면 $aws/things/thingName/jobs/jobId/get 주제에 메시지를 게시합니다.

요청 페이로드:

{ "jobId" : "022", "thingName" : "MyThing", "executionNumber": long, "includeJobDocument": boolean, "clientToken": "string" }
thingName

디바이스와 연결된 사물의 이름입니다.

jobId

작업 생성 시 할당한 고유 식별자입니다.

또는 $next를 사용하여 다음 대기 중인(IN_PROGRESS 또는 QUEUED 상태) 사물의 작업 실행을 반환할 수 있습니다. 이 경우에는 상태가 IN_PROGRESS인 모든 작업 실행이 먼저 반환됩니다. 작업 실행이 생성된 순서대로 반환됩니다.

executionNumber

(선택 사항) 디바이스에서 작업 실행을 식별하기 위한 숫자입니다. 지정하지 않으면 최신 작업 실행이 반환됩니다.

includeJobDocument

(선택 사항) false로 설정하지 않을 경우 응답에 작업 문서가 포함됩니다. 기본값은 true입니다.

메시지 브로커는 특정 구독 없이도 $aws/things/thingName/jobs/jobId/get/accepted$aws/things/thingName/jobs/jobId/get/rejected를 게시합니다. 그러나 클라이언트가 메시지를 수신하려면 메시지를 수신 대기해야 합니다. 자세한 내용은 작업 API 메시지에 대한 참고 사항을 참조하세요.

응답 페이로드:

{ "execution" : JobExecutionData, "timestamp": "timestamp", "clientToken": "string" }

여기서 executionJobExecution 객체입니다.

작업 실행의 상태를 업데이트합니다. stepTimeoutInMinutes 속성에 대한 값을 설정하여 단계 타이머를 선택적으로 추가할 수 있습니다. UpdateJobExecution를 다시 실행하여 이 속성 값을 업데이트하지 않은 경우 단계 타이머가 만료할 때 작업 실행이 시간 초과됩니다.

이 API를 호출하려면 $aws/things/thingName/jobs/jobId/update 주제에 메시지를 게시합니다.

요청 페이로드:

{ "status": "job-execution-state", "statusDetails": { "string": "string" ... }, "expectedVersion": "number", "executionNumber": long, "includeJobExecutionState": boolean, "includeJobDocument": boolean, "stepTimeoutInMinutes": long, "clientToken": "string" }
status

작업 실행의 새 상태(IN_PROGRESS, FAILED, SUCCEEDED 또는 REJECTED). 이 명령은 업데이트할 때마다 지정해야 합니다.

statusDetails

작업 실행 상태를 설명하는 이름-값 페어의 모음입니다. 지정하지 않으면 statusDetails가 바뀌지 않습니다.

expectedVersion

예상되는 현재 작업 실행 버전입니다. 작업 실행은 업데이트할 때마다 버전이 일정하게 증가합니다. AWS IoT 작업 서비스에 저장된 작업 실행 버전이 일치하지 않으면 VersionMismatch 오류가 발생하여 업데이트가 거부됩니다. 현재 작업 실행 상태 데이터가 포함된 ErrorResponse도 반환됩니다. (이러한 경우에는 작업 실행 상태에 대한 데이터를 가져오기 위해 DescribeJobExecution 요청을 별도로 실행할 필요가 없습니다)

executionNumber

(선택 사항) 디바이스에서 작업 실행을 식별하기 위한 숫자입니다. 지정하지 않으면 최신 작업 실행이 사용됩니다.

includeJobExecutionState

(선택 사항) 이 명령을 추가하여 true로 설정하면 응답에 JobExecutionState 필드가 포함됩니다. 기본값은 false입니다.

includeJobDocument

(선택 사항) 이 명령을 추가하여 true로 설정하면 응답에 JobDocument 필드가 포함됩니다. 기본값은 false입니다.

stepTimeoutInMinutes

이 디바이스가 이 작업 실행을 마쳐야 하는 시간을 지정합니다. 이 타이머가 만료되기 전에 또는 타이머가 재설정되기 전에 작업 실행 상태가 최종 상태로 설정되지 않으면 작업 실행 상태가 TIMED_OUT이 됩니다. 이 제한 시간을 설정 또는 재설정하더라도 작업을 생성했을 때 지정했을 수 있는 작업 실행 제한 시간은 바뀌지 않습니다.

메시지 브로커는 특정 구독 없이도 $aws/things/thingName/jobs/jobId/update/accepted$aws/things/thingName/jobs/jobId/update/rejected를 게시합니다. 그러나 클라이언트가 메시지를 수신하려면 메시지를 수신 대기해야 합니다. 자세한 내용은 작업 API 메시지에 대한 참고 사항을 참조하세요.

응답 페이로드:

{ "executionState": JobExecutionState, "jobDocument": "string", "timestamp": timestamp, "clientToken": "string" }
executionState

JobExecutionState 객체입니다.

jobDocument

작업 문서 객체.

timestamp

메시지가 전송된 Epoch 이후 경과 시간(초)입니다.

clientToken

요청과 응답의 연관성을 나타낼 때 사용하는 클라이언트 토큰입니다.

MQTT 프로토콜을 사용하는 경우 다음 업데이트를 수행할 수도 있습니다.

대기 중인 사물의 작업 실행 목록에 작업 실행이 추가되거나 제거될 때마다 전송됩니다.

다음 주제를 사용합니다.

$aws/things/thingName/jobs/notify

메시지 페이로드:

{ "jobs" : { "JobExecutionState": [ JobExecutionSummary ... ] }, "timestamp": timestamp }

jobId $next를 사용하는 DescribeJobExecution에서 정의한 바와 같이 대기 중인 사물의 작업 실행 목록에서 다음 작업 실행에 변경 사항이 있을 때마다 전송됩니다. 다음 작업의 실행 세부 정보가 변경될 때는 전송되지 않으며, 오직 jobId $next를 사용한 DescribeJobExecution에서 반환되는 다음 작업이 변경되었을 때만 전송됩니다. 예들 들어 작업 실행 J1과 J2가 QUEUED 상태라고 가정하겠습니다. J1은 대기 중인 작업 실행 목록에서 다음 작업 실행입니다. 이때 J1의 상태는 아무런 변화가 없는데 J2의 상태가 IN_PROGRESS로 바뀐다면 이 알림 메시지가 J2의 세부 정보와 함께 전송됩니다.

다음 주제를 사용합니다.

$aws/things/thingName/jobs/notify-next

메시지 페이로드:

{ "execution" : JobExecution, "timestamp": timestamp, }