Condividi tramite


Esercitazione: Implementare l'analisi spaziale di IoT con Mappe di Azure

Il rilevamento e l'acquisizione di eventi pertinenti che si verificano nello spazio e nel tempo sono uno scenario comune di IoT, ad esempio per gestione della flotta, tracciamento di asset, mobilità e applicazioni per città intelligenti. Questa esercitazione illustra una soluzione che tiene traccia degli spostamenti di auto a noleggio usando le API di Mappe di Azure.

In questa esercitazione si apprenderà come:

  • Creare un account di archiviazione di Azure per registrare i dati di monitoraggio delle auto.
  • Caricare un recinto virtuale in un account di archiviazione di Azure.
  • Creare un hub nell'hub IoT di Azure e registrare un dispositivo.
  • Creare una funzione in Funzioni di Azure, implementando la logica di business basata sull'analisi spaziale di Mappe di Azure.
  • Sottoscrivere gli eventi di telemetria del dispositivo IoT dalla funzione di Azure tramite Griglia di eventi di Azure.
  • Filtrare gli eventi di telemetria usando il routing dei messaggi dell'hub IoT.

Prerequisiti

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Suggerimento

È possibile scaricare l'intero progetto C# rentalCarSimulation da GitHub come singolo file ZIP passando alla radice dell'esempio e selezionando il pulsante verde <> Codice , e poi Scarica ZIP.

Questa esercitazione usa l'applicazione Postman, ma è possibile scegliere un ambiente di sviluppo API diverso.

Importante

Negli esempi di URL sostituire {Your-Azure-Maps-Subscription-key} con la chiave di sottoscrizione di Mappe di Azure.

Caso d'uso: monitoraggio delle auto a noleggio

Una società di noleggio auto vuole registrare le informazioni sulla posizione, la distanza percorsa e lo stato corrente dei veicoli. La società vuole anche archiviare queste informazioni ogni volta che un'auto esce dall'area geografica autorizzata corretta.

Le auto a noleggio sono dotate di dispositivi IoT che inviano regolarmente dati di telemetria all'hub IoT. La telemetria include la posizione corrente e indica se il motore dell'automobile è in funzione o meno. Lo schema della posizione del dispositivo è conforme allo schema Plug and Play per i dati geospaziali. Lo schema di telemetria del dispositivo dell'auto a noleggio è simile al codice JSON seguente:

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

In questa esercitazione verrà monitorato solo un veicolo. Dopo aver configurato i servizi di Azure, è necessario scaricare il progetto C# rentalCarSimulation per eseguire il simulatore di veicoli. L'intero processo, dall'evento all'esecuzione della funzione, viene riepilogato nei passaggi seguenti:

  1. Il dispositivo nel veicolo invia i dati di telemetria all'hub IoT.

  2. Se il motore dell'auto è in funzione, l'hub pubblica i dati di telemetria in Griglia di eventi.

  3. Viene attivata una funzione di Azure in seguito alla sottoscrizione degli eventi di telemetria del dispositivo.

  4. La funzione registra le coordinate della posizione del dispositivo del veicolo, l'ora dell'evento e l'ID del dispositivo. Usa quindi l'API Get Geofence del servizio spaziale per determinare se l'auto è uscita dal recinto virtuale. Se si trova al di fuori dei confini del recinto virtuale, la funzione archivia i dati sulla posizione ricevuti dall'evento in un contenitore BLOB. Inoltre, la funzione esegue una query di ricerca di indirizzi inversa per convertire le coordinate della posizione in un indirizzo e archiviarlo con il resto dei dati sulla posizione del dispositivo.

Il diagramma seguente offre una panoramica generale del sistema.

Diagramma della panoramica del sistema.

Nella figura seguente l'area del recinto virtuale è evidenziata in blu. L'itinerario dell'auto a noleggio è indicato da una linea verde.

Figura che mostra il percorso nel recinto virtuale.

Creare un account di archiviazione di Azure

Per archiviare i dati di monitoraggio delle violazioni delle auto, creare un account di archiviazione per utilizzo generico v2 nel gruppo di risorse. Se non è stato creato un gruppo di risorse, seguire le istruzioni riportate in Creare gruppi di risorse. Denominare il gruppo di risorse ContosoRental.

Per creare un account di archiviazione, seguire le istruzioni in Creare un account di archiviazione. In questa esercitazione verrà usato il nome contosorentalstorage per l'account di archiviazione, ma è possibile assegnare un nome qualsiasi.

Dopo aver creato l'account di archiviazione,è necessario creare un contenitore in cui archiviare i dati di registrazione.

  1. Passare all'account di archiviazione appena creato. Nella sezione Informazioni di base fare clic sul collegamento Contenitori.

    Screenshot dei contenitori per l'archiviazione BLOB.

  2. Nell'angolo in alto a sinistra selezionare + Contenitore. Sul lato destro del browser viene visualizzato un pannello. Assegnare al contenitore il nome contoso-rental-logs e selezionare Crea.

    Screenshot della creazione di un contenitore BLOB.

  3. Passare al riquadro Chiavi di accesso nell'account di archiviazione e copiare i valori per Nome account di archiviazione e Chiave nella sezione key1. Entrambi i valori sono necessari nella sezione Creare una funzione di Azure e aggiungere una sottoscrizione di Griglia di eventi.

    Screenshot della copia del nome dell'account di archiviazione e della chiave.

Caricare un recinto virtuale nell' account di archiviazione di Azure.

Il recinto virtuale definisce l'area geografica autorizzata per il veicolo a noleggio. Per determinare se un'auto è uscita dall'area del recinto virtuale, usare il recinto virtuale nella funzione di Azure.

Seguire i passaggi descritti nell'articolo Come creare il Registro di sistema dei dati per caricare il file di dati JSON recinto virtuale nell'account di archiviazione di Azure e quindi registrarlo nell'account di Mappe di Azure. Assicurarsi di prendere nota del valore dell'identificatore univoco (udid) poiché è necessario. udid è il modo in cui si fa riferimento al recinto virtuale caricato nell'account di archiviazione di Azure dal codice sorgente. Per altre informazioni sui file di dati del recinto virtuale, vedere Dati GeoJSON del recinto virtuale.

Creare un hub IoT

L'hub IoT consente la comunicazione bidirezionale sicura e affidabile tra un'applicazione IoT e i dispositivi che gestisce. Per questa esercitazione, si vogliono ottenere informazioni dal dispositivo nel veicolo per determinare la posizione dell'auto a noleggio. In questa sezione viene creato un hub IoT all'interno del gruppo di risorse ContosoRental. Questo hub è responsabile della pubblicazione degli eventi di telemetria del dispositivo.

Per creare un hub IoT nel gruppo di risorse ContosoRental, seguire la procedura descritta in Creare un hub IoT.

Registrare un dispositivo nell'hub IoT

I dispositivi non possono connettersi all'hub IoT, a meno che non siano registrati nel registro delle identità dell'hub IoT. Creare un singolo dispositivo con il nome InVehicleDevice. Per creare e registrare il dispositivo nell'hub IoT, seguire la procedura descritta in Registrare un nuovo dispositivo nell'hub IoT. Assicurarsi di copiare la stringa di connessione primaria del dispositivo. in quanto sarà necessario più avanti.

Creare una funzione e aggiungere una sottoscrizione di Griglia di eventi

Funzioni di Azure è un servizio di calcolo serverless che consente di eseguire piccole parti di codice ("funzioni") senza la necessità di effettuare esplicitamente il provisioning dell'infrastruttura di calcolo o di gestirla. Per altre informazioni, vedere Funzioni di Azure.

Una funzione viene attivata da un determinato evento. Creare una funzione attivata da un trigger di Griglia di eventi. Creare la relazione tra il trigger e la funzione creando una sottoscrizione per gli eventi di telemetria del dispositivo nell'hub IoT. Quando si verifica un evento di telemetria del dispositivo, la funzione viene chiamata come endpoint e riceve i dati appropriati per il dispositivo registrato precedentemente nell'hub IoT.

Ecco il codice di script C# contenuto nella funzione.

Configurare ora la funzione di Azure.

  1. Nel dashboard del portale di Azure selezionare Crea una risorsa. Digitare App per le funzioni nella casella di testo di ricerca. Selezionare App per le funzioni>Crea.

  2. Nella pagina di creazione dell'App per le funzioni assegnare un nome all'app per le funzioni. In Gruppo di risorse selezionare ContosoRental nell'elenco a discesa. Selezionare .NET come Stack di runtime. Nella parte inferiore della pagina selezionare Avanti: archiviazione>.

    Screenshot della creazione di un'app per le funzioni.

  3. Per Account di archiviazione selezionare l'account di archiviazione creato in Creare un account di archiviazione di Azure. Selezionare Rivedi e crea.

  4. Esaminare i dettagli dell'app per le funzioni e selezionare Crea.

  5. Dopo aver creato l'app, aggiungervi una funzione. Passare all'app per le funzioni. Selezionare il pulsante Crea nel portale di Azure.

    Importante

    I modelli Trigger hub di eventi di Azure e Trigger Griglia di eventi di Azure hanno nomi simili. Assicurarsi di selezionare il modello Trigger Griglia di eventi di Azure.

    Screenshot della creazione di una funzione nel portale di Azure.

  6. Viene visualizzato il pannello Crea funzione. Scorrere verso il basso nel pannello Selezionare un modello e selezionare trigger di Griglia di eventi di Azure quindi selezionare il pulsante Crea.

    Screenshot della creazione di una funzione.

  7. Assegnare un nome alla funzione. In questa esercitazione, usare il nome GetGeoFunction, ma in generale è possibile usare un nome qualsiasi. Selezionare Crea funzione.

  8. Nel menu a sinistra selezionare il riquadro Codice e test. Copiare e incollare lo script C# nella finestra del codice.

    Screenshot del copia/incolla del codice nella finestra della funzione.

  9. Nel codice C# sostituire i parametri seguenti:

    • Sostituire il valore SUBSCRIPTION_KEY con la chiave di sottoscrizione dell'account Mappe di Azure.
    • Sostituire UDID con il valore udid del recinto virtuale caricato in Caricare un recinto virtuale nell'account di archiviazione di Azure.
    • La funzione CreateBlobAsync nello script crea un BLOB per ogni evento nell'account di archiviazione dati. Sostituire ACCESS_KEY, ACCOUNT_NAME e STORAGE_CONTAINER_NAME con la chiave di accesso dell'account di archiviazione, il nome dell'account e il contenitore di archiviazione dati. Questi valori sono stati generati quando è stato creato l'account di archiviazione in Creare un account di archiviazione di Azure.
  10. Nel menu a sinistra selezionare il riquadro Integrazione. Selezionare Trigger Griglia di eventi nel diagramma. Digitare un nome per il trigger, ad esempio eventGridEvent, quindi selezionare Crea sottoscrizione di Griglia di eventi.

    Screenshot dell'aggiunta della sottoscrizione di eventi.

  11. Immettere i dettagli della sottoscrizione. Assegnare un nome alla sottoscrizione dell'evento. Selezionare Schema griglia di eventi per Schema evento. Per Tipi di argomento selezionare Account hub IoT di Azure. Per Gruppo di risorse selezionare il gruppo di risorse creato all'inizio di questa esercitazione. Per Risorsa selezionare l'hub IoT creato nella sezione "Creare un hub IoT di Azure". Per Filtra per tipo di evento selezionare Telemetria dei dispositivi.

    Dopo aver scelto queste opzioni, l'impostazione di Tipo di argomento verrà modificata automaticamente in Hub IoT. Per Nome dell'argomento del sistema è possibile usare lo stesso nome della risorsa. Infine, nella sezione Dettagli endpoint selezionare Seleziona endpoint. Accettare tutte le impostazioni e selezionare Conferma selezione.

    Screenshot della creazione della sottoscrizione di eventi.

  12. Rivedere le impostazioni. Verificare che l'endpoint specifichi la funzione creata all'inizio di questa sezione. Seleziona Crea.

    Screenshot della conferma della creazione della sottoscrizione di eventi.

  13. A questo punto si è di nuovo nel pannello Modifica trigger. Seleziona Salva.

Filtrare gli eventi usando il routing dei messaggi dell'hub IoT

Quando si aggiunge una sottoscrizione di Griglia di eventi alla funzione di Azure, viene creata automaticamente una route di messaggistica nell'hub IoT specificato. Il routing dei messaggi consente di instradare tipi di dati diversi a vari endpoint. Ad esempio, è possibile eseguire il routing dei messaggi di telemetria del dispositivo, degli eventi del ciclo di vita del dispositivo e degli eventi di modifica del dispositivo gemello. Per altre informazioni, vedere Usare il routing di messaggi dell'hub IoT.

Screenshot del routing dei messaggi nell'hub IoT.

Nello scenario di esempio si vogliono ricevere messaggi solo quando l'auto a noleggio è in viaggio. Creare una query di routing per filtrare gli eventi in cui la proprietà Engine è uguale a "ON". Per creare una query di routing, fare clic sulla route RouteToEventGrid e sostituire la Query di routing con "Engine ='ON'". Quindi selezionare Salva. A questo punto, l'hub IoT pubblica solo i dati di telemetria del dispositivo in cui il motore è in funzione.

Screenshot del filtro dei messaggi di routing.

Suggerimento

Esistono vari modi per eseguire query sui messaggi tra il dispositivo IoT e il cloud. Per altre informazioni sulla sintassi del routing dei messaggi, vedere Routing dei messaggi dell'hub IoT.

Inviare dati di telemetria all'hub IoT

Quando la funzione di Azure è in esecuzione, è possibile inviare dati di telemetria all'hub IoT, che li instrada a Griglia di eventi. Usare un'applicazione C# per simulare i dati di posizione per un dispositivo interno a un'auto a noleggio. Per eseguire l'applicazione, è necessario che sia presente .NET SDK 6.0 nel computer di sviluppo. Seguire questa procedura per inviare i dati di telemetria simulati all'hub IoT:

  1. Se non è già stato fatto, scaricare il progetto C# rentalCarSimulation.

  2. Aprire il file simulatedCar.cs in un editor di testo a scelta e sostituire il valore di connectionString con quello salvato durante la registrazione del dispositivo. Salvare le modifiche apportate al file .

  3. Verificare che ASP.NET Core Runtime sia installato nel computer. Nella finestra del terminale locale passare alla cartella radice del progetto C# ed eseguire i comandi seguenti per installare i pacchetti necessari per l'applicazione del dispositivo simulato:

    dotnet restore
    
  4. Nello stesso terminale eseguire il comando seguente per compilare ed eseguire l'applicazione di simulazione dell'auto a noleggio:

    dotnet run
    

Il terminale locale dovrebbe essere simile allo screenshot seguente.

Screenshot dell'output del terminale.

Se si apre ora il contenitore di archiviazione BLOB, è possibile visualizzare quattro BLOB per le posizioni in cui il veicolo si trovava al di fuori del recinto virtuale.

Screenshot della visualizzazione di BLOB all'interno del contenitore.

La mappa seguente mostra quattro punti di posizione del veicolo al di fuori del recinto virtuale. Ogni posizione è stata registrata a intervalli di tempo regolari.

Screenshot della mappa delle violazioni.

Esplorare Mappe di Azure e IoT

Per esplorare le API di Mappe di Azure usate in questa esercitazione, vedere:

Per un elenco completo delle API REST di Mappe di Azure, vedere:

Per ottenere un elenco di dispositivi Microsoft Azure Certified per IoT, visitare:

Pulire le risorse

Non sono presenti risorse che richiedono la pulizia.

Passaggi successivi

Per altre informazioni su come inviare i dati di telemetria da dispositivo a cloud e viceversa, vedere: