Erstellen einer benutzerdefinierten Regel in der vorkonfigurierten Remoteüberwachungslösung

Einführung

In den vorkonfigurierten Lösungen können Sie Regeln konfigurieren, die ausgelöst werden, wenn ein Telemetriewert für ein Gerät einen bestimmten Schwellenwert erreicht. Unter Verwenden dynamischer Telemetriedaten mit der vorkonfigurierten Lösung für die Remoteüberwachung wird beschrieben, wie Sie Ihrer Lösung benutzerdefinierte Telemetriewerte wie ExternalTemperature hinzufügen. In diesem Artikel wird gezeigt, wie Sie eine benutzerdefinierte Regel für dynamische Telemetrietypen in Ihrer Lösung erstellen.

In diesem Tutorial wird ein einfaches simuliertes Node.js-Gerät zum Generieren dynamischer Telemetriedaten verwendet, die zum Back-End der vorkonfigurierten Lösung gesendet werden. Sie fügen anschließend der Visual Studio-Projektmappe RemoteMonitoring benutzerdefinierte Regeln hinzu und stellen dieses benutzerdefinierte Back-End Ihrem Azure-Abonnement bereit.

Voraussetzungen für dieses Tutorial:

  • Ein aktives Azure-Abonnement. Wenn Sie über kein Konto verfügen, können Sie in nur wenigen Minuten ein kostenloses Testkonto erstellen. Ausführliche Informationen finden Sie unter Einen Monat kostenlos testen.
  • Node.js-Version 0.12.x oder höher zum Erstellen eines simulierten Geräts.
  • Visual Studio 2015 oder Visual Studio 2017 zum Ändern des Back-Ends der vorkonfigurierten Lösung mit Ihren neuen Regeln

Bereitstellen der Lösung

Wenn Sie die vorkonfigurierte Lösung für die Remoteüberwachung noch nicht in Ihrem Konto bereitgestellt haben:

  1. Melden Sie sich mit den Anmeldeinformationen für Ihr Azure-Konto bei azureiotsuite.com an, und klicken Sie auf +, um eine Lösung zu erstellen.
  2. Klicken Sie auf der Kachel Remoteüberwachung auf Auswählen.
  3. Geben Sie einen Lösungsnamen für Ihre vorkonfigurierte Remoteüberwachungslösung ein.
  4. Wählen Sie die gewünschten Angaben für Region und Abonnement, um die Lösung bereitzustellen.
  5. Klicken Sie auf Lösung erstellen , um den Bereitstellungsprozess zu beginnen. Dies dauert in der Regel einige Minuten.

Warten auf den Abschluss des Bereitstellungsvorgangs

  1. Klicken Sie auf die Kachel für Ihre Lösung mit dem Status Bereitstellung .
  2. Beachten Sie die Bereitstellungsstatus während der Bereitstellung von Azure-Diensten im Azure-Abonnement.
  3. Nach Abschluss der Bereitstellung ändert sich der Status in Bereit.
  4. Klicken Sie auf die Kachel, um im rechten Bereich Details zur Lösung anzuzeigen.

Hinweis

Falls beim Bereitstellen der vorkonfigurierten Lösung Probleme auftreten, helfen Ihnen die Informationen unter Berechtigungen für die Website „azureiotsuite.com“ und die häufig gestellten Fragen weiter. Sollten die Probleme weiterhin auftreten, können Sie im Portal ein Dienstticket erstellen.

Erwarten Sie Informationen zu Ihrer Lösung, die nicht aufgeführt werden? Senden Sie uns Vorschläge für neue Funktionen über den Feedbackbereichzu.

Notieren Sie den Namen der Lösung, die Sie für Ihre Bereitstellung ausgewählt haben. Sie benötigen diesen Lösungsnamen im weiteren Verlauf dieses Tutorials.

Konfigurieren des simulierten Node.js-Geräts

  1. Klicken Sie auf dem Remoteüberwachungsdashboard auf + Gerät hinzufügen und dann ein benutzerdefiniertes Gerät hinzufügen. Notieren Sie sich den IoT Hub-Hostnamen, die Geräte-ID und den Geräteschlüssel. Sie benötigen diese Informationen im weiteren Verlauf dieses Tutorials, wenn Sie die Geräteclientanwendung „remote_monitoring.js“ vorbereiten.

  2. Stellen Sie sicher, dass auf dem Entwicklungscomputer mindestens die Node.js-Version 0.12.x installiert ist. Führen Sie an einer Eingabeaufforderung oder in der Shell node --version aus, um die Version zu überprüfen. Informationen zur Verwendung eines Paket-Managers zum Installieren von Node.js unter Linux finden Sie unter Installieren von Node.js mithilfe eines Paket-Managers.

  3. Wenn Sie Node.js installiert haben, klonen Sie die neueste Version des Repositorys azure-iot-sdk-node auf Ihren Entwicklungscomputer. Verwenden Sie stets die Verzweigung master , die die neueste Version der Bibliotheken und Beispiele bietet.

  4. Kopieren Sie in Ihrer lokalen Kopie des Repositorys azure-iot-sdk-node die beiden folgenden Dateien aus dem Ordner „node/device/samples“ in einen leeren Ordner auf Ihrem Entwicklungscomputer:

    • packages.json
    • remote_monitoring.js
  5. Öffnen Sie die Datei „remote_monitoring.js“, und suchen Sie nach der folgenden Variablendefinition:

    var connectionString = "[IoT Hub device connection string]";
    
  6. Ersetzen Sie [IoT Hub device connection string] durch Ihre Geräteverbindungszeichenfolge. Verwenden Sie die Werte für Ihren IoT Hub-Hostnamen, die Geräte-ID und den Geräteschlüssel, die Sie in Schritt 1 notiert haben. Eine Geräteverbindungszeichenfolge hat folgendes Format:

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

    Wenn der IoT Hub-Hostname contoso und die Geräte-ID mydevice lautet, sieht Ihre Verbindungszeichenfolge wie folgt aus:

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. Speichern Sie die Datei . Führen Sie die folgenden Befehle in einer Shell oder an einer Eingabeaufforderung im Ordner mit diesen Dateien aus, um die erforderlichen Pakete zu installieren. Führen Sie dann die Beispielanwendung aus:

    npm install
    node remote_monitoring.js
    

Beobachten dynamischer Telemetriedaten in Aktion

Das Dashboard zeigt die Telemetriedaten zu Temperatur und Feuchtigkeit von den vorhandenen simulierten Geräten:

The default dashboard

Wenn Sie das simulierte Node.js-Gerät auswählen, das Sie im vorherigen Abschnitt ausgeführt haben, werden Telemetriedaten zu Temperatur, Luftfeuchtigkeit und Außentemperatur angezeigt:

Add external temperature to the dashboard

Die Remoteüberwachungslösung erkennt automatisch die zusätzlichen Telemetriedaten zur Außentemperatur und fügt sie dem Diagramm im Dashboard hinzu.

Sie können die Node.js-Konsolen-App beenden, sobald Sie bestätigt haben, dass sie sendet Telemetriedaten zu ExternalTemperature an die vorkonfigurierte Lösung sendet. Lassen Sie das Konsolenfenster geöffnet, da Sie diese Node.js-Konsolen-App erneut ausführen, nachdem Sie die benutzerdefinierte Regel zur Lösung hinzugefügt haben.

Speicherorte von Regeln

Informationen zu Regeln werden an zwei Orten gespeichert:

  • In der Tabelle DeviceRulesNormalizedTable: In dieser Tabelle wird ein normalisierter Verweis auf die Regeln gespeichert, die vom Lösungsportal definiert werden. Zum Anzeigen von Geräteregeln im Lösungsportal wird diese Tabelle auf Regeldefinitionen abgefragt.
  • Blob DeviceRules: In diesem Blob, das als Referenzeingabe in die Azure Stream Analytics-Aufträge definiert ist, werden alle Regeln gespeichert, die für alle registrierten Geräte definiert sind.   Wenn Sie im Lösungsportal eine vorhandene Regel aktualisieren oder eine neue Regel definieren, werden die Tabelle und das Blob entsprechend aktualisiert. Die im Portal angezeigte Regeldefinition stammt aus dem Tabellenspeicher. Die Regeldefinition, auf die die Stream Analytics-Aufträge verweisen, stammt aus dem Blob.

Aktualisieren der Visual Studio-Projektmappe „RemoteMonitoring“

Die folgenden Schritte veranschaulichen das Ändern der Visual Studio-Projektmappe „RemoteMonitoring“ durch Hinzufügen einer neuen Regel, die den vom simulierten Gerät gesendeten Telemetriewert ExternalTemperature verwendet:

  1. Falls nicht bereits geschehen, klonen Sie das Repository azure-iot-remote-monitoring mithilfe des folgenden Git-Befehls an einen geeigneten Speicherort auf Ihrem lokalen Computer:

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. Öffnen Sie in Visual Studio in der lokalen Kopie des Repository azure-iot-remote-monitoring die Datei „RemoteMonitoring.sln“.

  3. Öffnen Sie die Datei „Infrastructure\Models\DeviceRuleBlobEntity.cs“, und fügen Sie die Eigenschaft ExternalTemperature wie folgt hinzu:

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. Fügen Sie in der gleichen Datei die ExternalTemperatureRuleOutput-Eigenschaft wie folgt hinzu:

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. Öffnen Sie die Datei „Infrastructure\Models\DeviceRuleDataFields.cs“, und fügen Sie die folgende ExternalTemperature-Eigenschaft hinter der vorhandenen Humidity-Eigenschaft hinzu:

    public static string ExternalTemperature
    {
    

    {return "ExternalTemperature"; } ```

  1. Aktualisieren Sie in der gleichen Datei die _availableDataFields-Methode, in die Sie ExternalTemperature wie folgt einschließen:

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

7. Öffnen Sie die Dateiinfrastruktur\Repository\DeviceRulesRepository.cs, und ändern Sie die BuildBlobEntityListFromTableRows-Methode wie folgt:

```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;
}
```

Erstellen Sie die Projektmappe neu, und stellen Sie sie erneut bereit.

Sie können jetzt die aktualisierte Projektmappe Ihrem Azure-Abonnement bereitstellen.

  1. Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten, und navigieren Sie zum Stammverzeichnis Ihrer lokalen Kopie des Repositorys „azure-iot-remote-monitoring“.

  2. Um die aktualisierte Projektmappe bereitstellen, führen Sie den folgenden Befehl aus, wobei Sie {deployment name} durch den Namen Ihrer vorkonfigurierten Lösungsbereitstellung ersetzen, den Sie zuvor notiert haben:

    build.cmd cloud release {deployment name}
    

Aktualisieren des Stream Analytics-Auftrags

Sobald die Bereitstellung abgeschlossen ist, können Sie den Stream Analytics-Auftrag mit den neuen Regeldefinitionen aktualisieren.

  1. Navigieren Sie im Azure-Portal zur Ressourcengruppe, die Ihre vorkonfigurierten Lösungsressourcen enthält. Diese Ressourcengruppe hat den Namen, den Sie für die Lösung während der Bereitstellung angegeben haben.

  2. Navigieren Sie zum Stream Analytics-Auftrag „{deployment name}-Rules“.

3. Klicken Sie auf "Beenden ", um den Stream Analytics-Auftrag zu beenden. (Sie müssen warten, bis der Stream Analytics-Auftrag beendet ist, ehe Sie die Abfrage bearbeiten können).

4. Klicken Sie auf Abfrage. Ändern Sie die Abfrage durch Hinzufügen der SELECT-Anweisung für ExternalTemperature. Das folgende Beispiel zeigt die vollständige Abfrage mit der neuen SELECT-Anweisung:

```
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. Klicken Sie auf Speichern, um die aktualisierte Regelabfrage zu ändern.

  2. Klicken Sie auf Starten, um den Stream Analytics-Auftrag erneut zu starten.

Hinzufügen der neuen Regel zum Dashboard

Sie können nun die Regel ExternalTemperature einem Gerät im Lösungsdashboard hinzufügen.

  1. Navigieren Sie zum Lösungsportal.

2. Navigieren Sie zum Gerätebereich .

3. Suchen Sie das benutzerdefinierte Gerät, das Sie erstellt haben, die ExterneTemperature-Telemetrie sendet, und klicken Sie im Bereich "Gerätedetails " auf "Regel hinzufügen".

4. Wählen Sie "ExternalTemperature " im Datenfeld aus.

  1. Legen Sie Schwellenwert auf 56 fest. Klicken Sie dann auf Regeln anzeigen und speichern.

  2. Kehren Sie zum Dashboard zurück, um den Alarmverlauf anzuzeigen.

  3. Starten Sie im geöffnet gehaltenen Konsolenfenster die Node.js-Konsolen-App, damit sie mit dem Senden von ExternalTemperature-Telemetriedaten beginnt.

8. Beachten Sie, dass die Tabelle " Alarmverlauf " neue Alarme anzeigt, wenn die neue Regel ausgelöst wird.  

Zusätzliche Informationen

Das Ändern des Operators > ist komplexer und geht über die in diesem Tutorial behandelten Schritte hinaus. Wenngleich Sie den Stream Analytics-Auftrag für die Verwendung eines gewünschten Operators ändern können, ist die Wiedergabe dieses Operators im Lösungsportal eine komplexere Aufgabe.

Nächste Schritte

Nachdem Sie nun wissen, wie benutzerdefinierte Regeln erstellt werden, können Sie mehr zu den vorkonfigurierten Lösungen erfahren: