Come connettere i dispositivi tramite un gateway trasparente IoT Edge
Un dispositivo IoT Edge può fungere da gateway che fornisce una connessione tra altri dispositivi in una rete locale e l'applicazione IoT Central. Un gateway viene usato quando il dispositivo non può accedere direttamente all'applicazione IoT Central.
IoT Edge supporta di modelli gateway trasparente e di traduzione. Questo articolo riepiloga come implementare il modello di gateway trasparente. In questo modello, il gateway passa i messaggi dal dispositivo downstream all'endpoint dell'hub IoT nell'applicazione IoT Central. Il gateway non modifica i messaggi man mano che passano. In IoT Central ogni dispositivo downstream viene visualizzato come figlio del dispositivo gateway:
Importante
Questo articolo include la procedura per connettere un dispositivo usando una firma di accesso condiviso, altrimenti chiamata autenticazione con chiave simmetrica. Questo metodo di autenticazione è comodo per i test e le valutazioni, ma l'autenticazione tramite certificati X.509 rappresenta un approccio più sicuro. Per scoprire di più, vedere Procedure consigliate per la sicurezza > Sicurezza della connessione.
Per semplicità, in questo articolo verranno usate macchine virtuali per ospitare i dispositivi downstream e gateway. In uno scenario reale, il dispositivo downstream e il gateway vengono eseguiti nei dispositivi fisici nella rete locale.
Questo articolo mostra come implementare lo scenario usando il runtime di IoT Edge 1.4.
Prerequisiti
Per completare i passaggi di questo articolo sono necessari:
Una sottoscrizione di Azure attiva. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Un'applicazione IoT Central creata dal modello Applicazione personalizzata. Per altre informazioni, vedere Creare un'applicazione IoT Central.
Per seguire la procedura descritta in questo articolo, scaricare i file seguenti nel computer:
- Modello di dispositivo Termostato (thermostat-1.json): questo file è il modello di dispositivo per i dispositivi downstream.
- Manifesto del gateway trasparente (EdgeTransparentGatewayManifest.json): questo file è il manifesto della distribuzione IoT Edge per il dispositivo gateway.
Importare il manifesto della distribuzione
Ogni dispositivo IoT Edge necessita di un manifesto di distribuzione per configurare il runtime di IoT Edge. Per importare un manifesto della distribuzione per il gateway trasparente IoT Edge:
Passare a Manifesti Edge.
Selezionare + Nuovo, immettere un nome per il manifesto della distribuzione, ad esempio Gateway trasparente e quindi caricare il file EdgeTransparentGatewayManifest.json scaricato in precedenza.
Selezionare Crea per salvare il manifesto della distribuzione nell'applicazione.
Aggiungere modelli di dispositivo
Sia i dispositivi downstream che il dispositivo gateway possono usare modelli di dispositivo in IoT Central. IoT Central consente di modellare la relazione tra i dispositivi downstream e il gateway, in modo da poterli visualizzare e gestirli dopo la connessione. Un modello di dispositivo non è necessario per collegare un dispositivo downstream a un gateway.
Per creare un modello di dispositivo per un dispositivo downstream, creare un modello di dispositivo standard che modella le funzionalità del dispositivo. L'esempio mostrato in questo articolo usa il modello di dispositivo termostato scaricato.
Per creare un modello di dispositivo per un dispositivo downstream:
Creare un modello di dispositivo e scegliere Dispositivo IoT come tipo di modello.
Nella pagina Personalizza della procedura guidata immettere un nome, ad esempio Termostato per il modello di dispositivo.
Dopo aver creato il modello di dispositivo, selezionare Importa un modello. Selezionare un modello, ad esempio il file thermostat-1.json scaricato in precedenza.
Per generare alcune visualizzazioni predefinite per il termostato, selezionare Visualizzazioni e quindi scegliere Genera visualizzazioni predefinite.
Pubblicare il modello di dispositivo.
Per creare un modello di dispositivo per un dispositivo gateway trasparente IoT Edge:
Creare un modello di dispositivo e scegliere Azure IoT Edge come tipo di modello.
Nella pagina Personalizza della procedura guidata immettere un nome, ad esempio Gateway Edge per il modello di dispositivo.
Nella pagina Personalizza della procedura guidata selezionare Si tratta di un dispositivo gateway.
Nella pagina Rivedi selezionare Crea.
Nella pagina Crea un modello selezionare Modello personalizzato.
Aggiungere una voce in Relazioni al modello di dispositivo downstream.
Lo screenshot seguente mostra la pagina Relazioni per un dispositivo gateway IoT Edge con dispositivi downstream che usano il modello di dispositivo Thermostat:
Lo screenshot precedente mostra un modello di dispositivo gateway IoT Edge senza moduli definiti. Un gateway trasparente non richiede moduli perché il runtime IoT Edge inoltra i messaggi dai dispositivi downstream direttamente a IoT Central. Se il gateway stesso deve inviare dati di telemetria, sincronizzare le proprietà o gestire i comandi, è possibile definire queste funzionalità nel componente radice o in un modulo.
Aggiungere le proprietà e le visualizzazioni cloud necessarie prima di pubblicare i modelli di dispositivo gateway e downstream.
Aggiungere i dispositivi
Quando si aggiungono i dispositivi all'applicazione IoT Central, è possibile definire la relazione tra i dispositivi downstream e il gateway trasparente.
Per aggiungere i dispositivi:
Passare alla pagina dispositivi nell'applicazione IoT Central.
Aggiungere un'istanza del dispositivo IoT Edge gateway trasparente. Quando si aggiunge il dispositivo, assicurarsi di selezionare il manifesto della distribuzione del Gateway trasparente. In questo articolo l'ID del dispositivo gateway è
edgegateway
.Aggiungere una o più istanze del dispositivo downstream. In questo articolo i dispositivi downstream sono termostati con ID
thermostat1
ethermostat2
.Nell'elenco dei dispositivi selezionare ogni dispositivo downstream e selezionare Collega al gateway.
Lo screenshot seguente mostra come visualizzare l'elenco dei dispositivi collegati a un gateway nella pagina Dispositivi downstream:
In un gateway trasparente, i dispositivi downstream si connettono al gateway stesso, non a un modulo personalizzato ospitato dal gateway.
Prima di distribuire i dispositivi, è necessario disporre di:
- Ambito ID dell'applicazione IoT Central.
- Valori ID del dispositivo per il gateway e i dispositivi downstream.
- Valori di chiave primaria per i dispositivi gateway e downstream.
Per trovare questi valori, passare a ogni dispositivo nell'elenco dei dispositivi e selezionare Connetti. Prendere nota di questi valori prima di continuare.
Suggerimento
È possibile connettere i dispositivi e stabilire relazioni senza creare prima i modelli di dispositivo per questi. È possibile collegare un dispositivo downstream non assegnato a un dispositivo gateway non assegnato.
Distribuire il gateway e i dispositivi
Per provare questo scenario, i passaggi seguenti illustrano come distribuire il gateway e i dispositivi downstream in macchine virtuali di Azure.
Suggerimento
Per informazioni su come distribuire il runtime di IoT Edge in un dispositivo fisico, vedere Creare un dispositivo IoT Edge nella documentazione di IoT Edge.
Per provare lo scenario del gateway trasparente, selezionare il pulsante seguente per distribuire due macchine virtuali Linux. Una macchina virtuale ha il runtime di IoT Edge 1.4 installato ed è il gateway IoT Edge trasparente. L'altra macchina virtuale è un dispositivo downstream in cui si esegue il codice per inviare i dati di telemetria del termostato simulato:
Quando le due macchine virtuali vengono distribuite ed eseguite, verificare che il dispositivo gateway IoT Edge sia in esecuzione nella macchina virtuale edgegateway
:
Passare alla pagina Dispositivi nell'applicazione IoT Central. Se il dispositivo gateway IoT Edge è connesso a IoT Central, il relativo stato è Sottoposto a provisioning.
Aprire il dispositivo gateway IoT Edge e verificare lo stato dei moduli nella pagina Moduli. Se il runtime di IoT Edge è stato avviato correttamente, lo stato dei moduli $edgeAgent e $edgeHub è In esecuzione:
Suggerimento
Potrebbe essere necessario attendere alcuni minuti mentre la macchina virtuale si avvia e il dispositivo viene configurato nell’applicazione IoT Central.
Configurare il gateway
Affinché il dispositivo IoT Edge funzioni come gateway trasparente, è necessario che alcuni certificati attestino la sua identità a qualsiasi dispositivo downstream. Questo articolo usa certificati demo. In un ambiente di produzione usare i certificati dell'autorità di certificazione.
Per generare i certificati demo e installarli nel dispositivo gateway:
Usare SSH per connettersi e accedere alla macchina virtuale del dispositivo gateway.
Eseguire i seguenti comandi per clonare il repository IoT Edge e generare i certificati demo:
# Clone the repo cd ~ git clone https://github.com/Azure/iotedge.git # Generate the demo certificates mkdir certs cd certs cp ~/iotedge/tools/CACertificates/*.cnf . cp ~/iotedge/tools/CACertificates/certGen.sh . ./certGen.sh create_root_and_intermediate ./certGen.sh create_edge_device_ca_certificate "mycacert"
Dopo aver eseguito i comandi precedenti, i seguenti file sono pronti per l'uso nei passaggi successivi:
- ~/certs/certs/azure-iot-test-only.root.ca.cert.pem: certificato della CA radice usato per creare tutti gli altri certificati demo per testare uno scenario IoT Edge.
- ~/certs/certs/iot-edge-device-mycacert-full-chain.cert.pem: certificato della CA del dispositivo a cui viene fatto riferimento dal file di configurazione di IoT Edge. In uno scenario gateway, questo certificato della CA è il metodo con cui il dispositivo IoT Edge verifica l'identità dei dispositivi downstream.
- ~/certs/private/iot-edge-device-mycacert.key.pem: chiave privata associata al certificato della CA del dispositivo.
Per altre informazioni su questi certificati demo, vedere Creare certificati demo per testare le funzionalità dei dispositivi IoT Edge.
Aprire il file config.toml in un editor di testo. Ad esempio:
sudo nano /etc/aziot/config.toml
Individuare le impostazioni seguenti nel file di configurazione. Aggiungere le impostazioni del certificato come indicato di seguito:
trust_bundle_cert = "file:///home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem" [edge_ca] cert = "file:///home/AzureUser/certs/certs/iot-edge-device-ca-mycacert-full-chain.cert.pem" pk = "file:///home/AzureUser/certs/private/iot-edge-device-ca-mycacert.key.pem"
L'esempio precedente presuppone che l'accesso sia stato eseguito come AzureUser e che sia stato creato un certificato della CA del dispositivo denominato "mycacert".
Salvare le modifiche e riavviare il runtime di IoT Edge:
sudo iotedge config apply
Se il runtime di IoT Edge viene avviato correttamente dopo le modifiche, lo stato dei moduli $edgeAgent e $edgeHub viene modificato in In esecuzione nella pagina Moduli per il dispositivo gateway in IoT Central.
Se il runtime non viene avviato, controllare le modifiche apportate nel file di configurazione di IoT Edge e vedere Risolvere i problemi del dispositivo IoT Edge.
Il gateway trasparente è ora configurato e pronto per avviare l'inoltro dei dati di telemetria dai dispositivi downstream.
Effettuare il provisioning di un dispositivo downstream
IoT Central si basa sul servizio Device Provisioning per effettuare il provisioning dei dispositivi in IoT Central. Attualmente, IoT Edge non può usare il provisioning di un dispositivo downstream nell'applicazione IoT Central. I passaggi seguenti illustrano come effettuare manualmente il provisioning del dispositivo thermostat1
. Per completare questi passaggi, è necessario un ambiente con Python installato e connettività a Internet. Verifica i requisiti della versione corrente di Python consultando l'Azure IoT SDK per Python.
Azure Cloud Shell include Python preinstallato:
Eseguire il comando seguente per installare il modulo
azure.iot.device
:pip install azure.iot.device
Eseguire il comando seguente per scaricare lo script Python che esegue il provisioning del dispositivo:
wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/provision_device.py
Per effettuare il provisioning del dispositivo downstream
thermostat1
nell'applicazione IoT Central, eseguire i comandi seguenti, sostituendo{your application id scope}
e{your device primary key}
. Quando i dispositivi sono stati aggiunti all'applicazione IoT Central, si è preso nota di questi valori:export IOTHUB_DEVICE_DPS_DEVICE_ID=thermostat1 export IOTHUB_DEVICE_DPS_ID_SCOPE={your application id scope} export IOTHUB_DEVICE_DPS_DEVICE_KEY={your device primary key} python provision_device.py
Nell’applicazione IoT Central, verifica che lo stato del dispositivo per il dispositivo thermostat1
sia ora Sottoposto a provisioning.
Configurare un dispositivo a valle
Nota
IoT Central non supporta l'autenticazione del certificato X.509 per i dispositivi downstream connessi a un gateway trasparente IoT Edge.
Nella sezione precedente è stata configurata la macchina virtuale edgegateway
con i certificati demo per abilitarla per l'esecuzione come gateway. La macchina virtuale leafdevice
è pronta per installare un simulatore termostato che usa il gateway per connettersi a IoT Central.
La macchina virtuale leafdevice
richiede una copia del certificato della CA radice creato nella macchina virtuale edgegateway
. Copiare il file /home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem dalla macchina virtuale edgegateway
alla home directory nella macchina virtuale leafdevice
. È possibile usare il comando scp per copiare file tra macchine virtuali Linux. Ad esempio, dal computer leafdevice
:
scp AzureUser@edgegateway:/home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem .
Per informazioni su come controllare la connessione dal dispositivo downstream al gateway, vedere Testare la connessione gateway.
Per eseguire il simulatore termostato nella macchina virtuale leafdevice
:
Usare SSH per connettersi e accedere alla macchina virtuale
leafdevice
.Scaricare l'esempio Python nella home directory:
cd ~ wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/simple_thermostat.py
Installare il modulo Python per dispositivi Azure IoT:
sudo apt update sudo apt install python3-pip pip3 install azure.iot.device
Impostare le variabili di ambiente per configurare l'esempio. Sostituire
{your device shared key}
con la chiave primaria dithermostat1
annotata in precedenza. Queste variabili presuppongono che il nome della macchina virtuale del gateway siaedgegateway
e che l'ID del dispositivo termostato siathermostat1
:export IOTHUB_DEVICE_SECURITY_TYPE=connectionString export IOTHUB_DEVICE_CONNECTION_STRING="HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key}" export IOTEDGE_ROOT_CA_CERT_PATH=~/azure-iot-test-only.root.ca.cert.pem
Si noti che la stringa di connessione usa il nome del dispositivo gateway e non il nome di un hub IoT.
Per eseguire il codice, usare il comando seguente:
python3 simple_thermostat.py
L'output di questo comando è simile al seguente:
Connecting using Connection String HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key} Listening for command requests and property updates Press Q to quit Sending telemetry for temperature Sent message Sent message Sent message ...
Suggerimento
Se viene visualizzato un errore quando il dispositivo downstream tenta di connettersi. Provare a eseguire nuovamente i passaggi di provisioning dei dispositivi.
Per visualizzare i dati di telemetria in IoT Central, passare alla pagina Panoramica per il dispositivo thermostat1:
Nella pagina Informazioni è possibile visualizzare i valori delle proprietà inviati dal dispositivo downstream e nella pagina Comando è possibile chiamare i comandi nel dispositivo downstream.