Zelfstudie: Ruimtelijke Analyse van IoT implementeren met behulp van Azure Kaarten

In een IoT-scenario is het gebruikelijk om relevante gebeurtenissen die zich in ruimte en tijd voordoen, vast te leggen en bij te houden. Voorbeelden omvatten wagenparkbeheer, assets bijhouden, mobiliteit en Smart City-toepassingen. Deze zelfstudie begeleidt u door een oplossing waarmee het verplaatsen van tweedehandshuurauto's wordt getraceerd, met behulp van de Azure Maps-API's.

In deze zelfstudie gaat u:

  • Een Azure-opslagaccount maken om traceringsgegevens voor auto's te registreren.
  • Upload een geofence naar een Azure-opslagaccount.
  • Een hub maken in Azure IoT Hub en een apparaat registreren.
  • Een functie maken in Azure Functions, waarbij u bedrijfslogica implementeert op basis van de ruimtelijke analyse van Azure Maps.
  • U abonneren op telemetriegebeurtenissen voor IoT-apparaten vanuit de Azure-functie via Azure Event Grid.
  • De telemetriegebeurtenissen filteren met behulp van berichtroutering van IoT Hub.

Vereisten

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Tip

U kunt het hele rentalCarSimulation C#-project downloaden van GitHub als één ZIP-bestand door naar de hoofdmap van het voorbeeld te gaan en de groene<>codeknop te selecteren en vervolgens ZIP downloaden.

In deze zelfstudie wordt gebruikgemaakt van de Postman-toepassing, maar u kunt ook een andere API-ontwikkelomgeving kiezen.

Belangrijk

Vervang in de URL-voorbeelden door {Your-Azure-Maps-Subscription-key} uw Azure Kaarten-abonnementssleutel.

Use-case: huurauto traceren

Stel dat een autoverhuurbedrijf locatiegegevens, reisafstand en actieve status voor de huurauto's van het bedrijf wil registreren. Het bedrijf wil deze informatie ook opslaan telkens wanneer een auto de correcte geautoriseerde geografische regio verlaat.

De huurauto's zijn uitgerust met IoT-apparaten die regelmatig telemetriegegevens naar IoT Hub verzenden. De telemetrie bevat de huidige locatie en geeft aan of de motor van de auto loopt. Het apparaatlocatieschema houdt zich aan het IoT Plug and Play-schema voor georuimtelijke gegeven. Het schema voor de apparaattelemetrie van de huurauto ziet eruit als de volgende JSON-code:

{
    "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 deze zelfstudie volgt u maar één voertuig. Nadat de Azure-services zijn ingesteld, moet u het C#-project rentalCarSimulation downloaden om de voertuigsimulator uit te voeren. Het hele proces, van gebeurtenis tot uitvoering van de functie, wordt samengevat in de volgende stappen:

  1. Het apparaat in het voertuig verzendt telemetriegegevens naar IoT Hub.

  2. Als de motor van de auto loopt, publiceert de hub de telemetriegegevens in Event Grid.

  3. Er wordt een Azure-functie geactiveerd vanwege het bijbehorende gebeurtenisabonnement op telemetriegebeurtenissen van het apparaat.

  4. Met de functie worden de locatiecoördinaten van het voertuig, de gebeurtenistijd en de apparaat-id geregistreerd. Vervolgens wordt de Spatial Geofence Get API gebruikt om te bepalen of de auto zich buiten de geofence heeft begeven. Als de auto buiten de grenzen van de geofence is geweest, worden de locatiegegevens die zijn ontvangen van de gebeurtenis, met de functie opgeslagen in een blobcontainer. Via de functie wordt ook de omgekeerde zoekopdracht voor adressen uitgevoerd om de locatiecoördinaten om te zetten in een straatnaam; deze wordt vervolgens opgeslagen bij de andere locatiegegevens voor het apparaat.

In het volgende diagram ziet u een overzicht op hoog niveau van het systeem.

Diagram van systeemoverzicht.

In de volgende afbeelding is het geofence-gebied blauw gemarkeerd. De route van de huurauto wordt aangegeven met een groene lijn.

Afbeelding van geofence-route.

Een Azure-opslagaccount maken

Om de traceringsgegevens over schendingen van de auto op te slaan, maakt u een algemeen v2-opslagaccount in de resourcegroep. Als u nog geen resourcegroep hebt gemaakt, volgt u de aanwijzingen in het maken van resourcegroepen. Geef uw resourcegroep de naam ContosoRental.

Volg de instructies in Een opslagaccount maken om een opslagaccount te maken. In deze zelfstudie geeft u het opslagaccount de naam contosorentalstorage, maar over het algemeen kunt u elke gewenste naam kiezen.

Wanneer u het opslagaccount hebt gemaakt, moet u een container maken om logboekgegevens in op te slaan.

  1. Ga naar het zojuist gemaakte opslagaccount. Selecteer de koppeling Containers in de sectie Essentials.

    Schermopname van containers voor blobopslag.

  2. Selecteer + Container in de linkerbovenhoek. Aan de rechterkant van de browser wordt een deelvenster weergegeven. Geef de container de naam contoso-rental-logs en selecteer Maken.

    Schermopname van een blobcontainer maken.

  3. Ga naar het deelvenster Toegangssleutels in uw opslagaccount en kopieer de waarden bij Opslagaccountnaam en Sleutel in de sectie key1. U hebt beide waarden nodig in de sectie Een functie maken en een Event Grid-abonnement toevoegen.

    Schermopname van de naam en sleutel van het opslagaccount kopiëren.

Een geofence uploaden naar uw Azure-opslagaccount

De geofence definieert het toegestane geografische gebied voor het huurvoertuig. Gebruik de geofence in uw Azure-functie om te bepalen of een auto buiten het geofence-gebied is verplaatst.

Volg de stappen in het artikel Gegevensregister maken om het geofence JSON-gegevensbestand te uploaden naar uw Azure-opslagaccount en registreer het vervolgens in uw Azure Kaarten-account. Zorg ervoor dat u de unieke id (udid) waarde noteert. U hebt deze nodig. U udid verwijst naar de geofence die u hebt geüpload naar uw Azure-opslagaccount vanuit uw broncode. Zie Geofencing GeoJSON-gegevens voor meer informatie over geofence-gegevensbestanden.

Een IoT Hub maken

IoT Hub maakt veilige en betrouwbare tweerichtingscommunicatie mogelijk tussen een IoT-toepassing en de beheerde apparaten. Voor deze zelfstudie wilt u informatie ontvangen van het apparaat in het voertuig om zo de locatie van de huurauto te bepalen. In deze sectie maakt u een IoT-hub in de resourcegroep ContosoRental. Deze hub is verantwoordelijk voor het publiceren van telemetrie-gebeurtenissen van uw apparaat.

Als u een IoT-hub wilt maken in de resourcegroep ContosoRental, volgt u de stappen in Een IoT-hub maken.

Een apparaat registreren in uw IoT-hub

Apparaten kunnen geen verbinding maken met de IoT-hub, tenzij ze zijn geregistreerd in het IoT Hub-identiteitsregister. Maak één apparaat met de naam InVehicleDevice. Als u het apparaat wilt maken en registreren in uw IoT-hub, volgt u de stappen in Een nieuw apparaat registreren in de IoT-hub. Zorg ervoor dat u de primaire verbindingsreeks van het apparaat kopieert. U hebt deze later nodig.

Een functie maken en een Event Grid-abonnement toevoegen

Azure Functions is een serverloze rekenservice waarmee u kleine codefragmenten (functies) kunt uitvoeren zonder dat u de rekeninfrastructuur expliciet hoeft in te richten of te beheren. Zie Azure Functionsvoor meer informatie.

Een functie wordt geactiveerd via een bepaalde gebeurtenis. Een functie maken die wordt geactiveerd door een Event Grid-trigger. Maak de relatie tussen de trigger en de functie door een gebeurtenisabonnement te maken voor de telemetriegebeurtenissen van het IoT Hub-apparaat. Wanneer een telemetriegebeurtenis van het apparaat optreedt, wordt de functie aangeroepen als eindpunt, en ontvangt deze de relevante gegevens voor het apparaat dat u eerder hebt geregistreerd in IoT Hub.

Hier volgt de C#-scriptcode die uw functie bevat.

Stel nu uw Azure-functie in.

  1. Selecteer Een resource maken in het dashboard van Azure Portal. Typ in het tekstvak: Functie-app. Selecteer Functie-app>Maken.

  2. Geef de functie-app een naam op de aanmaakpagina van Functie-app. Selecteer onder Resourcegroep de optie ContosoRental in de vervolgkeuzelijst. Selecteer .NET als runtimestack. Selecteer onder aan de pagina Volgende: Opslag >.

    Schermopname van een functie-app maken.

  3. Selecteer voor Opslagaccount het opslagaccount dat u hebt gemaakt in Een Azure-opslagaccount maken. Selecteer Controleren + maken.

  4. Bekijk de details van de functie-app en selecteer Maken.

  5. Wanneer de app is gemaakt, voegt u er een functie aan toe. Ga naar functie app. Selecteer de knop Maken in Azure Portal .

    Belangrijk

    De Azure Event Hub-trigger en de Azure Event Grid-triggersjablonen hebben vergelijkbare namen. Zorg ervoor dat u de Azure Event Grid-triggersjabloon selecteert.

    Schermopname van het maken van een functie in Azure Portal.

  6. Het deelvenster Functie maken wordt weergegeven. Schuif omlaag in het deelvenster Een sjabloon selecteren en selecteer de Azure Event Grid-trigger en selecteer vervolgens de knop Maken .

    Schermopname van een functie maken.

  7. Geef een naam op voor de functie. In deze zelfstudie gebruikt u de naam GetGeoFunction, maar in het algemeen kunt u elke gewenste naam gebruiken. Selecteer Functie maken.

  8. Selecteer in het linkermenu het deelvenster Code + testen. Kopieer en plak het C#-script in het codevenster.

    Kopiëren/schermopname van code plakken in het functievenster.

  9. Vervang de volgende parameters in de C#-code:

    • Vervang SUBSCRIPTION_KEY door de abonnementssleutel van uw Azure Kaarten-account.
    • Vervang UDID door de udid geofence die u hebt geüpload in Een geofence uploaden naar uw Azure-opslagaccount.
    • De functie CreateBlobAsync in het script maakt een blob per gebeurtenis in het gegevensopslagaccount. Vervang de ACCESS_KEY, ACCOUNT_NAME en STORAGE_CONTAINER_NAME door de toegangssleutel, accountnaam en gegevensopslagcontainer van je opslagaccount. Deze waarden zijn gegenereerd tijdens het maken van het opslagaccount in Een Azure-opslagaccount maken.
  10. Selecteer in het linkermenu het deelvenster Integratie. Selecteer Event Grid-trigger in het diagram. Typ een naam voor de trigger, bijvoorbeeld eventGridEvent en selecteer Event Grid-abonnement maken.

    Schermopname van gebeurtenisabonnement toevoegen.

  11. Vul de abonnementsgegevens in. Geef het gebeurtenisabonnement een naam. Selecteer bij Gebeurtenisschema de optie Gebeurtenisrasterschema. Selecteer bij Onderwerptypen de optie Azure IoT Hub-accounts. Selecteer bij Resourcegroep de resourcegroep die u hebt gemaakt aan het begin van deze zelfstudie. Selecteer voor Resource de IoT-hub die u hebt gemaakt in 'Een Azure IoT-hub maken'. Als u wilt filteren op gebeurtenistypen, selecteert u Apparaattelemetrie.

    Nadat u deze opties hebt gekozen, ziet u dat Onderwerptype is gewijzigd in IoT Hub. Voor Systeemonderwerpnaam kunt u dezelfde naam gebruiken als voor uw resource. Selecteer ten slotte in de sectie Eindpuntgegevens de optie Een eindpunt selecteren. Accepteer alle instellingen en selecteer Selectie bevestigen.

    Schermopname van gebeurtenisabonnement maken.

  12. Controleer de instellingen. Zorg ervoor dat het eindpunt de functie opgeeft die u in het begin van deze sectie hebt gemaakt. Selecteer Maken.

    Schermopname van bevestiging voor Gebeurtenisabonnement maken.

  13. Nu bent u terug bij het paneel Trigger bewerken. Selecteer Opslaan.

Gebeurtenissen filteren met behulp van berichtroutering van IoT Hub

Wanneer u een Event Grid-abonnement toevoegt aan de Azure-functie, wordt automatisch een berichtroute gemaakt in de opgegeven IoT-hub. Met berichtroutering kunt u verschillende gegevenstypen naar meerdere eindpunten routeren. Je kunt bijvoorbeeld telemetrieberichten van apparaten, levenscyclusgebeurtenissen van apparaten en dubbele wijzigingen van apparaten routeren. Zie IoT Hub-berichtroutering gebruiken voor meer informatie.

Schermopname van berichtroutering in IoT Hub.

In het voorbeeldscenario wilt u alleen berichten ontvangen wanneer de huurauto wordt verplaatst. Maak een routeringsquery om de gebeurtenissen te filteren waarbij de eigenschap Engine gelijk is aan ON. Als u een routeringsquery wilt maken, selecteert u de route RouteToEventGrid en vervangt u de Routing-query door "Engine = 'ON'". Selecteer vervolgens Opslaan. De IoT-hub publiceert nu alleen apparaattelemetrie als de motor is ingeschakeld.

Schermopname van routeringsberichten filteren.

Tip

Er zijn verschillende manieren om een query uit te voeren op IoT-apparaat-naar-cloud-berichten. Raadpleeg IoT Hub-berichtroutering gebruiken voor meer informatie over syntaxis van berichtroutering.

Stuur telemetriegegevens naar IoT Hub

Wanneer uw Azure-functie wordt uitgevoerd, kunt u nu telemetriegegevens verzenden naar de IoT-hub, waarmee deze naar Event Grid wordt gerouteerd. Gebruik een C#-applicatie om locatiegegevens te simuleren voor een in-voertuig apparaat van een huurauto. Als u de toepassing wilt uitvoeren, hebt u .NET SDK 6.0 nodig op uw ontwikkelcomputer. Volg deze stappen om gesimuleerde telemetriegegevens naar de IoT-hub te verzenden:

  1. Als u dit nog niet hebt gedaan, downloadt u het C#-project rentalCarSimulation.

  2. Open het bestand simulatedCar.cs in een teksteditor naar keuze en vervang de waarde van de connectionString door de waarde die u hebt opgeslagen toen u het apparaat registreerde. Sla de wijzigingen in het bestand op.

  3. Zorg ervoor dat de ASP.NET Core Runtime op uw computer is geïnstalleerd. Ga in uw lokale terminalvenster naar de hoofdmap van het C#-project en voer de volgende opdracht uit om de vereiste pakketten voor gesimuleerde apparaattoepassing te installeren:

    dotnet restore
    
  4. Voer in dezelfde terminal de volgende opdracht uit om de simulatietoepassing voor huurauto's te bouwen en uit te voeren:

    dotnet run
    

Uw lokale terminal moet eruitzien als in de volgende schermopname.

Schermopname van terminaluitvoer.

Als u nu de blobopslagcontainer opent, ziet u vier blobs voor locaties waar het voertuig zich buiten de geofence bevond.

Schermopname van blobs in een container weergeven.

Op de volgende kaart worden vier locatiepunten van het voertuig weergegeven die buiten de geofence vallen. Elke locatie is met regelmatige tijdsintervallen geregistreerd.

Schermopname van kaart met schendingen.

Azure Maps en IoT verkennen

Ga voor meer informatie over het verkennen van de Azure Maps API's die in deze zelfstudie worden gebruikt naar:

Voor een volledige lijst van Azure Maps REST API's, bekijk:

Voor een lijst met apparaten die Azure-gecertificeerd zijn voor IoT ga je naar:

Resources opschonen

Er zijn geen resources die moeten worden opgeruimd.

Volgende stappen

Ga voor meer informatie over het verzenden van apparaat-naar-cloud-telemetrie en omgekeerd naar: