Självstudie: Implementera rumslig IoT-analys med hjälp av Azure Kartor

I ett IoT-scenario är det vanligt att samla in och spåra relevanta händelser som inträffar i rum och tid. Exempel är vagnparkshantering, tillgångsspårning, mobilitet och smarta stadsprogram. Den här självstudien vägleder dig genom en lösning som spårar begagnade biluthyrningsrörelser med hjälp av Api:erna för Azure Kartor.

I den här självstudien kommer du att:

  • Skapa ett Azure-lagringskonto för att logga spårningsdata för bilar.
  • Ladda upp en geofence till ett Azure Storage-konto.
  • Skapa en hubb i Azure IoT Hub och registrera en enhet.
  • Skapa en funktion i Azure Functions och implementera affärslogik baserat på Azure Kartor spatial analys.
  • Prenumerera på IoT-enhetstelemetrihändelser från Azure-funktionen via Azure Event Grid.
  • Filtrera telemetrihändelserna med hjälp av IoT Hub-meddelanderoutning.

Förutsättningar

Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

Dricks

Du kan ladda ned hela C#-projektet rentalCarSimulation från GitHub som en enda ZIP-fil genom att gå till roten i exemplet och välja den gröna <> kodknappen och sedan Ladda ned ZIP.

I den här självstudien används Postman-programmet , men du kan välja en annan API-utvecklingsmiljö.

Viktigt!

I URL-exemplen ersätter du {Your-Azure-Maps-Subscription-key} med din Azure Kartor-prenumerationsnyckel.

Användningsfall: spårning av hyrbil

Låt oss säga att ett biluthyrningsföretag vill logga platsinformation, avstånd som färdas och körningstillstånd för sina hyrbilar. Företaget vill också lagra den här informationen när en bil lämnar rätt auktoriserad geografisk region.

Hyrbilarna är utrustade med IoT-enheter som regelbundet skickar telemetridata till IoT Hub. Telemetrin innehåller den aktuella platsen och anger om bilens motor körs. Schemat för enhetens plats följer IoT Plug and Play-schemat för geospatiala data. Hyrbilens telemetrischema för enheter ser ut som följande JSON-kod:

{
    "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 ]
            }
        }
    }
}

I den här självstudien spårar du bara ett fordon. När du har konfigurerat Azure-tjänsterna måste du ladda ned projektet rentalCarSimulation C# för att köra fordonssimulatorn. Hela processen, från händelse till funktionskörning, sammanfattas i följande steg:

  1. Enheten i fordonet skickar telemetridata till IoT Hub.

  2. Om bilmotorn körs publicerar hubben telemetridata till Event Grid.

  3. En Azure-funktion utlöses på grund av dess händelseprenumeration på enhetstelemetrihändelser.

  4. Funktionen loggar fordonsenhetens platskoordinater, händelsetid och enhets-ID. Den använder sedan Spatial Geofence Get API för att avgöra om bilen har kört utanför geofence. Om den har färdats utanför geofencegränserna lagrar funktionen platsdata som tas emot från händelsen i en blobcontainer. Funktionen frågar också sökadressen omvänd för att översätta koordinatplatsen till en gatuadress och lagrar den med resten av enhetens platsdata.

Följande diagram visar en översikt över systemet på hög nivå.

Diagram över systemöversikt.

Följande bild visar geofence-området i blått. Hyrbilens väg indikeras av en grön linje.

Bild som visar geofence-vägen.

Skapa ett Azure Storage-konto

Om du vill lagra spårningsdata för bilöverträdelser skapar du ett generellt v2-lagringskonto i resursgruppen. Om du inte har skapat en resursgrupp följer du anvisningarna i skapa resursgrupper. Ge resursgruppen namnet ContosoRental.

Om du vill skapa ett lagringskonto följer du anvisningarna i skapa ett lagringskonto. I den här självstudien ger du lagringskontot namnet contosorentalstorage, men i allmänhet kan du kalla det vad du vill.

När du har skapat ditt lagringskonto måste du sedan skapa en container för att lagra loggningsdata.

  1. Gå till ditt nyligen skapade lagringskonto. I avsnittet Essentials väljer du länken Containrar .

    Skärmbild av containrar för bloblagring.

  2. I det övre vänstra hörnet väljer du + Container. En panel visas till höger i webbläsaren. Ge containern namnet contoso-rental-logs och välj Skapa.

    Skärmbild av att skapa en blobcontainer.

  3. Gå till fönstret Åtkomstnycklar i ditt lagringskonto och kopiera lagringskontots namn och nyckelvärdet i avsnittet key1 . Du behöver båda dessa värden i avsnittet Skapa en funktion och lägga till en Event Grid-prenumeration .

    Skärmbild av namn och nyckel för kopiering av lagringskonto.

Ladda upp en geofence till ditt Azure Storage-konto

Geofence definierar det auktoriserade geografiska området för vårt hyrbil. Använd geofence i din Azure-funktion för att avgöra om en bil har flyttat utanför geofence-området.

Följ stegen som beskrivs i artikeln Så här skapar du dataregister för att ladda upp geofence JSON-datafilen till ditt Azure Storage-konto och registrera den sedan i ditt Azure Kartor-konto. Anteckna värdet för den unika identifieraren (udid) och du behöver det. Det udid är så du refererar till geofence som du laddade upp till ditt Azure Storage-konto från källkoden. Mer information om geofence-datafiler finns i Geofencing GeoJSON-data.

Skapa en IoT-hubb

IoT Hub möjliggör säker och tillförlitlig dubbelriktad kommunikation mellan ett IoT-program och de enheter som hanteras. I den här självstudien vill du få information från din enhet i fordonet för att fastställa platsen för hyrbilen. I det här avsnittet skapar du en IoT-hubb i resursgruppen ContosoRental . Den här hubben ansvarar för att publicera dina enhetstelemetrihändelser.

Om du vill skapa en IoT-hubb i resursgruppen ContosoRental följer du stegen i skapa en IoT-hubb.

Registrera en enhet i din IoT-hubb

Enheter kan inte ansluta till IoT-hubben om de inte är registrerade i IoT Hub-identitetsregistret. Skapa en enda enhet med namnet InVehicleDevice. Om du vill skapa och registrera enheten i din IoT-hubb följer du stegen i registrera en ny enhet i IoT-hubben. Se till att kopiera enhetens primära anslutningssträng. Du behöver det senare.

Skapa en funktion och lägg till en Event Grid-prenumeration

Azure Functions är en serverlös beräkningstjänst som gör att du kan köra små delar av kod ("funktioner") utan att uttryckligen behöva etablera eller hantera beräkningsinfrastruktur. Mer information finns i Azure Functions.

En funktion utlöses av en viss händelse. Skapa en funktion som utlöses av en Event Grid-utlösare. Skapa relationen mellan utlösare och funktion genom att skapa en händelseprenumeration för IoT Hub-enhetstelemetrihändelser. När en enhetstelemetrihändelse inträffar anropas funktionen som en slutpunkt och tar emot relevanta data för den enhet som du tidigare registrerade i IoT Hub.

Här är C#-skriptkoden som din funktion innehåller.

Konfigurera nu din Azure-funktion.

  1. På instrumentpanelen i Azure-portalen väljer du Skapa en resurs. Skriv Funktionsapp i söktextrutan. Välj Skapa funktionsapp>.

  2. På sidan Skapa funktionsapp namnger du funktionsappen. Under Resursgrupp väljer du ContosoRental i listrutan. Välj .NET som Körningsstack. Längst ned på sidan väljer du Nästa: Lagring >.

    Skärmbild av skapa en funktionsapp.

  3. För Lagringskonto väljer du det lagringskonto som du skapade i Skapa ett Azure-lagringskonto. Välj Granska + skapa.

  4. Granska funktionsappens information och välj Skapa.

  5. När appen har skapats lägger du till en funktion i den. Gå till funktionsappen. Välj knappen Skapa i Azure-portalen.

    Viktigt!

    Azure Event Hub-utlösaren och Azure Event Grid-utlösarmallarna har liknande namn. Se till att du väljer mallen Azure Event Grid-utlösare.

    Skärmbild av att skapa en funktion i Azure-portalen.

  6. Panelen Skapa funktion visas. Rulla nedåt på panelen Välj en mall och välj Azure Event Grid-utlösaren och välj sedan knappen Skapa .

    Skärmbild av skapa en funktion.

  7. Ge funktionen ett namn. I den här självstudien använder du namnet GetGeoFunction, men i allmänhet kan du använda valfritt namn. Välj Skapa funktion.

  8. I den vänstra menyn väljer du fönstret Kod + Test . Kopiera och klistra in C#-skriptet i kodfönstret.

    Kopiera/skärmbild av klistra in kod i funktionsfönstret.

  9. Ersätt följande parametrar i C#-koden:

    • Ersätt SUBSCRIPTION_KEY med din Azure Kartor-kontoprenumerationsnyckel.
    • Ersätt UDID med den udid geofence som du laddade upp i Ladda upp en geofence till ditt Azure Storage-konto.
    • Funktionen CreateBlobAsync i skriptet skapar en blob per händelse i datalagringskontot. Ersätt ACCESS_KEY, ACCOUNT_NAME och STORAGE_CONTAINER_NAME med lagringskontots åtkomstnyckel, kontonamn och datalagringscontainer. Dessa värden genererades när du skapade ditt lagringskonto i Skapa ett Azure-lagringskonto.
  10. I den vänstra menyn väljer du fönstret Integrering . Välj Event Grid-utlösare i diagrammet. Skriv in ett namn på utlösaren, eventGridEvent, och välj Skapa Event Grid-prenumeration.

    Skärmbild av lägg till händelseprenumeration.

  11. Fyll i prenumerationsinformationen. Namnge händelseprenumerationen. För Händelseschema väljer du Event Grid-schema. För Ämnestyper väljer du Azure IoT Hub-konton. För Resursgrupp väljer du den resursgrupp som du skapade i början av den här självstudien. För Resurs väljer du den IoT-hubb som du skapade i "Skapa en Azure IoT-hubb". För Filtrera till händelsetyper väljer du Enhetstelemetri.

    När du har valt de här alternativen ser du att ämnestypen ändras till IoT Hub. För Systemämnesnamn kan du använda samma namn som resursen. I avsnittet Slutpunktsinformation väljer du slutligen Välj en slutpunkt. Acceptera alla inställningar och välj Bekräfta markering.

    Skärmbild av skapa händelseprenumeration.

  12. Granska dina inställningar. Kontrollera att slutpunkten anger den funktion som du skapade i början av det här avsnittet. Välj Skapa.

    Skärmbild av bekräftelse för att skapa händelseprenumeration.

  13. Nu är du tillbaka på panelen Redigera utlösare . Välj Spara.

Filtrera händelser med hjälp av IoT Hub-meddelanderoutning

När du lägger till en Event Grid-prenumeration i Azure-funktionen skapas automatiskt en meddelandeväg i den angivna IoT-hubben. Med meddelanderoutning kan du dirigera olika datatyper till olika slutpunkter. Du kan till exempel dirigera meddelanden om enhetstelemetri, händelser i enhetens livscykel och enhetstvillingens ändringshändelser. Mer information finns i Använda IoT Hub-meddelanderoutning.

Skärmbild av meddelanderoutning i IoT Hub.

I ditt exempelscenario vill du bara ta emot meddelanden när hyrbilen flyttas. Skapa en routningsfråga för att filtrera de händelser där egenskapen Engine är lika med "ON". Om du vill skapa en routningsfråga väljer du routen RouteToEventGrid och ersätter routningsfrågan med "Engine='ON'". Välj sedan Spara. Nu publicerar IoT-hubben endast enhetstelemetri där motorn är på.

Skärmbild av filterroutningsmeddelanden.

Dricks

Det finns olika sätt att fråga IoT-meddelanden från enhet till moln. Mer information om syntax för meddelanderoutning finns i IoT Hub-meddelanderoutning.

Skicka telemetridata till IoT Hub

När din Azure-funktion körs kan du nu skicka telemetridata till IoT-hubben, som dirigerar den till Event Grid. Använd ett C#-program för att simulera platsdata för en enhet i fordonet för en hyrbil. För att köra programmet behöver du .NET SDK 6.0 på utvecklingsdatorn. Följ dessa steg för att skicka simulerade telemetridata till IoT-hubben:

  1. Om du inte redan har gjort det laddar du ned projektet rentalCarSimulation C#.

  2. simulatedCar.cs Öppna filen i valfri textredigerare och ersätt värdet connectionString för med det som du sparade när du registrerade enheten. Spara ändringar i filen.

  3. Kontrollera att du har ASP.NET Core Runtime installerat på datorn. I det lokala terminalfönstret går du till rotmappen för C#-projektet och kör följande kommando för att installera de paket som krävs för simulerat enhetsprogram:

    dotnet restore
    
  4. Kör följande kommando i samma terminal för att skapa och köra simuleringsprogrammet för hyrbil:

    dotnet run
    

Din lokala terminal bör se ut som på följande skärmbild.

Skärmbild av terminalutdata.

Om du öppnar bloblagringscontainern nu kan du se fyra blobar för platser där fordonet låg utanför geofence.

Skärmbild av att visa blobar i containern.

Följande karta visar fyra platspunkter för fordon utanför geofence. Varje plats loggades med regelbundna tidsintervall.

Skärmbild av överträdelsekartan.

Utforska Azure Kartor och IoT

Information om hur du utforskar Azure Kartor API:er som används i den här självstudien finns i:

En fullständig lista över Azure Kartor REST-API:er finns i:

Om du vill få en lista över enheter som är Azure-certifierade för IoT går du till:

Rensa resurser

Det finns inga resurser som kräver rensning.

Nästa steg

Mer information om hur du skickar telemetri från enhet till moln och tvärtom finns i: