Samouczek: testowanie łączności z centrum IoT za pomocą urządzenia symulowanego
W tym samouczku użyjesz narzędzi portalu usługi Azure IoT Hub i poleceń interfejsu wiersza polecenia platformy Azure, aby przetestować łączność urządzeń. W tym samouczku został użyty również prosty symulator urządzenia działający na komputerze stacjonarnym.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Sprawdzanie uwierzytelniania urządzenia
- Sprawdzanie łączności urządzenia z chmurą
- Sprawdzanie łączności chmury z urządzeniem
- Sprawdzanie synchronizacji bliźniaczej reprezentacji urządzenia
Wymagania wstępne
W tym samouczku do tworzenia zasobów w chmurze jest używany interfejs wiersza polecenia platformy Azure. Istnieją dwa sposoby uruchamiania poleceń interfejsu wiersza polecenia:
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Przewodnik Szybki start usługi Azure Cloud Shell — Bash.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
- Zaloguj się do interfejsu wiersza polecenia platformy Azure przy użyciu polecenia az login .
- Po wyświetleniu monitu przy pierwszym użyciu zainstaluj rozszerzenia interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
- Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Uwaga
W tym artykule jest używana najnowsza wersja rozszerzenia Usługi Azure IoT o nazwie
azure-iot
. Starsza wersja nosi nazwęazure-cli-iot-ext
. Jednocześnie powinna być zainstalowana tylko jedna wersja. Możesz użyć poleceniaaz extension list
, aby zweryfikować aktualnie zainstalowane rozszerzenia.Użyj
az extension remove --name azure-cli-iot-ext
polecenia , aby usunąć starszą wersję rozszerzenia.Użyj
az extension add --name azure-iot
polecenia , aby dodać nową wersję rozszerzenia.Aby zobaczyć, jakie rozszerzenia zostały zainstalowane, użyj polecenia
az extension list
.Przykładowa aplikacja uruchamiana w tym samouczku używa Node.js. Potrzebujesz Node.js wersji 10.x.x lub nowszej na komputerze deweloperskim.
Możesz pobrać środowisko Node.js dla wielu platform ze strony nodejs.org.
Możesz sprawdzić bieżącą wersję środowiska Node.js na komputerze deweloperskim przy użyciu następującego polecenia:
node --version
Sklonuj lub pobierz przykładowy projekt Node.js z przykładów usługi Azure IoT dla Node.js.
Upewnij się, że port 8883 jest otwarty w zaporze. Przykład urządzenia w tym samouczku używa protokołu MQTT, który komunikuje się za pośrednictwem portu 8883. Ten port może zostać zablokowany w niektórych środowiskach sieci firmowych i edukacyjnych. Aby uzyskać więcej informacji i sposobów obejścia tego problemu, zobacz Nawiązywanie połączenia z usługą IoT Hub (MQTT).
Tworzenie centrum IoT
W tej sekcji użyjesz interfejsu wiersza polecenia platformy Azure do utworzenia centrum IoT i grupy zasobów. Grupa zasobów platformy Azure to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi. Centrum IoT działa jako centralne centrum komunikatów na potrzeby dwukierunkowej komunikacji między aplikacją IoT a urządzeniami.
Jeśli masz już centrum IoT w subskrypcji platformy Azure, możesz pominąć tę sekcję.
Aby utworzyć centrum IoT i grupę zasobów:
Uruchom aplikację interfejsu wiersza polecenia. Aby uruchomić polecenia interfejsu wiersza polecenia w pozostałej części tego artykułu, skopiuj składnię polecenia, wklej ją do aplikacji interfejsu wiersza polecenia, edytuj wartości zmiennych i naciśnij
Enter
.- Jeśli używasz usługi Cloud Shell, wybierz przycisk Wypróbuj w poleceniach interfejsu wiersza polecenia, aby uruchomić usługę Cloud Shell w podzielonym oknie przeglądarki. Możesz też otworzyć usługę Cloud Shell na osobnej karcie przeglądarki.
- Jeśli używasz interfejsu wiersza polecenia platformy Azure lokalnie, uruchom aplikację konsolową interfejsu wiersza polecenia i zaloguj się do interfejsu wiersza polecenia platformy Azure.
Uruchom polecenie az extension add , aby zainstalować lub uaktualnić rozszerzenie azure-iot do bieżącej wersji.
az extension add --upgrade --name azure-iot
W aplikacji interfejsu wiersza polecenia uruchom polecenie az group create , aby utworzyć grupę zasobów. Następujące polecenie tworzy grupę zasobów o nazwie MyResourceGroup w lokalizacji eastus .
Uwaga
Opcjonalnie możesz ustawić inną lokalizację. Aby wyświetlić dostępne lokalizacje, uruchom polecenie
az account list-locations
. W tym przewodniku Szybki start użyto jednostki eastus , jak pokazano w przykładowym poleceniu.az group create --name MyResourceGroup --location eastus
Uruchom polecenie az iot hub create, aby utworzyć centrum IoT Hub. Utworzenie centrum IoT Hub może potrwać kilka minut.
YourIotHubName. Zastąp ten symbol zastępczy i otaczające nawiasy klamrowe w poniższym poleceniu, używając nazwy wybranej dla centrum IoT. Nazwa centrum IoT musi być globalnie unikatowa na platformie Azure. Użyj nazwy centrum IoT w pozostałej części tego przewodnika Szybki start wszędzie tam, gdzie widzisz symbol zastępczy.
az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
Sprawdzenie uwierzytelniania urządzenia
Urządzenie musi zostać uwierzytelnione w centrum, zanim możliwa będzie wymiana danych z centrum. Możesz użyć narzędzia Urządzenia IoT w sekcji Zarządzanie urządzeniami w portalu, aby zarządzać urządzeniami i sprawdzić używane klucze uwierzytelniania. W tej części samouczka dodasz nowe urządzenie testowe, pobierzesz jego klucz i sprawdzisz, czy urządzenie testowe może nawiązać połączenie z centrum. W dalszej części zresetujesz klucz uwierzytelniania w celu zaobserwowania, co się stanie, gdy urządzenie spróbuje użyć nieaktualnego klucza.
Rejestrowanie urządzenia
Zanim urządzenie będzie mogło nawiązać połączenie, należy je najpierw zarejestrować w centrum IoT. W tej sekcji użyjesz interfejsu wiersza polecenia platformy Azure do utworzenia tożsamości urządzenia.
Jeśli masz już urządzenie zarejestrowane w centrum IoT Hub, możesz pominąć tę sekcję.
Aby utworzyć tożsamość urządzenia:
Uruchom polecenie az iot hub device-identity create w powłoce interfejsu wiersza polecenia. To polecenie tworzy tożsamość urządzenia.
your_iot_hub_name. zamień ten symbol zastępczy poniżej na wybraną nazwę centrum IoT Hub.
myDevice. Możesz użyć tej nazwy dla identyfikatora urządzenia w tym artykule lub podać inną nazwę urządzenia.
az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
Uruchom polecenie 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}
Dane wyjściowe parametry połączenia mają następujący format:
HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
Zapisz parametry połączenia w bezpiecznej lokalizacji.
Uwaga
Pozostaw otwartą aplikację interfejsu wiersza polecenia. Zostanie ona użyta w dalszych krokach.
Symulowanie urządzenia testowego
Aby symulować urządzenie wysyłające dane telemetryczne do centrum IoT Hub, uruchom wcześniej pobraną aplikację urządzenia symulowanego Node.js.
W oknie terminalu na maszynie dewelopera przejdź do folderu głównego przykładowego projektu Node.js pobranego. Następnie przejdź do folderu iot-hub\Tutorials\ConnectivityTests.
W oknie terminalu uruchom następujące polecenia, aby zainstalować wymagane biblioteki i uruchomić aplikację urządzenia symulowanego. Użyj parametry połączenia urządzenia zanotowane podczas rejestrowania urządzenia.
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
Okno terminalu wyświetla komunikat o powodzeniu po nawiązaniu połączenia z centrum:
Urządzenie zostało pomyślnie uwierzytelnione przy użyciu klucza urządzenia wygenerowanego przez centrum IoT.
Resetowanie kluczy
W tej sekcji zresetujesz klucz urządzenia i zaobserwujesz błąd, który wystąpi, gdy urządzenie symulowane spróbuje nawiązać połączenie.
Aby zresetować podstawowy klucz urządzenia dla urządzenia, uruchom polecenie 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}
W oknie terminalu na komputerze deweloperskim uruchom ponownie aplikację urządzenia symulowanego:
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
Tym razem, gdy aplikacja spróbuje nawiązać połączenie, wyświetlony zostanie komunikat o błędzie uwierzytelniania:
Generowanie tokenu sygnatury dostępu współdzielonego (SAS)
Jeśli urządzenie korzysta z jednego z zestawów SDK urządzeń usługi IoT Hub, kod biblioteki SDK generuje token SAS używany do uwierzytelniania w centrum. Token SAS jest generowany przy użyciu nazwy centrum, nazwy urządzenia oraz klucza urządzenia.
W niektórych scenariuszach, na przykład w przypadku bramy protokołu w chmurze lub w ramach niestandardowego schematu uwierzytelniania, może być konieczne samodzielne wygenerowanie tokenu SAS. Aby rozwiązać problemy z kodem generującym token SAS, warto wygenerować znany sprawny token SAS do użycia podczas testów.
Uwaga
Przykładowy plik SimulatedDevice-2.js zawiera przykłady generowania tokenu sygnatury dostępu współdzielonego (SAS) z zestawem SDK i bez niego.
Uruchom polecenie az iot hub generate-sas-token, aby wygenerować znany dobry token SAS przy użyciu interfejsu wiersza polecenia:
az iot hub generate-sas-token --device-id {your_device_id} --hub-name {your_iot_hub_name}
Skopiuj pełny tekst wygenerowanego tokenu SAS. Token SAS wygląda podobnie do następującego przykładu:
SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111
W oknie terminalu na komputerze deweloperskim przejdź do folderu głównego pobranego projektu przykładowego Node.js. Następnie przejdź do folderu iot-hub\Tutorials\ConnectivityTests.
W oknie terminalu uruchom następujące polecenia, aby zainstalować wymagane biblioteki i uruchomić aplikację urządzenia symulowanego:
npm install node SimulatedDevice-2.js "{Your SAS token}"
W oknie terminalu zostanie wyświetlony komunikat o powodzeniu po nawiązaniu połączenia z centrum przy użyciu tokenu SAS:
Urządzenie zostało pomyślnie uwierzytelnione przy użyciu tokenu SAS wygenerowanego za pomocą polecenia interfejsu wiersza polecenia. Plik SimulatedDevice-2.js zawiera kod przykładowy, który pokazuje, w jaki sposób wygenerować token SAS w kodzie.
Protokoły
Urządzenie może korzystać z dowolnego z następujących protokołów w celu nawiązania połączenia z centrum IoT:
Protokół | Port wyjściowy |
---|---|
MQTT | 8883 |
MQTT za pośrednictwem obiektów WebSocket | 443 |
AMQP | 5671 |
AMQP za pośrednictwem obiektów WebSocket | 443 |
HTTPS | 443 |
Jeśli port wychodzący jest blokowany przez zaporę, urządzenie nie może nawiązać połączenia:
Sprawdzanie łączności urządzenia z chmurą
Po nawiązaniu połączenia urządzenie może rozpocząć wysyłanie danych telemetrycznych do centrum IoT Hub. W tej sekcji przedstawiono sposób sprawdzania, czy dane telemetryczne wysyłane przez urządzenie docierają do centrum.
Wysyłanie komunikatów z urządzenia do chmury
Ponieważ zresetujemy parametry połączenia dla urządzenia w poprzedniej sekcji, użyj polecenia az iot hub device-identity connection-string show, aby pobrać zaktualizowany parametry połączenia:
az iot hub device-identity connection-string show --device-id {your_device_id} --output table --hub-name {your_iot_hub_name}
Aby uruchomić symulowane urządzenie wysyłające komunikaty, przejdź do folderu iot-hub\Tutorials\ConnectivityTests w pobranym kodzie.
W oknie terminalu uruchom następujące polecenia, aby zainstalować wymagane biblioteki i uruchomić aplikację urządzenia symulowanego:
npm install node SimulatedDevice-3.js "{your_device_connection_string}"
Podczas wysyłania danych telemetrycznych do centrum w oknie terminalu zostaną wyświetlone te informacje:
Monitorowanie komunikatów przychodzących
Możesz użyć pozycji Metryki w portalu, aby sprawdzić, czy komunikaty zawierające dane telemetryczne docierają do centrum IoT.
W witrynie Azure Portal wybierz centrum IoT Hub z listy rozwijanej Zasób .
Wybierz pozycję Metryki w sekcji Monitorowanie w menu nawigacji.
Wybierz pozycję Komunikaty telemetryczne wysyłane jako metryka i ustaw zakres czasu na Wartość Ostatnie godziny. Wykres pokazuje zagregowaną liczbę komunikatów wysłanych przez urządzenie symulowane:
Po uruchomieniu urządzenia symulowanego udostępnienie metryk zajmuje kilka minut.
Sprawdzanie łączności chmury z urządzeniem
W tej sekcji przedstawiono sposób tworzenia testowego wywołania metody bezpośredniej do urządzenia w celu sprawdzenia łączności chmury z urządzeniem. W tym celu należy uruchomić na komputerze deweloperskim urządzenie symulowane nasłuchujące wywołań metody bezpośredniej z centrum.
W oknie terminalu użyj następującego polecenia, aby uruchomić aplikację urządzenia symulowanego:
node SimulatedDevice-3.js "{your_device_connection_string}"
W osobnym oknie użyj polecenia az iot hub invoke-device-method , aby wywołać metodę bezpośrednią na urządzeniu:
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}
Po otrzymaniu wywołania metody bezpośredniej urządzenie symulowane drukuje komunikat w konsoli:
Gdy symulowane urządzenie pomyślnie odbiera wywołanie metody bezpośredniej, wysyła potwierdzenie z powrotem do centrum:
Sprawdzanie synchronizacji bliźniaczej reprezentacji urządzenia
Bliźniacze reprezentacje urządzeń są używane do synchronizowania stanu pomiędzy urządzeniem a centrum. W tej sekcji użyjesz poleceń interfejsu wiersza polecenia, aby wysłać żądane właściwości do urządzenia i odczytać zgłoszone właściwości wysłane przez urządzenie.
Urządzenie symulowane używane w tej sekcji wysyła zgłoszone właściwości do centrum za każdym razem, gdy jest uruchamiane, i drukuje żądane właściwości w konsoli za każdym razem, gdy je otrzyma.
W oknie terminalu użyj następującego polecenia, aby uruchomić aplikację urządzenia symulowanego:
node SimulatedDevice-3.js "{your_device_connection_string}"
W osobnym oknie uruchom polecenie az iot hub device-twin show , aby sprawdzić, czy centrum otrzymało zgłoszone właściwości z urządzenia:
az iot hub device-twin show --device-id {your_device_id} --hub-name {your_iot_hub_name}
W sekcji „reported properties” (zgłoszone właściwości) w danych wyjściowych polecenia jest widoczna właściwość devicelaststarted. Ta właściwość pokazuje, kiedy ostatnio uruchomiono urządzenie symulowane.
Aby sprawdzić, czy centrum może wysyłać żądane wartości właściwości do urządzenia, użyj polecenia 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}
Po otrzymaniu aktualizacji żądanej właściwości z centrum urządzenie symulowane drukuje komunikat:
Oprócz otrzymywania na bieżąco żądanych zmian właściwości urządzenie symulowane automatycznie sprawdza dostępność żądanych właściwości przy uruchomieniu.
Czyszczenie zasobów
Jeśli nie potrzebujesz już tego centrum IoT, usuń je oraz grupę zasobów z poziomu portalu. W tym celu wybierz grupę zasobów zawierającą centrum IoT, a następnie wybierz pozycję Usuń.
Następne kroki
W tym samouczku przedstawiono sposób sprawdzania kluczy urządzenia, sprawdzania łączności urządzenia z chmurą i chmury z urządzeniem oraz sprawdzania synchronizacji bliźniaczej reprezentacji urządzenia. Aby dowiedzieć się więcej na temat monitorowania centrum IoT, zapoznaj się z artykułem z instrukcjami dotyczącymi monitorowania usługi IoT Hub.