Självstudier: Använda en simulerad enhet för att testa anslutningen till din IoT-hubb
I den här kursen använder du Azure IoT Hub-portalverktyg och Azure CLI-kommandon för att testa anslutningen för enheten. Den här kursen använder också en enkel enhetssimulator som du kör på din stationära dator.
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
I den här självstudien lär du dig att:
- Kontrollera din enhetsautentisering
- Kontrollera anslutningen från enhet till moln
- Kontrollera anslutningen moln till enhet
- Kontrollera dubbelsynkronisering
Förutsättningar
I den här självstudien används Azure CLI för att skapa molnresurser. Det finns två sätt att köra CLI-kommandon:
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Azure Cloud Shell Snabbstart – Bash.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
- Logga in på Azure CLI med kommandot az login .
- När du uppmanas till det installerar du Azure CLI-tillägg vid första användning. Mer information om tillägg finns i Använda tillägg med Azure CLI.
- Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Kommentar
Den här artikeln använder den senaste versionen av Azure IoT-tillägget med namnet
azure-iot
. Den äldre versionen kallasazure-cli-iot-ext
. Du bör bara ha en version installerad i taget. Du kan använda kommandotaz extension list
för att verifiera de tillägg som är installerade.Använd
az extension remove --name azure-cli-iot-ext
för att ta bort den äldre versionen av tillägget.Använd
az extension add --name azure-iot
för att lägga till den nya versionen av tillägget.Om du vill se vilka tillägg du har installerat använder du
az extension list
.Exempelprogrammet som du kör i den här självstudien använder Node.js. Du behöver Node.js v10.x.x eller senare på utvecklingsdatorn.
Du kan ladda ned Node.js för flera plattformar från nodejs.org.
Du kan kontrollera den aktuella versionen av Node.js på utvecklingsdatorn med följande kommando:
node --version
Klona eller ladda ned exempelprojektet Node.js från Azure IoT-exempel för Node.js.
Kontrollera att port 8883 är öppen i brandväggen. Enhetsexemplet i den här självstudien använder MQTT-protokoll, som kommunicerar via port 8883. Den här porten kan blockeras i vissa företags- och utbildningsnätverksmiljöer. Mer information och sätt att kringgå det här problemet finns i Anslut ing to IoT Hub (MQTT).
Skapa en IoT-hubb
I det här avsnittet använder du Azure CLI för att skapa en IoT-hubb och en resursgrupp. En Azure-resursgrupp är en logisk container där Azure-resurser distribueras och hanteras. En IoT-hubb fungerar som en central meddelandehubb för dubbelriktad kommunikation mellan ditt IoT-program och enheterna.
Om du redan har en IoT-hubb i din Azure-prenumeration kan du hoppa över det här avsnittet.
Så här skapar du en IoT-hubb och en resursgrupp:
Starta DIN CLI-app. Om du vill köra CLI-kommandona i resten av den här artikeln kopierar du kommandosyntaxen, klistrar in den i CLI-appen, redigerar variabelvärden och trycker på
Enter
.- Om du använder Cloud Shell väljer du knappen Prova på CLI-kommandona för att starta Cloud Shell i ett delat webbläsarfönster. Eller så kan du öppna Cloud Shell på en separat webbläsarflik.
- Om du använder Azure CLI lokalt startar du CLI-konsolappen och loggar in på Azure CLI.
Kör az extension add för att installera eller uppgradera azure-iot-tillägget till den aktuella versionen.
az extension add --upgrade --name azure-iot
I CLI-appen kör du kommandot az group create för att skapa en resursgrupp. Följande kommando skapar en resursgrupp med namnet MyResourceGroup på platsen eastus .
Kommentar
Du kan också ange en annan plats. Om du vill se tillgängliga platser kör du
az account list-locations
. Den här snabbstarten använder eastus enligt exempelkommandot.az group create --name MyResourceGroup --location eastus
Kör kommandot az iot hub create för att skapa en IoT-hubb. Det kan ta några minuter att skapa en IoT-hubb.
YourIotHubName. Ersätt platshållaren och de omgivande klammerparenteserna i följande kommando med det namn du valde för din IoT-hubb. Ett IoT-hubbnamn måste vara globalt unikt i Azure. Använd ditt IoT Hub-namn i resten av den här snabbstarten var du än ser platshållaren.
az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
Kontrollera din enhetsautentisering
En enhet måste autentiseras mot din hubb innan den kan utbyta data med hubben. Du kan använda verktyget IoT-enheter -verktyget i området enhetshantering i portalen för att hantera dina enheter och kontrollera de autentiseringsnycklar som de använder. I denna del av kursen lägger du till en ny testenhet, tar emot dess nyckel och kontrollerar att en testenhet kan anslutas till hubben. Senare kan du återställa autentiseringsnyckeln om du vill se vad som händer när en enhet försöker använda en inaktuell nyckel.
Registrera en enhet
En enhet måste vara registrerad vid din IoT-hubb innan den kan ansluta. I det här avsnittet använder du Azure CLI för att skapa en enhetsidentitet.
Om du redan har en enhet registrerad i din IoT-hubb kan du hoppa över det här avsnittet.
Så här skapar du en enhetsidentitet:
Kör kommandot az iot hub device-identity create i CLI-gränssnittet. Det här kommandot skapar enhetsidentiteten.
your_iot_hub_name. Ersätt platshållaren nedan med det namn som du har valt för din IoT-hubb.
myDevice. Du kan använda det här namnet för enhets-ID:t i den här artikeln eller ange ett annat enhetsnamn.
az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
Kör kommandot az iot hub device-identity connection-string show.
az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
Utdata för anslutningssträng är i följande format:
HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
Spara anslutningssträng på en säker plats.
Kommentar
Håll CLI-appen öppen. Du kommer att använda det senare.
Simulera en testenhet
Om du vill simulera en enhet som skickar telemetri till din IoT-hubb kör du det Node.js simulerade enhetsprogrammet som du laddade ned tidigare.
I ett terminalfönster på utvecklingsdatorn går du till rotmappen för exempelprojektet Node.js som du laddade ned. Gå sedan till mappen iot-hub\Tutorials\ConnectivityTests.
Installera de bibliotek som krävs för det simulerade enhetsprogrammet genom att köra följande kommandon i terminalfönstret. Använd enheten anslutningssträng du antecknade när du registrerade enheten.
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
Terminalfönstret visar ett meddelande när det ansluter till din hubb:
Du har nu autentiserats från en enhet med en enhetsnyckel som har genererats av din IoT-hubb.
Återställning av nycklar
I det här avsnittet får du återställa enhetsnyckeln och se felet när den simulerade enheten försöker ansluta.
Om du vill återställa den primära enhetsnyckeln för enheten kör du kommandot az iot hub device-identity update :
# Generate a new Base64 encoded key using the current date read key < <(date +%s | sha256sum | base64 | head -c 32) # Reset the primary device key for test device az iot hub device-identity update --device-id {your_device_id} --set authentication.symmetricKey.primaryKey=$key --hub-name {your_iot_hub_name}
Kör det simulerade enhetsprogrammet igen i terminalfönstret på utvecklingsdatorn:
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
Den här gången ser du ett autentiseringsfel när programmet försöker ansluta:
Generera en SAS-token (signatur för delad åtkomst)
Om enheten använder en av SDK:erna för IoT Hub-enheten, genererar SDK-bibliotekskoden en SAS-token som används för att autentisera mot hubben. En SAS-token skapas från namnet på din hubb, namnet på din enhet och enhetsnyckeln.
I vissa scenarier, till exempel en molnprotokollgateway eller en del av ett anpassat autentiseringsschema, kan du behöva skapa en SAS-token själv. När du felsöker problem med din SAS-kod är det användbart att skapa en fungerande SAS-token som kan användas vid test.
Kommentar
SimulatedDevice-2.js-exemplet innehåller exempel på hur du genererar en SAS-token både med och utan SDK.
Kör kommandot az iot hub genereate-sas-token för att generera en känd SAS-token med hjälp av CLI:
az iot hub generate-sas-token --device-id {your_device_id} --hub-name {your_iot_hub_name}
Kopiera den fullständiga texten för den genererade SAS-token. En SAS-token ser ut som i följande exempel:
SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111
Navigera till rotmappen för Node.js-exempelprojektet som du hämtade i ett terminalfönster på din utvecklingsdator. Gå sedan till mappen iot-hub\Tutorials\ConnectivityTests.
Installera de bibliotek som krävs för det simulerade enhetsprogrammet genom att köra följande kommandon i terminalfönstret:
npm install node SimulatedDevice-2.js "{Your SAS token}"
Terminalfönstret visar ett meddelande när det ansluter till din hubb med hjälp av SAS-token:
Du har nu autentiserats från en enhet med en test-SAS-token som har genererats av ett CLI-kommando. Filen SimulatedDevice 2.js innehåller exempelkod som visar hur du genererar en SAS-token i kod.
Protokoll
En enhet kan använda något av följande protokoll för att ansluta till din IoT-hubb:
Protokoll | Utgående port |
---|---|
MQTT | 8883 |
MQTT över WebSockets | 443 |
AMQP | 5671 |
AMQP över WebSockets | 443 |
HTTPS | 443 |
Om den utgående porten blockeras av en brandvägg kan enheten inte anslutas:
Kontrollera anslutningen från enhet till moln
När en enhet har anslutit kan den börja skicka telemetri till din IoT-hubb. Det här avsnittet visar hur du kan verifiera att telemetri som skickas av enheten når din hubb.
Skicka meddelanden från enhet till moln
Eftersom vi återställer anslutningssträng för enheten i föregående avsnitt använder du kommandot az iot hub device-identity connection-string show för att hämta den uppdaterade anslutningssträng:
az iot hub device-identity connection-string show --device-id {your_device_id} --output table --hub-name {your_iot_hub_name}
Om du vill köra en simulerad enhet som skickar meddelanden navigerar du till mappen iot-hub\Tutorials\Anslut ivityTests i koden som du laddade ned.
Installera de bibliotek som krävs för det simulerade enhetsprogrammet genom att köra följande kommandon i terminalfönstret:
npm install node SimulatedDevice-3.js "{your_device_connection_string}"
Terminalfönstret visar information när det skickar telemetri till din hubb:
Övervaka inkommande meddelanden
Du kan använda mått i portalen för att kontrollera att telemetrimeddelanden kommer fram till din IoT-hubb.
I Azure-portalen väljer du din IoT-hubb i listrutan Resurs.
Välj Mått i avsnittet Övervakning i navigeringsmenyn.
Välj Telemetrimeddelanden som skickas som mått och ange tidsintervallet till Senaste timme. Diagrammet visar det sammanlagda antalet meddelanden som har skickats av den simulerade enheten:
Det tar några minuter för mätvärdena att bli tillgängliga efter att du har startat den simulerade enheten.
Kontrollera anslutningen moln till enhet
Hur du kan testa ett direkt metodanrop till en enhet för att kontrollera anslutningen från moln till enhet. Du kör en simulerad enhet på din utvecklingsdator för att lyssna efter direkta metodanrop från din hubb.
Kör det simulerade enhetsprogrammet genom att köra följande kommandon i terminalfönstret:
node SimulatedDevice-3.js "{your_device_connection_string}"
I ett separat fönster använder du kommandot az iot hub invoke-device-method för att anropa en direktmetod på enheten:
az iot hub invoke-device-method --device-id {your_device_id} --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name {your_iot_hub_name}
Den simulerade enheten skriver ut ett meddelande till konsolen när den tar emot ett direkt metodanrop:
När den simulerade enheten tar emot direktmetodanropet skickar den en bekräftelse tillbaka till hubben:
Kontrollera dubbelsynkronisering
Enheter använder direktsynkronisering för att synkronisera tillstånd mellan enheten och hubben. I det här avsnittet kan du använda CLI-kommandon för att skicka önskade egenskaper till en enhet och läsa rapporterade egenskaper som skickas av enheten.
Den simulerade enheten som du använder i det här avsnittet skickar rapporterade egenskaper till hubben när den startas och skriver ut önskade egenskaper i konsolen när den tar emot dem.
Kör det simulerade enhetsprogrammet genom att köra följande kommandon i terminalfönstret:
node SimulatedDevice-3.js "{your_device_connection_string}"
I ett separat fönster kör du kommandot az iot hub device-twin show för att kontrollera att hubben tog emot de rapporterade egenskaperna från enheten:
az iot hub device-twin show --device-id {your_device_id} --hub-name {your_iot_hub_name}
Du kan se egenskapen devicelaststarted i området med rapporterade egenskaper. Den här egenskapen visar datum och tid då den simulerade enheten senast startades.
Kontrollera att hubben kan skicka önskade egenskapsvärden till enheten genom att använda kommandot az iot hub device-twin update :
az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id {your_device_id} --hub-name {your_iot_hub_name}
Den simulerade enheten skriver ut ett meddelande när den tar emot en önskad egenskapsuppdatering från hubben:
Förutom att ta emot önskade egenskapsändringar när de har utförts, söker simulerade enheten automatiskt efter egenskaper när den startas.
Rensa resurser
Om du inte behöver IoT-hubben längre kan du ta bort den och resursgruppen i portalen. Om du vill göra det väljer du den resursgrupp som innehåller din IoT-hubb och väljer Ta bort.
Nästa steg
I den här kursen har du fått lära dig att kontrollera dina enhetsnycklar, kontrollera anslutningen från enhet till moln, kontrollera anslutningen från moln till enhet och kontrollera dubbelsynkronisering. Gå till artikeln om övervakning av IoT Hub för att lära dig mer om hur du övervakar din IoT Hub.