기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: 디바이스 SDK 설치 및 디바이스 섀도우용 샘플 애플리케이션 실행
이 섹션에서는 필요한 소프트웨어와 AWS IoT Device SDK for Python을 설치하고 shadow.py
샘플 애플리케이션을 실행하여 섀도우 문서를 편집하고 섀도우의 상태를 제어하는 방법을 보여줍니다.
이 자습서에서는 다음을 수행하는 방법을 알아봅니다.
-
설치된 소프트웨어와 AWS IoT Device SDK for Python을 사용하여 샘플 앱을 실행합니다.
-
샘플 앱을 사용하여 값을 입력하면 AWS IoT 콘솔에 원하는 값이 게시되도록 하는 방법을 알아봅니다.
-
shadow.py
샘플 앱과 MQTT 프로토콜을 사용하여 섀도우 상태를 업데이트하는 방법을 검토합니다.
이 자습서를 실행하기 전에 다음을 수행합니다.
AWS 계정 설정, Raspberry Pi 디바이스 구성, 디바이스 섀도우 서비스의 MQTT 예약 주제를 게시하고 구독할 수 있는 권한을 디바이스에 부여하는 AWS IoT 사물 및 정책 생성 등이 완료되어 있어야 합니다. 자세한 내용은 튜토리얼: 섀도우 애플리케이션 실행을 위해 Raspberry Pi 준비 단원을 참조하세요.
Git, Python 및 AWS IoT Device SDK for Python도 설치되어 있어야 합니다. 이 자습서는 자습서 Raspberry Pi 또는 다른 디바이스 연결에 제공된 개념을 기반으로 합니다. 해당 자습서를 시도하지 않은 경우 해당 자습서에 설명된 단계에 따라 인증서 파일 및 Device SDK를 설치한 다음 이 자습서로 돌아와서 shadow.py
샘플 앱을 실행하는 것이 좋습니다.
이 자습서에서 배울 내용은 다음과 같습니다.
이 자습서는 완료하는 데 약 20분이 소요됩니다.
1단계: shadow.py 샘플 앱 실행
shadow.py
샘플 앱을 실행하기 전에 설치한 인증서 파일의 이름과 위치 외에 다음 정보가 필요합니다.
파라미터 |
값을 찾을 수 있는 위치 |
---|---|
your-iot-thing-name |
이전에 2단계: 사물 리소스를 만들고 정책을 사물에 연결에서 생성한 AWS IoT 사물의 이름입니다. 이 값을 찾으려면 AWS IoT 콘솔 |
your-iot-endpoint |
|
샘플 앱 설치 및 실행
-
샘플 앱 디렉터리로 이동합니다.
cd ~/aws-iot-device-sdk-python-v2/samples
-
명령줄 창에서 표시된 대로
your-iot-endpoint
및your-iot-thing-name
을 바꾸고 이 명령을 실행합니다.python3 shadow.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint
your-iot-endpoint
--thing_nameyour-iot-thing-name
-
샘플 앱에서 다음 사항을 확인합니다.
-
사용자 계정의 AWS IoT 서비스에 연결합니다.
-
Delta
이벤트와Update
및Get
응답을 구독합니다. -
터미널에 원하는 값을 입력하라는 메시지가 표시됩니다.
-
다음과 유사한 출력이 표시됩니다.
Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'... Connected! Subscribing to Delta events... Subscribing to Update responses... Subscribing to Get responses... Requesting current shadow state... Launching thread to read user input... Finished getting initial shadow state. Shadow contains reported value 'off'. Enter desired value:
-
참고
shadow.py
샘플 앱을 실행하는 데 문제가 있는 경우 3단계: shadow.py 샘플 앱 문제 해결을(를) 검토합니다. 문제를 해결하는 데 도움이 될 수 있는 추가 정보를 얻으려면 명령줄에 --verbosity debug
파라미터를 추가하여 샘플 앱이 수행 중인 작업에 대한 자세한 메시지를 표시하도록 합니다.
섀도우 문서에서 값을 입력하고 업데이트를 관찰합니다.
터미널에 값을 입력하여 desired
값을 업데이트합니다. 이는 reported
값도 업데이트합니다. 터미널에 색상 yellow
를 입력한다고 가정합니다. reported
값도 yellow
색상으로 업데이트됩니다. 다음은 터미널에 표시되는 메시지를 보여줍니다.
Enter desired value: yellow Changed local shadow value to 'yellow'. Updating reported shadow value to 'yellow'... Update request published. Finished updating reported shadow value to 'yellow'.
이 업데이트 요청을 게시하면 AWS IoT가 사물 리소스에 대한 기본 클래식 섀도우를 생성합니다. 생성한 사물 리소스(예: My_light_bulb
)에 대한 섀도우 문서를 확인하여 AWS IoT 콘솔에서 reported
및 desired
값에 게시한 업데이트 요청을 관찰할 수 있습니다. 섀도우 문서에서 업데이트를 보려면:
-
AWS IoT 콘솔에서 관리(Manage)를 선택한 다음 사물(Things)을 선택합니다.
-
표시된 사물 목록에서 생성한 사물을 선택하고 섀도우(Shadows)를 선택한 다음 클래식 섀도우(Classic Shadow)를 선택합니다.
섀도우 문서는 다음과 유사해야 하며, yellow
색상으로 설정된 reported
및 desired
값을 보여줍니다. 이 값들은 문서의 섀도우 상태 섹션에 나와 있습니다.
{ "desired": { "welcome": "aws-iot", "color": "yellow" }, "reported": { "welcome": "aws-iot", "color": "yellow" } }
타임스탬프 정보와 요청 버전 번호가 포함된 메타데이터 섹션도 표시됩니다.
상태 문서 버전을 사용하면 업데이트하는 디바이스 섀도우 문서가 최신 버전인지 확인할 수 있습니다. 다른 업데이트 요청을 전송하면 버전 번호가 1씩 증가합니다. 업데이트 요청에 버전을 입력하면 상태 문서의 현재 버전이 입력된 버전과 일치하지 않을 경우 서비스가 HTTP 409 충돌 응답 코드와 함께 요청을 거부합니다.
{ "metadata": { "desired": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620156893 } }, "reported": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620156893 } } }, "version": 10 }
섀도우 문서에 대해 자세히 알아보고 상태 정보의 변경 사항을 관찰하려면 이 자습서의 4단계: 결과 및 다음 단계 검토 섹션에 설명된 대로 다음 자습서 자습서: 샘플 앱 및 MQTT 테스트 클라이언트를 사용하여 디바이스 섀도우와 상호 작용(으)로 진행하세요. 선택적으로 다음 섹션에서 shadow.py
샘플 코드 및 이 코드가 MQTT 프로토콜을 사용하는 방법에 대해 알아볼 수도 있습니다.
2단계: shadow.py 디바이스 SDK 샘플 앱 검토
이 섹션에서는 이 자습서에 사용된 AWS IoT Device SDK v2 for Python의 shadow.py
샘플 앱을 검토합니다. 여기에서는 MQTT 및 MQTT over WSS 프로토콜를 사용하여 AWS IoT Core에 연결하는 방법을 검토합니다. AWS 공통 런타임(AWS CRT)
이 자습서에서는 MQTT 및 MQTT over WSS를 사용하지만 AWS IoT는 HTTPS 요청을 게시하는 디바이스를 지원합니다. 디바이스에서 HTTP 메시지를 전송하는 Python 프로그램의 예는 Python의 requests
라이브러리를 사용하는 HTTPS 코드 예를 참조하세요.
디바이스 통신에 사용할 프로토콜에 대한 정보를 바탕으로 결정을 내릴 수 있는 방법에 대한 자세한 내용은 디바이스 통신을 위한 애플리케이션 프로토콜 선택 단원을 검토하세요.
MQTT
shadow.py
샘플은 mqtt_connection_builder
mtls_from_path
(여기에 표시됨)를 호출해서 MQTT 프로토콜을 사용하여 AWS IoT Core와의 연결을 설정합니다. mtls_from_path
는 X.509 인증서와 TLS v1.2를 사용하여 디바이스를 인증합니다. AWS CRT 라이브러리는 해당 연결의 하위 수준 세부 정보를 처리합니다.
mqtt_connection = mqtt_connection_builder.mtls_from_path( endpoint=args.endpoint, cert_filepath=args.cert, pri_key_filepath=args.key, ca_filepath=args.ca_file, client_bootstrap=client_bootstrap, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
-
endpoint
는 명령줄에서 전달한 AWS IoT 엔드포인트이고client_id
는 AWS 리전에서 이 디바이스를 고유하게 식별하는 ID입니다. -
cert_filepath
,pri_key_filepath
및ca_filepath
는 디바이스의 인증서 및 프라이빗 키 파일과 루트 CA 파일에 대한 경로입니다. -
client_bootstrap
은 소켓 통신 활동을 처리하는 공통 런타임 객체이며mqtt_connection_builder.mtls_from_path
를 호출하기 전에 인스턴스화됩니다. -
on_connection_interrupted
및on_connection_resumed
는 디바이스의 연결이 중단되었다가 재개될 때 호출하는 콜백 함수입니다. -
clean_session
은 새로운 영구 세션을 시작할지 또는 존재하는 경우 기존 세션에 다시 연결할지 여부입니다.keep_alive_secs
는CONNECT
요청에서 전송할 연결 유지 값(초)입니다. 이 간격으로 ping이 자동으로 전송됩니다. 서버는 이 값의 1.5배 후에 ping을 수신하지 않으면 연결이 끊어지는 것으로 가정합니다.
shadow.py
샘플은 또한 mqtt_connection_builder
websockets_with_default_aws_signing
을 호출하여 WSS를 통해 MQTT 프로토콜을 사용하여 AWS IoT Core와의 연결을 설정합니다. MQTT over WSS는 MQTT와 동일한 파라미터를 사용하며 다음과 같은 추가 파라미터를 사용합니다.
-
region
은 서명 V4 인증에 사용되는 AWS 서명 리전이고credentials_provider
는 인증에 사용하기 위해 제공된 AWS 자격 증명입니다. 리전은 명령줄에서 전달되고credentials_provider
객체는mqtt_connection_builder.websockets_with_default_aws_signing
을 호출하기 직전에 인스턴스화됩니다. -
websocket_proxy_options
는 프록시 호스트를 사용하는 경우 HTTP 프록시 옵션입니다.shadow.py
샘플 앱에서 이 값은mqtt_connection_builder.websockets_with_default_aws_signing
을 호출하기 직전에 인스턴스화됩니다.
섀도우 주제 및 이벤트 구독
shadow.py
샘플은 연결을 설정하려고 시도하고 완전히 연결될 때까지 기다립니다. 연결되어 있지 않으면 명령이 대기열에 저장됩니다. 연결되면 샘플은 델타 이벤트를 구독하고 메시지를 업데이트하고 가져오고 서비스 품질(QoS) 수준이 1(mqtt.QoS.AT_LEAST_ONCE
)인 메시지를 게시합니다.
디바이스가 QoS 수준 1의 메시지를 구독하면 메시지 브로커는 디바이스로 전송할 수 있을 때까지 디바이스가 구독한 메시지를 저장합니다. 메시지 브로커는 디바이스로부터 PUBACK
응답을 받을 때까지 메시지를 다시 전송합니다.
MQTT 프로토콜에 대한 자세한 내용은 MQTT 프로토콜 검토 및 MQTT 단원을 참조하세요.
이 자습서에서 사용되는 MQTT, MQTT over WSS, 영구 세션 및 QoS 수준에 대한 자세한 내용은 pubsub.py Device SDK 샘플 앱 검토 단원을 참조하세요.
3단계: shadow.py
샘플 앱 문제 해결
shadow.py
샘플 앱을 실행하면 터미널에 일부 메시지가 표시되고 desired
값을 입력하라는 메시지가 표시되어야 합니다. 프로그램에서 오류가 발생한 경우 오류를 디버깅하려면 먼저 시스템에 올바른 명령을 실행했는지 여부를 확인할 수 있습니다.
경우에 따라 오류 메시지는 연결 문제를 나타내며 Host name was invalid for dns resolution
또는 Connection was
closed unexpectedly
와 유사하게 표시될 수 있습니다. 이 경우 확인할 수 있는 사항은 다음과 같습니다.
-
명령에서 엔드포인트 주소 확인
샘플 앱을 실행하기 위해 입력한 명령의
endpoint
인수(예:a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com
)를 검토하고 AWS IoT 콘솔에서 이 값을 확인합니다.올바른 값을 사용했는지 확인하려면 다음과 같이 하세요.
-
AWS IoT 콘솔에서 관리(Manage)를 선택한 다음 사물(Things)을 선택합니다.
-
샘플 앱에 대해 만든 사물(예: My_light_bulb)을 선택한 다음 상호 작용(Interact)을 선택합니다.
사물 세부 정보 페이지의 HTTPS 섹션에 엔드포인트가 표시됩니다. 또한
This thing already appears to be connected.
와 같은 메시지가 표시됩니다. -
-
인증서 활성화 확인
인증서는 AWS IoT Core로 디바이스를 인증합니다.
인증서가 활성 상태인지 확인하려면 다음과 같이 하세요.
-
AWS IoT 콘솔에서 관리(Manage)를 선택한 다음 사물(Things)을 선택합니다.
-
샘플 앱에 대해 만든 사물(예: My_light_bulb)를 선택한 다음 보안(Security)을 선택합니다.
-
인증서를 선택하고 인증서의 세부 정보 페이지에서 인증서 선택을 선택한 후 인증서의 세부 정보 페이지에서 작업(Actions)을 선택합니다.
드롭다운 목록에서 활성화(Activate)를 사용할 수 없고 비활성화(Deactivate)만 선택할 수 있는 경우 인증서가 활성화된 것입니다. 그렇지 않은 경우 활성화(Activate)를 선택하고 샘플 프로그램을 다시 실행하세요.
그래도 프로그램이 실행되지 않으면
certs
폴더의 인증서 파일 이름을 확인합니다. -
-
사물 리소스에 연결된 정책 확인
인증서가 디바이스를 인증하는 동안 AWS IoT 정책은 디바이스가 MQTT 예약 주제 구독 또는 게시와 같은 AWS IoT 작업을 수행하도록 허용합니다.
올바른 정책이 연결되어 있는지 확인하려면 다음과 같이 하세요.
-
앞에서 설명한 대로 인증서를 찾은 다음 정책(Policies)을 선택합니다.
-
표시된 정책을 선택하고, MQTT 예약 주제를 게시하고 구독할 수 있는 권한을 디바이스에 부여하는
connect
,subscribe
,receive
및publish
작업을 설명하는지 확인하세요.샘플 정책은 1단계: 디바이스 섀도우에 대한 AWS IoT 정책 생성 단원을 참조하세요.
AWS IoT에 연결하는 데 문제가 있음을 나타내는 오류 메시지가 표시되면 정책에 사용 중인 권한 때문일 수 있습니다. 이 경우 AWS IoT 리소스에 대한 전체 액세스를 제공하는 정책으로 시작한 다음 샘플 프로그램을 다시 실행하는 것이 좋습니다. 현재 정책을 편집하거나 현재 정책을 선택하고 분리(Detach)를 선택한 다음 전체 액세스 권한을 제공하는 다른 정책을 생성하여 사물 리소스에 연결할 수 있습니다. 나중에 프로그램을 실행하는 데 필요한 작업 및 정책으로만 정책을 제한할 수 있습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:*" ], "Resource": "*" } ] }
-
-
Device SDK 설치 확인
그래도 프로그램이 실행되지 않으면 Device SDK를 다시 설치하여 SDK 설치가 올바르게 완료되었는지 확인할 수 있습니다.
4단계: 결과 및 다음 단계 검토
이 자습서에서는 다음을 수행하는 방법을 알아보았습니다.
-
필요한 소프트웨어, 도구 및 AWS IoT Device SDK for Python 설치.
-
샘플 앱
shadow.py
가 MQTT 프로토콜을 사용하여 섀도우의 현재 상태를 검색하고 업데이트하는 방식 이해. -
디바이스 섀도우용 샘플 앱을 실행하고 AWS IoT 콘솔에서 섀도우 문서에 대한 업데이트 관찰. 또한 프로그램을 실행할 때 문제를 해결하고 오류를 수정하는 방법을 배웠습니다.
다음 단계
이제 shadow.py
샘플 애플리케이션을 실행하고 디바이스 섀도우를 사용하여 상태를 제어할 수 있습니다. AWS IoT 콘솔에서 섀도우 문서에 대한 업데이트를 관찰하고 샘플 앱이 응답하는 델타 이벤트를 관찰할 수 있습니다. MQTT 테스트 클라이언트를 사용하여 예약된 섀도 주제를 구독하고 샘플 프로그램을 실행할 때 주제에서 수신한 메시지를 관찰할 수 있습니다. 이 자습서를 실행하는 방법에 대한 자세한 내용은 자습서: 샘플 앱 및 MQTT 테스트 클라이언트를 사용하여 디바이스 섀도우와 상호 작용 단원을 참조하세요.