다음을 통해 공유


미리 구성된 원격 모니터링 솔루션에서 사용자 지정 규칙 만들기

소개

미리 구성된 솔루션에서 디바이스에 대한 원격 분석 값이 특정 임계값에 도달할 때 트리거되는 규칙을 구성할 수 있습니다. 원격 모니터링 사전 구성 솔루션으로 동적 원격 분석 사용에서는 ExternalTemperature와 같은 사용자 지정 원격 분석 값을 솔루션에 추가하는 방법을 설명합니다. 이 문서에서는 솔루션에 동적 원격 분석 형식에 대한 사용자 지정 규칙을 만드는 방법을 보여 줍니다.

이 자습서에서는 간단한 Node.js 시뮬레이트 디바이스를 사용하여 미리 구성된 솔루션 백 엔드로 보낼 동적 원격 분석을 생성합니다. 그런 후 RemoteMonitoring Visual Studio 솔루션에서 사용자 지정 규칙을 추가하고 사용자 지정된 이 백 엔드를 Azure 구독에 배포합니다.

이 자습서를 완료하려면 다음이 필요합니다.

  • 활성화된 Azure 구독. 계정이 없는 경우 몇 분 만에 무료 평가판 계정을 만들 수 있습니다. 자세한 내용은 Azure 평가판을 참조하세요.
  • 시뮬레이션된 디바이스를 만들기 위한 Node.js 버전 0.12.x 이상
  • 새 규칙으로 미리 구성된 솔루션 백 엔드를 수정하기 위한 Visual Studio 2015 또는 Visual Studio 2017

솔루션 프로비전

계정에서 미리 구성된 원격 모니터링 솔루션을 미리 프로비전하지 않은 경우 다음 작업을 수행합니다.

  1. Azure 계정 자격 증명을 사용하여 azureiotsuite.com에 로그인한 다음, +를 클릭하여 솔루션을 만듭니다.
  2. 원격 모니터링 타일에서 선택을 클릭합니다.
  3. 미리 구성된 원격 모니터링 솔루션에 솔루션 이름 을 입력합니다.
  4. 솔루션을 프로비전하는 데 사용할 지역구독을 선택합니다.
  5. 솔루션 만들기 를 클릭하여 프로비전 프로세스를 시작합니다. 일반적으로 이 프로세스는 실행하는 데 몇 분 정도 걸립니다.

프로비전 프로세스가 완료될 때까지 대기

  1. 프로비전 상태인 솔루션 타일을 클릭합니다.
  2. Azure 서비스가 Azure 구독에 배포될 때 프로비전 상태 입니다.
  3. 프로비전이 완료되면 준비상태로 바뀝니다.
  4. 타일을 클릭하여 오른쪽 창에 솔루션의 세부 정보를 표시합니다.

참고

미리 구성된 솔루션을 배포하는 데 문제가 발생하면 azureiotsuite.com 사이트에 대한 사용 권한FAQ를 검토하세요. 문제가 지속되면 포털에서 서비스 티켓을 만듭니다.

목록에는 없지만 솔루션에 대해 참조하고 싶은 세부 정보가 있나요? 사용자 의견에 기능 제안을 보내주세요.

배포를 위해 선택한 솔루션 이름을 기록해 둡니다. 이 솔루션은 이 자습서의 뒷부분에서 필요합니다.

Node.js 시뮬레이션 디바이스 구성

  1. 원격 모니터링 대시보드에서 + 디바이스 추가를 클릭한 다음, 사용자 지정 디바이스를 추가합니다. IoT Hub 호스트 이름, 디바이스 ID, 디바이스 키를 메모합니다. 이 자습서에서 나중에 remote_monitoring.js 디바이스 클라이언트 애플리케이션을 준비할 때 해당 정보가 필요합니다.

  2. Node.js 버전 0.12.x 이상이 개발 컴퓨터에 설치되었는지 확인합니다. 명령 프롬프트 또는 쉘에서 node --version 을(를) 실행하고 버전을 확인합니다. Linux에서 Node.js를 설치하기 위한 패키지 관리자 사용에 관한 정보는 패키지 관리자를 통해 Node.js 설치를 참조하세요.

  3. Node.js를 설치했으면 azure-iot-sdk-node 리포지토리의 최신 버전을 개발 컴퓨터에 복제합니다. 항상 최신 라이브러리와 샘플 버전의 마스터 분기를 사용합니다.

  4. azure-iot-sdk-node 리포지토리의 로컬 사본의 node/device/samples 폴더에서 다음 두 파일을 개발 컴퓨터의 빈 폴더에 복사합니다.

    • packages.json
    • remote_monitoring.js
  5. remote_monitoring.js 파일을 열고 다음 변수 정의를 찾습니다.

    var connectionString = "[IoT Hub device connection string]";
    
  6. [IoT Hub device connection string] 을 디바이스 연결 문자열로 바꿉니다. 1단계에서 메모한 IoT Hub 호스트 이름, 디바이스 ID, 디바이스 키 값을 사용합니다. 디바이스 연결 문자열은 다음과 같은 형식입니다.

    HostName={your IoT Hub hostname};DeviceId={your device id};SharedAccessKey={your device key}
    

    IoT Hub 호스트 이름이 contoso이고 디바이스 ID가 mydevice이면 연결 문자열은 다음 코드 조각과 같습니다.

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. 파일을 저장합니다. 이러한 파일이 포함된 폴더에서 쉘 또는 명령 프롬프트에 다음 명령을 입력하고 필요한 패키지를 설치한 다음, 샘플 애플리케이션을 실행합니다.

    npm install
    node remote_monitoring.js
    

작업 중인 동적 원격 분석 관찰

대시보드는 기존 시뮬레이션 디바이스의 온도와 습도 원격 분석을 보여줍니다.

The default dashboard

이전 섹션에서 실행한 Node.js 시뮬레이션 디바이스를 선택했다면 온도, 습도, 외부 온도 원격 분석이 보일 것입니다.

Add external temperature to the dashboard

원격 모니터링 솔루션은 추가 외부 온도 원격 분석 형식을 자동으로 인식하고 대시보드 차트에 추가합니다.

ExternalTemperature 원격 분석을 미리 구성된 솔루션으로 전송하는지 확인한 다음 Node.js 콘솔 앱을 중지할 수 있습니다. 솔루션에 사용자 지정 규칙을 추가한 후에 이 Node.js 콘솔 앱을 다시 실행하게 되므로 콘솔 창을 열어 둡니다.

규칙 스토리지 위치

규칙에 대한 정보는 다음 두 위치에 유지됩니다.

  • DeviceRulesNormalizedTable 테이블 - 이 테이블은 솔루션 포털에서 정의된 규칙에 대한 정규화된 참조를 저장합니다. 솔루션 포털에 디바이스 규칙이 표시되면 이 테이블에서 규칙 정의를 쿼리합니다.
  • DeviceRules blob - 이 blob은 등록된 모든 디바이스에 대해 정의된 모든 규칙을 저장하며 Azure Stream Analytics 작업에 대한 참조 입력으로 정의됩니다.   기존 규칙을 업데이트하거나 솔루션 포털에서 새 규칙을 정의하는 경우 변경 내용을 반영하도록 테이블 및 blob이 모두 업데이트됩니다. 포털에 표시된 규칙 정의는 테이블 저장소에서 가져오며, Stream Analytics 작업에서 참조되는 규칙 정의는 blob에서 가져옵니다.

RemoteMonitoring Visual Studio 솔루션 업데이트

다음 단계에서는 시뮬레이트된 디바이스에서 전송된 ExternalTemperature 원격 분석을 사용하는 새 규칙을 포함하도록 RemoteMonitoring Visual Studio 솔루션을 수정하는 방법을 보여 줍니다.

  1. azure-iot-remote-monitoring 리포지토리를 로컬 컴퓨터의 적절한 위치로 복제하지 않은 경우 다음 Git 명령을 사용하여 지금 수행합니다.

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. Visual Studio에서 azure-iot-remote-monitoring 리포지토리의 로컬 복사본에서 RemoteMonitoring.sln 파일을 엽니다.

  3. Infrastructure\Models\DeviceRuleBlobEntity.cs 파일을 열고 다음과 같이 ExternalTemperature 속성을 추가합니다.

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. 같은 파일에 다음과 같이 ExternalTemperatureRuleOutput 속성을 추가합니다.

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. Infrastructure\Models\DeviceRuleDataFields.cs 파일을 열고, 기존 Humidity 속성 뒤에 다음 ExternalTemperature 속성을 추가합니다.

    public static string ExternalTemperature
    {
    

    get { return "ExternalTemperature"; } } ```

  1. 동일한 파일에서 다음과 같이 ExternalTemperature를 포함하도록 _availableDataFields 메서드를 업데이트합니다.

    private static List<string> _availableDataFields = new List<string>
    {                    
        Temperature, Humidity, ExternalTemperature
    };
    

7. Infrastructure\Repository\DeviceRulesRepository.cs 파일을 열고 다음과 같이 BuildBlobEntityListFromTableRows 메서드를 수정합니다.

```csharp
else if (rule.DataField == DeviceRuleDataFields.Humidity)
{
    entity.Humidity = rule.Threshold;
    entity.HumidityRuleOutput = rule.RuleOutput;
}
else if (rule.DataField == DeviceRuleDataFields.ExternalTemperature)
{
  entity.ExternalTemperature = rule.Threshold;
  entity.ExternalTemperatureRuleOutput = rule.RuleOutput;
}
```

솔루션을 다시 빌드하고 다시 배포합니다.

이제 업데이트된 솔루션을 Azure 구독에 배포할 수 있습니다.

  1. 관리자 권한 명령 프롬프트를 열고 azure-iot-remote-monitoring 리포지토리의 로컬 복사본 루트로 이동합니다.

  2. 업데이트된 솔루션을 배포하려면 {deployment name}을 이전에 적어둔 미리 구성된 솔루션 배포의 이름으로 바꾸어 다음 명령을 실행합니다.

    build.cmd cloud release {deployment name}
    

Stream Analytics 작업 업데이트

배포가 완료되면 새 규칙 정의를 사용하도록 Stream Analytics 작업을 업데이트할 수 있습니다.

  1. Azure Portal에서 미리 구성된 솔루션 리소스를 포함하는 리소스 그룹으로 이동합니다. 이 리소스 그룹은 배포하는 동안 솔루션에 대해 지정한 동일한 이름을 갖습니다.

  2. {배포 이름}-규칙 Stream Analytics 작업으로 이동합니다.

3. 중지 를 클릭하여 Stream Analytics 작업 실행을 중지합니다. (쿼리를 편집하려면 스트리밍 작업이 중지될 때까지 기다려야 합니다.)

4. 쿼리를 클릭합니다. ExternalTemperature에 대한 SELECT 문을 포함하도록 쿼리를 편집합니다. 다음 샘플에서는 새 SELECT 문을 사용하는 완전한 쿼리를 보여 줍니다.

```
WITH AlarmsData AS 
(
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Temperature' as ReadingType,
     Stream.Temperature as Reading,
     Ref.Temperature as Threshold,
     Ref.TemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Temperature IS NOT null AND Stream.Temperature > Ref.Temperature
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Humidity' as ReadingType,
     Stream.Humidity as Reading,
     Ref.Humidity as Threshold,
     Ref.HumidityRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Humidity IS NOT null AND Stream.Humidity > Ref.Humidity
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'ExternalTemperature' as ReadingType,
     Stream.ExternalTemperature as Reading,
     Ref.ExternalTemperature as Threshold,
     Ref.ExternalTemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.ExternalTemperature IS NOT null AND Stream.ExternalTemperature > Ref.ExternalTemperature
)
 
SELECT *
INTO DeviceRulesMonitoring
FROM AlarmsData
 
SELECT *
INTO DeviceRulesHub
FROM AlarmsData
```
  1. 저장을 클릭하여 업데이트된 규칙 쿼리를 변경합니다.

  2. 시작을 클릭하여 Stream Analytics 작업 실행을 다시 시작합니다.

대시보드에서 새 규칙 추가

이제 솔루션 대시보드의 디바이스에 ExternalTemperature 규칙을 추가할 수 있습니다.

  1. 솔루션 포털로 이동합니다.

2. 디바이스 패널로 이동합니다.

3. ExternalTemperature 원격 분석을 보내는 사용자 지정 디바이스를 찾고 디바이스 세부 정보 패널에서 규칙 추가를 클릭합니다.

4. 데이터 필드에서ExternalTemperature를 선택합니다.

  1. 임계값을 56으로 설정합니다. 그런 후 규칙 저장 및 보기를 클릭합니다.

  2. 대시보드로 돌아가 경보 기록을 확인합니다.

  3. 열어 둔 콘솔 창에서 Node.js 콘솔 앱을 시작하여 ExternalTemperature 원격 분석 데이터 전송을 시작합니다.

8. 새 규칙이 트리거될 때 알람 기록 테이블에 새 알람이 표시됩니다.  

추가 정보

연산자 >을 변경하는 것은 좀 더 복잡하여 이 자습서에서 다루지 않습니다. 원하는 연산자를 사용하도록 Stream Analytics 작업을 변경할 수는 있으나 솔루션 포털에서 해당 연산자를 적용하는 것이 더 복잡한 작업입니다.

다음 단계

사용자 지정 규칙을 만드는 방법을 살펴보았으므로 이제 미리 구성된 솔루션에 대해 자세히 알아볼 수 있습니다.