Esercizio: Distribuire una funzione di Azure in IoT Edge
Filtrare i dati di telemetria inviati dal dispositivo.
Tenere presente che si vuole ridurre al minimo la quantità di dati inviati da ogni punto vendita. Per ridurre la quantità di dati di telemetria inviati all'applicazione Azure IoT Central, si vogliono filtrare i dati nel dispositivo IoT Edge.
In questa unità si usa Funzioni di Azure in esecuzione nel dispositivo IoT Edge per implementare un filtro. Il filtro garantisce che il dispositivo invii i dati di telemetria solo quando la temperatura ambiente è superiore a 21 °C.
Nota
Questo esercizio è facoltativo. Per completare questo esercizio, sarà necessario creare una sottoscrizione di Azure prima di iniziare. Se non si dispone di un account Azure o non si vuole crearne uno in questo momento, è possibile leggere le istruzioni per avere un'idea delle informazioni contenute.
Configurare un registro contenitori
Il dispositivo IoT Edge deve scaricare e installare il modulo Funzioni di Azure personalizzato che implementa il filtro. I moduli IoT Edge vengono inseriti come immagini compatibili con Docker che è possibile archiviare in un repository di contenitori. Usare il Registro Azure Container per archiviare il nuovo modulo e compilare il contenitore da un progetto di origine.
Eseguire i comandi seguenti per aggiungere un registro contenitori al gruppo di risorse in Azure:
REGISTRY_NAME="edgecentral$RANDOM"
az acr create -n $REGISTRY_NAME -g <rgn>[sandbox resource group name]</rgn> --sku Standard --admin-enabled true
az acr credential show -n $REGISTRY_NAME
echo "Your registry name is: $REGISTRY_NAME"
Prendere nota del nome del registro e dei valori password
, che verranno usati più avanti in questa unità.
Creare un progetto di Funzioni di Azure
Per implementare la funzione viene usato C#. Eseguire i comandi seguenti per installare il modello di progetto e quindi generare uno progetto scheletro:
dotnet new -i Microsoft.Azure.IoT.Edge.Function
dotnet new aziotedgefunction -n FilterFunction -r $REGISTRY_NAME.azurecr.io/filterfunction
cd FilterFunction
ls
Eseguire il comando seguente per sostituire il file FilterFunction.cs esistente con un'implementazione che filtra i dati di telemetria relativi alla temperatura del computer:
curl -O https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/iotedge/FilterFunction.cs
Creare l'immagine e caricarla nel registro contenitori. L'esecuzione di questo comando può richiedere alcuni minuti:
az acr build --registry $REGISTRY_NAME --image filterfunction:v1 -f Dockerfile.amd64 .
È possibile visualizzare l'elenco delle immagini presenti nel registro con il comando seguente:
az acr repository list --name $REGISTRY_NAME
Aggiornare il manifesto della distribuzione
Per usare il nuovo modulo di filtro nel dispositivo IoT Edge, aggiornare il manifesto della distribuzione con la nuova versione.
Scaricare il nuovo manifesto della distribuzione e la definizione dell'interfaccia nel computer locale facendo clic con il pulsante destro del mouse sui collegamenti seguenti e scegliendo Salva con nome:
Aprire il file EnvironmentalSensorManifestFilter-1-4.json in un editor di testo e aggiornarlo affinché usi il modulo di filtro proveniente dal registro contenitori:
- Sostituire le tre istanze di
<YOUR CONTAINER REGISTRY NAME>
con il nome del registro contenitori. Il nome è simile aedgecentral27912
. - Sostituire
<YOUR CONTAINER REGISTRY PASSWORD>
con la password di cui si è preso nota in precedenza in questa unità. - Salvare le modifiche.
Questa versione del manifesto della distribuzione:
Aggiunge il modulo con la funzione di Azure creata:
"filterfunction": { "version": "1.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1", "createOptions": "" }
Instrada l'output dal modulo SimulatedTemperatureSensor al modulo filterfunction prima di inviare i dati di telemetria filtrati all'applicazione Azure IoT Central:
"routes": { "FilterFunctionToIoTCentral": "FROM /messages/modules/filterfunction/outputs/* INTO $upstream", "sensorToFilterFunction": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filterfunction/inputs/input1\")" },
Per caricare il nuovo manifesto della distribuzione:
Nell'applicazione Azure IoT Central passare a Manifesti Edge e selezionare il manifesto del Sensore ambientale.
Nella pagina Personalizza caricare il nuovo file EnvironmentalSensorManifestFilter-1-4.json. Selezionare Avanti.
La pagina Revisione e fine mostra il nuovo modulo filterfunction. Seleziona Salva.
Passare al Dispositivo perimetrale sensore ambientale - store-001 dalla pagina Dispositivi e selezionare Moduli.
Nella parte superiore della pagina selezionare Gestisci manifesto > Assegna manifesto perimetrale. Selezionare il manifesto Sensore ambientale e quindi selezionare Assegna manifesto.
L'elenco dei moduli include ora il modulo filterfunction in esecuzione:
Aggiornare il modello di dispositivo per l'uso del nuovo modulo
Il dispositivo IoT Edge invia ora i dati di telemetria tramite l'interfaccia filterfunction anziché l'interfaccia Telemetria. È quindi necessario aggiornare il modello e le visualizzazioni del dispositivo.
Nella pagina Modelli di dispositivo selezionare Dispositivo perimetrale sensore ambientale.
Selezionare Moduli e quindi Importa moduli dal manifesto.
Nella finestra di dialogo Importa moduli selezionare Sensore ambientale e quindi Importa.
Il nuovo modulo ora invia i dati di telemetria ad Azure IoT Central. Aggiungere quindi un'interfaccia al nuovo modulo di filtro che specifica i dati di telemetria e aggiorna il grafico.
- Selezionare Modulo FilterFunction, quindi + Aggiungi interfaccia ereditata. Può essere necessario selezionare i puntini di sospensione (...) per visualizzare questa opzione.
- Scegliere il riquadro Importa interfaccia. Selezionare il file TelemetryInterface.json scaricato in precedenza.
È possibile rimuovere l'interfaccia Telemetry originale poiché SimulatedTemperatureModule non invia più i dati di telemetria direttamente ad Azure IoT Central. L'output di questo modulo viene indirizzato al modulo FilterFunction dal runtime IoT Edge.
- Selezionare l'interfaccia Telemetry nel modulo SimulatedTemperatureSensor.
- Selezionare Elimina e quindi confermare l'operazione.
Modificare la visualizzazione Visualizza dati di telemetria dispositivo IoT Edge per visualizzare i dati di telemetria inviati dal modulo FilterFunction.
- Nel modello di dispositivo selezionare la visualizzazione Visualizza dati di telemetria dispositivo IoT Edge e quindi selezionare l'opzione Modifica nel riquadro del grafico.
- Aggiungere i valori di telemetria ambient/temperature, humidity, machine/temperature e pressure.
- Selezionare Aggiorna e quindi Salva.
- Selezionare Pubblica per pubblicare la nuova versione del modello di dispositivo.
Controlla il tuo lavoro
Per visualizzare i dati di telemetria filtrati dal dispositivo IoT Edge:
Nella pagina Dispositivi selezionare il dispositivo store-001.
Selezionare la visualizzazione Visualizza dati di telemetria dispositivo IoT Edge.
È possibile visualizzare i dati di telemetria filtrati nel grafico. Non sono presenti valori con una temperatura ambientale media inferiore a 21,0 gradi.
Se il dispositivo sembra interrompere l'invio dei dati di telemetria, è probabile che il modulo SimulatedTemperatureSensor si sia arrestato dopo l'invio di 500 messaggi. Se si riavvia la macchina virtuale, il conteggio viene azzerato e i l'invio dei dati di telemetria riprende:
az vm restart --resource-group <rgn>[sandbox resource group name]</rgn> \
--name $(az vm list --resource-group <rgn>[sandbox resource group name]</rgn> --query [0].name -o tsv)