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.
- Ett Azure Kartor-konto
- En prenumerationsnyckel
- En resursgrupp
- Projektet rentalCarSimulation C#
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:
Enheten i fordonet skickar telemetridata till IoT Hub.
Om bilmotorn körs publicerar hubben telemetridata till Event Grid.
En Azure-funktion utlöses på grund av dess händelseprenumeration på enhetstelemetrihändelser.
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å.
Följande bild visar geofence-området i blått. Hyrbilens väg indikeras av en grön linje.
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.
Gå till ditt nyligen skapade lagringskonto. I avsnittet Essentials väljer du länken Containrar .
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.
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 .
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.
På instrumentpanelen i Azure-portalen väljer du Skapa en resurs. Skriv Funktionsapp i söktextrutan. Välj Skapa funktionsapp>.
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 >.
För Lagringskonto väljer du det lagringskonto som du skapade i Skapa ett Azure-lagringskonto. Välj Granska + skapa.
Granska funktionsappens information och välj Skapa.
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.
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 .
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.
I den vänstra menyn väljer du fönstret Kod + Test . Kopiera och klistra in C#-skriptet i kodfönstret.
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.
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.
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.
Granska dina inställningar. Kontrollera att slutpunkten anger den funktion som du skapade i början av det här avsnittet. Välj Skapa.
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.
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å.
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:
Om du inte redan har gjort det laddar du ned projektet rentalCarSimulation C#.
simulatedCar.cs
Öppna filen i valfri textredigerare och ersätt värdetconnectionString
för med det som du sparade när du registrerade enheten. Spara ändringar i filen.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
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.
Om du öppnar bloblagringscontainern nu kan du se fyra blobar för platser där fordonet låg utanför geofence.
Följande karta visar fyra platspunkter för fordon utanför geofence. Varje plats loggades med regelbundna tidsintervall.
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: