Tutorial: Implementieren der räumlichen IoT-Analyse mit Azure Maps

Ein gängiges IoT-Szenario ist die Erfassung und Nachverfolgung relevanter Ereignisse in Raum und Zeit. Beispiele hierfür sind die Verwaltung von Fuhrparks, Assetnachverfolgung, Mobilität und Smart City-Anwendungen. In diesem Tutorial wird Schritt für Schritt eine Lösung beschrieben, bei der mit den Azure Maps-APIs die Bewegung von genutzten Mietwagen nachverfolgt wird.

In diesem Lernprogramm führen Sie folgende Schritte aus:

  • Erstellen eines Azure Storage-Kontos zur Protokollierung der Daten für die Fahrzeugnachverfolgung
  • Laden Sie einen Geofence in ein Azure Storage-Konto hoch.
  • Erstellen eines Hubs in Azure IoT Hub und Registrieren eines Geräts
  • Erstellen einer Funktion in Azure Functions und Implementieren von Geschäftslogik basierend auf einer räumlichen Azure Maps-Analyse
  • Abonnieren von IoT-Gerätetelemetrieereignissen aus der Azure-Funktion per Azure Event Grid
  • Filtern der Telemetrieereignisse per IoT Hub-Nachrichtenrouting

Voraussetzungen

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Tipp

Sie können das gesamte C#-Projekt rentalCarSimulation von GitHub als einzelne ZIP-Datei herunterladen, indem Sie zum Stammverzeichnis des Beispiels navigieren und die grüne Schaltfläche <> Code und dann ZIP herunterladen auswählen.

In diesem Tutorial wird die Anwendung Postman verwendet. Sie können aber auch eine andere API-Entwicklungsumgebung nutzen.

Wichtig

Ersetzen Sie in den URL-Beispielen {Your-Azure-Maps-Subscription-key} durch Ihren Azure Maps-Abonnementschlüssel.

Anwendungsfall: Nachverfolgung von Mietwagen

Angenommen, ein Mietwagenunternehmen möchte Standortinformationen, zurückgelegte Entfernung und Betriebsstatus seiner Mietwagen protokollieren. Außerdem möchte das Unternehmen diese Informationen immer dann speichern, wenn ein Fahrzeug die autorisierte geografische Region verlässt.

Die Mietwagen sind mit IoT-Geräten ausgestattet, die regelmäßig Telemetriedaten an IoT Hub senden. Die Telemetriedaten beinhalten den aktuellen Standort sowie die Information, ob der Motor des Fahrzeugs läuft. Das Schema für den Gerätestandort basiert auf dem IoT Plug & Play-Schema für Geodaten. Das Gerätetelemetrieschema des Mietwagens sieht wie der folgende JSON-Code aus:

{
    "data": {
        "properties": {
            "Engine": "ON"
        },
        "systemProperties": {
            "iothub-content-type": "application/json",
            "iothub-content-encoding": "utf-8",
            "iothub-connection-device-id": "ContosoRentalDevice",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "636959817064335548",
            "iothub-enqueuedtime": "2019-06-18T00:17:20.608Z",
            "iothub-message-source": "Telemetry"
        },
        "body": {
            "location": {
                "type": "Point",
                "coordinates": [ -77.025988698005662, 38.9015330523316 ]
            }
        }
    }
}

In diesem Tutorial verfolgen Sie nur ein Fahrzeug nach. Nachdem Sie die Azure-Dienste eingerichtet haben, müssen Sie das C#-Projekt „rentalCarSimulation“ herunterladen, um den Fahrzeugsimulator auszuführen. Der gesamte Prozess vom Ereignis bis zur Funktionsausführung wird in den folgenden Schritten zusammengefasst:

  1. Das Gerät im Fahrzeug sendet Telemetriedaten an IoT Hub.

  2. Wenn der Fahrzeugmotor läuft, veröffentlicht der Hub die Telemetriedaten in Event Grid.

  3. Eine Azure-Funktion wird aufgrund ihres Ereignisabonnements für Gerätetelemetrieereignisse ausgelöst.

  4. Die Funktion protokolliert die Positionskoordinaten des Fahrzeuggeräts, den Zeitpunkt des Ereignisses und die Geräte-ID. Anschließend wird anhand der Spatial Geofence-Get-API bestimmt, ob das Fahrzeug außerhalb des Geofence gefahren wurde. Wenn es die Geofencegrenzen überschritten hat, speichert die Funktion die vom Ereignis empfangenen Positionsdaten in einem Blobcontainer. Außerdem führt die Funktion eine Abfrage von Get Search Address Reverse (inverse Adresssuche) durch, um die Koordinatenposition in eine Straße zu übersetzen, und speichert diese Informationen zusammen mit den restlichen Gerätestandortdaten.

Das folgende Diagramm enthält eine allgemeine Übersicht über das System.

Diagramm: Systemübersicht

In der folgenden Abbildung ist der Geofencebereich blau eingefärbt. Die Route des Mietwagens ist als grüne Linie dargestellt.

Abbildung: Geofenceroute

Erstellen eines Azure-Speicherkontos

Zum Speichern von Nachverfolgungsdaten zu Verstößen des Fahrzeugs erstellen Sie ein universelles v2-Speicherkonto in Ihrer Ressourcengruppe. Wenn Sie noch keine Ressourcengruppe erstellt haben, folgen Sie den Anleitungen in Erstellen von Ressourcengruppen. Nennen Sie Ihre Ressourcengruppe ContosoRental.

Befolgen Sie zum Erstellen eines Speicherkontos die Anweisungen unter Speicherkonto erstellen. In diesem Tutorial nennen Sie das Speicherkonto contosorentalstorage, aber sonst können Sie einen beliebigen Namen verwenden.

Nachdem Sie die Erstellung Ihres Speicherkontos erfolgreich abgeschlossen haben, müssen Sie einen Container zum Speichern von Protokollierungsdaten erstellen.

  1. Navigieren Sie zu Ihrem neu erstellten Speicherkonto. Wählen Sie im Abschnitt Essentials den Link Container aus.

    Screenshot: Container für Blobspeicher

  2. Wählen Sie oben links die Option + Container aus. Rechts im Browser wird ein Bereich angezeigt. Geben Sie Ihrem Container den Namen contoso-rental-logs, und wählen Sie die Option Erstellen aus.

    Screenshot: Erstellen eines Blobcontainers

  3. Navigieren Sie in Ihrem Speicherkonto zum Bereich Zugriffsschlüssel, und kopieren Sie den Namen des Speicherkontos und den Wert des Schlüssels in den Abschnitt key1. Sie benötigen diese beiden Werte im Abschnitt Erstellen einer Funktion und Hinzufügen eines Event Grid-Abonnements.

    Screenshot: Kopieren des Speicherkontonamens und -schlüssels

Hochladen eines Geofences in Ihr Azure Storage-Konto

Der Geofence definiert den autorisierten geografischen Bereich für unser Mietfahrzeug. Verwenden Sie den Geofence in Ihrer Azure-Funktion, um zu bestimmen, ob ein Fahrzeug außerhalb des Geofencebereichs bewegt wurde.

Führen Sie die im Artikel Erstellen der Datenregistrierung beschriebenen Schritte aus, um die Geofence-JSON-Datendatei in Ihr Azure Storage-Konto hochzuladen und dann in Ihrem Azure Maps-Konto zu registrieren. Notieren Sie sich unbedingt den eindeutigen Bezeichnerwert (udid), da Sie ihn benötigen. Über den Wert udid verweisen Sie aus Ihrem Quellcode auf den Geofence, den Sie in Ihr Azure Storage-Konto hochgeladen haben. Weitere Informationen zum Datenformat von Geofences finden Sie unter Geofencing von GeoJSON-Daten.

Erstellen eines IoT-Hubs

IoT Hub ermöglicht die sichere und zuverlässige bidirektionale Kommunikation zwischen einer IoT-Anwendung und den verwalteten Geräten. In diesem Tutorial möchten Sie Informationen von Ihrem Gerät im Fahrzeug erhalten, um die Position des Mietfahrzeugs zu ermitteln. In diesem Abschnitt erstellen Sie einen IoT-Hub in der Ressourcengruppe ContosoRental. Dieser Hub ist für das Veröffentlichen Ihrer Gerätetelemetrieereignisse zuständig.

Führen Sie zum Erstellen eines IoT-Hubs in der Ressourcengruppe ContosoRental die Schritte unter Erstellen eines IoT-Hubs aus.

Registrieren eines Geräts bei Ihrem IoT-Hub

Geräte können nur dann eine Verbindung mit dem IoT-Hub herstellen, wenn sie in der IoT-Hub-Identitätsregistrierung registriert sind. Erstellen Sie ein einzelnes Gerät mit dem Namen InVehicleDevice. Um das Gerät in Ihrem IoT-Hub zu erstellen und zu registrieren, führen Sie die Schritte unter Registrieren eines neuen Geräts beim IoT-Hub aus. Achten Sie darauf, dass Sie die primäre Verbindungszeichenfolge Ihres Geräts kopieren. Sie benötigen die Information später.

Erstellen einer Funktion und Hinzufügen eines Event Grid-Abonnements

Azure Functions ist ein serverloser Computedienst, mit dem Sie kleine Codeabschnitte („Funktionen“) ausführen können, ohne explizit eine Computeinfrastruktur bereitstellen oder verwalten zu müssen. Weitere Informationen finden Sie unter Einführung in Azure Functions.

Eine Funktion wird von einem bestimmten Ereignis ausgelöst. Erstellen Sie eine Funktion, die von einem Event Grid-Trigger ausgelöst wird. Erstellen Sie die Beziehung zwischen Trigger und Funktion, indem Sie ein Ereignisabonnement für IoT-Hub-Gerätetelemetrieereignisse erstellen. Wenn ein Gerätetelemetrieereignis auftritt, wird Ihre Funktion als Endpunkt aufgerufen und empfängt die relevanten Daten für das Gerät, das Sie zuvor im IoT-Hub registriert haben.

Den C#-Skriptcode, der in Ihrer Funktion enthalten ist, finden Sie hier.

Richten Sie jetzt Ihre Azure-Funktion ein.

  1. Wählen Sie im Dashboard des Azure-Portals die Option Ressource erstellen aus. Geben Sie im Suchtextfeld Funktionen-App ein. Wählen Sie Funktions-App>Erstellen aus.

  2. Geben Sie Ihrer Funktions-App auf der Erstellungsseite Funktions-App einen Namen. Wählen Sie unter Ressourcengruppe die Option ContosoRental in der Dropdownliste aus. Wählen Sie .NET als Runtimestapel aus. Wählen Sie unten auf der Seite Weiter: Speicher> aus.

    Screenshot: Erstellen einer Funktions-App

  3. Wählen Sie als Speicherkonto das Speicherkonto aus, das Sie unter Erstellen eines Azure-Speicherkontos erstellt haben. Klicken Sie auf Überprüfen + erstellen.

  4. Überprüfen Sie die Details der Funktions-App, und wählen Sie Erstellen aus.

  5. Nach der Erstellung der App fügen Sie ihr eine Funktion hinzu. Navigieren Sie zur Funktions-App. Wählen Sie die Schaltfläche Im Azure-Portal erstellen aus.

    Wichtig

    Die Vorlagen Azure Event Hub-Trigger und Azure Event Grid-Trigger haben ähnliche Namen. Stellen Sie sicher, dass Sie die Vorlage Azure Event Grid-Trigger auswählen.

    Screenshot der Erstellung einer Funktion im Azure-Portal

  6. Der Bereich Funktion erstellen wird angezeigt. Scrollen Sie im Bereich Vorlage auswählen nach unten, und wählen Sie Azure Event Grid-Trigger und dann die Schaltfläche Erstellen aus.

    Screenshot: Erstellen einer Funktion

  7. Geben Sie der Funktion einen Namen. Verwenden Sie in diesem Tutorial den Namen GetGeoFunction, im Allgemeinen können Sie aber einen beliebigen Namen verwenden. Wählen Sie Funktion erstellen aus.

  8. Wählen Sie im Menü auf der linken Seite den Bereich Programmieren und testen aus. Kopieren Sie das C#-Skript, und fügen Sie es in das Codefenster ein.

    Kopie/Screenshot: Einfügen des Codes in das Funktionsfenster

  9. Ersetzen Sie im C#-Code die folgenden Parameter:

    • Ersetzen Sie SUBSCRIPTION_KEY durch den Abonnementschlüssel für Ihr Azure Maps-Konto.
    • Ersetzen Sie UDID durch den Wert udid des Geofences, den Sie unter Hochladen eines Geofences in Ihr Azure Storage-Konto hochgeladen haben.
    • Mit der Funktion CreateBlobAsync im Skript wird im Datenspeicherkonto ein Blob pro Ereignis erstellt. Ersetzen Sie ACCESS_KEY, ACCOUNT_NAME und STORAGE_CONTAINER_NAME durch den Zugriffsschlüssel, den Kontonamen und den Datenspeichercontainer Ihres Speicherkontos. Diese Werte wurden generiert, als Sie in Erstellen eines Azure-Speicherkontos ein Speicherkonto erstellt haben.
  10. Wählen Sie im linken Menü den Bereich Integration aus. Wählen Sie im Diagramm die Option Event Grid-Trigger aus. Geben Sie für den Trigger den Namen eventGridEvent ein, und wählen Sie die Option Event Grid-Abonnement erstellen aus.

    Screenshot: Hinzufügen eines Ereignisabonnements

  11. Fügen Sie die Abonnementdetails ein. Benennen Sie das Ereignisabonnement. Wählen Sie für Ereignisschema die Option Event Grid-Schema aus. Wählen Sie für Thementypen die Option Azure IoT Hub-Konten aus. Wählen Sie für Ressourcengruppe die Ressourcengruppe aus, die Sie zu Beginn dieses Tutorials erstellt haben. Wählen Sie unterRessource den IoT-Hub aus, den Sie in „Erstellen einer Azure IoT Hub-Instanz“ erstellt haben. Wählen Sie für Nach Ereignistypen filtern die Option Gerätetelemetrie aus.

    Nachdem Sie diese Optionen ausgewählt haben, sehen Sie, dass der Thementyp automatisch in IoT Hub geändert wurde. Für Name des Systemthemas können Sie denselben Namen wie für Ihre Ressource verwenden. Wählen Sie abschließend im Abschnitt Endpunktdetails die Option Endpunkt auswählen aus. Akzeptieren Sie alle Einstellungen, und wählen Sie Auswahl bestätigen aus.

    Screenshot: Erstellen eines Ereignisabonnements

  12. Überprüfen Sie Ihre Einstellungen. Stellen Sie sicher, dass der Endpunkt die Funktion angibt, die Sie am Anfang dieses Abschnitts erstellt haben. Klicken Sie auf Erstellen.

    Screenshot: Bestätigung der Erstellung eines Ereignisabonnements

  13. Nun befinden Sie sich wieder im Fenster Trigger bearbeiten. Wählen Sie Speichern aus.

Filtern von Ereignissen per IoT Hub-Nachrichtenrouting

Wenn Sie der Azure-Funktion ein Event Grid-Abonnement hinzufügen, wird automatisch eine Nachrichtenroute im angegebenen IoT-Hub erstellt. Das Nachrichtenrouting ermöglicht Ihnen, verschiedene Datentypen an verschiedene Endpunkte weiterzuleiten. Dadurch können Sie beispielsweise Gerätetelemetrienachrichten, Gerätelebenszyklusereignisse und Änderungsereignisse für Gerätezwillinge weiterleiten. Weitere Informationen finden Sie unter Verwenden des IoT Hub-Nachrichtenroutings zum Senden von D2C-Nachrichten an verschiedene Endpunkte.

Screenshot: IoT Hub-Nachrichtenrouting

In Ihrem Beispielszenario möchten Sie nur dann Nachrichten empfangen, wenn das Mietfahrzeug bewegt wird. Erstellen Sie eine Routingabfrage, um die Ereignisse zu filtern, bei denen die Engine-Eigenschaft auf ON festgelegt ist. Wählen Sie zum Erstellen einer Routingabfrage die Route RouteToEventGrid aus, und ersetzen Sie die Routingabfrage durch „Engine='ON'“ . Klicken Sie dann auf Speichern. Vom IoT-Hub werden jetzt nur dann Gerätetelemetriedaten veröffentlicht, wenn die Engine aktiviert ist.

Screenshot: Filtern von Routingnachrichten

Tipp

Es gibt verschiedene Möglichkeiten, IoT-Nachrichten vom Typ „Gerät-zu-Cloud“ abzufragen. Weitere Informationen zur Syntax des Nachrichtenroutings finden Sie unter Abfragesyntax für das IoT Hub-Nachrichtenrouting.

Senden von Telemetriedaten an IoT Hub

Wenn Ihre Azure-Funktion ausgeführt wird, können Sie Telemetriedaten an die IoT Hub-Instanz senden, von wo aus sie an Event Grid weitergeleitet werden. Verwenden Sie eine C#-Anwendung, um Standortdaten für ein Gerät in einem Mietfahrzeug zu simulieren. Zum Ausführen der Anwendung benötigen Sie das .NET SDK 6.0 auf Ihrem Entwicklungscomputer. Führen Sie die folgenden Schritte aus, um simulierte Telemetriedaten an den IoT-Hub zu senden:

  1. Wenn Sie dies noch nicht getan haben, laden Sie das C#-Projekt rentalCarSimulation herunter.

  2. Öffnen Sie die Datei simulatedCar.cs in einem Text-Editor Ihrer Wahl, und ersetzen Sie den Wert von connectionString durch den Wert, den Sie beim Registrieren des Geräts gespeichert haben. Speichern Sie die an der Datei vorgenommenen Änderungen.

  3. Vergewissern Sie sich, dass auf Ihrem Computer die ASP.NET Core-Runtime installiert ist. Navigieren Sie in Ihrem lokalen Terminalfenster zum Stammordner des C#-Projekts, und führen Sie den folgenden Befehl aus, um die erforderlichen Pakete für die simulierte Geräteanwendung zu installieren:

    dotnet restore
    
  4. Führen Sie in demselben Terminal den folgenden Befehl aus, um die Anwendung für die Mietwagensimulation zu erstellen und auszuführen:

    dotnet run
    

Ihr lokales Terminal sollte wie im folgenden Screenshot aussehen.

Screenshot: Terminalausgabe

Wenn Sie den Blobspeichercontainer jetzt öffnen, können Sie vier Blobs für Standorte sehen, an denen sich das Fahrzeug außerhalb des Geofencebereichs befunden hat.

Screenshot: Anzeigen von Blobs im Container

Die folgende Karte enthält vier Fahrzeugpositionspunkte außerhalb des Geofence. Jede Position wurde in regelmäßigen Zeitabständen protokolliert.

Screenshot: Karte mit Verstößen

Erkunden von Azure Maps und IoT

Informationen zu den in diesem Tutorial verwendeten Azure Maps-APIs finden Sie unter:

Eine vollständige Liste mit Azure Maps-REST-APIs finden Sie unter:

Eine Liste mit Geräten, die über eine Azure-Zertifizierung für IoT verfügen, finden Sie unter:

Bereinigen von Ressourcen

Es sind keine zu bereinigenden Ressourcen vorhanden.

Nächste Schritte

Weitere Informationen zum Senden von Telemetriedaten von einem Gerät an die Cloud (und umgekehrt) finden Sie unter: