Ausnahmen identifizieren

Abgeschlossen

In dieser Lerneinheit werden wir den Stream Analytics-Auftrag so verändern, dass er mit den Daten unseres physischen Geräts arbeitet, das in einem anderen Format als das simulierte Gerät vorliegt.  Wir werden den Stream Analytics-Auftrag so anpassen, dass die Daten in einer Azure Cosmos DB gespeichert werden, zusätzlich zur Prüfung auf Anomalien.

Übung 1: Verwenden von Device Explorer

Aufgabe 1: Device Explorer herunterladen und installieren

  1. Navigieren Sie zu Microsoft Azure IoT-Hub SDK für C# Release 2019-9-12.

  2. Navigieren Sie nach unten, um die Datei SetupDeviceExplorer.msi zu suchen, und wählen klicken Sie darauf.

  3. Klicken Sie auf Ausführen.

  4. Klicken Sie auf Weiter.

  5. Schließen Sie die Installation ab, und klicken Sie auf Schließen.

Aufgabe 2: Stellen Sie eine Verbindung her.

  1. Wechseln Sie zu Ihrem Azure-Portal, und öffnen Sie erneut den IoT-Hub.

  2. Wählen Sie „Richtlinie für den gemeinsamen Zugriff“ aus, und klicken Sie auf „iothubowner“.

  3. Kopieren Sie den Verbindungszeichenfolge – Primärschlüssel.

  4. Starten Sie den Device Explorer, den Sie auf Ihrem Computer installiert haben.

  5. Fügen Sie die Verbindungszeichenfolge ein, und klicken Sie auf Aktualisieren.

  6. Klicken Sie auf OK.

  7. Wählen Sie die Registerkarte Daten aus, und klicken Sie auf Überwachen.

  8. Die Sensordaten Ihres Geräts sollten im JSON-Format angezeigt werden.

    Screenshot der Sensordaten Ihres Geräts im JSON-Format

Übung 2: Azure Cosmos DB

In dieser Übung erstellen Sie eine Azure Cosmos DB, die in der nächsten Übung verwendet wird. Diese Datenbank wird verwendet, um detaillierte Telemetriedaten vom Gerät zu speichern.

Aufgabe 1: Eine Azure Cosmos DB erstellen

  1. Wechseln Sie zu Ihrem Azure-Portal, und klicken Sie auf Ressource erstellen.

  2. Suchen Sie nach Azure Cosmos DB, und wählen Sie sie aus.

  3. Klicken Sie auf Erstellen.

  4. Wählen Sie Ihr Abonnement und Ihre Ressourcengruppe aus, geben Sie einen eindeutigen Kontonamen an, wählen Sie Core (SQL) für API und Ihren Standort aus, und klicken Sie auf Überprüfen understellen.

    Screenshot der Projektdetails Ihres Abonnements, Ihrer Ressourcengruppe, Ihres Kontonamens, Ihrer API, Ihres Standorts und der Schaltfläche „Überprüfen und erstellen“

  5. Klicken Sie auf Erstellen, und warten Sie auf die Erstellung der Azure Cosmos DB.

  6. Öffnen Sie das von Ihnen erstellte Azure Cosmos DB.

  7. Wählen Sie Datenexplorer aus, klicken Sie auf Neuer Container, und wählen Sie Neue Datenbank aus.

  8. Geben Sie Telemetrie für Datenbank-ID ein, und klicken Sie auf OK.

  9. Klicken Sie auf die Schaltfläche ... der von Ihnen erstellten Datenbank.

  10. Wählen Sie Neuer Container aus.

  11. Geben Sie DeviceData als Container-ID und DeviceID als Partitionsschlüssel ein, und klicken Sie auf das Kontrollkästchen Bereitstellen.

  12. Ändern Sie den Durchsatz auf 400, und klicken Sie auf OK. Wir ändern den Durchsatz, um Kosten zu minimieren.

Übung 3: Regulierung des Stream Analytics-Auftrags

In dieser Übung ändern Sie den Azure Stream Analytics-Auftrag, um die unterschiedliche Telemetrie zu berücksichtigen, die von Ihrem MXChip-Gerät gesendet wird.

Schritt 1: Cosmos DB als Ausgabe hinzufügen

  1. Wählen Sie Ressourcengruppen aus, und öffnen Sie die Ressourcengruppe, die Sie erstellt haben.

  2. Suchen und öffnen Sie den Stream Analytics-Auftrag.

  3. Klicken Sie auf Stopp. Der Stream Analytics-Auftrag muss angehalten werden, bevor Sie die Abfrage und Eingaben/Ausgaben ändern können.

  4. Klicken Sie auf Ja.

  5. Nachdem der Auftrag gestoppt wurde, wählen Sie Ausgaben aus.

  6. Klicken Sie auf Hinzufügen, und wählen Sie Cosmos DB aus.

  7. Geben Sie CosmosDB für Ausgabealias ein, wähle Sie Ihr Abonnement und die Cosmo DB, die Sie erstellt haben aus. Wählen Sie dann die Datenbank, die Sie erstellt haben, aus, und geben Sie DeviceData als Sammlungsname ein. Klicken Sie dann auf Speichern.

Aufgabe 2: Passen Sie die Abfrage an das Gerät an.

  1. Wählen Sie Abfrage aus.

  2. Setzen Sie Ihren Cursor an das Ende von Zeile 14, und drücken Sie die Eingabetaste.

    Screenshot der Zeile 14, in die Sie Ihren Cursor platzieren und die Eingabetaste drücken

  3. Fügen Sie den Abfrageausschnitt unten ein. Dadurch können die Abfragen sowohl reelle als auch simulierte Geräte unterstützen.

    UNION 
    -- MX Chip 
    SELECT 
       GetMetadataPropertyValue(Stream, '[IoTHUB].[ConnectionDeviceId]') as DeviceID, 
       'Temperature' AS ReadingType, 
       (((Stream.temp *9) / 5)+32) AS Reading, 
       GetMetadataPropertyValue (Stream, 'EventId') as EventToken, 
       Ref.Temperature AS Threshold, 
       Ref.TemperatureRuleOutput AS RuleOutput, 
       Stream.EventEnqueuedUtcTime AS [time] 
    FROM IoTStream Stream
    JOIN DeviceRulesBlob Ref ON Ref.DeviceType = 'Thermostat' 
    WHERE 
       Stream.temp IS NOT NULL AND Stream.temp > Ref.Temperature 
    

    Wir passen nicht nur die Feldnamen an, sondern wandeln auch die Temperatur von Celsius in Fahrenheit um.

    Screenshot der Anpassung der Temperaturmessung

  4. Klicken Sie auf Abfrage speichern.

Aufgabe 3: Der Azure Cosmos DB gespeicherte Daten hinzufügen

  1. Scrollen Sie nach unten zum Ende der Abfrage, und fügen Sie den untenstehenden Ausschnitt zur Abfrage hinzu. So wird eine Kopie der aufgenommenen Daten gespeichert.

    SELECT
    IoTHub.ConnectionDeviceId as DeviceID, humidity, temp, pressure, magnetometerX, magnetometerY, magnetometerZ, accelerometerX, accelerometerY, accelerometerZ, gyroscopeX, gyroscopeY, gyroscopeZ INTO CosmosDB
    FROM IoTStream
    

    Screenshot des zur Abfrage hinzuzufügenden Ausschnitts

  2. Klicken Sie nochmals auf Abfrage speichern.

  3. Wählen Sie Kompatibilitätsgrad aus.

  4. Ändern Sie den Kompatibilitätsgrad zu 1,2.

  5. Wählen Sie die Registerkarte Überblick aus, und starten Sie den Auftrag erneut.

  6. Wählen Sie Jetzt und anschließend Starten aus.

  7. Warten Sie, bis der Stream Analytics-Auftrag gestartet wurde.

  8. Klicken Sie auf die Ressourcengruppe.

  9. Öffnen Sie das von Ihnen erstellte Azure Cosmos DB.

  10. Wählen Sie Daten-Explorer aus, erweitern Sie Telemetrie und DeviceData. Wählen Sie dann Artikel aus.

  11. Sie sollten eine Liste der Dokumente erhalten. Klicken Sie auf eines der Dokumente.

    Screenshot der Liste der Dokumente zur Auswahl

  12. Sie sollten Sensordaten vom Gerät erhalten.

    Screenshot der Sensordaten Ihres Geräts

Übung 4: Neue Abfrage erstellen

In dieser Übung werden Sie eine neue Abfrage erstellen, die die bestehende Azure Stream Analytics-Auftragsabfrage ersetzt. Sie werden diese neue Abfrage schrittweise erstellen, damit Sie sehen können, was die Teile bewirken. Wenn Sie kein physisches Gerät haben, können Sie die Abfrage so ändern, dass Felder des simulierten Geräts verwendet werden.

Aufgabe 1: Anomalie-Datenerfassung in Azure hinzufügen

Um die Detailwerte unserer Anomalieerkennung zu speichern, müssen wir eine weitere Sammlung in der Azure Cosmos DB erstellen, die wir in der vorherigen praktischen Übung verwendet haben. Wir machen dies, um die vom Anomalieerkennungsoperator generierten Werte leicht einsehbar zu machen.

  1. Wechseln Sie zu Ihrem Azure-Portal, wählen Sie „Ressourcengruppen“ aus und öffnen Sie die Ressourcengruppe, die Sie bei der Connected Field Service-Bereitstellung erstellt haben.

  2. Öffnen Sie die Azure Cosmo DB, die Sie angelegt haben.

  3. Wählen Sie Datenexplorer aus, klicken Sie auf die Schaltfläche ... der Telemetriedatenbank, und wählen Sie Neuer Container aus.

  4. Geben Sie AnomalyData für Container-ID und DeviceID für Partitionsschlüssel ein, und klicken Sie auf „OK“.

Screenshot mit Details zur Container-ID und zum Partitionsschlüssel

Aufgabe 2: Neue Ausgabe hinzufügen

In dieser Aufgabe fügen Sie der AnomalyData-Container eine neue Ausgabe hinzu.

  1. Schließen Sie das Azure Cosmos DB-Blade.

  2. Suchen und öffnen Sie den Stream Analytics-Auftrag.

  3. Klicken Sie auf Stopp. Der Stream Analytics-Auftrag muss angehalten werden, bevor Sie die Abfrage und Eingaben/Ausgaben ändern können.

  4. Klicken Sie auf Ja.

  5. Nachdem der Auftrag angehalten wurde, wählen Sie Ausgabe aus. Klicken Sie auf +Hinzufügen, und wählen Sie Cosmo DB aus.

  6. Geben Sie Ausgabe-AliasAnomalyDB ein, wählen Sie Ihr Abonnement aus, wählen Sie die erstellte Cosmo DB aus, wählen Sie die erstellte Datenbank aus, geben Sie AnomalyData für Containername ein, und klicken Sie auf Speichern.

Aufgabe 3: Neue Abfrage vorbereiten und erstellen

  1. Wählen Sie Abfrage aus.

  2. Kopieren Sie die bestehende Abfrage und sichern Sie sie für den Fall, dass Sie sie später noch einmal verwenden wollen.

  3. Löschen Sie die bestehende Abfrage. Wir werden Schritt für Schritt eine neue erstellen.

  4. Fügen Sie den unten stehenden Auszug in den Abfrageeditor ein.

    WITH AlertData AS 
    (
    
    SELECT
        IoTHub.ConnectionDeviceId as Device,
        System.Timestamp as tumblingWindowEnd,
           AVG(Stream.temp) as TempC,
           AVG(((Stream.temp*1.8)+32)) as TempF,
           AVG(Stream.accelerometerX) as accelerometerX,
           AVG(Stream.accelerometerY) as accelerometerY,
           AVG(Stream.accelerometerZ) as accelerometerZ
    
    FROM
        IoTStream Stream TIMESTAMP BY IoTHub.EnqueuedTime
    GROUP BY IoTHub.ConnectionDeviceId, TumblingWindow(second, 10)
    ),
    

    Screenshot des zum Abfrage-Editor hinzuzufügenden Codeausschnitts.

    Hinweis

    Dieser verarbeitet die Rohdaten vom Gerät und gruppiert sie in 10-Sekunden-Fenstern, die nach Anomalien ausgewertet werden. Wir entscheiden uns für die Verwendung von Durchschnittswerten für die Daten im Fenster. Sie können jede Aggregation verwenden, die für Ihr Szenario sinnvoll ist.

  5. Fügen Sie das Folgende direkt nach der vorherigen Abfrage ein. Es werden die Daten der letzten Abfrage verwendet und diese werden weiter ergänzen.

    FillInMissingValuesStep AS
        (
              SELECT                
                    System.Timestamp AS hoppingWindowEnd,
                    TopOne() OVER (ORDER BY tumblingWindowEnd DESC) AS lastEvent
             FROM AlertData
             GROUP BY HOPPINGWINDOW(second, 300, 5)
    
        ),
    

    Hinweis

    Um die Einheitlichkeit der Daten zu gewährleisten, sodass wir keine Lücken haben, haben wir uns entschieden, die Lücken zu füllen, indem wir das letzte Ereignis in jedem Hop-Fenster nehmen.

  6. Fügen Sie den folgenden Schritt ein, um die eigentliche Anomaliebewertung durchzuführen.

    AnomalyDetectionStep AS (
    SELECT
         lastevent.Device as lastEventDevice,
         hoppingWindowEnd,
                    lastEvent.tumblingWindowEnd as lastTumblingWindowEnd,
                    lastEvent.TempC as lastEventTempC,
                    lastEvent.TempF as lastEventTempF,
                    lastEvent.accelerometerY as lastEventaccelerometerY,
                    lastEvent.accelerometerX as lastEventaccelerometerX,
                    lastEvent.accelerometerZ as lastEventaccelerometerZ,                
                    system.timestamp as anomalyDetectionStepTimestamp,
         ANOMALYDETECTION(lastEvent.TempC) OVER (PARTITION BY lastevent.Device LIMIT DURATION(mi, 2)) as  scores
    FROM FillInMissingValuesStep
    ),
    

    Hinweis

    Diese Abfrage verwendet den ANOMALYDETECTION-Operator für den TempC-Wert. Sie wird für jedes Gerät durchgeführt und über eine Dauer von zwei Minuten gemessen.  Dadurch wird die Anomalieerkennung gerätespezifisch trainiert und könnte sich an Unterschiede in den Ausgangstemperaturen an jedem Geräteort anpassen. Das Ergebnis dieser Ausgabe führt dazu, dass bei der nächsten Abfrage die Ergebnisse zur Auswertung hinzugefügt werden.

  7. Fügen Sie das Folgende in die zu erstellende Abfrage ein.

    AnomalyDetectionFilter AS (
    SELECT lastEventDevice as DeviceId,
        CAST(GetRecordPropertyValue(scores, 'BiLevelChangeScore') as float) as BiLevelChangeScore,
        CAST(GetRecordPropertyValue(scores, 'SlowPosTrendScore') as float) as SlowPosTrendScore,
        CAST(GetRecordPropertyValue(scores, 'SlowNegTrendScore') as float) as SlowNegTrendScore,
        lastEventTempC as Reading,
        'Tempature' as ReadingType,
        'Trend Up ' as Threshold,
        'EventToken' as EventToken,
        lastTumblingWindowEnd as time
    
    FROM AnomalyDetectionStep 
    WHERE 
           CAST(GetRecordPropertyValue(scores, 'SlowPosTrendScore') as float) >= 10      
    union
    SELECT lastEventDevice as DeviceId,
        CAST(GetRecordPropertyValue(scores, 'BiLevelChangeScore') as float) as BiLevelChangeScore,
        CAST(GetRecordPropertyValue(scores, 'SlowPosTrendScore') as float) as SlowPosTrendScore,
        CAST(GetRecordPropertyValue(scores, 'SlowNegTrendScore') as float) as SlowNegTrendScore,
        lastEventTempC as Reading,
        'Tempature' as ReadingType,
        'Trend Down ' as Threshold,
        'EventToken' as EventToken,
        lastTumblingWindowEnd as time
    
    FROM AnomalyDetectionStep 
    WHERE       
          CAST(GetRecordPropertyValue(scores, 'SlowNegTrendScore') as float) >= 10
    )
    

    Hinweis

    Diese führt die Auswertung sowohl des SlowPosTrendScore als auch des SlowNegTrendScore durch.  Der Wert, den Sie prüfen, ist die Empfindlichkeit.  Er könnte ab 3,25 wichtig sein. Aber wir warten, bis er bei 10 liegt.  In der realen Welt würden Sie das auf Ihr spezielles Szenario abstimmen.  Beachten Sie auch, dass wir Felder für Reading, ReadingType, Threshold und EventToken ausgewählt haben.  Dies sind Daten, die von der Logic App für jede Nachricht erwartet werden, die wir an die AlertsQueue ausgeben, was Sie in der nächsten Abfrage tun werden.  Wenn Sie diese Felder nicht berücksichtigen, müssen Sie die Logic App so modifizieren, dass sie diese nicht erwartet.

  8. Fügen Sie den Auszug nach dem letzten Auszug ein.

    SELECT *
    INTO AlertsQueue
    FROM AnomalyDetectionFilter data
    WHERE LAG(data.DeviceID) OVER (PARTITION BY data.DeviceId, CAST(data.Reading as bigint), data.ReadingType LIMIT DURATION(minute, 1)) IS NULL
    

    Hinweis

    Dies führt das eigentliche Einfügen in die AlertsQueue durch, die von der Logic App abgerufen wird, um den IoT-Warndatensatz zu erstellen.  Beachten Sie, dass wir den LAG-Operator im „where“ beibehalten, um die Anzahl der Nachrichten in der Warteschlange zu begrenzen. Diese treten nur auf, wenn dasselbe Gerät für eine gerundete Temperatur innerhalb einer Minute neue Daten hat.

  9. Um sicherzustellen, dass wir die gleichen Detaildaten vom Gerät protokollieren, fügen Sie die folgende Abfrage wieder hinzu.

    SELECT 
    IoTHub.ConnectionDeviceId as DeviceID, humidity, temp, pressure, magnetometerX, magnetometerY, magnetometerZ, accelerometerX, accelerometerY, accelerometerZ, gyroscopeX, gyroscopeY, gyroscopeZ
    Into CosmosDB
    FROM IoTStream TIMESTAMP BY IoTHub.EnqueuedTime
    
  10. Fügen Sie das Folgende hinzu, dies speichert die Bewertungen aus dem Anomalieerkennungsoperator, damit Sie die Daten über den Azure Cosmos DB-Daten-Explorer leicht anzeigen können.

     SELECT 
     lasteventdevice as DeviceID, hoppingwindowend, lasteventtempc, lasteventtempf, lasteventaccelerometery, lasteventaccelerometerx, lasteventaccelerometerz, anomalydetectionsteptimestamp, scores
     Into AnomalyDB
     FROM AnomalyDetectionStep
    
  11. Speichern Sie die Abfrage.

  12. Klicken Sie auf Ja.

  13. Wählen Sie die Registerkarte Übersicht aus, und klicken Sie auf Starten.

  14. Wählen Sie Jetzt aus, und klicken Sie erneut auf Starten.

  15. Vergewissern Sie sich, dass der Auftrag erfolgreich startet.

Übung 5: Testen der Abfrage

In dieser Übung werden Sie versuchen, die Temperatur an Ihrem physischen Gerät zu ändern, um die Anomalienerkennung zu testen.

Aufgabe 1: Abfrage testen

Jetzt kommt der anspruchsvolle Teil. Sie brauchen etwas, um die Temperatur, die das Gerät anzeigt, langsam zu verändern.  Eispacks funktionieren gut, genauso wie Druckluftdosen.  Ein Haartrockner oder ein Handwärmer könnte auch funktionieren.  Sie müssen das Gerät lediglich so schützen, dass es nicht nass oder anderweitig beschädigt wird.

  1. Ändern Sie mit einem der oben genannten Tools die Temperatur Ihres Geräts.

  2. Schließen Sie die Stream Analytics-Blade.

  3. Öffnen Sie die Azure Cosmos DB.

  4. Wählen Sie Datenexplorer aus, erweitern Sie AnomalyData, und wählen Sie Elemente aus.

  5. Sie sollten eine Liste der Warnungen erhalten. Klicken Sie auf eine der Warnungen.

  6. Sie sollten Sensorinformationen von Ihrem Gerät sehen.

    Screenshot der Sensorinformationen Ihres Geräts

  7. Navigieren Sie zu Power Apps, und stellen Sie sicher, dass Sie sich in der richtigen Umgebung befinden.

  8. Klicken Sie auf Apps, um die Anwendung Connected Field Service zu öffnen.

  9. Wählen Sie IoT-Warnungen aus.

  10. Öffnen Sie eine der Warnungen.

  11. Wechseln Sie zum Abschnitt Warnungsdaten. Sie sollten Sensorinformationen von Ihrem Gerät sehen.

    Screenshot des Bereichs „Warnungsdaten“ mit Sensordaten.