클라이언트 장치 통신 테스트 - AWS IoT Greengrass

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

클라이언트 장치 통신 테스트

클라이언트 장치는 AWS IoT Device SDK 를 사용하여 코어 장치를 검색, 연결 및 통신할 수 있습니다. 에서 Greengrass 검색 클라이언트를 사용하여 Greengrass 검색 API를 사용할 수 있습니다. Greengrass 검색 API는 클라이언트 장치가 연결할 수 있는 핵심 장치에 대한 정보를 반환합니다. AWS IoT Device SDK API 응답에는 연결할 MQTT 브로커 엔드포인트와 각 코어 디바이스의 ID를 확인하는 데 사용할 인증서가 포함됩니다. 그러면 클라이언트 디바이스가 코어 디바이스에 성공적으로 연결될 때까지 각 엔드포인트를 시도할 수 있습니다.

클라이언트 장치는 연결된 코어 장치만 검색할 수 있습니다. 클라이언트 장치와 코어 장치 간의 통신을 테스트하기 전에 클라이언트 장치를 코어 장치에 연결해야 합니다. 자세한 설명은 클라이언트 장치 연결 섹션을 참조하세요.

Greengrass 검색 API는 지정한 코어 디바이스 MQTT 브로커 엔드포인트를 반환합니다. IP 탐지기 구성 요소를 사용하여 이러한 엔드포인트를 관리하거나 각 코어 디바이스에 대해 수동으로 관리할 수 있습니다. 자세한 설명은 코어 디바이스 엔드포인트 관리 섹션을 참조하세요.

참고

Greengrass 검색 API를 사용하려면 클라이언트 장치에 권한이 있어야 합니다. greengrass:Discover 자세한 설명은 클라이언트 디바이스에 대한 최소 AWS IoT 정책 섹션을 참조하세요.

AWS IoT Device SDK는 여러 프로그래밍 언어로 제공됩니다. 자세한 내용은 AWS IoT Core 개발자 안내서AWS IoT 디바이스 SDK 섹션을 참조하세요.

테스트 통신 (Python)

이 섹션에서는 Python용 AWS IoT Device SDK v2의 Greengrass 검색 샘플을 사용하여 클라이언트 장치와 코어 장치 간의 통신을 테스트합니다.

중요

Python용 AWS IoT Device SDK v2를 사용하려면 기기에서 Python 3.6 이상을 실행해야 합니다.

통신을 테스트하려면 (Python의 경우 AWS IoT Device SDK v2)
  1. AWS IoT Device SDKv2용 Python을 AWS IoT 다운로드하여 클라이언트 장치로 연결할 사물에 설치합니다.

    클라이언트 기기에서 다음을 수행하십시오.

    1. AWS IoT Device SDKv2 for Python 저장소를 복제하여 다운로드하십시오.

      git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
    2. Python용 AWS IoT Device SDK v2를 설치합니다.

      python3 -m pip install --user ./aws-iot-device-sdk-python-v2
  2. Python용 AWS IoT Device SDK v2의 샘플 폴더로 변경합니다.

    cd aws-iot-device-sdk-python-v2/samples
  3. 샘플 Greengrass 검색 애플리케이션을 실행합니다. 이 애플리케이션에는 클라이언트 디바이스 사물 이름, 사용할 MQTT 주제 및 메시지, 연결을 인증하고 보호하는 인증서를 지정하는 인수가 필요합니다. 다음 예제에서는 주제에 Hello World 메시지를 보냅니다. clients/MyClientDevice1/hello/world

    • MyClientDevice1을 클라이언트 디바이스의 사물 이름으로 대체합니다.

    • ~/certs/ AmazonRoot ca1.pem을 클라이언트 디바이스의 Amazon 루트 CA 인증서 경로로 바꾸십시오.

    • ~/certs/device.pem.crt를 클라이언트 디바이스의 디바이스 인증서 경로로 바꾸십시오.

    • ~/certs/private.pem.key를 클라이언트 장치의 개인 키 파일 경로로 바꾸십시오.

    • us-east-1을 클라이언트 디바이스 및 코어 디바이스가 운영되는 지역으로 바꾸십시오. AWS

    python3 basic_discovery.py \\ --thing_name MyClientDevice1 \\ --topic 'clients/MyClientDevice1/hello/world' \\ --message 'Hello World!' \\ --ca_file ~/certs/AmazonRootCA1.pem \\ --cert ~/certs/device.pem.crt \\ --key ~/certs/private.pem.key \\ --region us-east-1 \\ --verbosity Warn

    검색 샘플 애플리케이션은 메시지를 10번 전송하고 연결을 끊습니다. 또한 메시지를 게시하는 동일한 주제를 구독합니다. 애플리케이션에서 해당 주제에 대한 MQTT 메시지를 수신했다고 출력에 표시되면 클라이언트 기기는 코어 기기와 성공적으로 통신할 수 있습니다.

    Performing greengrass discovery... awsiot.greengrass_discovery.DiscoverResponse(gg_groups=[awsiot.greengrass_discovery.GGGroup(gg_group_id='greengrassV2-coreDevice-MyGreengrassCore', cores=[awsiot.greengrass_discovery.GGCore(thing_arn='arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore', connectivity=[awsiot.greengrass_discovery.ConnectivityInfo(id='203.0.113.0', host_address='203.0.113.0', metadata='', port=8883)])], certificate_authorities=['-----BEGIN CERTIFICATE-----\ MIICiT...EXAMPLE=\ -----END CERTIFICATE-----\ '])]) Trying core arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore at host 203.0.113.0 port 8883 Connected! Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 0} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 0}' Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 1} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 1}' ... Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 9} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 9}'

    애플리케이션이 대신 오류를 출력하는 경우 Greengrass 검색 문제 해결을 참조하십시오.

    또한 코어 디바이스의 Greengrass 로그를 확인하여 클라이언트 디바이스가 성공적으로 연결하고 메시지를 전송하는지 확인할 수 있습니다. 자세한 설명은 모니터 AWS IoT Greengrass 로그 섹션을 참조하세요.

통신 테스트 (C++)

이 섹션에서는 C++용 AWS IoT Device SDK v2의 Greengrass 검색 샘플을 사용하여 클라이언트 장치와 코어 장치 간의 통신을 테스트합니다.

C++용 AWS IoT Device SDK v2를 빌드하려면 기기에 다음 도구가 있어야 합니다.

  • C++ 11 이상

  • CMake 3.1 이상

  • 다음 컴파일러 중 하나:

    • GCC 4.8 이상

    • 클랑 3.9 이상

    • MSVC 2015 이상

통신을 테스트하려면 (C++의 경우 AWS IoT Device SDK v2)
  1. C++용 AWS IoT Device SDK v2를 다운로드하고 빌드하여 클라이언트 AWS IoT 기기로 연결할 수 있습니다.

    클라이언트 기기에서 다음과 같이 하세요.

    1. AWS IoT Device SDKv2 C++용 작업 영역용 폴더를 만들고 해당 작업 영역으로 변경합니다.

      cd mkdir iot-device-sdk-cpp cd iot-device-sdk-cpp
    2. C++용 AWS IoT Device SDK v2 저장소를 복제하여 다운로드하십시오. --recursive플래그는 하위 모듈을 다운로드하도록 지정합니다.

      git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
    3. C++ 빌드 출력용 AWS IoT Device SDK v2용 폴더를 만들고 이 폴더로 변경합니다.

      mkdir aws-iot-device-sdk-cpp-v2-build cd aws-iot-device-sdk-cpp-v2-build
    4. C++용 AWS IoT Device SDK v2를 빌드하세요.

      cmake -DCMAKE_INSTALL_PREFIX="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ../aws-iot-device-sdk-cpp-v2 cmake --build . --target install
  2. AWS IoT Device SDKv2에서 C++용 Greengrass 검색 샘플 애플리케이션을 빌드하세요. 다음을 따릅니다.

    1. C++용 AWS IoT Device SDK v2에서 Greengrass 디스커버리 샘플 폴더로 변경하십시오.

      cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
    2. Greengrass 디스커버리 샘플 빌드 출력을 위한 폴더를 만들고 이 폴더로 변경합니다.

      mkdir build cd build
    3. Greengrass 디스커버리 샘플 애플리케이션을 빌드하세요.

      cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" .. cmake --build . --config "Release"
  3. 샘플 Greengrass 검색 애플리케이션을 실행합니다. 이 애플리케이션에는 클라이언트 디바이스 사물 이름, 사용할 MQTT 주제, 연결을 인증하고 보호하는 인증서를 지정하는 인수가 필요합니다. 다음 clients/MyClientDevice1/hello/world 예제는 주제를 구독하고 명령줄에 입력한 메시지를 동일한 주제에 게시합니다.

    • MyClientDevice1을 클라이언트 디바이스의 사물 이름으로 바꾸십시오.

    • ~/certs/ AmazonRoot ca1.pem을 클라이언트 디바이스의 Amazon 루트 CA 인증서 경로로 바꾸십시오.

    • ~/certs/device.pem.crt를 클라이언트 디바이스의 디바이스 인증서 경로로 바꾸십시오.

    • ~/certs/private.pem.key를 클라이언트 장치의 개인 키 파일 경로로 바꾸십시오.

    • us-east-1을 클라이언트 디바이스 및 코어 디바이스가 운영되는 지역으로 바꾸십시오. AWS

    ./basic-discovery \ --thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --ca_file ~/certs/AmazonRootCA1.pem \ --cert ~/certs/device.pem.crt \ --key ~/certs/private.pem.key \ --region us-east-1

    검색 샘플 애플리케이션은 주제를 구독하고 게시할 메시지를 입력하라는 메시지를 표시합니다.

    Connecting to group greengrassV2-coreDevice-MyGreengrassCore with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883 Connected to group greengrassV2-coreDevice-MyGreengrassCore, using connection to 203.0.113.0:8883 Successfully subscribed to clients/MyClientDevice1/hello/world Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.

    애플리케이션이 대신 오류를 출력하는 경우 Greengrass 검색 문제 해결을 참조하십시오.

  4. 메시지 (예Hello World!:) 를 입력합니다.

    Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program. Hello World!

    애플리케이션이 주제에 대한 MQTT 메시지를 수신했다고 출력에 표시되면 클라이언트 디바이스는 코어 디바이스와 성공적으로 통신할 수 있습니다.

    Operation on packetId 2 Succeeded Publish received on topic clients/MyClientDevice1/hello/world Message: Hello World!

    또한 코어 디바이스의 Greengrass 로그를 확인하여 클라이언트 디바이스가 성공적으로 연결하고 메시지를 전송하는지 확인할 수 있습니다. 자세한 설명은 모니터 AWS IoT Greengrass 로그 섹션을 참조하세요.

통신 테스트 () JavaScript

이 섹션에서는 AWS IoT Device SDKv2 양식의 Greengrass 검색 샘플을 사용하여 클라이언트 장치와 코어 장치 간의 통신을 테스트합니다. JavaScript

중요

AWS IoT Device SDKv2를 사용하려면 기기에서 Node v10.0 이상을 실행해야 합니다. JavaScript

통신을 테스트하려면 (AWS IoT Device SDKv2의 경우) JavaScript
  1. AWS IoT Device SDKv2 for를 다운로드하여 클라이언트 AWS IoT 장치로 연결할 사물에 설치합니다. JavaScript

    클라이언트 장치에서 다음을 수행하십시오.

    1. AWS IoT Device SDKv2를 복제하여 JavaScript 저장소용 v2를 다운로드하세요.

      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
    2. 용 AWS IoT Device SDK v2를 설치합니다 JavaScript.

      cd aws-iot-device-sdk-js-v2 npm install
  2. AWS IoT Device SDKv2 양식에서 Greengrass 디스커버리 샘플 폴더로 변경하십시오. JavaScript

    cd samples/node/basic_discovery
  3. Greengrass 디스커버리 샘플 애플리케이션을 설치합니다.

    npm install
  4. 샘플 Greengrass 검색 애플리케이션을 실행합니다. 이 애플리케이션에는 클라이언트 디바이스 사물 이름, 사용할 MQTT 주제 및 메시지, 연결을 인증하고 보호하는 인증서를 지정하는 인수가 필요합니다. 다음 예제에서는 주제에 Hello World 메시지를 보냅니다. clients/MyClientDevice1/hello/world

    • MyClientDevice1을 클라이언트 디바이스의 사물 이름으로 대체합니다.

    • ~/certs/ AmazonRoot ca1.pem을 클라이언트 디바이스의 Amazon 루트 CA 인증서 경로로 바꾸십시오.

    • ~/certs/device.pem.crt를 클라이언트 디바이스의 디바이스 인증서 경로로 바꾸십시오.

    • ~/certs/private.pem.key를 클라이언트 장치의 개인 키 파일 경로로 바꾸십시오.

    • us-east-1을 클라이언트 디바이스 및 코어 디바이스가 운영되는 지역으로 바꾸십시오. AWS

    node dist/index.js \ --thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --message 'Hello World!' \ --ca_file ~/certs/AmazonRootCA1.pem \ --cert ~/certs/device.pem.crt \ --key ~/certs/private.pem.key \ --region us-east-1 \ --verbose warn

    검색 샘플 애플리케이션은 메시지를 10번 전송하고 연결을 끊습니다. 또한 메시지를 게시하는 동일한 주제를 구독합니다. 애플리케이션에서 해당 주제에 대한 MQTT 메시지를 수신했다고 출력에 표시되면 클라이언트 기기는 코어 기기와 성공적으로 통신할 수 있습니다.

    Discovery Response: {"gg_groups":[{"gg_group_id":"greengrassV2-coreDevice-MyGreengrassCore","cores":[{"thing_arn":"arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore","connectivity":[{"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}]}],"certificate_authorities":["-----BEGIN CERTIFICATE-----\nMIICiT...EXAMPLE=\n-----END CERTIFICATE-----\n"]}]} Trying endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""} [WARN] [2021-06-12T00:46:45Z] [00007f90c0e8d700] [socket] - id=0x7f90b8018710 fd=26: setsockopt() for NO_SIGNAL failed with errno 92. If you are having SIGPIPE signals thrown, you may want to install a signal trap in your application layer. Connected to endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":1} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":2} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":3} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":4} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":5} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":6} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":7} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":8} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":9} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":10} Complete!

    애플리케이션이 대신 오류를 출력하는 경우 Greengrass 검색 문제 해결을 참조하십시오.

    또한 코어 디바이스의 Greengrass 로그를 확인하여 클라이언트 디바이스가 성공적으로 연결하고 메시지를 전송하는지 확인할 수 있습니다. 자세한 설명은 모니터 AWS IoT Greengrass 로그 섹션을 참조하세요.

테스트 통신 (Java)

이 섹션에서는 AWS IoT Device SDKv2 for Java의 Greengrass 검색 샘플을 사용하여 클라이언트 장치와 코어 장치 간의 통신을 테스트합니다.

중요

Java용 AWS IoT Device SDK v2를 빌드하려면 기기에 다음 도구가 있어야 합니다.

  • Java 8 이상 버전, Java 폴더를 JAVA_HOME 가리키고 있어야 합니다.

  • Apache Maven

통신을 테스트하려면 (Java의 경우 AWS IoT Device SDK v2)
  1. AWS IoT Device SDKv2용 Java를 다운로드하고 빌드하여 클라이언트 장치로 연결할 수 있습니다. AWS IoT

    클라이언트 기기에서 다음을 수행하십시오.

    1. AWS IoT Device SDKv2 for Java 저장소를 복제하여 다운로드하십시오.

      git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
    2. Java용 AWS IoT Device SDK v2 폴더로 변경합니다.

    3. 자바용 AWS IoT Device SDK v2를 빌드하세요.

      cd aws-iot-device-sdk-java-v2 mvn versions:use-latest-versions -Dincludes="software.amazon.awssdk.crt*" mvn clean install
  2. 샘플 Greengrass 검색 애플리케이션을 실행합니다. 이 애플리케이션에는 클라이언트 디바이스 사물 이름, 사용할 MQTT 주제, 연결을 인증하고 보호하는 인증서를 지정하는 인수가 필요합니다. 다음 clients/MyClientDevice1/hello/world 예제는 주제를 구독하고 명령줄에 입력한 메시지를 동일한 주제에 게시합니다.

    • MyClientDevice1의 두 인스턴스를 모두 클라이언트 디바이스의 사물 이름으로 바꿉니다.

    • $HOME/certs/ AmazonRoot ca1.pem을 클라이언트 디바이스의 Amazon 루트 CA 인증서 경로로 대체하십시오.

    • $HOME/certs/device.pem.crt를 클라이언트 디바이스의 디바이스 인증서 경로로 바꾸십시오.

    • $HOME/certs/private.pem.key를 클라이언트 장치의 개인 키 파일 경로로 바꾸십시오.

    • us-east-1을 클라이언트 디바이스 및 코어 디바이스가 작동하는 곳으로 바꾸십시오. AWS 리전

    DISCOVERY_SAMPLE_ARGS="--thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --ca_file $HOME/certs/AmazonRootCA1.pem \ --cert $HOME/certs/device.pem.crt \ --key $HOME/certs/private.pem.key \ --region us-east-1" mvn exec:java -pl samples/Greengrass \ -Dexec.mainClass=greengrass.BasicDiscovery \ -Dexec.args="$DISCOVERY_SAMPLE_ARGS"

    검색 샘플 애플리케이션은 주제를 구독하고 게시할 메시지를 입력하라는 메시지를 표시합니다.

    Connecting to group ID greengrassV2-coreDevice-MyGreengrassCore, with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883 Started a clean session Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:

    애플리케이션이 대신 오류를 출력하는 경우 Greengrass 검색 문제 해결을 참조하십시오.

  3. 메시지 (예Hello World!:) 를 입력합니다.

    Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program: Hello World!

    애플리케이션이 주제에 대한 MQTT 메시지를 수신했다고 출력에 표시되면 클라이언트 디바이스는 코어 디바이스와 성공적으로 통신할 수 있습니다.

    Message received on topic clients/MyClientDevice1/hello/world: Hello World!

    또한 코어 디바이스의 Greengrass 로그를 확인하여 클라이언트 디바이스가 성공적으로 연결하고 메시지를 전송하는지 확인할 수 있습니다. 자세한 내용은 모니터 AWS IoT Greengrass 로그을(를) 참조하세요.