명령 개념 및 상태 - AWS IoT Core

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

명령 개념 및 상태

AWS IoT 명령을 사용하여 클라우드에서 연결된 디바이스로 지침을 보냅니다. 이 특성을 사용하는 방법:

  1. 디바이스에서 실행하는 데 필요한 구성이 포함된 페이로드로 명령을 생성합니다.

  2. 페이로드를 수신하고 작업을 수행할 대상 디바이스를 지정합니다.

  3. 대상 디바이스에서 명령을 실행하고 상태 정보를 검색합니다. 문제를 해결하려면 CloudWatch 로그를 참조하세요.

이 워크플로에 대한 자세한 내용은 상위 수준 명령 워크플로 섹션을 참조하세요.

명령 주요 개념

다음 주요 개념은 명령 기능을 이해하는 데 도움이 됩니다. 용어는이 설명서 전체에서 일관되게 사용됩니다.

  • 명령 - 디바이스 지침을 정의하는 재사용 가능한 템플릿

  • 실행 - 디바이스에서 실행되는 명령의 인스턴스

  • 사물 이름 - IoT 레지스트리에 등록된 디바이스의 식별자

  • 클라이언트 ID - 등록되지 않은 디바이스의 MQTT 식별자

  • 페이로드 - 디바이스로 전송된 명령 데이터

  • 주제 - 명령 통신을 위한 MQTT 채널

명령

명령은 클라우드에서 IoT 디바이스로 MQTT 메시지로 전송되는 지침입니다. 페이로드를 수신한 후 디바이스는 지침을 처리하고 구성 설정 수정, 센서 읽기 전송 또는 로그 업로드와 같은 해당 작업을 수행합니다. 그런 다음 디바이스는 결과를 클라우드로 반환하여 원격 모니터링 및 제어를 활성화합니다.

네임스페이스

명령을 생성할 때 해당 네임스페이스를 지정합니다. AWS IoT Device Management 명령의 경우 기본 AWS-IoT 네임스페이스를 사용하고 페이로드 또는 payloadTemplate 중 하나를 제공합니다. AWS IoT FleetWise 명령의 경우 AWS-IoT-FleetWise 네임스페이스를 사용합니다. 자세한 내용은 AWS IoT FleetWise 개발자 안내서원격 명령을 참조하세요.

페이로드

명령을 생성할 때 디바이스가 수행해야 하는 작업을 정의하는 정적 페이로드를 제공합니다. 페이로드는 지원되는 모든 형식을 사용할 수 있습니다. 디바이스가 페이로드를 올바르게 해석하도록 하려면 페이로드 형식 유형을 지정하는 것이 좋습니다. MQTT5 프로토콜을 사용하는 디바이스는 MQTT 표준을 따라 형식을 식별할 수 있습니다. JSON 또는 CBOR에 대한 형식 표시기는 명령 요청 주제에서 사용할 수 있습니다.

페이로드 템플릿

페이로드 템플릿은 사용자가 제공한 파라미터 값에 따라 런타임에 다른 페이로드를 생성하는 자리 표시자가 있는 명령 페이로드를 정의합니다. 예를 들어, 서로 다른 온도 값에 대해 별도의 페이로드를 생성하는 대신 온도 자리 표시자가 있는 하나의 템플릿을 생성하고 실행 중에 값을 지정합니다. 이렇게 하면 여러 개의 유사한 페이로드를 유지 관리할 수 없습니다.

대상 디바이스

명령을 실행하려면 사물 이름(에 등록된 디바이스의 경우 AWS IoT) 또는 MQTT 클라이언트 ID(등록되지 않은 디바이스의 경우)를 사용하여 대상 디바이스를 지정합니다. 클라이언트 ID는 디바이스를 연결하는 데 사용되는 MQTT 프로토콜에 정의된 고유 식별자입니다 AWS IoT. 자세한 내용은 대상 디바이스 고려 사항을 참조하세요.

명령 주제

명령을 실행하기 전에 디바이스는 명령 요청 주제를 구독해야 합니다. 명령을 실행하면 페이로드가이 주제의 디바이스로 전송됩니다. 실행 후 디바이스는 명령 응답 주제에 결과 및 상태를 게시합니다. 자세한 내용은 명령 주제 단원을 참조하십시오.

명령 실행

실행은 대상 디바이스에서 실행되는 명령의 인스턴스입니다. 실행을 시작하면 페이로드가 디바이스로 전송되고 고유한 실행 ID가 생성됩니다. 디바이스는 명령을 실행하고 진행 상황을 보고합니다 AWS IoT. 디바이스 측 로직은 예약된 주제에 대한 실행 동작 및 상태 보고를 결정합니다.

파라미터 값 조건

페이로드 템플릿으로 명령을 생성할 때 실행 전에 파라미터 값을 검증하는 값 조건을 정의합니다. 값 조건은 파라미터가 요구 사항을 충족하도록 하여 잘못된 실행을 방지합니다.

CommandParameterValue 유형별로 지원되는 연산자

숫자 유형(INTEGER, LONG, DOUBLE, UNSIGNEDLONG)
  • EQUALS - 값은 지정된 숫자와 같아야 합니다.

  • NOT_EQUALS - 값은 지정된 숫자와 같지 않아야 합니다.

  • GREATER_THAN - 값은 지정된 숫자보다 커야 합니다.

  • GREATER_THAN_EQUALS - 값은 지정된 숫자보다 크거나 같아야 합니다.

  • LESS_THAN - 값은 지정된 숫자보다 작아야 합니다.

  • LESS_THAN_EQUALS - 값은 지정된 숫자보다 작거나 같아야 합니다.

  • IN_RANGE - 값은 지정된 범위(포함) 내에 있어야 합니다.

  • NOT_IN_RANGE - 값이 지정된 범위(포함)를 벗어났어야 합니다.

  • IN_SET - 값은 지정된 숫자 중 하나와 일치해야 합니다.

  • NOT_IN_SET - 값은 지정된 숫자와 일치하지 않아야 합니다.

문자열 유형(STRING)
  • EQUALS - 값은 지정된 문자열과 같아야 합니다.

  • NOT_EQUALS - 값은 지정된 문자열과 같지 않아야 합니다.

  • IN_SET - 값은 지정된 문자열 중 하나와 일치해야 합니다.

  • NOT_IN_SET - 값은 지정된 문자열과 일치하지 않아야 합니다.

부울 유형
  • 값 조건은 지원되지 않습니다.

바이너리 유형
  • 값 조건은 지원되지 않습니다.

예: 온도 제어 명령

{ "commandId": "SetTemperature", "namespace": "AWS-IoT", "payloadTemplate": "{\"temperature\": \"${aws:iot:commandexecution::parameter:temperature}\"}", "parameters": [ { "name": "temperature", "type": "INTEGER", "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": { "numberRange": { "min": "60", "max": "80" } } } ] } ] }

이 예제에서 temperature 파라미터는 60~80(포함)이어야 합니다. 이 범위를 벗어나는 값이 있는 실행 요청은 검증에 실패합니다.

참고

값 조건은 StartCommandExecution API 호출 시 평가됩니다. 실패한 검증은 오류를 반환하고 실행 생성을 방지합니다.

파라미터 값 우선 순위 및 평가

페이로드 템플릿으로 명령 실행을 시작할 때 파라미터 값은 다음 우선 순위를 사용하여 확인됩니다.

  1. 실행 요청 파라미터 - StartCommandExecution 요청에 제공된 값이 가장 우선합니다.

  2. 명령 기본값 - 실행 요청에 파라미터가 제공되지 않은 경우 파라미터의 defaultValue가 사용됩니다.

  3. 값 없음 - 둘 다 제공되지 않으면 실행 요청을 생성하는 데 필요한 파라미터로 실행이 실패합니다.

값 조건은 실행 생성 전에 우선 순위에 대해 위에서 파생된 최종 파라미터 값에 대해 평가됩니다. 검증에 실패하면 실행 요청이 오류를 반환합니다.

예:를 사용한 SetTemperature 명령 defaultValue

{ "parameters": [ { "name": "temperature", "type": "INTEGER", "defaultValue": {"I": 72}, "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": {"numberRange": {"min": "60", "max": "80"}} } ] } ] }

실행을 시작할 때:

  • 요청에 "temperature": {"I": 75}를 입력하면 75가 사용됩니다.

  • 온도 파라미터를 생략하면 기본값 72가 사용됩니다.

  • 두 값 모두 범위 조건에 대해 검증됩니다[60,80]

명령 상태

의 명령은 사용 가능, 사용 중단됨 또는 삭제 보류 중의 세 가지 상태 중 하나일 AWS 계정 수 있습니다.

사용 가능

생성에 성공하면 명령은 사용 가능 상태이며 디바이스에서 실행할 수 있습니다.

Deprecated

더 이상 필요하지 않은 경우 사용 중단 명령을 표시합니다. 더 이상 사용되지 않는 명령은 새 실행을 시작할 수 없지만 보류 중인 실행은 계속 완료됩니다. 새 실행을 활성화하려면 명령을 사용 가능 상태로 복원합니다.

삭제 보류 중

삭제를 위해 명령을 표시하면 최대 제한 시간(기본값: 12시간)보다 오래 사용되지 않으면 자동으로 삭제됩니다. 이 작업은 영구적입니다. 제한 시간 미만 동안 더 이상 사용되지 않거나 더 이상 사용되지 않는 경우 명령은 삭제 보류 중 상태로 전환되고 제한 시간이 만료된 후 제거됩니다.

명령 실행 상태

대상 디바이스에서 실행을 시작하면 CREATED 상태가 되고 디바이스 보고서에 따라 다른 상태로 전환할 수 있습니다. 상태 정보를 검색하고 실행을 추적할 수 있습니다.

참고

디바이스에서 여러 명령을 동시에 실행할 수 있습니다. 동시성 제어를 사용하여 디바이스당 실행을 제한하고 오버로드를 방지합니다. 디바이스당 최대 동시 실행 수는 AWS IoT Device Management 명령 할당량을 참조하세요.

다음 표에는 실행 진행 상황에 따른 실행 상태와 전환이 나와 있습니다.

명령 실행 상태 및 소스
명령 실행 상태 디바이스/클라우드에 의한 시작 여부 터미널 실행 여부 허용된 상태 전환
CREATED 클라우드 아니요
  • IN_PROGRESS

  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

IN_PROGRESS 장치 아니요
  • IN_PROGRESS

  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

TIMED_OUT 디바이스 및 클라우드 아니요
  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

SUCCEEDED 장치 해당 사항 없음
FAILED 장치 해당 사항 없음
REJECTED 장치 해당 사항 없음

디바이스는 명령 예약 MQTT 주제를 사용하여 언제든지 상태 및 결과 업데이트를 게시할 수 있습니다. 추가 컨텍스트를 제공하기 위해 디바이스는 statusReason 객체에서 reasonCodereasonDescription 필드를 사용할 수 있습니다.

다음 다이어그램은 실행 상태 전환을 보여줍니다.

명령 실행 상태가 다양한 상태 간에 어떻게 전환되는지 보여주는 이미지입니다.
참고

가 제한 시간 내에 디바이스 응답을 AWS IoT 감지하지 못하면 재시도 및 상태 변경을 허용하는 TIMED_OUT 임시 상태로 설정됩니다. 디바이스가를 명시적으로 보고하는 경우 TIMED_OUT이는 더 이상 전환되지 않는 터미널 상태가 됩니다. 자세한 내용은 비터미널 명령 실행 단원을 참조하십시오.

다음 섹션에서는 터미널 및 비터미널 실행과 해당 상태에 대해 설명합니다.

비터미널 명령 실행

디바이스의 업데이트를 수락할 수 있는 경우 실행은 비터미널입니다. 비터미널 실행은 활성으로 간주됩니다. 다음 상태는 비터미널 상태입니다.

  • CREATED

    AWS IoT 콘솔에서 실행을 시작하거나 StartCommandExecution API를 사용하면 요청이 성공하면 상태가 로 변경됩니다CREATED. 이 상태에서 실행은 다른 비터미널 또는 터미널 상태로 전환할 수 있습니다.

  • IN_PROGRESS

    페이로드를 수신한 후 디바이스는 지침을 실행하고 지정된 작업을 수행하기 시작할 수 있습니다. 실행 중에 디바이스는 명령 응답 주제에 대한 응답을 게시하고 상태를 로 업데이트할 수 있습니다IN_PROGRESS. 에서 IN_PROGRESS실행은를 제외한 모든 터미널 또는 비터미널 상태로 전환할 수 있습니다CREATED.

    참고

    UpdateCommandExecution API는 IN_PROGRESS 상태로 여러 번 호출할 수 있습니다. statusReason 객체를 사용하여 추가 실행 세부 정보를 지정합니다.

  • TIMED_OUT

    클라우드와 디바이스 모두이 상태를 트리거할 수 있습니다. 다음과 같은 이유로 CREATED 또는 IN_PROGRESS 상태의 실행이 로 변경될 수 TIMED_OUT 있습니다.

    • 명령을 전송한 후 타이머가 시작됩니다. 디바이스가 지정된 기간 내에 응답하지 않으면 클라우드 상태가 로 변경됩니다TIMED_OUT. 이 경우 실행은 비터미널입니다.

    • 디바이스는 상태를 모든 터미널 상태로 재정의하거나 제한 시간을 보고하고 상태를 로 설정할 수 있습니다TIMED_OUT. 이 경우 상태는 로 유지TIMED_OUT되지만 StatusReason 객체 필드는 디바이스 정보에 따라 변경됩니다. 실행은 터미널이 됩니다.

    자세한 내용은 제한 시간 값 및 TIMED_OUT 명령 실행 상태 단원을 참조하십시오.

터미널 명령 실행

디바이스의 업데이트를 더 이상 수락하지 않으면 실행이 터미널이 됩니다. 다음 상태는 터미널 상태입니다. 실행은 CREATED, IN_PROGRESS또는와 같은 비터미널 상태에서 터미널 상태로 전환할 수 있습니다TIMED_OUT.

  • SUCCEEDED

    디바이스가 실행을 성공적으로 완료하면 명령 응답 주제에 대한 응답을 게시하고 상태를 로 업데이트할 수 있습니다SUCCEEDED.

  • FAILED

    디바이스가 실행을 완료하지 못하면 명령 응답 주제에 대한 응답을 게시하고 상태를 로 업데이트할 수 있습니다FAILED. statusReason 객체의 reasonCodereasonDescription 필드 또는 CloudWatch 로그를 사용하여 실패 문제를 해결합니다.

  • REJECTED

    디바이스가 유효하지 않거나 호환되지 않는 요청을 수신하면 상태로 UpdateCommandExecution API를 호출할 수 있습니다REJECTED. statusReason 객체의 reasonCodereasonDescription 필드 또는 CloudWatch 로그를 사용하여 문제를 해결합니다.