Så här ansluter du enheter via en transparent IoT Edge-gateway
En IoT Edge-enhet kan fungera som en gateway som tillhandahåller en anslutning mellan andra enheter i ett lokalt nätverk och ditt IoT Central-program. Du använder en gateway när enheten inte kan komma åt ditt IoT Central-program direkt.
IoT Edge stöder transparenta och översättningsgatewaymönster. Den här artikeln sammanfattar hur du implementerar det transparenta gatewaymönstret. I det här mönstret skickar gatewayen meddelanden från den underordnade enheten till IoT Hub-slutpunkten i ditt IoT Central-program. Gatewayen manipulerar inte meddelandena när de passerar. I IoT Central visas varje underordnad enhet som underordnad gatewayenheten:
Viktigt!
Den här artikeln innehåller steg för att ansluta en enhet med en signatur för delad åtkomst, även kallad symmetrisk nyckelautentisering. Den här autentiseringsmetoden är praktisk för testning och utvärdering, men att autentisera en enhet med X.509-certifikat är en säkrare metod. Mer information finns i Metodtips > för säkerhet Anslutningssäkerhet.
För enkelhetens skull använder den här artikeln virtuella datorer som värd för underordnade enheter och gatewayenheter. I ett verkligt scenario skulle den underordnade enheten och gatewayen köras på fysiska enheter i ditt lokala nätverk.
Den här artikeln visar hur du implementerar scenariot med hjälp av IoT Edge 1.4-körningen.
Förutsättningar
För att utföra stegen i den här artikeln behöver du:
En aktiv Azure-prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Ett IoT Central-program som skapats från den anpassade programmallen . Mer information finns i Skapa ett IoT Central-program.
Om du vill följa stegen i den här artikeln laddar du ned följande filer till datorn:
- Termostatenhetsmodell (thermostat-1.json) – den här filen är enhetsmodellen för de underordnade enheterna.
- Transparent gatewaymanifest (EdgeTransparentGatewayManifest.json) – den här filen är IoT Edge-distributionsmanifestet för gatewayenheten.
Importera distributionsmanifest
Varje IoT Edge-enhet behöver ett distributionsmanifest för att konfigurera IoT Edge-körningen. Så här importerar du ett distributionsmanifest för den transparenta IoT Edge-gatewayen:
Gå till Edge-manifest.
Välj + Ny, ange ett namn för distributionsmanifestet, till exempel Transparent gateway , och ladda sedan upp den EdgeTransparentGatewayManifest.json fil som du laddade ned tidigare.
Välj Skapa för att spara distributionsmanifestet i programmet.
Lägga till enhetsmallar
Både underordnade enheter och gatewayenheten kan använda enhetsmallar i IoT Central. Med IoT Central kan du modellera relationen mellan dina underordnade enheter och din gateway så att du kan visa och hantera dem när de är anslutna. En enhetsmall krävs inte för att koppla en underordnad enhet till en gateway.
Skapa en enhetsmall för en underordnad enhet genom att skapa en standardenhetsmall som modellerar enhetens funktioner. Exemplet som visas i den här artikeln använder den termostatenhetsmodell som du laddade ned.
Så här skapar du en enhetsmall för en underordnad enhet:
Skapa en enhetsmall och välj IoT-enhet som malltyp.
På sidan Anpassa i guiden anger du ett namn som Termostat för enhetsmallen.
När du har skapat enhetsmallen väljer du Importera en modell. Välj en modell, till exempel den thermostat-1.json fil som du laddade ned tidigare.
Om du vill generera vissa standardvyer för termostaten väljer du vyer och sedan Generera standardvyer.
Publicera enhetsmallen.
Så här skapar du en enhetsmall för en transparent IoT Edge-gatewayenhet:
Skapa en enhetsmall och välj Azure IoT Edge som malltyp.
På sidan Anpassa i guiden anger du ett namn som Edge Gateway för enhetsmallen.
På sidan Anpassa i guiden kontrollerar du Att det här är en gatewayenhet.
På sidan Granska väljer du Skapa.
På sidan Skapa en modell väljer du Anpassad modell.
Lägg till en post i Relationer i den underordnade enhetsmallen.
Följande skärmbild visar sidan Relationer för en IoT Edge-gatewayenhet med underordnade enheter som använder termostatenhetsmallen :
Föregående skärmbild visar en enhetsmall för IoT Edge-gateway utan att några moduler har definierats. En transparent gateway kräver inga moduler eftersom IoT Edge-körningen vidarebefordrar meddelanden från nedströmsenheterna direkt till IoT Central. Om själva gatewayen behöver skicka telemetri, synkronisera egenskaper eller hantera kommandon kan du definiera dessa funktioner i rotkomponenten eller i en modul.
Lägg till nödvändiga molnegenskaper och vyer innan du publicerar gatewayen och underordnade enhetsmallar.
Lägg till enheterna
När du lägger till enheterna i ditt IoT Central-program kan du definiera relationen mellan de underordnade enheterna och den transparenta gatewayen.
Så här lägger du till enheterna:
Gå till enhetssidan i ditt IoT Central-program.
Lägg till en instans av den transparenta gateway-IoT Edge-enheten. När du lägger till enheten kontrollerar du att du väljer distributionsmanifestet transparent gateway . I den här artikeln är
edgegateway
gatewayens enhets-ID .Lägg till en eller flera instanser av den underordnade enheten. I den här artikeln är nedströmsenheter termostater med ID:er
thermostat1
ochthermostat2
.I enhetslistan väljer du varje underordnad enhet och väljer Anslut till gateway.
Följande skärmbild visar hur du kan visa listan över enheter som är anslutna till en gateway på sidan Underordnade enheter :
I en transparent gateway ansluter de underordnade enheterna till själva gatewayen, inte till en anpassad modul som hanteras av gatewayen.
Innan du distribuerar enheterna behöver du följande:
- ID-omfång för ditt IoT Central-program.
- Enhets-ID-värden för gatewayen och underordnade enheter.
- Primära nyckelvärden för gatewayen och underordnade enheter.
Om du vill hitta dessa värden navigerar du till varje enhet i enhetslistan och väljer Anslut. Anteckna dessa värden innan du fortsätter.
Dricks
Du kan ansluta enheterna och upprätta relationer utan att först skapa enhetsmallar för enheterna. Du kan koppla en otilldelade underordnad enhet till en otilldelade gatewayenhet.
Distribuera gatewayen och enheterna
För att du ska kunna prova det här scenariot visar följande steg hur du distribuerar gatewayen och underordnade enheter till virtuella Azure-datorer.
Dricks
Information om hur du distribuerar IoT Edge-körningen till en fysisk enhet finns i Skapa en IoT Edge-enhet i IoT Edge-dokumentationen.
Om du vill testa scenariot med transparent gateway väljer du följande knapp för att distribuera två virtuella Linux-datorer. En virtuell dator har IoT Edge 1.4-körningen installerad och är den transparenta IoT Edge-gatewayen. Den andra virtuella datorn är en nedströmsenhet där du kör kod för att skicka simulerad termostattelemetri:
När de två virtuella datorerna distribueras och körs kontrollerar du att IoT Edge-gatewayenheten körs på den edgegateway
virtuella datorn:
Gå till sidan Enheter i ditt IoT Central-program. Om IoT Edge-gatewayenheten är ansluten till IoT Central är dess status Etablerad.
Öppna IoT Edge-gatewayenheten och kontrollera statusen för modulerna på sidan Moduler . Om IoT Edge-körningen har startats är statusen för modulerna $edgeAgent och $edgeHub Körs:
Dricks
Du kan behöva vänta i flera minuter medan den virtuella datorn startas och enheten etableras i ditt IoT Central-program.
Konfigurera gatewayen
För att din IoT Edge-enhet ska fungera som en transparent gateway behöver den vissa certifikat för att bevisa sin identitet för alla underordnade enheter. I den här artikeln används democertifikat. I en produktionsmiljö använder du certifikat från certifikatutfärdare.
Så här genererar du democertifikaten och installerar dem på din gatewayenhet:
Använd SSH för att ansluta till och logga in på den virtuella gatewayenhetens virtuella dator.
Kör följande kommandon för att klona IoT Edge-lagringsplatsen och generera dina democertifikat:
# 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"
När du har kört föregående kommandon är följande filer redo att användas i nästa steg:
- ~/certs/certs/azure-iot-test-only.root.ca.cert.pem – rotcertifikatutfärdarcertifikatet som används för att göra alla andra democertifikat för testning av ett IoT Edge-scenario.
- ~/certs/certs/iot-edge-device-mycacert-full-chain.cert.pem – ett certifikat för enhetscertifikatutfärdare som refereras från IoT Edge-konfigurationsfilen. I ett gatewayscenario är det här CA-certifikatet hur IoT Edge-enheten verifierar sin identitet till underordnade enheter.
- ~/certs/private/iot-edge-device-mycacert.key.pem – den privata nyckel som är associerad med certifikatutfärdarcertifikatet för enheten.
Mer information om dessa democertifikat finns i Skapa democertifikat för att testa IoT Edge-enhetsfunktioner.
Öppna filen config.toml i en textredigerare. Till exempel:
sudo nano /etc/aziot/config.toml
Leta upp följande inställningar i konfigurationsfilen. Lägg till certifikatinställningarna på följande sätt:
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"
I föregående exempel förutsätter vi att du är inloggad som AzureUser och har skapat ett certifikat för enhetscertifikatutfärdare med namnet "mycacert".
Spara ändringarna och starta om IoT Edge-körningen:
sudo iotedge config apply
Om IoT Edge-körningen startar efter ändringarna ändras statusen för $edgeAgent - och $edgeHub-modulerna till Körs på sidan Moduler för gatewayenheten i IoT Central.
Om körningen inte startar kontrollerar du de ändringar du gjorde i IoT Edge-konfigurationsfilen och läser Felsöka din IoT Edge-enhet.
Den transparenta gatewayen är nu konfigurerad och redo att börja vidarebefordra telemetri från underordnade enheter.
Etablera en underordnad enhet
IoT Central förlitar sig på DPS (Device Provisioning Service) för att etablera enheter i IoT Central. För närvarande kan IoT Edge inte använda DPS-etablering av en nedströmsenhet till ditt IoT Central-program. Följande steg visar hur du etablerar thermostat1
enheten manuellt. För att slutföra de här stegen behöver du en miljö med Python installerat och internetanslutning. Kontrollera Azure IoT Python SDK för aktuella versionskrav för Python. Azure Cloud Shell har Python förinstallerat:
Kör följande kommando för att installera modulen
azure.iot.device
:pip install azure.iot.device
Kör följande kommando för att ladda ned Python-skriptet som utför enhetsetablering:
wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/provision_device.py
Om du vill etablera den
thermostat1
underordnade enheten i ditt IoT Central-program kör du följande kommandon och ersätter{your application id scope}
och{your device primary key}
. Du antecknade dessa värden när du lade till enheterna i ditt IoT Central-program: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
I ditt IoT Central-program kontrollerar du att enhetens enhetsstatus thermostat1
nu har etablerats.
Konfigurera en underordnad enhet
I föregående avsnitt konfigurerade du den edgegateway
virtuella datorn med democertifikaten så att den kan köras som gateway. Den leafdevice
virtuella datorn är redo att installera en termostatsimulator som använder gatewayen för att ansluta till IoT Central.
Den leafdevice
virtuella datorn behöver en kopia av rotcertifikatutfärdarcertifikatet som du skapade på den edgegateway
virtuella datorn. Kopiera filen /home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem från den edgegateway
virtuella datorn till din hemkatalog på den leafdevice
virtuella datorn. Du kan använda scp-kommandot för att kopiera filer mellan virtuella Linux-datorer. Till exempel från datorn leafdevice
:
scp AzureUser@edgegateway:/home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem .
Information om hur du kontrollerar anslutningen från den underordnade enheten till gatewayen finns i Testa gatewayanslutningen.
Så här kör du termostatsimulatorn på den leafdevice
virtuella datorn:
Använd SSH för att ansluta till och logga in på den
leafdevice
virtuella datorn.Ladda ned Python-exemplet till din hemkatalog:
cd ~ wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/simple_thermostat.py
Installera Python-modulen för Azure IoT-enheten:
sudo apt update sudo apt install python3-pip pip3 install azure.iot.device
Ange miljövariablerna för att konfigurera exemplet. Ersätt
{your device shared key}
med primärnyckeln för duthermostat1
antecknade tidigare. Dessa variabler förutsätter att namnet på den virtuella gatewaydatorn äredgegateway
och ID:t för termostatenheten ärthermostat1
: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
Observera hur anslutningssträng använder namnet på gatewayenheten och inte namnet på en IoT-hubb.
Om du vill köra koden använder du följande kommando:
python3 simple_thermostat.py
Utdata från det här kommandot ser ut så här:
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 ...
Dricks
Om du ser ett fel när den underordnade enheten försöker ansluta. Prova att köra enhetsetableringsstegen igen.
Om du vill se telemetrin i IoT Central går du till sidan Översikt för termostat1-enheten :
På sidan Om kan du visa egenskapsvärden som skickas från den underordnade enheten och på sidan Kommando kan du anropa kommandon på den underordnade enheten.