다음을 통해 공유


미리 구성된 원격 모니터링 솔루션에 디바이스 연결(Linux)

시나리오 개요

이 시나리오에서는 원격 모니터링 미리 구성된 솔루션에 다음과 같은 원격 분석 데이터를 보낼 디바이스를 만듭니다.

  • 외부 온도
  • 내부 온도
  • 습도

간소함을 위하여 디바이스의 코드가 샘플 값을 생성하지만, 사용자는 자신의 디바이스에 실제 센서를 연결하고 실제 원격 분석 데이터를 보내어 샘플을 확장할 것을 권장합니다.

디바이스는 솔루션 대시보드에서 호출된 메서드 및 솔루션 대시보드에 설정된 desired 속성 값에 응답할 수도 있습니다.

이 자습서를 완료하려면 활성 Azure 계정이 필요합니다. 계정이 없는 경우 몇 분 만에 평가판 계정을 만들 수 있습니다. 자세한 내용은 Azure 평가판을 참조하세요.

시작하기 전에

디바이스에 대한 코드를 작성하기 전에, 미리 구성된 원격 모니터링 솔루션을 프로비전하고 이 솔루션에 새로운 사용자 지정 디바이스를 프로비전해야 합니다.

미리 구성된 사용자의 원격 모니터링 솔루션 프로비전

이 자습서에서 만드는 디바이스는 미리 구성된 원격 모니터링 솔루션의 인스턴스에 데이터를 전송합니다. Azure 계정에서 미리 구성된 원격 모니터링 솔루션을 미리 프로비전하지 않은 경우 다음 단계를 사용합니다.

  1. https://www.azureiotsolutions.com/ 페이지에서 +를 클릭하여 솔루션을 만듭니다.
  2. 원격 모니터링 패널에서 선택을 클릭하여 솔루션을 만듭니다.
  3. 원격 모니터링 솔루션 만들기 페이지에서 선택한 솔루션 이름을 입력하고, 배포하려는 지역을 선택한 후, 사용하려는 Azure 구독을 선택합니다. 그런 다음 솔루션 만들기를 클릭합니다.
  4. 프로비전 프로세스가 완료될 때까지 기다립니다.

경고

미리 구성된 솔루션에서는 청구 가능한 Azure 서비스를 사용합니다. 불필요한 비용을 방지하기 위해 완료된 후에는 미리 구성된 솔루션을 구독에서 제거해야 합니다. https://www.azureiotsolutions.com/ 페이지를 방문하여 미리 구성된 솔루션을 구독에서 완전히 제거할 수 있습니다.

원격 모니터링 솔루션의 프로비전 프로세스가 완료되면 시작 을 클릭하여 브라우저에서 솔루션 대시보드를 엽니다.

솔루션 대시보드

원격 모니터링 솔루션에서 디바이스 프로비전

참고

솔루션에 디바이스가 이미 프로비전되어 있으면 이 단계를 건너뜁니다. 클라이언트 애플리케이션을 만들 때 디바이스 자격 증명을 알아야 합니다.

미리 구성된 솔루션에 연결하는 디바이스는 유효한 자격 증명을 사용하여 IoT Hub에 자신을 식별할 수 있어야 합니다. 솔루션 대시보드에서 디바이스 자격 증명을 검색할 수 있습니다. 이 자습서의 뒷부분에서는 클라이언트 애플리케이션에 있는 디바이스 자격 증명을 포함합니다.

원격 모니터링 솔루션에 디바이스를 추가하려면 솔루션 대시보드에서 다음 단계를 완료합니다.

  1. 대시보드의 왼쪽 아래 모서리에서 디바이스 추가를 클릭합니다.

    디바이스 추가

  2. 사용자 지정 디바이스 패널에서 새로 추가를 클릭합니다.

    사용자 지정 디바이스 추가

  3. 직접 나만의 디바이스 ID 정의를 선택합니다. 디바이스 ID(예: mydevice)를 입력하고 ID 확인을 클릭하여 해당 이름이 이미 사용되고 있는지 확인한 후 만들기를 클릭하여 디바이스를 프로비전합니다.

    디바이스 ID 추가

  4. 디바이스 자격 증명(디바이스 ID, IoT Hub 호스트 이름 및 디바이스 키)을 적어 둡니다. 원격 모니터링 솔루션에 연결하려면 클라이언트 애플리케이션에 이러한 값이 필요합니다. 완료를 클릭합니다.

    디바이스 자격 증명 보기

  5. 솔루션 대시보드의 디바이스 목록에서 디바이스를 선택합니다. 그런 다음, 디바이스 세부 정보 패널에서 디바이스 사용을 클릭합니다. 현재 디바이스 상태는 실행 중입니다. 이제 원격 모니터링 솔루션은 디바이스에서 원격 분석을 수신하고 디바이스에서 메서드를 호출할 수 있습니다.

샘플 C 클라이언트 Linux 빌드 및 실행

다음 단계에서는 미리 구성된 원격 모니터링 솔루션과 통신하는 클라이언트 애플리케이션을 만드는 방법을 보여 줍니다. 이 애플리케이션은 C로 작성되었으며 Ubuntu Linux에서 작성 및 실행됩니다.

이러한 단계를 완료하려면 Ubuntu 버전 15.04 또는 15.10을 실행하는 디바이스가 필요합니다. 계속하기 전에 다음 명령을 사용하여 Ubuntu 디바이스에서 필수 구성 요소 패키지를 설치합니다.

sudo apt-get install cmake gcc g++

디바이스에 클라이언트 라이브러리 설치

Azure IoT Hub 클라이언트 라이브러리를 apt-get 명령을 사용하여 Ubuntu 디바이스에 설치할 수 있는 패키지로 사용할 수 있습니다. Ubuntu 컴퓨터에서 IoT Hub 클라이언트 라이브러리와 헤더 파일을 포함하는 패키지를 설치하려면 다음 단계를 완료합니다.

  1. 셸에서 AzureIoT 리포지토리를 컴퓨터에 추가합니다.

    sudo add-apt-repository ppa:aziotsdklinux/ppa-azureiot
    sudo apt-get update
    
  2. azure-iot-sdk-c-dev 패키지 설치

    sudo apt-get install -y azure-iot-sdk-c-dev
    

Parson JSON 파서 설치

IoT Hub 클라이언트 라이브러리는 Parson JSON 파서를 사용하여 메시지 페이로드를 구문 분석합니다. 컴퓨터의 적합한 폴더에서 다음 명령을 사용하여 Parson GitHub 리포지토리를 복제합니다.

git clone https://github.com/kgabis/parson.git

프로젝트 준비

Ubuntu 머신에서 remote_monitoring 폴더를 만듭니다. remote_monitoring 폴더에서 다음을 수행합니다.

  • main.c, remote_monitoring.c, remote_monitoring.hCMakeLists.txt 네 개의 파일을 만듭니다.
  • parson이라는 폴더를 만듭니다.

Parson 리포지토리의 로컬 복사본에서 parson.cparson.h 파일을 remote_monitoring/parson 폴더에 복사합니다.

텍스트 편집기에서 remote_monitoring.c 파일을 엽니다. 다음 #include 문을 추가합니다.

#include "iothubtransportmqtt.h"
#include "schemalib.h"
#include "iothub_client.h"
#include "serializer_devicetwin.h"
#include "schemaserializer.h"
#include "azure_c_shared_utility/threadapi.h"
#include "azure_c_shared_utility/platform.h"
#include "parson.h"

IoT 디바이스의 동작 지정

IoT Hub serializer 클라이언트 라이브러리는 모델을 사용하여 디바이스가 IoT Hub와 교환하는 메시지의 형식을 지정합니다.

  1. 다음 변수 선언을 #include 문 뒤에 추가합니다. 원격 모니터링 솔루션 대시보드에서 자리 표시자 값 [Device ID] 및 [Device Key]를 디바이스에 대해 기록한 값으로 바꿉니다. 솔루션 대시보드에서 IoT Hub 호스트 이름을 사용하여 [IoTHub Name]을 바꿉니다. 예를 들어 IoT Hub 호스트 이름이 contoso.azure-devices.net인 경우 [IoTHub Name]을 contoso로 바꿉니다.

    static const char* deviceId = "[Device Id]";
    static const char* connectionString = "HostName=[IoTHub Name].azure-devices.net;DeviceId=[Device Id];SharedAccessKey=[Device Key]";
    
  2. 다음 코드를 추가하여 디바이스에서 IoT Hub와 통신하도록 지원하는 모델을 정의합니다. 이 모델은 디바이스에서 다음이 가능하도록 지정합니다.

    • 온도, 외부 온도, 습도 및 디바이스 ID를 원격 분석으로 보낼 수 있습니다.
    • 디바이스에 대한 메타데이터를 IoT Hub에 보낼 수 있습니다. 디바이스는 시작 시 DeviceInfo 개체에서 기본 메타데이터를 보냅니다.
    • reported 속성을 IoT Hub의 디바이스 쌍에 보낼 수 있습니다. 이러한 reported 속성은 구성, 디바이스 및 시스템 속성으로 그룹화됩니다.
    • IoT Hub의 디바이스 쌍에서 설정된 desired 속성을 수신하고 작업을 수행할 수 있습니다.
    • 솔루션 포털을 통해 호출된 RebootInitiateFirmwareUpdate 직접 메서드에 응답할 수 있습니다. 디바이스는 reported 속성을 사용하여 지원하는 직접 메서드에 대한 정보를 보냅니다.
    // Define the Model
    BEGIN_NAMESPACE(Contoso);
    
    /* Reported properties */
    DECLARE_STRUCT(SystemProperties,
      ascii_char_ptr, Manufacturer,
      ascii_char_ptr, FirmwareVersion,
      ascii_char_ptr, InstalledRAM,
      ascii_char_ptr, ModelNumber,
      ascii_char_ptr, Platform,
      ascii_char_ptr, Processor,
      ascii_char_ptr, SerialNumber
    );
    
    DECLARE_STRUCT(LocationProperties,
      double, Latitude,
      double, Longitude
    );
    
    DECLARE_STRUCT(ReportedDeviceProperties,
      ascii_char_ptr, DeviceState,
      LocationProperties, Location
    );
    
    DECLARE_MODEL(ConfigProperties,
      WITH_REPORTED_PROPERTY(double, TemperatureMeanValue),
      WITH_REPORTED_PROPERTY(uint8_t, TelemetryInterval)
    );
    
    /* Part of DeviceInfo */
    DECLARE_STRUCT(DeviceProperties,
      ascii_char_ptr, DeviceID,
      _Bool, HubEnabledState
    );
    
    DECLARE_DEVICETWIN_MODEL(Thermostat,
      /* Telemetry (temperature, external temperature and humidity) */
      WITH_DATA(double, Temperature),
      WITH_DATA(double, ExternalTemperature),
      WITH_DATA(double, Humidity),
      WITH_DATA(ascii_char_ptr, DeviceId),
    
      /* DeviceInfo */
      WITH_DATA(ascii_char_ptr, ObjectType),
      WITH_DATA(_Bool, IsSimulatedDevice),
      WITH_DATA(ascii_char_ptr, Version),
      WITH_DATA(DeviceProperties, DeviceProperties),
    
      /* Device twin properties */
      WITH_REPORTED_PROPERTY(ReportedDeviceProperties, Device),
      WITH_REPORTED_PROPERTY(ConfigProperties, Config),
      WITH_REPORTED_PROPERTY(SystemProperties, System),
    
      WITH_DESIRED_PROPERTY(double, TemperatureMeanValue, onDesiredTemperatureMeanValue),
      WITH_DESIRED_PROPERTY(uint8_t, TelemetryInterval, onDesiredTelemetryInterval),
    
      /* Direct methods implemented by the device */
      WITH_METHOD(Reboot),
      WITH_METHOD(InitiateFirmwareUpdate, ascii_char_ptr, FwPackageURI),
    
      /* Register direct methods with solution portal */
      WITH_REPORTED_PROPERTY(ascii_char_ptr_no_quotes, SupportedMethods)
    );
    
    END_NAMESPACE(Contoso);
    

디바이스의 동작 구현

이제 모델에 정의된 동작을 구현하는 코드를 추가합니다.

  1. 솔루션 대시보드에서 설정된 desired 속성을 처리하는 다음 함수를 추가합니다. 이러한 desired 속성은 모델에서 정의됩니다.

    void onDesiredTemperatureMeanValue(void* argument)
    {
      /* By convention 'argument' is of the type of the MODEL */
      Thermostat* thermostat = argument;
      printf("Received a new desired_TemperatureMeanValue = %f\r\n", thermostat->TemperatureMeanValue);
    
    }
    
    void onDesiredTelemetryInterval(void* argument)
    {
      /* By convention 'argument' is of the type of the MODEL */
      Thermostat* thermostat = argument;
      printf("Received a new desired_TelemetryInterval = %d\r\n", thermostat->TelemetryInterval);
    }
    
  2. IoT Hub를 통해 호출된 직접 메서드를 처리하는 다음 함수를 추가합니다. 이러한 직접 메서드는 모델에서 정의됩니다.

    /* Handlers for direct methods */
    METHODRETURN_HANDLE Reboot(Thermostat* thermostat)
    {
      (void)(thermostat);
    
      METHODRETURN_HANDLE result = MethodReturn_Create(201, "\"Rebooting\"");
      printf("Received reboot request\r\n");
      return result;
    }
    
    METHODRETURN_HANDLE InitiateFirmwareUpdate(Thermostat* thermostat, ascii_char_ptr FwPackageURI)
    {
      (void)(thermostat);
    
      METHODRETURN_HANDLE result = MethodReturn_Create(201, "\"Initiating Firmware Update\"");
      printf("Recieved firmware update request. Use package at: %s\r\n", FwPackageURI);
      return result;
    }
    
  3. 미리 구성된 솔루션으로 메시지를 보내는 다음 함수를 추가합니다.

    /* Send data to IoT Hub */
    static void sendMessage(IOTHUB_CLIENT_HANDLE iotHubClientHandle, const unsigned char* buffer, size_t size)
    {
      IOTHUB_MESSAGE_HANDLE messageHandle = IoTHubMessage_CreateFromByteArray(buffer, size);
      if (messageHandle == NULL)
      {
        printf("unable to create a new IoTHubMessage\r\n");
      }
      else
      {
        if (IoTHubClient_SendEventAsync(iotHubClientHandle, messageHandle, NULL, NULL) != IOTHUB_CLIENT_OK)
        {
          printf("failed to hand over the message to IoTHubClient");
        }
        else
        {
          printf("IoTHubClient accepted the message for delivery\r\n");
        }
    
        IoTHubMessage_Destroy(messageHandle);
      }
      free((void*)buffer);
    }
    
  4. 디바이스가 미리 구성된 솔루션에 새 reported 속성 값을 전송했을 때 실행되는 다음 콜백 처리기를 추가합니다.

    /* Callback after sending reported properties */
    void deviceTwinCallback(int status_code, void* userContextCallback)
    {
      (void)(userContextCallback);
      printf("IoTHub: reported properties delivered with status_code = %u\n", status_code);
    }
    
  5. 다음 함수를 추가하여 클라우드의 미리 구성된 솔루션에 디바이스를 연결하고 데이터를 교환합니다. 이 함수는 다음 단계를 수행합니다.

    • 플랫폼을 초기화합니다.
    • serialization 라이브러리와 함께 Contoso 네임스페이스를 등록합니다.
    • 디바이스 연결 문자열을 사용하여 클라이언트를 초기화합니다.
    • 자동 온도 조절기 모델의 인스턴스를 만듭니다.
    • reported 속성 값을 만들고 보냅니다.
    • DeviceInfo 개체를 보냅니다.
    • 1초마다 원격 분석을 보내는 루프를 만듭니다.
    • 모든 리소스의 초기화를 취소합니다.
    void remote_monitoring_run(void)
    {
      if (platform_init() != 0)
      {
        printf("Failed to initialize the platform.\n");
      }
      else
      {
        if (SERIALIZER_REGISTER_NAMESPACE(Contoso) == NULL)
        {
          printf("Unable to SERIALIZER_REGISTER_NAMESPACE\n");
        }
        else
        {
          IOTHUB_CLIENT_HANDLE iotHubClientHandle = IoTHubClient_CreateFromConnectionString(connectionString, MQTT_Protocol);
          if (iotHubClientHandle == NULL)
          {
            printf("Failure in IoTHubClient_CreateFromConnectionString\n");
          }
          else
          {
    #ifdef MBED_BUILD_TIMESTAMP
            // For mbed add the certificate information
            if (IoTHubClient_SetOption(iotHubClientHandle, "TrustedCerts", certificates) != IOTHUB_CLIENT_OK)
            {
                printf("Failed to set option \"TrustedCerts\"\n");
            }
    #endif // MBED_BUILD_TIMESTAMP
            Thermostat* thermostat = IoTHubDeviceTwin_CreateThermostat(iotHubClientHandle);
            if (thermostat == NULL)
            {
              printf("Failure in IoTHubDeviceTwin_CreateThermostat\n");
            }
            else
            {
              /* Set values for reported properties */
              thermostat->Config.TemperatureMeanValue = 55.5;
              thermostat->Config.TelemetryInterval = 3;
              thermostat->Device.DeviceState = "normal";
              thermostat->Device.Location.Latitude = 47.642877;
              thermostat->Device.Location.Longitude = -122.125497;
              thermostat->System.Manufacturer = "Contoso Inc.";
              thermostat->System.FirmwareVersion = "2.22";
              thermostat->System.InstalledRAM = "8 MB";
              thermostat->System.ModelNumber = "DB-14";
              thermostat->System.Platform = "Plat 9.75";
              thermostat->System.Processor = "i3-7";
              thermostat->System.SerialNumber = "SER21";
              /* Specify the signatures of the supported direct methods */
              thermostat->SupportedMethods = "{\"Reboot\": \"Reboot the device\", \"InitiateFirmwareUpdate--FwPackageURI-string\": \"Updates device Firmware. Use parameter FwPackageURI to specify the URI of the firmware file\"}";
    
              /* Send reported properties to IoT Hub */
              if (IoTHubDeviceTwin_SendReportedStateThermostat(thermostat, deviceTwinCallback, NULL) != IOTHUB_CLIENT_OK)
              {
                printf("Failed sending serialized reported state\n");
              }
              else
              {
                printf("Send DeviceInfo object to IoT Hub at startup\n");
    
                thermostat->ObjectType = "DeviceInfo";
                thermostat->IsSimulatedDevice = 0;
                thermostat->Version = "1.0";
                thermostat->DeviceProperties.HubEnabledState = 1;
                thermostat->DeviceProperties.DeviceID = (char*)deviceId;
    
                unsigned char* buffer;
                size_t bufferSize;
    
                if (SERIALIZE(&buffer, &bufferSize, thermostat->ObjectType, thermostat->Version, thermostat->IsSimulatedDevice, thermostat->DeviceProperties) != CODEFIRST_OK)
                {
                  (void)printf("Failed serializing DeviceInfo\n");
                }
                else
                {
                  sendMessage(iotHubClientHandle, buffer, bufferSize);
                }
    
                /* Send telemetry */
                thermostat->Temperature = 50;
                thermostat->ExternalTemperature = 55;
                thermostat->Humidity = 50;
                thermostat->DeviceId = (char*)deviceId;
    
                while (1)
                {
                  unsigned char*buffer;
                  size_t bufferSize;
    
                  (void)printf("Sending sensor value Temperature = %f, Humidity = %f\n", thermostat->Temperature, thermostat->Humidity);
    
                  if (SERIALIZE(&buffer, &bufferSize, thermostat->DeviceId, thermostat->Temperature, thermostat->Humidity, thermostat->ExternalTemperature) != CODEFIRST_OK)
                  {
                    (void)printf("Failed sending sensor value\r\n");
                  }
                  else
                  {
                    sendMessage(iotHubClientHandle, buffer, bufferSize);
                  }
    
                  ThreadAPI_Sleep(1000);
                }
    
                IoTHubDeviceTwin_DestroyThermostat(thermostat);
              }
            }
            IoTHubClient_Destroy(iotHubClientHandle);
          }
          serializer_deinit();
        }
      }
      platform_deinit();
    }
    

    참고로, 미리 구성된 솔루션으로 전송되는 샘플 원격 분석 메시지는 다음과 같습니다.

    {"DeviceId":"mydevice01", "Temperature":50, "Humidity":50, "ExternalTemperature":55}
    

remote_monitoring_run 함수 호출

텍스트 편집기에서 remote_monitoring.h 파일을 엽니다. 다음 코드를 추가합니다.

void remote_monitoring_run(void);

텍스트 편집기에서 main.c 파일을 엽니다. 다음 코드를 추가합니다.

#include "remote_monitoring.h"

int main(void)
{
    remote_monitoring_run();

    return 0;
}

애플리케이션 빌드 및 실행

다음 단계에서는 CMake를 사용하여 클라이언트 애플리케이션을 빌드하는 방법을 설명합니다.

  1. 텍스트 편집기에서 remote_monitoring 폴더의 CMakeLists.txt 파일을 엽니다.

  2. 클라이언트 애플리케이션을 작성하는 방법을 정의하려면 다음 지침을 추가합니다.

    macro(compileAsC99)
      if (CMAKE_VERSION VERSION_LESS "3.1")
        if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
          set (CMAKE_C_FLAGS "--std=c99 ${CMAKE_C_FLAGS}")
          set (CMAKE_CXX_FLAGS "--std=c++11 ${CMAKE_CXX_FLAGS}")
        endif()
      else()
        set (CMAKE_C_STANDARD 99)
        set (CMAKE_CXX_STANDARD 11)
      endif()
    endmacro(compileAsC99)
    
    cmake_minimum_required(VERSION 2.8.11)
    compileAsC99()
    
    set(AZUREIOT_INC_FOLDER "${CMAKE_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/parson" "/usr/include/azureiot" "/usr/include/azureiot/inc")
    
    include_directories(${AZUREIOT_INC_FOLDER})
    
    set(sample_application_c_files
        ./parson/parson.c
        ./remote_monitoring.c
        ./main.c
    )
    
    set(sample_application_h_files
        ./parson/parson.h
        ./remote_monitoring.h
    )
    
    add_executable(sample_app ${sample_application_c_files} ${sample_application_h_files})
    
    target_link_libraries(sample_app
        serializer
        iothub_client
        iothub_client_mqtt_transport
        aziotsharedutil
        umqtt
        pthread
        curl
        ssl
        crypto
        m
    )
    
  3. remote_monitoring 폴더에서 CMake가 생성하는 make 파일을 저장할 폴더를 만든 후 다음과 같이 cmakemake 명령을 실행합니다.

    mkdir cmake
    cd cmake
    cmake ../
    make
    
  4. 클라이언트 애플리케이션을 실행하고 IoT Hub에 원격 분석을 전송합니다.

    ./sample_app
    

대시보드에서 디바이스 원격 분석 보기

디바이스가 IoT Hub에 보내는 원격 분석 데이터를 원격 모니터링 솔루션의 대시보드에서 볼 수 있습니다.

  1. 브라우저에서 원격 모니터링 솔루션 대시보드로 돌아가서 왼쪽 패널의 디바이스를 클릭하여 디바이스 목록으로 이동합니다.

  2. 디바이스 목록에서 디바이스의 상태가 실행 중으로 표시되어야 합니다. 그렇지 않은 경우 디바이스 세부 정보 패널에서 디바이스 사용을 클릭합니다.

    디바이스 상태 보기

  3. 대시보드를 클릭하여 대시보드로 돌아가 보려는 디바이스 드롭다운에서 디바이스를 선택하여 원격 분석을 봅니다. 샘플 애플리케이션의 원격 분석은 내부 온도가 50 단위이고 외부 온도가 55 단위이고 습도가 50 단위입니다.

    디바이스 원격 분석 보기

디바이스에서 메서드 호출

원격 모니터링 솔루션의 대시보드에서는 IoT Hub를 통해 디바이스에 메서드를 호출하도록 요청할 수 있습니다. 예를 들어 원격 모니터링 솔루션에서 디바이스 재부팅을 시뮬레이션하는 메서드를 호출할 수 있습니다.

  1. 원격 모니터링 솔루션 대시보드에서 왼쪽의 디바이스를 클릭하여 디바이스 목록으로 이동합니다.

  2. 디바이스 목록에서 사용자 디바이스의 디바이스 ID를 클릭합니다.

  3. 디바이스 세부 정보 패널에서 메서드를 클릭합니다.

    디바이스 메서드

  4. 메서드 드롭다운에서 InitiateFirmwareUpdate를 선택한 다음 FWPACKAGEURI에 더미 URL을 입력합니다. 메서드 호출을 클릭하여 디바이스에서 메서드를 호출합니다.

    디바이스 메서드 호출

  5. 디바이스가 메서드를 처리하는 경우 디바이스 코드를 실행하는 콘솔에 메시지가 표시됩니다. 메서드의 결과가 솔루션 포털의 기록에 추가됩니다.

    메서드 기록 보기

다음 단계

미리 구성된 솔루션 사용자 지정 문서에는 이 샘플을 확대하는 방법이 설명되어 있습니다. 가능한 확장에는 실제 센서 사용 및 추가적인 명령 구현이 포함됩니다.

azureiotsuite.com 사이트에 대한 사용 권한에 대해 자세히 살펴보겠습니다.