다음을 통해 공유


미리 구성된 솔루션 사용자 지정

Azure IoT Suite와 함께 제공되는 미리 구성된 솔루션은 제품 내에서 함께 협력하는 서비스를 보여주는 엔드투엔드 솔루션을 제공합니다. 이 시작 지점에서 특정 시나리오에 대한 솔루션을 확장하고 사용자 지정할 수 있는 다양한 위치가 있습니다. 다음 섹션에서는 이러한 일반적인 사용자 지정 위치를 설명합니다.

소스 코드 찾기

미리 구성된 솔루션에 대한 소스 코드는 다음 리포지토리의 GitHub에서 사용할 수 있습니다.

미리 구성된 솔루션에 대한 소스 코드는 패턴과 Azure IoT Suite를 사용하여 IoT 솔루션의 엔드투엔드 기능을 구현하는 데 사용하는 작업 방식과 패턴을 보여 주기 위해 제공됩니다. GitHub 리포지토리에서 솔루션을 빌드 및 배포하는 방법에 대한 자세한 내용을 확인할 수 있습니다.

미리 구성된 규칙 변경

원격 모니터링 솔루션은 솔루션에서 디바이스 정보, 원격 분석 및 규칙 논리를 다루는 세 개의 Azure Stream Analytics 작업을 포함합니다.

세 개의 Stream Analytics 작업 및 해당 구문은 원격 모니터링 미리 구성된 솔루션 연습에 자세히 설명되어 있습니다.

논리를 변경하거나 시나리오에 관련된 논리를 추가하도록 이러한 작업을 직접 편집할 수 있습니다. 다음과 같이 Stream Analytics 작업을 찾을 수 있습니다.

  1. Azure 포털로 이동합니다.

  2. IoT 솔루션과 이름이 동일한 새 리소스 그룹으로 이동합니다.

  3. 수정하려는 Azure Stream Analytics 작업을 선택합니다.

  4. 명령 집합에서 중지를 선택하여 작업을 중지합니다.

  5. 입력, 쿼리 및 출력을 편집합니다.

    간단한 수정은 규칙 작업에 대한 쿼리를 ">" 대신 "<"를 사용하도록 변경하는 것입니다. 규칙을 편집할 때 솔루션 포털에는 여전히 ">" 가 표시되지만 기본 작업의 변경으로 인해 동작이 대칭 이동되는 방식을 확인합니다.

  6. 작업 시작

참고

원격 모니터링 대시보드는 특정 데이터에 따라 달라지므로 작업 변경은 대시보드 실패를 일으킬 수 있습니다.

사용자 고유 규칙 추가

미리 구성된 Azure Stream Analytics 작업 변경 외에도 Azure Portal을 사용하여 새 작업을 추가하거나 기존 작업에 새 쿼리를 추가할 수 있습니다.

디바이스 사용자 지정

가장 일반적인 확장 작업 중 하나는 시나리오와 관련된 디바이스를 사용하는 것입니다. 디바이스를 사용하는 여러 방법이 있습니다. 이 방법은 해당 시나리오에 맞게 시뮬레이션된 디바이스를 변경하거나 IoT 디바이스 SDK 를 사용하여 솔루션에 대한 실제 디바이스에 연결하는 것이 포함됩니다.

디바이스를 추가하기 위한 단계별 가이드는 Iot Suite 연결 디바이스 문서 및 원격 모니터링 C SDK 샘플을 참조하세요. 이 샘플은 미리 구성된 원격 모니터링 솔루션을 사용하도록 설계되었습니다.

고유한 시뮬레이션된 디바이스 만들기

.NET 시뮬레이터는 원격 모니터링 솔루션 소스 코드에 포함되어 있습니다. 이 시뮬레이터는 솔루션의 일부로 프로비전되었으며 다른 메타데이터, 원격 분석을 보내거나 다른 명령 및 메서드에 응답하도록 변경될 수 있습니다.

미리 구성된 솔루션 시뮬레이터의 원격 모니터링에서 미리 구성된 시뮬레이터는 온도 및 습도 원격 분석을 내보내는 냉각 디바이스입니다. GitHub 리포지토리를 분기한 경우 Simulator.WebJob 프로젝트에서 시뮬레이터를 수정할 수 있습니다.

시뮬레이션된 디바이스에 사용 가능한 위치

위치의 기본 집합은 시애틀/레드먼드, 워싱턴, 미국입니다. SampleDeviceFactory.cs에서 이러한 위치를 변경할 수 있습니다.

시뮬레이터에 desired 속성 업데이트 처리기 추가

솔루션 포털에서 디바이스의 desired 속성에 대한 값을 설정할 수 있습니다. 디바이스가 desired 속성 값을 검색하는 경우 속성 변경 요청을 처리하는 것이 디바이스의 책임입니다. desired 속성을 통해 속성 값 변경에 대한 지원을 추가하려면 시뮬레이터에 처리기를 추가해야 합니다.

시뮬레이터는 솔루션 포털에서 desired 값을 설정하여 업데이트할 수 있는 SetPointTempTelemetryInterval 속성에 대한 처리기를 포함합니다.

다음 예제는 CoolerDevice 클래스에서 SetPointTemp desired 속성에 대한 처리기를 보여 줍니다.

protected async Task OnSetPointTempUpdate(object value)
{
    var telemetry = _telemetryController as ITelemetryWithSetPointTemperature;
    telemetry.SetPointTemperature = Convert.ToDouble(value);

    await SetReportedPropertyAsync(SetPointTempPropertyName, telemetry.SetPointTemperature);
}

이 메서드는 원격 분석 지점 온도를 업데이트한 다음 reported 속성을 설정하여 변경 내용을 IoT Hub에 다시 보고합니다.

앞의 예제에서 패턴을 따라 사용자 고유의 속성에 대한 사용자 고유의 처리기를 추가할 수 있습니다.

또한 CoolerDevice 생성자에서 다음 예제와 같이 desired 속성을 처리기에 바인딩해야 합니다.

_desiredPropertyUpdateHandlers.Add(SetPointTempPropertyName, OnSetPointTempUpdate);

SetPointTempPropertyName은 "Config.SetPointTemp"로 정의되는 상수입니다.

시뮬레이터에 새 메서드에 대한 지원 추가

시뮬레이터를 사용자 지정하여 새 메서드(직접 메서드)에 대한 지원을 추가할 수 있습니다. 필요한 두 가지 주요 단계는 다음과 같습니다.

  • 시뮬레이터는 메서드의 세부 정보를 사용하여 미리 구성된 솔루션에서 IoT Hub에 알려야 합니다.
  • 시뮬레이터는 솔루션 탐색기에서 또는 작업을 통해 디바이스 세부 정보 패널에서 호출할 때 메서드 호출을 처리하는 코드를 포함해야 합니다.

미리 구성된 원격 모니터링 솔루션은 reported 속성을 사용하여 IoT Hub에 지원되는 메서드의 세부 정보를 보냅니다. 솔루션 백 엔드는 메서드 호출 기록과 함께 각 디바이스에서 지원하는 모든 메서드 목록을 유지 관리합니다. 디바이스에 대한 이 정보를 볼 수 있으며 솔루션 포털에서 메서드를 호출할 수 있습니다.

디바이스에서 메서드를 지원하는 것을 IoT Hub에 알리기 위해 디바이스는 reported 속성의 SupportedMethods 노드에 메서드의 세부 정보를 추가해야 합니다.

"SupportedMethods": {
  "<method signature>": "<method description>",
  "<method signature>": "<method description>"
}

메서드 서명은 다음 형식을 가집니다. <method name>--<parameter #0 name>-<parameter #1 type>-...-<parameter #n name>-<parameter #n type> 예를 들어 FwPackageURI라는 문자열 매개 변수를 예상하는 InitiateFirmwareUpdate 메서드를 지정하려면 다음 메서드 서명을 사용합니다.

InitiateFirmwareUpate--FwPackageURI-string: "description of method"

지원되는 매개 변수 형식의 목록은 인프라 프로젝트에서 CommandTypes 클래스를 참조하세요.

메서드를 삭제하려면 reported 속성에서 메서드 서명을 null로 설정합니다.

참고

솔루션 백 엔드는 디바이스에서 디바이스 정보 메시지를 받을 때 지원되는 메서드에 대한 정보만을 업데이트합니다.

Common 프로젝트에서 SampleDeviceFactory 클래스의 다음 코드 예제는 디바이스에서 전송된 reported 속성에서 SupportedMethods 목록에 메서드를 추가하는 방법을 보여 줍니다.

device.Commands.Add(new Command(
    "InitiateFirmwareUpdate",
    DeliveryType.Method,
    "Updates device Firmware. Use parameter 'FwPackageUri' to specifiy the URI of the firmware file, e.g. https://iotrmassets.blob.core.windows.net/firmwares/FW20.bin",
    new[] { new Parameter("FwPackageUri", "string") }
));

이 코드 조각은 솔루션 포털에 표시할 텍스트를 포함하는 InitiateFirmwareUpdate 메서드의 세부 정보 및 필수 메서드 매개 변수의 세부 정보를 추가합니다.

시뮬레이터는 시뮬레이터가 시작될 때 지원되는 메서드의 목록을 포함한 reported 속성을 IoT Hub에 보냅니다.

지원하는 각 메서드에 대한 시뮬레이터 코드에 처리기를 추가합니다. Simulator.WebJob 프로젝트의 CoolerDevice 클래스에서 기존 처리기를 볼 수 있습니다. 다음 예제는 InitiateFirmwareUpdate 메서드에 대한 처리기를 보여 줍니다.

public async Task<MethodResponse> OnInitiateFirmwareUpdate(MethodRequest methodRequest, object userContext)
{
    if (_deviceManagementTask != null && !_deviceManagementTask.IsCompleted)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "Device is busy"
        }, 409));
    }

    try
    {
        var operation = new FirmwareUpdate(methodRequest);
        _deviceManagementTask = operation.Run(Transport).ContinueWith(async task =>
        {
            // after firmware completed, we reset telemetry
            var telemetry = _telemetryController as ITelemetryWithTemperatureMeanValue;
            if (telemetry != null)
            {
                telemetry.TemperatureMeanValue = 34.5;
            }

            await UpdateReportedTemperatureMeanValue();
        });

        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "FirmwareUpdate accepted",
            Uri = operation.Uri
        }));
    }
    catch (Exception ex)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = ex.Message
        }, 400));
    }
}

메서드 처리기 이름은 뒤에 메서드 이름이 오는 On으로 시작해야 합니다. methodRequest 매개 변수는 솔루션 백 엔드에서 메서드 호출을 통해 전달된 모든 매개 변수를 포함합니다. 반환 값은 Task<MethodResponse>의 형식이어야 합니다. BuildMethodResponse 유틸리티 메서드를 사용하면 반환 값을 만들 수 있습니다.

메서드 처리기 내에서 다음 작업을 할 수 있습니다.

  • 비동기 작업을 시작합니다.
  • IoT Hub의 디바이스 쌍에서 desired 속성을 검색합니다.
  • CoolerDevice 클래스의 SetReportedPropertyAsync 메서드를 사용하여 단일 reported 속성을 업데이트합니다.
  • TwinCollection 인스턴스를 만들고 Transport.UpdateReportedPropertiesAsync 메서드를 호출하여 여러 reported 속성을 업데이트합니다.

앞의 펌웨어 업데이트 예제는 다음 단계를 수행합니다.

  • 디바이스가 펌웨어 업데이트 요청을 수락할 수 있는지 확인합니다.
  • 비동기적으로 펌웨어 업데이트 작업을 시작하고 작업이 완료되면 원격 분석을 다시 설정합니다.
  • "FirmwareUpdate 수락" 메시지를 즉시 반환하여 디바이스에서 요청이 수락되었다는 것을 나타냅니다.

고유한 (물리적) 디바이스 빌드 및 사용

Azure IoT SDK 는 IoT 솔루션으로 다양한 디바이스 유형(언어 및 운영 체제)을 연결하기 위한 라이브러리를 제공합니다.

대시보드 제한 수정

대시보드 드롭다운에 표시되는 디바이스 수

기본값은 200입니다. DashboardController.cs에서 이 수를 변경할 수 있습니다.

Bing 지도 컨트롤에 표시할 핀 수

기본값은 200입니다. TelemetryApiController.cs에서 이 수를 변경할 수 있습니다.

원격 분석 그래프의 시간 간격

기본값은 10분입니다. TelmetryApiController.cs에서 이 값을 변경할 수 있습니다.

피드백

이 문서에서 포함했으면 하는 사용자 지정이 있나요? 사용자 의견에 기능 제안을 추가하거나 이 문서에 대한 의견을 입력해 주시기 바랍니다.

다음 단계

미리 구성된 솔루션을 사용자 지정하기 위한 옵션에 대한 자세한 내용은 다음을 참조하세요.