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 utrymme och tid. Några exempel är vagnparkshantering, tillgångsspårning, mobilitet och program för smarta städer. Den här självstudien vägleder dig genom en lösning som spårar använda biluthyrningsflyttningar med hjälp av Azure Kartor-API:er.

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

  • Skapa ett Azure Storage-konto för att logga spårningsdata för bilar.
  • Upload geofence till Azure-Kartor tjänsten Data med hjälp av DATA Upload-API:et.
  • 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 rumslig analys.
  • Prenumerera på telemetrihändelser för IoT-enheter från Azure-funktionen via Azure Event Grid.
  • Filtrera telemetrihändelserna med hjälp IoT Hub dirigering av meddelanden.

Förutsättningar

  1. Logga in på Azure-portalen.

  2. Skapa ett Azure Kartor konto.

  3. Skaffa en primär prenumerationsnyckel, som även kallas primärnyckel eller prenumerationsnyckel. Mer information finns i Hantera autentisering i Azure Kartor.

  4. Skapa en resursgrupp. I den här självstudien ger vi resursgruppen namnet ContosoRental, men du kan välja vilket namn du vill.

  5. Ladda ned rentalCarSimulation C#-projektet.

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

Användningsfall: spårning av uthyrningsbil

Anta att ett biluthyrningsföretag vill logga platsinformation, avstånd som färdats och körningstillstånd för sina uthyrningsbilar. Företaget vill också lagra den här informationen när en bil lämnar rätt geografisk region.

Uthyrningsbilarna ä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 för geospatiala data. Telemetrischemat för uthyrningsbilens enhet 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 ställt in Azure-tjänsterna måste du ladda ned rentalCarSimulation C#-projektet 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 händelseprenumerationen på telemetrihändelser på enheten.

  4. Funktionen loggar fordonsenhetens platskoordinater, händelsetid och enhets-ID. Den använder sedan Api:et Spatial Geofence Get för att avgöra om bilen har kört utanför geofence-et. Om den har rört sig utanför geofence-grä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. Uthyrningsbilens väg anges med 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 v2-lagringskonto för generell användning i resursgruppen. Om du inte har skapat en resursgrupp följer du anvisningarna i Skapa en resursgrupp. I den här självstudien ger du 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 ge det vad du vill.

När du har skapat ditt lagringskonto måste du 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 Storage och nyckelvärdet i avsnittet key1. Du behöver båda dessa värden i avsnittet "Skapa en Azure-funktion och lägga till Event Grid prenumeration".

    Skärmbild av kopiering av lagringskontots namn och nyckel.

Upload geofence

Använd sedan Postman-appen för att ladda upp geofence till Azure Kartor. Geofence definierar det auktoriserade geografiska området för vårt uthyrningsfordon. Du använder geofence i din Azure-funktion för att avgöra om en bil har flyttats utanför geofence-området.

Följ de här stegen för att ladda upp geofence med hjälp av Azure Kartor Data Upload-API:et:

  1. Öppna Postman-appen och välj Nytt igen. I fönstret Skapa ny väljer du HTTP-begäran och anger ett namn på begäran.

  2. Välj POST HTTP-metoden på fliken Builder (Byggare) och ange följande URL för att ladda upp geofence-filen till DATA Upload-API:et. Ersätt med din {Your-Azure-Maps-Primary-Subscription-key} primära prenumerationsnyckel.

    https://us.atlas.microsoft.com/mapData?subscription-key={Your-Azure-Maps-Primary-Subscription-key}&api-version=2.0&dataFormat=geojson
    

    I URL-sökvägen geojson representerar värdet mot dataFormat parametern formatet för de data som laddas upp.

  3. Välj Body > raw (Brödtext) som indataformat och välj JSON i listrutan. Öppna JSON-datafilenoch kopiera JSON till brödtextavsnittet. Välj Skicka.

  4. Välj Skicka och vänta tills begäran har bearbetas. När begäran har slutförts går du till fliken Rubriker i svaret. Kopiera värdet för nyckeln Operation-Location, som är status URL .

    https://us.atlas.microsoft.com/mapData/operations/{operationId}?api-version=2.0
    
  5. Om du vill kontrollera statusen för API-anropet skapar du en GET HTTP-begäran på status URL . Du måste lägga till din primära prenumerationsnyckel i URL:en för autentisering. GET-begäran bör se ut som följande URL:

    https://us.atlas.microsoft.com/mapData/{operationId}/status?api-version=2.0&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
    
  6. När begäran har slutförts väljer du fliken Rubriker i svarsfönstret. Kopiera värdet för nyckeln Resource-Location, som är resource location URL . resource location URLinnehåller den unika identifieraren ( ) för udid uppladdade data. Kopiera för udid senare användning i den här självstudien.

    Kopiera resursplatsens URL.

Skapa en IoT Hub

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

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. Här skapar du en enskild 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 Hub. Se till att kopiera enhetens primära anslutningssträng. Du behöver det senare.

Skapa en funktion och lägga 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 behöva uttryckligen etablera eller hantera beräkningsinfrastruktur. Mer information finns i Azure Functions.

En funktion utlöses av en viss händelse. Här skapar du 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-telemetrihändelser. När en enhettelemetrihändelse inträffar anropas din funktion 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 kommer att innehålla.

Konfigurera nu din Azure-funktion.

  1. I Azure Portal väljer du Skapa en resurs. Skriv Funktionsapp i sökrutan. Välj Funktionsapp > Skapa.

  2. Ge funktionsappen ett namn på sidan för att skapa funktionsappen. Under Resursgrupp väljer du ContosoRental i listrutan. Välj .NET som Körningsstack. Välj 3.1 som Version. Längst ned på sidan väljer du Nästa: Värd >.

    Skärmbild av att skapa en funktionsapp.

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

  4. Granska informationen om funktionsappen och välj Skapa.

  5. När appen har skapats lägger du till en funktion i den. Gå till funktionsappen. Välj fönstret Funktioner. Längst upp på sidan väljer du + Lägg till. Panelen för funktionsmallen visas. Rulla nedåt i panelen och välj Azure Event Grid utlösaren.

    Viktigt

    Azure Event Hub-utlösaren och mallarna för Azure Event Grid utlösare har liknande namn. Se till att du väljer Azure Event Grid utlösarmallen.

    Skärmbild av att skapa en funktion.

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

  7. 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 att klistra in kod i funktionsfönstret.

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

    • Ersätt SUBSCRIPTION_KEY med din primära prenumerationsnyckel Kartor Azure Kartor azure-konto.
    • Ersätt UDID med för udid den geofence som du laddade upp Upload en geofence.
    • 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 Storage-konto.
  9. I den vänstra menyn väljer du fönstret Integrering. Välj Event Grid utlösare i diagrammet. Ange ett namn för utlösaren, eventGridEvent, och välj Skapa Event Grid prenumeration.

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

  10. 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 Filter to Event Types (Filtrera till händelsetyper) väljer du Device Telemetry (Enhettelemetri).

    När du har valt de här alternativen ser du att Ämnestyp ändras till IoT Hub. För System topic Name (Systemämnesnamn) kan du använda samma namn som din resurs. 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.

  11. 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.

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

Filtrera händelser med hjälp IoT Hub dirigering av meddelanden

När du lägger till 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 enhettelemetrimeddelanden, enhetslivscykelhändelser och enhetstvillingändringshändelser. Mer information finns i Använda IoT Hub routning av meddelanden.

Skärmbild av meddelanderoutning i IoT Hub.

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

Skärmbild av filterroutningsmeddelanden.

Tips

Det finns olika sätt att köra frågor mot IoT-meddelanden från enheten till molnet. Mer information om syntax för meddelanderoutning finns i IoT Hub routning av meddelanden.

Skicka telemetridata till IoT Hub

När Azure-funktionen körs kan du nu skicka telemetridata till IoT-hubben, som dirigerar dem till Event Grid. Använd ett C#-program för att simulera platsdata för en fordonsenhet för en uthyrningsbil. Om du vill köra programmet behöver du .NET Core SDK 2.1.0 eller senare på utvecklingsdatorn. Följ de här stegen för att skicka simulerade telemetridata till IoT-hubben:

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

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

  3. Kontrollera att du har .NET Core installerat på datorn. I det lokala terminalfönstret går du till C#-projektets rotmapp och kör följande kommando för att installera de paket som krävs för det simulerade enhetsprogrammet:

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

    dotnet run
    

Din lokala terminal bör se ut som den nedan.

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-platsen.

Skärmbild av visa blobar i containern.

Följande karta visar fyra fordonsplatser utanför geofence. Varje plats loggades med jämna mellanrum.

Skärmbild av överträdelsekarta.

Utforska Azure Kartor och IoT

Om du vill utforska Azure Kartor-API:er som används i den här självstudien kan du se:

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

Om du vill hämta 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 enhet-till-moln-telemetri och tvärtom finns i: