기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: 샘플 앱 및 MQTT 테스트 클라이언트를 사용하여 디바이스 섀도우와 상호 작용
shadow.py
샘플 앱과 상호 작용하려면 터미널에 desired
값에 대한 값을 입력합니다. 예를 들어 신호등과 유사한 색상을 지정할 수 있으며 AWS IoT는 요청에 응답하고 보고된 값을 업데이트합니다.
이 자습서에서는 다음을 수행하는 방법을 알아봅니다.
-
shadow.py
샘플 앱을 사용하여 원하는 상태를 지정하고 섀도우의 현재 상태를 업데이트합니다. -
섀도우 문서를 편집하여 델타 이벤트를 관찰하고
shadow.py
샘플 앱이 델타 이벤트에 응답하는 방식 관찰. -
MQTT 테스트 클라이언트를 사용하여 섀도우 주제를 구독하고 샘플 프로그램 실행 시 업데이트를 관찰합니다.
이 자습서를 실행하기 전에 수행해야 할 사항:
AWS 계정 설정, Raspberry Pi 디바이스 구성, AWS IoT 사물 및 정책 생성. 또한 필수 소프트웨어, Device SDK, 인증서 파일을 설치하고 터미널에서 샘플 프로그램을 실행했어야 합니다. 자세한 내용은 이전 자습서 튜토리얼: 섀도우 애플리케이션 실행을 위해 Raspberry Pi 준비 및 1단계: shadow.py 샘플 앱 실행을(를) 참조하세요. 이들 자습서를 아직 완료하지 않았다면 완료해야 합니다.
이 자습서에서 배울 내용은 다음과 같습니다.
이 자습서는 완료하는 데 약 45분이 소요됩니다.
1단계: shadow.py
샘플 앱을 사용하여 원하는 값 및 보고된 값 업데이트
이전 자습서 1단계: shadow.py 샘플 앱 실행에서, 섹션 자습서: 디바이스 SDK 설치 및 디바이스 섀도우용 샘플 애플리케이션 실행에 설명된 대로 원하는 값을 입력할 때 AWS IoT 콘솔에서 섀도우 문서에 게시된 메시지를 관찰하는 방법을 배웠습니다.
이전 예에서 원하는 색상을 yellow
로 설정했습니다. 각 값을 입력하면 터미널에서 다른 desired
값을 입력하라는 메시지가 표시됩니다. 같은 값(yellow
)을 다시 입력하면 앱이 이를 인식하고 새 desired
값을 입력하라는 메시지를 표시합니다.
Enter desired value: yellow Local value is already 'yellow'. Enter desired value:
이제 색상 green
을 입력한다고 가정해 보겠습니다. AWS IoT는 요청에 응답하고 reported
값을 green
으로 업데이트합니다. 이런 방식으로 desired
상태가 reported
상태와 다를 때 업데이트가 발생하여 델타가 발생하게 됩니다.
shadow.py
샘플 앱이 디바이스 섀도우 상호 작용을 시뮬레이션하는 방식:
-
터미널에
desired
값(예:yellow
)을 입력하여 원하는 상태를 게시합니다. -
desired
상태가reported
상태(예:green
색상)와 다르기 때문에 델타가 발생하고 델타를 구독하는 앱이 이 메시지를 수신합니다. -
앱은 메시지에 응답하고 상태를
desired
값인yellow
로 업데이트합니다. -
그런 다음 앱은 디바이스 상태
yellow
의 새로 보고된 값으로 업데이트 메시지를 게시합니다.
다음은 업데이트 요청이 게시되는 방식을 보여주는, 터미널에 표시되는 메시지입니다.
Enter desired value: green Changed local shadow value to 'green'. Updating reported shadow value to 'green'... Update request published. Finished updating reported shadow value to 'green'.
AWS IoT 콘솔에서 섀도우 문서는 reported
및 desired
필드 모두에 대해 업데이트된 값을 green
으로 반영하고 버전 번호는 1씩 증가합니다. 예를 들어 이전 버전 번호가 10으로 표시된 경우 현재 버전 번호는 11로 표시됩니다.
참고
섀도우를 삭제해도 버전 번호가 0으로 재설정되지는 않습니다. 업데이트 요청을 게시하거나 동일한 이름의 다른 섀도우를 만들 때 섀도우 버전이 1씩 증가하는 것을 볼 수 있습니다.
델타 이벤트를 관찰하기 위해 섀도우 문서 편집
shadow.py
샘플 앱도 delta
이벤트를 구독하고 desired
값이 변경되면 응답합니다. 예를 들어 desired
값을 red
색상으로 변경할 수 있습니다. 이렇게 하려면 AWS IoT 콘솔에서 편집(Edit)을 클릭하여 섀도우 문서를 편집한 다음 JSON에서 desired
값을 red
로 설정하고 reported
값을 green
으로 유지합니다. 변경 사항을 저장하기 전에 Raspberry Pi에서 터미널을 열어 두면 변경 사항이 발생할 때 터미널에 메시지가 표시됩니다.
{ "desired": { "welcome": "aws-iot", "color": "red" }, "reported": { "welcome": "aws-iot", "color": "green" } }
새 값을 저장한 후 shadow.py
샘플 앱은 이 변경에 응답하고 델타를 나타내는 메시지를 터미널에 표시합니다. 그러면 desired
값을 입력하라는 프롬프트 아래에 다음 메시지가 표시됩니다.
Enter desired value: Received shadow delta event. Delta reports that desired value is 'red'. Changing local value... Changed local shadow value to 'red'. Updating reported shadow value to 'red'... Finished updating reported shadow value to 'red'. Enter desired value: Update request published. Finished updating reported shadow value to 'red'.
2단계: MQTT 테스트 클라이언트에서 shadow.py
샘플 앱의 메시지 보기
AWS IoT 콘솔에서 MQTT 테스트 클라이언트를 사용하여 AWS 계정에서 전달되는 MQTT 메시지를 모니터링할 수 있습니다. 디바이스 섀도우 서비스에서 사용하는 예약된 MQTT 주제를 구독하면 샘플 앱을 실행할 때 주제에서 수신한 메시지를 관찰할 수 있습니다.
MQTT 테스트 클라이언트를 아직 사용하지 않았다면 클라이언트를 AWS IoT MQTT 사용하여 MQTT 메시지 보기를 검토할 수 있습니다. 이는 MQTT 메시지가 메시지 브로커를 통과할 때 해당 메시지를 보기 위해 AWS IoT 콘솔에서 MQTT 테스트 클라이언트를 사용하는 방법을 파악하는 데 도움이 됩니다.
-
MQTT 테스트 클라이언트 열기
MQTT 테스트 클라이언트의 구성을 잃지 않고 MQTT 주제에서 수신한 메시지를 관찰할 수 있도록 새 창에서 AWS IoT 콘솔의 MQTT 테스트 클라이언트
를 엽니다. MQTT 테스트 클라이언트는 콘솔의 다른 페이지로 이동하기 위해 나가면 구독 또는 메시지 로그를 유지하지 않습니다. 자습서의 이 섹션에서는 AWS IoT 사물의 섀도우 문서와 MQTT 테스트 클라이언트를 별도의 창에서 열어 디바이스 섀도우와의 상호 작용을 보다 쉽게 관찰할 수 있습니다. -
MQTT 예약 섀도우 주제 구독
MQTT 테스트 클라이언트를 사용하여 디바이스 섀도우의 MQTT 예약 주제 이름을 입력하고
shadow.py
샘플 앱 실행 시 업데이트를 수신하도록 구독할 수 있습니다. 주제를 구독하려면:AWS IoT 콘솔의 MQTT 테스트 클라이언트에서 주제 구독(Subscribe to a topic)을 선택합니다.
주제 필터(Topic filter) 섹션에 $aws/things/
thingname
/shadow/update/#을 입력합니다. 여기서thingname
은 이전에 생성한 사물 리소스의 이름(예:My_light_bulb
)입니다추가 구성 설정에 대한 기본값을 유지한 후 구독(Subscribe)을 선택합니다.
주제 구독에서 # 와일드카드를 사용하여 여러 MQTT 주제를 동시에 구독하고 디바이스와 섀도우 간에 교환되는 모든 메시지를 단일 창에서 관찰할 수 있습니다. 와일드카드 문자 및 해당 사용에 대한 자세한 내용은 MQTT 주제 단원을 참조하세요.
-
shadow.py
샘플 프로그램 실행 및 메시지 관찰Raspberry Pi의 명령줄 창에서 프로그램 연결을 끊었다면 샘플 앱을 다시 실행하고 AWS IoT 콘솔의 MQTT 테스트 클라이언트에서 메시지를 확인합니다.
-
다음 명령을 실행하여 샘플 프로그램을 다시 시작하세요.
your-iot-thing-name
및your-iot-endpoint
를 이전에 생성한 AWS IoT 사물의 이름(예:My_light_bulb
) 및 디바이스와 상호 작용할 엔드포인트로 바꿉니다.cd ~/aws-iot-device-sdk-python-v2/samples 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
shadow.py
샘플 앱이 실행되고 현재 섀도우 상태가 검색됩니다. 섀도우를 삭제했거나 현재 상태를 지운 경우 프로그램은 현재 값을off
로 설정한 다음desired
값을 입력하라는 메시지를 표시합니다.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 document lacks 'color' property. Setting defaults... Changed local shadow value to 'off'. Updating reported shadow value to 'off'... Update request published. Finished updating reported shadow value to 'off'... Enter desired value:
반면에 프로그램이 실행 중이었고 다시 시작하면 터미널에 최신 색상 값이 보고됩니다. MQTT 테스트 클라이언트에서 $aws/things/
thingname
/shadow/get 및 $aws/things/thingname
/shadow/get/accepted 주제에 대한 업데이트를 볼 수 있습니다.보고된 최신 색상이
green
이라고 가정합니다. 다음은 $aws/things/thingname
/shadow/get/accepted JSON 파일의 내용을 보여줍니다.{ "state": { "desired": { "welcome": "aws-iot", "color": "green" }, "reported": { "welcome": "aws-iot", "color": "green" } }, "metadata": { "desired": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620161643 } }, "reported": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620161643 } } }, "version": 10, "timestamp": 1620173908 }
-
터미널에
desired
값(예:yellow
)을 입력합니다.shadow.py
샘플 앱은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 콘솔의 MQTT 테스트 클라이언트(MQTT test client)에서 구독(Subscriptions) 아래에 다음 주제가 메시지를 수신한 것이 표시됩니다.
-
$aws/things/
thingname
/shadow/update:desired
및updated
값이 모두yellow
색상으로 변경되었음을 보여줍니다. -
$aws/things/
thingname
/shadow/update/accepted:desired
및reported
상태의 현재 값과 해당 메타데이터 및 버전 정보를 보여줍니다. -
$aws/things/
thingname
/shadow/update/documents:desired
및reported
상태의 이전 및 현재 값과 해당 메타데이터 및 버전 정보를 보여줍니다.
$aws/things/
thingname
/shadow/update/documents 문서에도 다른 두 주제에 포함된 정보가 있으므로 이를 검토하여 상태 정보를 볼 수 있습니다. 이전 상태는green
으로 설정된 보고 값, 해당 메타데이터 및 버전 정보, 보고 값이yellow
로 업데이트된 현재 상태를 보여줍니다.{ "previous": { "state": { "desired": { "welcome": "aws-iot", "color": "green" }, "reported": { "welcome": "aws-iot", "color": "green" } }, "metadata": { "desired": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297898 } }, "reported": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297898 } } }, "version": 10 }, "current": { "state": { "desired": { "welcome": "aws-iot", "color": "yellow" }, "reported": { "welcome": "aws-iot", "color": "yellow" } }, "metadata": { "desired": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297904 } }, "reported": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297904 } } }, "version": 11 }, "timestamp": 1617297904 }
-
-
이제 다른
desired
값을 입력하면 이러한 주제에서 수신한reported
값 및 메시지 업데이트에 대한 추가 변경 사항을 볼 수 있습니다. 버전 번호도 1씩 증가합니다. 예를 들어 값green
을 입력하면 이전 상태는 값yellow
를 보고하고 현재 상태는 값green
을 보고합니다.
-
-
델타 이벤트를 관찰하기 위해 섀도우 문서 편집
델타 주제의 변경 내용을 관찰하려면 AWS IoT 콘솔의 섀도우 문서를 편집합니다. 예를 들어
desired
값을red
색상으로 변경할 수 있습니다. 이렇게 하려면 AWS IoT 콘솔에서 편집(Edit)을 선택한 다음 JSON에서desired
값을 빨간색으로 설정하고reported
값은green
으로 유지합니다. 변경 사항을 저장하기 전에 터미널에 보고된 델타 메시지가 표시되므로 터미널을 열어 두세요.{ "desired": { "welcome": "aws-iot", "color": "red" }, "reported": { "welcome": "aws-iot", "color": "green" } }
shadow.py
샘플 앱은 이 변경에 응답하고 델타를 나타내는 메시지를 터미널에 표시합니다. MQTT 테스트 클라이언트에서update
주제는desired
및reported
값의 변경 사항을 보여주는 메시지를 수신합니다.또한 $aws/things/
thingname
/shadow/update/delta 주제에서 메시지를 수신한 것을 볼 수 있습니다. 메시지를 보려면 구독(Subscriptions) 아래에 나열된 이 주제를 선택하세요.{ "version": 13, "timestamp": 1617318480, "state": { "color": "red" }, "metadata": { "color": { "timestamp": 1617318480 } } }
3단계: 디바이스 섀도우 상호 작용 오류 문제 해결
섀도우 샘플 앱을 실행할 때 디바이스 섀도우 서비스와의 상호 작용을 관찰하는 데 문제가 발생할 수 있습니다.
프로그램이 성공적으로 실행되어 desired
값을 입력하라는 메시지가 표시되는 경우 앞에서 설명한 대로 섀도우 문서와 MQTT 테스트 클라이언트를 사용하여 디바이스 섀도우 상호 작용을 관찰할 수 있어야 합니다. 그러나 상호 작용이 표시되지 않는 경우 확인할 수 있는 몇 가지 사항은 다음과 같습니다.
-
AWS IoT 콘솔에서 사물 이름과 해당 섀도우 확인
섀도우 문서에 메시지가 표시되지 않으면 명령을 검토하고 AWS IoT 콘솔의 사물 이름과 일치하는지 확인하세요. 사물 리소스를 선택한 다음 섀도우(Shadows)를 선택하여 클래식 섀도우가 있는지 여부를 확인할 수도 있습니다. 이 자습서에서는 주로 클래식 섀도우와의 상호 작용에 중점을 둡니다.
또한 사용한 디바이스가 인터넷에 연결되어 있는지 확인할 수도 있습니다. AWS IoT 콘솔에서 이전에 생성한 사물을 선택한 다음 상호 작용(Interact)을 선택합니다. 사물 세부 정보 페이지에
This thing already appears to be connected.
와 같은 메시지가 표시됩니다. -
구독한 MQTT 예약 주제 확인
MQTT 테스트 클라이언트에 메시지가 표시되지 않으면 구독한 주제의 형식이 올바른지 확인합니다. MQTT 디바이스 섀도우 주제의 형식은 $aws/things/
thingname
/shadow/이며 섀도우에서 수행하려는 작업에 따라update
,get
또는delete
가 뒤따를 수 있습니다. 이 자습서에서는 $aws/things/thingname
/shadow/# 주제를 사용하므로 테스트 클라이언트의 주제 필터(Topic filter) 섹션에서 주제를 구독할 때 올바르게 입력했는지 확인하세요.주제 이름을 입력할 때
thingname
이 이전에 생성한 AWS IoT 사물의 이름과 동일한지 확인합니다. 또한 추가 MQTT 주제를 구독하여 업데이트가 성공적으로 수행되었는지 확인할 수 있습니다. 예를 들어 $aws/things/thingname
/shadow/update/rejected 주제를 구독하면 업데이트 요청이 실패할 때마다 메시지를 수신하여 연결 문제를 디버깅할 수 있습니다. 예약된 주제에 대한 자세한 내용은 Device Shadow MQTT 주제 및 섀도우 주제 단원을 참조하세요.
4단계: 결과 및 다음 단계 검토
이 자습서에서는 다음을 수행하는 방법을 알아보았습니다.
-
shadow.py
샘플 앱을 사용하여 원하는 상태를 지정하고 섀도우의 현재 상태 업데이트. -
섀도우 문서를 편집하여 델타 이벤트를 관찰하고
shadow.py
샘플 앱이 델타 이벤트에 응답하는 방식 관찰. -
MQTT 테스트 클라이언트를 사용하여 섀도우 주제를 구독하고 샘플 프로그램을 실행할 때 업데이트 관찰.
다음 단계
추가 MQTT 예약 주제를 구독하여 섀도우 애플리케이션에 대한 업데이트를 관찰할 수 있습니다. 예를 들어 $aws/things/thingname
/shadow/update/accepted 주제만 구독하는 경우 업데이트가 성공적으로 수행되었을 때 현재 상태 정보만 표시됩니다.
또한 추가 섀도우 주제를 구독하여 문제를 디버그하거나 디바이스 섀도우 상호 작용에 대해 자세히 알아보고 디바이스 섀도우 상호 작용과 관련된 문제를 디버그할 수도 있습니다. 자세한 내용은 섀도우 주제 및 Device Shadow MQTT 주제 단원을 참조하세요.
명명된 셰도우를 사용하거나 LED용 Raspberry Pi와 연결된 추가 하드웨어를 사용하여 애플리케이션을 확장하고 터미널에서 전송한 메시지를 사용하여 상태 변경을 관찰하도록 선택할 수도 있습니다.
디바이스 섀도우 서비스에 대한 자세한 내용과 디바이스, 앱 및 서비스에서 서비스를 사용하는 방법에 대한 자세한 내용은 AWS IoT Device Shadow 서비스, 디바이스에서 섀도우 사용 및 앱 및 서비스에서 섀도우 사용 단원을 참조하세요.