다음을 통해 공유


자습서: 투명 게이트웨이를 통해 데이터 보내기

적용 대상:예 아이콘 IoT Edge 1.1

중요합니다

IoT Edge 1.1 지원 종료 날짜는2022년 12월 13일이었습니다. 이 제품, 서비스, 기술 또는 API가 지원되는 방법에 대한 정보는 Microsoft 제품 수명 주기를 확인하세요. 최신 버전의 IoT Edge로 업데이트하는 방법에 대한 자세한 내용은 업데이트 IoT Edge참조하세요.

이 문서에서는 다시 한 번 개발 VM을 시뮬레이션된 디바이스로 사용합니다. 그러나 디바이스는 데이터를 IoT Hub로 직접 보내는 대신 투명한 게이트웨이로 구성된 IoT Edge 디바이스로 데이터를 보냅니다.

시뮬레이션된 디바이스가 데이터를 보내는 동안 IoT Edge 디바이스의 작업을 모니터링합니다. 디바이스 실행이 완료되면 스토리지 계정의 데이터를 확인하여 예상대로 작동하는 모든 작업의 유효성을 검사합니다.

이 단계는 일반적으로 클라우드 또는 디바이스 개발자가 수행합니다.

자습서의 이 섹션에서는 다음 방법을 알아봅니다.

  • 다운스트림 디바이스를 빌드하고 실행합니다.
  • 생성된 데이터가 Azure Blob Storage에 저장되고 있는지 확인합니다.
  • 기계 학습 모델이 디바이스 데이터를 분류한지 확인합니다.

필수 조건

이 문서는 IoT Edge에서 Azure Machine Learning을 사용하는 방법에 대한 자습서 시리즈의 일부입니다. 시리즈의 각 문서는 이전 문서의 작업을 기반으로 합니다. 이 문서에 직접 도착한 경우, 먼저 시리즈의 첫 번째 문서을 방문하세요.

장치 하네스 검토

DeviceHarness 프로젝트를 다시 사용하여 다운스트림 디바이스를 시뮬레이션합니다. 투명 게이트웨이에 연결하려면 다음 두 가지가 추가로 필요합니다.

  • 다운스트림 IoT 디바이스가 IoT Edge 런타임에서 사용되는 인증 기관을 신뢰하도록 인증서를 등록합니다. 이 경우 다운스트림 디바이스는 개발 VM입니다.
  • 에지 게이트웨이 FQDN(정규화된 도메인 이름)을 디바이스 연결 문자열에 추가합니다.

코드를 확인하여 이러한 두 항목이 구현되는 방법을 확인합니다.

  1. 개발 머신에서 Visual Studio Code를 엽니다.

  2. 파일>폴더 열기...를 사용하여 C:\source\IoTEdgeAndMlSample\DeviceHarness를 여십시오.

  3. Program.cs InstallCertificate() 메서드를 살펴봅니다.

  4. 코드에서 인증서 경로를 찾으면 CertificateManager.InstallCACert 메서드를 호출하여 컴퓨터에 인증서를 설치합니다.

  5. 이제 TurbofanDevice 클래스에서 GetIotHubDevice 메서드를 확인합니다.

  6. 사용자가 "-g" 옵션을 사용하여 게이트웨이의 FQDN을 지정하면 해당 값이 이 메서드에 변수로 gatewayFqdn 전달되고 디바이스 연결 문자열에 추가됩니다.

    connectionString = $"{connectionString};GatewayHostName={gatewayFqdn.ToLower()}";
    

다운스트림 디바이스 빌드 및 실행

  1. DeviceHarness 프로젝트가 Visual Studio Code에서 계속 열려 있는 상태에서 프로젝트를 빌드합니다. 터미널 메뉴에서 빌드 작업 실행을 선택하고 빌드를 선택합니다.

  2. Azure Portal에서 IoT Edge 디바이스(Linux VM)로 이동하고 개요 페이지에서 DNS 이름 값을 복사하여 에지 게이트웨이에 대한 FQDN(정규화된 도메인 이름)을 찾습니다.

  3. 아직 실행되고 있지 않은 경우 IoT 디바이스(Linux VM)를 시작합니다.

  4. Visual Studio Code 터미널을 엽니다. 터미널 메뉴에서 새 터미널을 선택하고 다음 명령을 실행하여 IoT Edge 디바이스(Linux VM)에서 복사한 DNS 이름으로 바 <edge_device_fqdn> 꿉다.

    dotnet run -- --gateway-host-name "<edge_device_fqdn>" --certificate C:\edgecertificates\certs\azure-iot-test-only.root.ca.cert.pem --max-devices 1
    
  5. 애플리케이션이 개발 머신에 인증서를 설치하려고 시도합니다. 이 경우 보안 경고를 수락합니다.

  6. IoT Hub 연결 문자열을 묻는 메시지가 표시되면 Azure IoT Hub 디바이스 패널에서 줄임표(...)를 클릭하고 IoT Hub 연결 문자열 복사를 선택합니다. 터미널에 값을 붙여넣습니다.

  7. 다음과 같은 출력이 표시됩니다.

    Found existing device: Client_001
    Using device connection string: HostName=<your hub>.azure-devices.net;DeviceId=Client_001;SharedAccessKey=xxxxxxx; GatewayHostName=iotedge-xxxxxx.<region>.cloudapp.azure.com
    Device: 1 Message count: 50
    Device: 1 Message count: 100
    Device: 1 Message count: 150
    Device: 1 Message count: 200
    Device: 1 Message count: 250
    

    디바이스 연결 문자열에 "GatewayHostName"이 추가되어 디바이스가 IoT Edge 투명 게이트웨이를 통해 IoT Hub를 통해 통신하게 됩니다.

출력 확인

IoT Edge 장치 출력

avroFileWriter 모듈의 출력은 IoT Edge 디바이스를 확인하여 쉽게 관찰할 수 있습니다.

  1. IoT Edge 가상 머신에 SSH합니다.

  2. 디스크에 기록된 파일을 찾습니다.

    find /data/avrofiles -type f
    
  3. 명령의 출력은 다음 예제와 같습니다.

    /data/avrofiles/2019/4/18/22/10.avro
    

    실행 타이밍에 따라 파일이 하나 이상 있을 수 있습니다.

  4. 타임스탬프를 주의하세요. avroFileWriter 모듈은 마지막 수정 시간이 지난 10분이 지난 후 클라우드에 파일을 업로드합니다(avroFileWriter 모듈의 uploader.py MODIFIED_FILE_TIMEOUT 참조).

  5. 10분이 경과하면 모듈이 파일을 업로드해야 합니다. 업로드에 성공하면 디스크에서 파일을 삭제합니다.

Azure Storage

데이터가 라우팅될 것으로 예상되는 스토리지 계정을 확인하여 다운스트림 디바이스 전송 결과를 관찰할 수 있습니다.

  1. 개발 머신에서 Visual Studio Code를 엽니다.

  2. 탐색 창의 "AZURE STORAGE" 패널에서 트리를 탐색하여 스토리지 계정을 찾습니다.

  3. Blob 컨테이너 노드를 확장합니다.

  4. 자습서의 이전 부분에서 수행된 작업에서 ruldata 컨테이너에 RUL이 포함된 메시지가 포함되어야 합니다. ruldata 노드를 확장합니다.

  5. 다음과 같은 <IoT Hub Name>/<partition>/<year>/<month>/<day>/<hour>/<minute>Blob 파일이 하나 이상 표시됩니다.

  6. 파일 중 하나를 마우스 오른쪽 단추로 클릭하고 Blob 다운로드 를 선택하여 개발 머신에 파일을 저장합니다.

  7. 그런 다음 uploadturbofanfiles 노드를 확장합니다 . 이전 문서에서는 avroFileWriter 모듈에서 업로드한 파일의 대상으로 이 위치를 설정했습니다.

  8. 파일을 마우스 오른쪽 단추로 클릭하고 Blob 다운로드 를 선택하여 개발 머신에 저장합니다.

Avro 파일 내용 읽기

Avro 파일을 읽고 파일에 있는 메시지의 JSON 문자열을 반환하는 간단한 명령줄 유틸리티를 포함했습니다. 이 섹션에서는 설치하고 실행합니다.

  1. Visual Studio Code에서 터미널을 엽니다(터미널>새 터미널).

  2. hubavroreader 설치:

    pip install c:\source\IoTEdgeAndMlSample\HubAvroReader
    
  3. hubavroreader를 사용하여 ruldata에서 다운로드한 Avro 파일을 읽습니다.

    hubavroreader <avro file with ath> | more
    
  4. 메시지 본문은 디바이스 ID 및 예측된 RUL을 사용하여 예상한 대로 표시됩니다.

    {
        "Body": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CycleTime": 1.0,
            "PredictedRul": 170.1723693909444
        },
        "EnqueuedTimeUtc": "<time>",
        "Properties": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CreationTimeUtc": "01/01/0001 00:00:00",
            "EnqueuedTimeUtc": "01/01/0001 00:00:00"
        },
        "SystemProperties": {
            "connectionAuthMethod": "{\"scope\":\"module\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "connectionDeviceGenerationId": "636857841798304970",
            "connectionDeviceId": "aaTurbofanEdgeDevice",
            "connectionModuleId": "turbofanRouter",
            "contentEncoding": "utf-8",
            "contentType": "application/json",
            "correlationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "enqueuedTime": "<time>",
            "iotHubName": "mledgeiotwalkthroughhub"
        }
    }
    
  5. uploadturbofanfiles에서 다운로드한 Avro 파일을 전달하는 동일한 명령을 실행합니다.

  6. 예상대로 이러한 메시지에는 원본 메시지의 모든 센서 데이터 및 작동 설정이 포함됩니다. 이 데이터는 에지 디바이스에서 RUL 모델을 개선하는 데 사용할 수 있습니다.

    {
        "Body": {
            "CycleTime": 1.0,
            "OperationalSetting1": -0.0005000000237487257,
            "OperationalSetting2": 0.00039999998989515007,
            "OperationalSetting3": 100.0,
            "PredictedRul": 170.17236328125,
            "Sensor1": 518.6699829101562,
            "Sensor10": 1.2999999523162842,
            "Sensor11": 47.29999923706055,
            "Sensor12": 522.3099975585938,
            "Sensor13": 2388.010009765625,
            "Sensor14": 8145.31982421875,
            "Sensor15": 8.424599647521973,
            "Sensor16": 0.029999999329447746,
            "Sensor17": 391.0,
            "Sensor18": 2388.0,
            "Sensor19": 100.0,
            "Sensor2": 642.3599853515625,
            "Sensor20": 39.11000061035156,
            "Sensor21": 23.353700637817383,
            "Sensor3": 1583.22998046875,
            "Sensor4": 1396.8399658203125,
            "Sensor5": 14.619999885559082,
            "Sensor6": 21.610000610351562,
            "Sensor7": 553.969970703125,
            "Sensor8": 2387.9599609375,
            "Sensor9": 9062.169921875
        },
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "70df0c98-0958-4c8f-a422-77c2a599594f",
            "CreationTimeUtc": "0001-01-01T00:00:00+00:00",
            "EnqueuedTimeUtc": "<time>"
    }
    

리소스 정리

이 엔드 투 엔드 자습서에서 사용하는 리소스를 탐색하려는 경우 만든 리소스를 정리할 때까지 기다립니다. 그렇지 않으면 다음 단계를 사용하여 삭제합니다.

  1. Dev VM, IoT Edge VM, IoT Hub, 스토리지 계정, 기계 학습 작업 영역 서비스(및 생성된 리소스: 컨테이너 레지스트리, Application Insights, 키 자격 증명 모음, 스토리지 계정)를 보관하기 위해 만든 리소스 그룹을 삭제합니다.

  2. Azure Notebooks에서 기계 학습 프로젝트를 삭제합니다.

  3. 리포지토리를 로컬로 복제한 경우 로컬 리포지토리를 참조하는 PowerShell 또는 VS Code 창을 닫은 다음 리포지토리 디렉터리를 삭제합니다.

  4. 로컬로 인증서를 만든 경우 c:\edgeCertificates 폴더를 삭제합니다.

다음 단계

이 문서에서는 개발 VM을 사용하여 IoT Edge 디바이스에 센서 및 운영 데이터를 보내는 다운스트림 디바이스를 시뮬레이션했습니다. 디바이스의 모듈이 에지 디바이스의 실시간 작업을 검사하고 스토리지 계정에 업로드된 파일을 확인하여 데이터를 라우팅, 분류, 유지 및 업로드했는지 확인했습니다.

IoT Edge 기능에 대해 계속 알아보려면 다음 자습서를 시도해 보세요.