자습서: 솔루션에 연결된 IoT 플러그 앤 플레이 디바이스와 상호 작용

IoT 플러그 앤 플레이를 사용하면 기본 디바이스 구현에 대한 지식이 없어도 디바이스 기능과 상호 작용할 수 있으므로 IoT가 간소화됩니다. 이 자습서에서는 C#을 사용하여 솔루션에 연결된 IoT 플러그 앤 플레이 디바이스에 연결하고 제어하는 방법을 보여 줍니다.

필수 조건

계속하기 전에 IoT 허브를 포함하여 환경을 설정했는지 확인합니다.

Linux 또는 Windows에서 이 자습서를 실행할 수 있습니다. 이 자습서의 셸 명령은 '/' 경로 구분 기호에 대한 Linux 규칙을 따릅니다. Windows에서 계속 실행 중인 경우 '\'에 대해 이러한 구분 기호를 교환해야 합니다.

샘플 코드를 사용하여 SDK 리포지토리 복제

자습서: Windows에서 실행되는 샘플 IoT 플러그 앤 플레이 디바이스 애플리케이션을 IoT Hub(C#)에 연결을 완료한 경우 이미 리포지토리를 복제한 것입니다.

C#용 Azure IoT SDK GitHub 리포지토리에서 샘플을 복제합니다. 선택한 폴더에서 명령 프롬프트를 엽니다. 다음 명령을 실행하여 .NET용 Microsoft Azure IoT SDK GitHub 리포지토리를 복제합니다.

git clone https://github.com/Azure/azure-iot-sdk-csharp.git

디바이스 코드 빌드

이제 디바이스 샘플을 빌드하고 실행할 수 있습니다. 다음 명령을 실행하여 샘플을 빌드합니다.

cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/Thermostat
dotnet build

디바이스 샘플 실행

샘플을 실행하려면 다음 명령을 실행합니다.

dotnet run

이제 디바이스가 명령 및 속성 업데이트를 받을 준비가 되었으며, 허브로 원격 분석 데이터를 보내기 시작했습니다. 다음 단계를 완료하는 동안 샘플을 계속 실행하세요.

샘플 솔루션 실행

IoT 플러그 앤 플레이 빠른 시작 및 자습서에서는 IoT 허브에 연결하도록 샘플을 구성하는 두 가지 환경 변수를 만들었습니다.

  • IOTHUB_CONNECTION_STRING: 이전에 기록한 IoT 허브 연결 문자열입니다.
  • IOTHUB_DEVICE_ID: "my-pnp-device".

이 자습서에서는 C#으로 작성된 샘플 IoT 솔루션을 사용하여 방금 설정하고 실행한 샘플 디바이스와 상호 작용합니다.

  1. 다른 터미널 창에서 azure-iot-sdk-csharp/iothub/service/samples/solutions/PnpServiceSamples/Thermostat 폴더로 이동합니다.

  2. 다음 명령을 실행하여 서비스 샘플을 빌드합니다.

    dotnet build
    
  3. 다음 명령을 실행하여 서비스 샘플을 실행합니다.

    dotnet run
    

디바이스 쌍 가져오기

다음 코드 조각에서는 서비스 애플리케이션이 디바이스 쌍을 검색하는 방법을 보여줍니다.

// Get a Twin and retrieves model Id set by Device client
Twin twin = await s_registryManager.GetTwinAsync(s_deviceId);
s_logger.LogDebug($"Model Id of this Twin is: {twin.ModelId}");

참고 항목

이 샘플에서는 IoT Hub 서비스 클라이언트에서 Microsoft.Azure.Devices.Client 네임스페이스를 사용합니다. 디지털 쌍 API를 비롯한 API에 대한 자세한 내용은 서비스 개발자 가이드를 참조하세요.

이전 코드는 다음 출력을 생성합니다.

[09/21/2020 11:26:04]dbug: Thermostat.Program[0]
      Model Id of this Twin is: dtmi:com:example:Thermostat;1

다음 코드 조각에서는 패치를 사용하여 디바이스 쌍을 통해 속성을 업데이트하는 방법을 보여줍니다.

// Update the twin
var twinPatch = new Twin();
twinPatch.Properties.Desired[PropertyName] = PropertyValue;
await s_registryManager.UpdateTwinAsync(s_deviceId, twinPatch, twin.ETag);

이 코드는 서비스에서 targetTemperature 속성을 업데이트할 때 디바이스에서 다음과 같은 출력을 생성합니다.

[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
      Property: Received - { "targetTemperature": 60°C }.
[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
      Property: Update - {"targetTemperature": 60°C } is InProgress.

...

[09/21/2020 11:26:17]dbug: Thermostat.ThermostatSample[0]
      Property: Update - {"targetTemperature": 60°C } is Completed.

명령 호출

다음 코드 조각에서는 명령을 호출하는 방법을 보여 줍니다.

private static async Task InvokeCommandAsync()
{
    var commandInvocation = new CloudToDeviceMethod(CommandName) { ResponseTimeout = TimeSpan.FromSeconds(30) };

    // Set command payload
    string componentCommandPayload = JsonConvert.SerializeObject(s_dateTime);
    commandInvocation.SetPayloadJson(componentCommandPayload);

    CloudToDeviceMethodResult result = await s_serviceClient.InvokeDeviceMethodAsync(s_deviceId, commandInvocation);

    if (result == null)
    {
        throw new Exception($"Command {CommandName} invocation returned null");
    }

    s_logger.LogDebug($"Command {CommandName} invocation result status is: {result.Status}");
}

이 코드는 서비스에서 getMaxMinReport 명령을 호출할 때 디바이스에서 다음과 같은 출력을 생성합니다.

[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
      Command: Received - Generating max, min and avg temperature report since 21/09/2020 11:25:58.
[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
      Command: MaxMinReport since 21/09/2020 11:25:58: maxTemp=32, minTemp=32, avgTemp=32, startTime=21/09/2020 11:25:59, endTime=21/09/2020 11:26:04

IoT 플러그 앤 플레이를 사용하면 기본 디바이스 구현에 대한 지식이 없어도 디바이스 기능과 상호 작용할 수 있으므로 IoT가 간소화됩니다. 이 자습서에서는 Java를 사용하여 솔루션에 연결된 IoT 플러그 앤 플레이 디바이스에 연결하고 제어하는 방법을 보여 줍니다.

필수 조건

계속하기 전에 IoT 허브를 포함하여 환경을 설정했는지 확인합니다.

Linux 또는 Windows에서 이 자습서를 실행할 수 있습니다. 이 자습서의 셸 명령은 '/' 경로 구분 기호에 대한 Linux 규칙을 따릅니다. Windows에서 계속 실행 중인 경우 '\'에 대해 이러한 구분 기호를 교환해야 합니다.

이 자습서를 완료하려면 로컬 개발 환경에 다음 소프트웨어를 설치합니다.

샘플 코드를 사용하여 SDK 리포지토리 복제

자습서: Windows에서 실행되는 샘플 IoT 플러그 앤 플레이 디바이스 애플리케이션을 IoT Hub(Java)에 연결을 완료한 경우 이미 리포지토리를 복제한 것입니다.

선택한 디렉터리에서 명령 프롬프트를 엽니다. 다음 명령을 실행하여 Java용 Microsoft Azure IoT SDK GitHub 리포지토리를 다음 위치에 복제합니다.

git clone https://github.com/Azure/azure-iot-sdk-java.git

샘플 디바이스 빌드 및 실행

복제된 Java SDK 리포지토리에서 자동 온도 조절기 샘플의 루트 폴더로 이동하고 샘플을 빌드합니다.

cd azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/thermostat-device-sample
mvn clean package

환경 설정에서 DPS(Device Provisioning Service)를 사용하여 IoT 허브에 연결하도록 샘플을 구성하는 네 가지 환경 변수를 만들었습니다.

  • 값이 DPSIOTHUB_DEVICE_SECURITY_TYPE
  • IOTHUB_DEVICE_DPS_ID_SCOPE(DPS ID 범위 포함).
  • 값이 my-pnp-deviceIOTHUB_DEVICE_DPS_DEVICE_ID.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY(등록 기본 키 포함).
  • 값이 global.azure-devices-provisioning.netIOTHUB_DEVICE_DPS_ENDPOINT.

샘플 구성에 대해 자세히 알아보려면 샘플 추가 정보를 참조하세요.

/device/iot-device-samples/pnp-device-sample/thermostat-device-sample 폴더에서 애플리케이션을 실행합니다.

mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.device.Thermostat"

이제 디바이스가 명령 및 속성 업데이트를 받을 준비가 되었으며, 허브로 원격 분석 데이터를 보내기 시작했습니다. 다음 단계를 완료하는 동안 샘플을 계속 실행하세요.

샘플 솔루션 실행

IoT 플러그 앤 플레이 빠른 시작 및 자습서에서는 IoT 허브에 연결하도록 샘플을 구성하는 두 가지 환경 변수를 만들었습니다.

  • IOTHUB_CONNECTION_STRING: 이전에 기록한 IoT 허브 연결 문자열입니다.
  • IOTHUB_DEVICE_ID: "my-pnp-device".

이 자습서에서는 Java로 작성된 샘플 IoT 솔루션을 사용하여 방금 설정한 샘플 디바이스와 상호 작용합니다.

참고 항목

이 샘플에서는 IoT Hub 서비스 클라이언트에서 com.microsoft.azure.sdk.iot.service 네임스페이스를 사용합니다. 디지털 쌍 API를 비롯한 API에 대한 자세한 내용은 서비스 개발자 가이드를 참조하세요.

  1. 서비스 터미널로 사용할 또 다른 터미널 창을 엽니다.

  2. 복제된 Java SDK 리포지토리에서 service/iot-service-samples/pnp-service-sample/thermostat-service-sample 폴더로 이동합니다.

  3. 샘플 서비스 애플리케이션을 빌드하고 실행하려면 다음 명령을 실행합니다.

    mvn clean package
    mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.service.Thermostat"
    

디바이스 쌍 가져오기

다음 코드 조각에서는 서비스에서 디바이스 쌍을 검색하는 방법을 보여 줍니다.

 // Get the twin and retrieve model Id set by Device client.
DeviceTwinDevice twin = new DeviceTwinDevice(deviceId);
twinClient.getTwin(twin);
System.out.println("Model Id of this Twin is: " + twin.getModelId());

디바이스 쌍 업데이트

다음 코드 조각에서는 패치를 사용하여 디바이스 쌍을 통해 속성을 업데이트하는 방법을 보여줍니다.

String propertyName = "targetTemperature";
double propertyValue = 60.2;
twin.setDesiredProperties(Collections.singleton(new Pair(propertyName, propertyValue)));
twinClient.updateTwin(twin);

디바이스 출력은 디바이스가 이 속성 업데이트에 응답하는 방법을 보여 줍니다.

명령 호출

다음 코드 조각에서는 디바이스에서 명령을 호출하는 방법을 보여 줍니다.

// The method to invoke for a device without components should be "methodName" as defined in the DTDL.
String methodToInvoke = "getMaxMinReport";
System.out.println("Invoking method: " + methodToInvoke);

Long responseTimeout = TimeUnit.SECONDS.toSeconds(200);
Long connectTimeout = TimeUnit.SECONDS.toSeconds(5);

// Invoke the command.
String commandInput = ZonedDateTime.now(ZoneOffset.UTC).minusMinutes(5).format(DateTimeFormatter.ISO_DATE_TIME);
MethodResult result = methodClient.invoke(deviceId, methodToInvoke, responseTimeout, connectTimeout, commandInput);
if(result == null)
{
    throw new IOException("Method result is null");
}

System.out.println("Method result status is: " + result.getStatus());

디바이스 출력은 디바이스가 이 명령에 응답하는 방법을 보여 줍니다.

IoT 플러그 앤 플레이를 사용하면 기본 디바이스 구현에 대한 지식이 없어도 디바이스 기능과 상호 작용할 수 있으므로 IoT가 간소화됩니다. 이 자습서에서는 Node.js를 사용하여 솔루션에 연결된 IoT 플러그 앤 플레이 디바이스에 연결하고 제어하는 방법을 보여 줍니다.

필수 조건

계속하기 전에 IoT 허브를 포함하여 환경을 설정했는지 확인합니다.

이 자습서를 완료하려면 개발 머신에 Node.js가 필요합니다. nodejs.org에서 여러 플랫폼에 권장하는 최신 버전을 다운로드할 수 있습니다.

다음 명령을 사용하여 개발 컴퓨터에서 Node.js의 현재 버전을 확인할 수 있습니다.

node --version

샘플 코드를 사용하여 SDK 리포지토리 복제

노드 SDK 리포지토리에서 샘플을 복제합니다. 원하는 폴더에서 터미널 창을 엽니다. 다음 명령을 실행하여 Node.js용 Microsoft Azure IoT SDK GitHub 리포지토리를 복제합니다.

git clone https://github.com/Azure/azure-iot-sdk-node

샘플 디바이스 실행

환경 설정에서 DPS(Device Provisioning Service)를 사용하여 IoT 허브에 연결하도록 샘플을 구성하는 네 가지 환경 변수를 만들었습니다.

  • 값이 DPSIOTHUB_DEVICE_SECURITY_TYPE
  • IOTHUB_DEVICE_DPS_ID_SCOPE(DPS ID 범위 포함).
  • 값이 my-pnp-deviceIOTHUB_DEVICE_DPS_DEVICE_ID.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY(등록 기본 키 포함).
  • 값이 global.azure-devices-provisioning.netIOTHUB_DEVICE_DPS_ENDPOINT.

샘플 구성에 대해 자세히 알아보려면 샘플 추가 정보를 참조하세요.

이 자습서에서는 Node.js로 작성된 샘플 자동 온도 조절 디바이스를 IoT 플러그 앤 플레이 디바이스로 사용합니다. 샘플 디바이스를 실행하려면 다음을 수행합니다.

  1. 터미널 창을 열고 GitHub에서 복제한 Node.js용 Microsoft Azure IoT SDK 리포지토리가 포함된 로컬 폴더로 이동합니다.

  2. 이 터미널 창은 이제 디바이스 터미널로 사용됩니다. 복제된 리포지토리의 폴더로 이동하여 /azure-iot-sdk-node/device/samples/javascript 폴더로 이동합니다. 다음 명령을 실행하여 모든 종속 요소를 설치합니다.

    npm install
    
  3. 다음 명령을 사용하여 샘플 자동 온도 조절 디바이스를 실행합니다.

    node pnp_simple_thermostat.js
    
  4. 디바이스에서 일부 정보를 보냈으며 현재 온라인 상태임을 보고했다는 메시지가 표시됩니다. 이 메시지는 디바이스가 허브로 원격 분석 데이터를 보내기 시작했으며, 이제 명령 및 속성 업데이트를 받을 준비가 되었음을 나타냅니다. 이 터미널을 닫지 마세요. 서비스 샘플이 작동하는지 확인하는 데 필요합니다.

샘플 솔루션 실행

IoT 플러그 앤 플레이 빠른 시작 및 자습서에서는 IoT 허브에 연결하도록 샘플을 구성하는 두 가지 환경 변수를 만들었습니다.

  • IOTHUB_CONNECTION_STRING: 이전에 기록한 IoT 허브 연결 문자열입니다.
  • IOTHUB_DEVICE_ID: "my-pnp-device".

이 자습서에서는 샘플 Node.js IoT 솔루션을 사용하여 방금 설정하고 실행한 샘플 디바이스와 상호 작용합니다.

  1. 서비스 터미널로 사용할 또 다른 터미널 창을 엽니다.

  2. 복제된 노드 SDK 리포지토리에서 azure-iot-sdk-node/service/samples/javascript 폴더로 이동합니다. 다음 명령을 실행하여 모든 종속 요소를 설치합니다.

    npm install
    

속성 읽기

  1. 디바이스 터미널에서 샘플 자동 온도 조절 디바이스를 실행하면 온라인 상태를 나타내는 다음 메시지가 표시됩니다.

    properties have been reported for component
    sending telemetry message 0...
    
  2. 서비스 터미널로 이동한 후 다음 명령을 사용하여 디바이스 정보를 읽는 샘플을 실행합니다.

    node twin.js
    
  3. 서비스 터미널 출력에서 디바이스 쌍의 응답을 확인합니다. 보고된 디바이스의 모델 ID 및 관련 속성이 다음과 같이 표시됩니다.

    Model Id: dtmi:com:example:Thermostat;1
    {
      "deviceId": "my-pnp-device",
      "etag": "AAAAAAAAAAE=",
      "deviceEtag": "Njc3MDMxNDcy",
      "status": "enabled",
      "statusUpdateTime": "0001-01-01T00:00:00Z",
      "connectionState": "Connected",
      "lastActivityTime": "0001-01-01T00:00:00Z",
      "cloudToDeviceMessageCount": 0,
      "authenticationType": "sas",
      "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
      },
      "modelId": "dtmi:com:example:Thermostat;1",
      "version": 4,
      "properties": {
        "desired": {
          "$metadata": {
            "$lastUpdated": "2020-10-05T11:35:19.4574755Z"
          },
          "$version": 1
        },
        "reported": {
          "maxTempSinceLastReboot": 31.343640523762232,
          "serialNumber": "123abc",
          "$metadata": {
            "$lastUpdated": "2020-10-05T11:35:23.7339042Z",
            "maxTempSinceLastReboot": {
              "$lastUpdated": "2020-10-05T11:35:23.7339042Z"
            },
            "serialNumber": {
              "$lastUpdated": "2020-10-05T11:35:23.7339042Z"
            }
          },
          "$version": 3
        }
      },
      "capabilities": {
        "iotEdge": false
      },
      "tags": {}
    }
    
  4. 다음 코드 조각은 디바이스 쌍의 모델 ID를 검색하는 twin.js의 코드를 보여줍니다.

    var registry = Registry.fromConnectionString(connectionString);
    registry.getTwin(deviceId, function(err, twin) {
      if (err) {
        console.error(err.message);
      } else {
        console.log('Model Id: ' + twin.modelId);
        //...
      }
      //...
    }
    

이 시나리오에서는 Model Id: dtmi:com:example:Thermostat;1을 출력합니다.

참고 항목

이러한 서비스 샘플은 IoT Hub 서비스 클라이언트에서 Registry 클래스를 사용합니다. 디지털 쌍 API를 비롯한 API에 대한 자세한 내용은 서비스 개발자 가이드를 참조하세요.

쓰기 가능 속성 업데이트

  1. 코드 편집기에서 twin.js 파일을 엽니다.

  2. 샘플 코드를 검토합니다. 디바이스 쌍을 업데이트하는 두 가지 방법을 보여줍니다. 첫 번째 방법을 사용하려면 twinPatch 변수를 다음과 같이 수정합니다.

    var twinPatch = {
      tags: {
        city: "Redmond"
      },
      properties: {
        desired: {
          targetTemperature: 42
        }
      }
    };
    

    targetTemperature 속성은 자동 온도 조절기 디바이스 모델에서 쓰기 가능한 속성으로 정의됩니다.

  3. 서비스 터미널에서 다음 명령을 사용하여 속성을 업데이트하는 샘플을 실행합니다.

    node twin.js
    
  4. 디바이스 터미널로 이동하면 디바이스가 업데이트를 수신한 것을 볼 수 있습니다.

    The following properties will be updated for the default component:
    {
      targetTemperature: {
        value: 42,
        ac: 200,
        ad: 'Successfully executed patch for targetTemperature',
        av: 2
      }
    }
    updated the property
    
  5. 서비스 터미널에서 다음 명령을 실행하여 속성이 업데이트되었는지 확인합니다.

    node twin.js
    
  6. 서비스 터미널 출력의 reported 속성 섹션에서 업데이트된 대상 온도가 보고된 것을 확인할 수 있습니다. 디바이스가 업데이트를 완료하는 데 시간이 걸릴 수 있습니다. 디바이스가 속성 업데이트를 처리할 때까지 이 단계를 반복합니다.

    "reported": {
      //...
      "targetTemperature": {
        "value": 42,
        "ac": 200,
        "ad": "Successfully executed patch for targetTemperature",
        "av": 4
      },
      //...
    }
    

명령 호출

  1. device_method.js 파일을 열고 코드를 검토합니다.

  2. 서비스 터미널로 이동합니다. 다음 명령을 사용하여 명령을 호출하는 샘플을 실행합니다.

    set IOTHUB_METHOD_NAME=getMaxMinReport
    set IOTHUB_METHOD_PAYLOAD=commandpayload
    node device_method.js
    
  3. 서비스 터미널의 출력에 다음과 같은 확인이 표시됩니다.

    getMaxMinReport on my-pnp-device:
    {
      "status": 200,
      "payload": {
        "maxTemp": 23.460596940801928,
        "minTemp": 23.460596940801928,
        "avgTemp": 23.460596940801928,
        "endTime": "2020-10-05T12:48:08.562Z",
        "startTime": "2020-10-05T12:47:54.450Z"
      }
    }
    
  4. 디바이스 터미널에서 명령이 승인된 것을 볼 수 있습니다.

    MaxMinReport commandpayload
    Response to method 'getMaxMinReport' sent successfully.
    

IoT 플러그 앤 플레이를 사용하면 기본 디바이스 구현에 대한 지식이 없어도 디바이스 모델과 상호 작용할 수 있으므로 IoT가 간소화됩니다. 이 자습서에서는 Python을 사용하여 솔루션에 연결된 IoT 플러그 앤 플레이 디바이스에 연결하고 제어하는 방법을 보여 줍니다.

필수 조건

계속하기 전에 IoT 허브를 포함하여 환경을 설정했는지 확인합니다.

이 자습서를 완료하려면 개발 컴퓨터에 Python이 설치되어 있어야 합니다. 현재 Python 버전 요구 사항에 대해서는 Azure IoT Python SDK를 확인합니다. 다음 명령을 사용하여 현재 Python 버전을 확인할 수 있습니다.

python --version

python.org에서 여러 플랫폼에 권장되는 최신 버전을 다운로드할 수 있습니다.

로컬 Python 환경에서 다음과 같이 azure-iot-device 패키지를 설치합니다.

pip install azure-iot-device

다음 명령을 실행하여 azure-iot-hub 패키지를 설치합니다.

pip install azure-iot-hub

샘플 디바이스 실행

환경 설정에서 DPS(Device Provisioning Service)를 사용하여 IoT 허브에 연결하도록 샘플을 구성하는 네 가지 환경 변수를 만들었습니다.

  • 값이 DPSIOTHUB_DEVICE_SECURITY_TYPE
  • IOTHUB_DEVICE_DPS_ID_SCOPE(DPS ID 범위 포함).
  • 값이 my-pnp-deviceIOTHUB_DEVICE_DPS_DEVICE_ID.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY(등록 기본 키 포함).
  • 값이 global.azure-devices-provisioning.netIOTHUB_DEVICE_DPS_ENDPOINT.

샘플 구성에 대해 자세히 알아보려면 샘플 추가 정보를 참조하세요.

이 자습서에서는 Python으로 작성한 샘플 자동 온도 조절 디바이스를 IoT 플러그 앤 플레이 디바이스로 사용합니다. 샘플 디바이스를 실행하려면 다음을 수행합니다.

  1. 원하는 폴더에서 터미널 창을 엽니다. 다음 명령을 실행하여 Azure IoT 디바이스 Python SDK GitHub 리포지토리를 다음 위치에 복제합니다.

    git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python
    
  2. 이 터미널 창은 이제 디바이스 터미널로 사용됩니다. 복제된 리포지토리의 폴더로 이동하여 azure-iot-sdk-python/samples/pnp 폴더로 이동합니다.

  3. 다음 명령을 사용하여 샘플 자동 온도 조절 디바이스를 실행합니다.

    python simple_thermostat.py
    
  4. 디바이스에서 일부 정보를 보냈으며 현재 온라인 상태임을 보고했다는 메시지가 표시됩니다. 이 메시지는 디바이스가 허브로 원격 분석 데이터를 보내기 시작했으며, 이제 명령 및 속성 업데이트를 받을 준비가 되었음을 나타냅니다. 이 터미널을 닫지 마세요. 서비스 샘플이 작동하는지 확인하는 데 필요합니다.

샘플 솔루션 실행

이 자습서에서는 Python에서 샘플 IoT 솔루션을 사용하여 방금 설정한 샘플 디바이스와 상호 작용합니다.

  1. 서비스 터미널로 사용할 또 다른 터미널 창을 엽니다. 다음 명령을 실행하여 Azure IoT Hub Python SDK GitHub 리포지토리를 다음 위치에 복제합니다.

    git clone https://github.com/Azure/azure-iot-hub-python
    
  2. Azure Arc를

  3. 복제된 Python SDK 리포지토리의 /azure-iot-hub-python/samples 폴더로 이동합니다.

  4. registry_manager_pnp_sample.py 파일을 열고 코드를 검토합니다. 이 샘플에서는 IoTHubRegistryManager 클래스를 사용하여 IoT 플러그 앤 플레이 디바이스와 상호 작용하는 방법을 보여줍니다.

참고 항목

이러한 서비스 샘플은 IoT Hub 서비스 클라이언트에서 IoTHubRegistryManager 클래스를 사용합니다. 디지털 쌍 API를 비롯한 API에 대한 자세한 내용은 서비스 개발자 가이드를 참조하세요.

디바이스 쌍 가져오기

IoT 플러그 앤 플레이 빠른 시작 및 자습서에서는 IoT 허브에 연결하도록 샘플을 구성하는 두 가지 환경 변수를 만들었습니다.

  • IOTHUB_CONNECTION_STRING: 이전에 기록한 IoT 허브 연결 문자열입니다.
  • IOTHUB_DEVICE_ID: "my-pnp-device".

서비스 터미널에서 다음 명령을 사용하여 이 샘플을 실행합니다.

set IOTHUB_METHOD_NAME="getMaxMinReport"
set IOTHUB_METHOD_PAYLOAD="hello world"
python registry_manager_pnp_sample.py

참고 항목

Linux에서 이 샘플을 실행하는 경우 set 대신 export를 사용합니다.

출력은 디바이스 쌍을 표시하고 해당 모델 ID를 출력합니다.

The Model ID for this device is:
dtmi:com:example:Thermostat;1

다음 코드 조각은 registry_manager_pnp_sample.py의 샘플 코드를 보여줍니다.

    # Create IoTHubRegistryManager
    iothub_registry_manager = IoTHubRegistryManager(iothub_connection_str)

    # Get device twin
    twin = iothub_registry_manager.get_twin(device_id)
    print("The device twin is: ")
    print("")
    print(twin)
    print("")

    # Print the device's model ID
    additional_props = twin.additional_properties
    if "modelId" in additional_props:
        print("The Model ID for this device is:")
        print(additional_props["modelId"])
        print("")

디바이스 쌍 업데이트

이 샘플에서는 디바이스에서 targetTemperature 쓰기 가능 속성을 업데이트하는 방법을 보여줍니다.

    # Update twin
    twin_patch = Twin()
    twin_patch.properties = TwinProperties(
        desired={"targetTemperature": 42}
    )  # this is relevant for the thermostat device sample
    updated_twin = iothub_registry_manager.update_twin(device_id, twin_patch, twin.etag)
    print("The twin patch has been successfully applied")
    print("")

다음과 같은 출력이 표시되는 디바이스 터미널에서 업데이트가 적용되었는지 확인할 수 있습니다.

the data in the desired properties patch was: {'targetTemperature': 42, '$version': 2}

서비스 터미널에 패치 적용에 성공한 것이 확인됩니다.

The twin patch has been successfully applied

명령 호출

그런 다음, 이 샘플은 다음 명령을 호출합니다.

서비스 터미널에 디바이스의 확인 메시지가 표시됩니다.

The device method has been successfully invoked

디바이스 터미널에, 디바이스가 명령을 수신한 것이 보입니다.

Command request received with payload
hello world
Will return the max, min and average temperature from the specified time hello to the current time
Done generating
{"tempReport": {"avgTemp": 34.2, "endTime": "09/07/2020 09:58:11", "maxTemp": 49, "minTemp": 10, "startTime": "09/07/2020 09:56:51"}}

리소스 정리

빠른 시작 및 자습서를 완료한 경우 리소스 정리를 참조하세요.

다음 단계

이 자습서에서는 IoT 플러그 앤 플레이 디바이스를 IoT 솔루션에 연결하는 방법을 알아보았습니다. IoT 플러그 앤 플레이 디바이스 모델에 대한 자세한 내용은 다음을 참조하세요.