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:

  1. Urządzenie w pojeździe wysyła dane telemetryczne do usługi IoT Hub.

  2. Jeśli silnik samochodu jest uruchomiony, centrum publikuje dane telemetryczne w usłudze Event Grid.

  3. Funkcja platformy Azure jest wyzwalana z powodu jej subskrypcji zdarzeń dotyczących zdarzeń telemetrii urządzenia.

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

Diagram przeglądu systemu.

Na poniższej ilustracji wyróżniono obszar geofencingu na niebiesko. Trasa wypożyczonego samochodu jest wskazywana przez zieloną linię.

Rysunek przedstawiający trasę geofencingu.

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.

  1. Przejdź do nowo utworzonego konta magazynu. W sekcji Podstawy wybierz link Kontenery.

    Zrzut ekranu przedstawiający kontenery dla magazynu obiektów blob.

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

    Zrzut ekranu przedstawiający tworzenie kontenera obiektów blob.

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

    Zrzut ekranu przedstawiający kopiowanie nazwy i klucza konta magazynu.

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.

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

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

    Zrzut ekranu przedstawiający tworzenie aplikacji funkcji.

  3. W polu Konto magazynu wybierz konto magazynu utworzone w sekcji Tworzenie konta usługi Azure Storage. Wybierz pozycję Przejrzyj i utwórz.

  4. Przejrzyj szczegóły aplikacji funkcji i wybierz pozycję Utwórz.

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

    Zrzut ekranu przedstawiający tworzenie funkcji w witrynie Azure Portal.

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

    Zrzut ekranu przedstawiający tworzenie funkcji.

  7. Nadaj funkcji nazwę. W tym samouczku użyj nazwy GetGeoFunction, ale ogólnie możesz użyć dowolnej nazwy. Wybierz pozycję Utwórz funkcję.

  8. W menu po lewej stronie wybierz okienko Kod i test . Skopiuj i wklej skrypt języka C# w oknie kodu.

    Skopiuj/zrzut ekranu przedstawiający wklejanie kodu do okna funkcji.

  9. 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.
  10. 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.

    Zrzut ekranu przedstawiający dodawanie subskrypcji zdarzeń.

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

    Zrzut ekranu przedstawiający tworzenie subskrypcji zdarzeń.

  12. Przejrzyj ustawienia. Upewnij się, że punkt końcowy określa funkcję utworzoną na początku tej sekcji. Wybierz pozycję Utwórz.

    Zrzut ekranu przedstawiający potwierdzenie utworzenia subskrypcji zdarzeń.

  13. 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).

Zrzut ekranu przedstawiający routing komunikatów w centrum 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.

Zrzut ekranu przedstawiający filtrowanie komunikatów routingu.

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:

  1. Jeśli jeszcze tego nie zrobiono, pobierz projekt rentalCarSimulation C#.

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

  3. 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
    
  4. 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.

Zrzut ekranu przedstawiający dane wyjściowe terminalu.

Jeśli otworzysz teraz kontener magazynu obiektów blob, zobaczysz cztery obiekty blob dla lokalizacji, w których pojazd znajdował się poza ogrodzeniem geograficznym.

Zrzut ekranu przedstawiający wyświetlanie obiektów blob wewnątrz kontenera.

Na poniższej mapie przedstawiono cztery punkty lokalizacji pojazdu poza geofencingiem. Każda lokalizacja była rejestrowana w regularnych odstępach czasu.

Zrzut ekranu przedstawiający mapę naruszeń.

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: