Samouczek: implementowanie analizy przestrzennej IoT przy użyciu usługi Azure Mapy
W scenariuszu IoT typowe jest przechwytywanie i śledzenie odpowiednich zdarzeń występujących w przestrzeni i czasie. Przykłady obejmują zarządzanie flotą, śledzenie zasobów, mobilność i aplikacje inteligentne miasta. Ten samouczek przeprowadzi Cię przez rozwiązanie, które śledzi ruch używanych samochodów przy użyciu interfejsów API usługi Azure Mapy.
W tym samouczku wykonasz następujące elementy:
- Utwórz konto usługi Azure Storage, aby rejestrować dane śledzenia samochodów.
- Przekazywanie geofencingu do konta usługi Azure Storage.
- Utwórz centrum w usłudze Azure IoT Hub i zarejestruj urządzenie.
- Tworzenie funkcji w usłudze Azure Functions, implementowanie logiki biznesowej na podstawie usługi Azure Mapy analizy przestrzennej.
- Zasubskrybuj zdarzenia telemetryczne urządzenia IoT z funkcji platformy Azure za pośrednictwem usługi Azure Event Grid.
- Filtruj zdarzenia telemetrii przy użyciu routingu komunikatów usługi IoT Hub.
Wymagania wstępne
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Napiwek
Cały projekt rentalCarSimulation C# można pobrać z witryny GitHub jako pojedynczy plik ZIP, przechodząc do katalogu głównego przykładu i wybierając zielony <> przycisk Kod, a następnie pozycję Pobierz plik ZIP.
W tym samouczku jest używana aplikacja Postman , ale możesz wybrać inne środowisko deweloperskie interfejsu API.
Ważne
W przykładach adresów URL zastąp {Your-Azure-Maps-Subscription-key}
ciąg kluczem subskrypcji usługi Azure Mapy.
Przypadek użycia: wypożyczenie śledzenia samochodów
Załóżmy, że firma wynajmu samochodów chce rejestrować informacje o lokalizacji, odległość podróży i stan działania dla swoich samochodów wypożyczonych. Firma chce również przechowywać te informacje za każdym razem, gdy samochód opuszcza właściwy autoryzowany region geograficzny.
Samochody wypożyczające są wyposażone w urządzenia IoT, które regularnie wysyłają dane telemetryczne do usługi IoT Hub. Dane telemetryczne zawierają bieżącą lokalizację i wskazują, czy silnik samochodu działa. Schemat lokalizacji urządzenia jest zgodny ze schematem usługi IoT Plug and Play dla danych geoprzestrzennych. Schemat telemetrii urządzenia wypożyczania samochodu wygląda podobnie do następującego kodu JSON:
{
"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 ]
}
}
}
}
W tym samouczku śledzisz tylko jeden pojazd. Po skonfigurowaniu usług platformy Azure należy pobrać projekt rentalCarSimulation C#, aby uruchomić symulator pojazdów. Cały proces , od zdarzenia do wykonywania funkcji, jest podsumowany w następujących krokach:
Urządzenie w pojeździe wysyła dane telemetryczne do usługi IoT Hub.
Jeśli silnik samochodu jest uruchomiony, centrum publikuje dane telemetryczne w usłudze Event Grid.
Funkcja platformy Azure jest wyzwalana z powodu jej subskrypcji zdarzeń dotyczących zdarzeń telemetrii urządzenia.
Funkcja rejestruje współrzędne, czas zdarzenia i identyfikator urządzenia pojazdu. Następnie używa interfejsu API get geofencingu przestrzennego, aby określić, czy samochód został wyjechał poza geofencing. Jeśli przekroczył granice geofencingu, funkcja przechowuje dane lokalizacji odebrane ze zdarzenia do kontenera obiektów blob. Funkcja wysyła również zapytanie do odwrotnego adresu wyszukiwania, aby przetłumaczyć lokalizację współrzędnych na adres ulicy i przechowuje je z pozostałymi danymi lokalizacji urządzenia.
Na poniższym diagramie przedstawiono ogólny przegląd systemu.
Na poniższej ilustracji wyróżniono obszar geofencingu na niebiesko. Trasa wypożyczonego samochodu jest wskazywana przez zieloną linię.
Tworzenie konta usługi Azure Storage
Aby przechowywać dane śledzenia naruszeń samochodu, utwórz konto magazynu ogólnego przeznaczenia w wersji 2 w grupie zasobów. Jeśli grupa zasobów nie została utworzona, postępuj zgodnie z instrukcjami w temacie Tworzenie grup zasobów. Nadaj grupie zasobów nazwę ContosoRental.
Aby utworzyć konto magazynu, postępuj zgodnie z instrukcjami w temacie Tworzenie konta magazynu. W tym samouczku nadaj nazwę kontu magazynu contosorentalstorage, ale ogólnie możesz nadać mu dowolne nazwy.
Po pomyślnym utworzeniu konta magazynu należy utworzyć kontener do przechowywania danych rejestrowania.
Przejdź do nowo utworzonego konta magazynu. W sekcji Podstawy wybierz link Kontenery.
W lewym górnym rogu wybierz pozycję + Kontener. Panel zostanie wyświetlony po prawej stronie przeglądarki. Nadaj kontenerowi nazwę contoso-rental-logs i wybierz pozycję Utwórz.
Przejdź do okienka Klucze dostępu na koncie magazynu, a następnie skopiuj nazwę konta magazynu i wartość Klucz w sekcji key1 . Obie te wartości są potrzebne w sekcji Tworzenie funkcji i dodaj subskrypcję usługi Event Grid.
Przekazywanie geofencingu na konto usługi Azure Storage
Geofencing definiuje autoryzowany obszar geograficzny dla naszego wynajmu pojazdu. Użyj geofencingu w funkcji platformy Azure, aby określić, czy samochód przeniósł się poza obszar geofencingu.
Wykonaj kroki opisane w artykule How to create data registry (Jak utworzyć rejestr danych), aby przekazać plik danych JSON geofencingu do konta usługi Azure Storage, a następnie zarejestrować go na koncie usługi Azure Mapy. Pamiętaj, aby zanotować wartość unikatowego identyfikatora (udid
), będzie ona potrzebna. W udid
ten sposób odwołujesz się do geofencingu przekazanego na konto usługi Azure Storage z kodu źródłowego. Aby uzyskać więcej informacji na temat plików danych geofencingu, zobacz Geofencing GeoJSON data (Geofencing GeoJSON data).
Tworzenie centrum IoT
Usługa IoT Hub umożliwia bezpieczną i niezawodną dwukierunkową komunikację między aplikacją IoT a zarządzanymi urządzeniami. Na potrzeby tego samouczka chcesz uzyskać informacje z urządzenia w pojeździe, aby określić lokalizację wypożyczonego samochodu. W tej sekcji utworzysz centrum IoT w grupie zasobów ContosoRental . To centrum jest odpowiedzialne za publikowanie zdarzeń telemetrii urządzenia.
Aby utworzyć centrum IoT w grupie zasobów ContosoRental , wykonaj kroki opisane w temacie Tworzenie centrum IoT Hub.
Rejestrowanie urządzenia w centrum IoT
Urządzenia nie mogą łączyć się z centrum IoT Hub, chyba że są zarejestrowane w rejestrze tożsamości centrum IoT. Utwórz jedno urządzenie o nazwie InVehicleDevice. Aby utworzyć i zarejestrować urządzenie w centrum IoT Hub, wykonaj kroki opisane w temacie Rejestrowanie nowego urządzenia w centrum IoT. Pamiętaj, aby skopiować parametry połączenia podstawowe urządzenia. Będziesz jej potrzebować później.
Tworzenie funkcji i dodawanie subskrypcji usługi Event Grid
Azure Functions to bezserwerowa usługa obliczeniowa, która umożliwia uruchamianie małych fragmentów kodu ("funkcje"), bez konieczności jawnego aprowizowania infrastruktury obliczeniowej ani zarządzania nią. Aby dowiedzieć się więcej, zobacz Azure Functions.
Funkcja jest wyzwalana przez określone zdarzenie. Utwórz funkcję wyzwalaną przez wyzwalacz usługi Event Grid. Utwórz relację między wyzwalaczem i funkcją, tworząc subskrypcję zdarzeń dla zdarzeń telemetrycznych urządzenia usługi IoT Hub. Gdy wystąpi zdarzenie telemetrii urządzenia, funkcja jest wywoływana jako punkt końcowy i odbiera odpowiednie dane dla urządzenia, które zostało wcześniej zarejestrowane w usłudze IoT Hub.
Oto kod skryptu języka C#, który zawiera funkcja.
Teraz skonfiguruj funkcję platformy Azure.
Na pulpicie nawigacyjnym witryny Azure Portal wybierz pozycję Utwórz zasób. Wpisz Ciąg Aplikacja funkcji w polu tekstowym wyszukiwania. Wybierz pozycję Utwórz aplikację>funkcji.
Na stronie Tworzenie aplikacji funkcji nadaj aplikacji funkcji nazwę aplikacji funkcji. W obszarze Grupa zasobów wybierz pozycję ContosoRental z listy rozwijanej. Wybierz pozycję .NET jako stos środowiska uruchomieniowego. W dolnej części strony wybierz pozycję Dalej: Magazyn >.
W polu Konto magazynu wybierz konto magazynu utworzone w sekcji Tworzenie konta usługi Azure Storage. Wybierz pozycję Przejrzyj i utwórz.
Przejrzyj szczegóły aplikacji funkcji i wybierz pozycję Utwórz.
Po utworzeniu aplikacji należy dodać do niej funkcję. Przejdź do aplikacji funkcji. Wybierz przycisk Utwórz w witrynie Azure Portal .
Ważne
Wyzwalacz usługi Azure Event Hub i szablony wyzwalaczy usługi Azure Event Grid mają podobne nazwy. Upewnij się, że wybrano szablon Wyzwalacz usługi Azure Event Grid.
Zostanie wyświetlony panel Tworzenie funkcji . Przewiń w dół panel Wybieranie szablonu , a następnie wybierz wyzwalacz usługi Azure Event Grid, a następnie wybierz przycisk Utwórz .
Nadaj funkcji nazwę. W tym samouczku użyj nazwy GetGeoFunction, ale ogólnie możesz użyć dowolnej nazwy. Wybierz pozycję Utwórz funkcję.
W menu po lewej stronie wybierz okienko Kod i test . Skopiuj i wklej skrypt języka C# w oknie kodu.
W kodzie języka C# zastąp następujące parametry:
- Zastąp SUBSCRIPTION_KEY kluczem subskrypcji konta usługi Azure Mapy.
- Zastąp wartość UDID elementem
udid
geofencingu przekazanego w sekcji Przekazywanie geofencingu na konto usługi Azure Storage. - Funkcja
CreateBlobAsync
w skry skrycie tworzy obiekt blob na zdarzenie na koncie magazynu danych. Zastąp ACCESS_KEY, ACCOUNT_NAME i STORAGE_CONTAINER_NAME kluczem dostępu konta magazynu, nazwą konta i kontenerem magazynu danych. Te wartości zostały wygenerowane podczas tworzenia konta magazynu w obszarze Tworzenie konta usługi Azure Storage.
W menu po lewej stronie wybierz okienko Integracja . Wybierz pozycję Wyzwalacz usługi Event Grid na diagramie. Wpisz nazwę wyzwalacza, eventGridEvent i wybierz pozycję Utwórz subskrypcję usługi Event Grid.
Wypełnij szczegóły subskrypcji. Nazwij subskrypcję zdarzeń. W polu Schemat zdarzeń wybierz pozycję Schemat usługi Event Grid. W obszarze Typy tematów wybierz pozycję Konta usługi Azure IoT Hub. W obszarze Grupa zasobów wybierz grupę zasobów utworzoną na początku tego samouczka. W polu Zasób wybierz centrum IoT utworzone w obszarze "Tworzenie centrum Azure IoT Hub". W obszarze Filtruj do typów zdarzeń wybierz pozycję Telemetria urządzenia.
Po wybraniu tych opcji zobaczysz zmianę typ tematu na IoT Hub. W polu Nazwa tematu systemowego można użyć tej samej nazwy co zasób. Na koniec w sekcji Szczegóły punktu końcowego wybierz pozycję Wybierz punkt końcowy. Zaakceptuj wszystkie ustawienia i wybierz pozycję Potwierdź zaznaczenie.
Przejrzyj ustawienia. Upewnij się, że punkt końcowy określa funkcję utworzoną na początku tej sekcji. Wybierz pozycję Utwórz.
Teraz wrócisz do panelu Edytowanie wyzwalacza . Wybierz pozycję Zapisz.
Filtrowanie zdarzeń przy użyciu routingu komunikatów usługi IoT Hub
Po dodaniu subskrypcji usługi Event Grid do funkcji platformy Azure trasa obsługi komunikatów jest tworzona automatycznie w określonym centrum IoT. Routing komunikatów umożliwia kierowanie różnych typów danych do różnych punktów końcowych. Można na przykład kierować komunikaty telemetryczne urządzenia, zdarzenia cyklu życia urządzenia i zdarzenia zmiany bliźniaczej reprezentacji urządzenia. Aby uzyskać więcej informacji, zobacz Use IoT Hub message routing (Używanie routingu komunikatów usługi IoT Hub).
W przykładowym scenariuszu chcesz otrzymywać komunikaty tylko wtedy, gdy samochód wypożyczający jest przenoszony. Utwórz zapytanie routingu, aby filtrować zdarzenia, w których Engine
właściwość jest równa "WŁĄCZONE". Aby utworzyć zapytanie routingu, wybierz trasę RouteToEventGrid i zastąp zapytanie routingu ciągiem"Engine='ON". Następnie wybierz opcję Zapisz. Teraz centrum IoT publikuje tylko dane telemetryczne urządzenia, w których jest włączony aparat.
Napiwek
Istnieją różne sposoby wykonywania zapytań dotyczących komunikatów IoT z urządzenia do chmury. Aby dowiedzieć się więcej o składni routingu komunikatów, zobacz Routing komunikatów usługi IoT Hub.
Wysyłanie danych telemetrycznych do usługi IoT Hub
Po uruchomieniu funkcji platformy Azure można teraz wysyłać dane telemetryczne do centrum IoT Hub, które kieruje je do usługi Event Grid. Użyj aplikacji języka C#, aby symulować dane lokalizacji dla urządzenia w wypożyczonego samochodu. Aby uruchomić aplikację, potrzebujesz zestawu .NET SDK 6.0 na komputerze dewelopera. Wykonaj następujące kroki, aby wysłać symulowane dane telemetryczne do centrum IoT:
Jeśli jeszcze tego nie zrobiono, pobierz projekt rentalCarSimulation C#.
simulatedCar.cs
Otwórz plik w wybranym edytorze tekstów i zastąp wartośćconnectionString
wartością zapisaną podczas rejestrowania urządzenia. Zapisz zmiany w pliku.Upewnij się, że na maszynie zainstalowano środowisko uruchomieniowe ASP.NET Core. W lokalnym oknie terminalu przejdź do folderu głównego projektu C# i uruchom następujące polecenie, aby zainstalować wymagane pakiety dla aplikacji symulowanego urządzenia:
dotnet restore
W tym samym terminalu uruchom następujące polecenie, aby skompilować i uruchomić aplikację do symulacji samochodów wypożyczenia:
dotnet run
Lokalny terminal powinien wyglądać podobnie do poniższego zrzutu ekranu.
Jeśli otworzysz teraz kontener magazynu obiektów blob, zobaczysz cztery obiekty blob dla lokalizacji, w których pojazd znajdował się poza ogrodzeniem geograficznym.
Na poniższej mapie przedstawiono cztery punkty lokalizacji pojazdu poza geofencingiem. Każda lokalizacja była rejestrowana w regularnych odstępach czasu.
Eksplorowanie usługi Azure Mapy i IoT
Aby zapoznać się z interfejsami API usługi Azure Mapy używanymi w tym samouczku, zobacz:
Aby uzyskać pełną listę interfejsów API REST usługi Azure Mapy, zobacz:
Aby uzyskać listę urządzeń certyfikowanych przez platformę Azure dla IoT, odwiedź stronę:
Czyszczenie zasobów
Nie ma żadnych zasobów, które wymagają czyszczenia.
Następne kroki
Aby dowiedzieć się więcej o sposobie wysyłania danych telemetrycznych z urządzenia do chmury i innych sposobów, zobacz: