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:

    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ć polecenia az 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 Połączenie do usługi 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:

  1. 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 klawisz 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.
  2. Uruchom polecenie az extension add , aby zainstalować lub uaktualnić rozszerzenie azure-iot do bieżącej wersji.

    az extension add --upgrade --name azure-iot
    
  3. 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
    
  4. 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:

  1. 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}
    
  2. 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>
    
  3. 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.

  1. 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.

  2. 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:

    Screenshot that shows the simulated device connecting.

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.

  1. 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}
    
  2. 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:

    Screenshot that shows the connection failing after the key reset.

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.

  1. Uruchom polecenie az iot hub genereate-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}
    
  2. 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

  3. 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.

  4. 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:

    Screenshot that shows a successful connection using a SAS token.

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:

Screenshot that shows a connection error when the outbound port is blocked.

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

  1. 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}
    
  2. Aby uruchomić symulowane urządzenie wysyłające komunikaty, przejdź do folderu iot-hub\Tutorials\Połączenie ivityTests w pobranym kodzie.

  3. 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:

    Screenshot that shows the simulated device sending messages.

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.

  1. W witrynie Azure Portal wybierz centrum IoT Hub z listy rozwijanej Zasób .

  2. Wybierz pozycję Metryki w sekcji Monitorowanie w menu nawigacji.

  3. 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:

    Screenshot showing left pane metrics.

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.

  1. W oknie terminalu użyj następującego polecenia, aby uruchomić aplikację urządzenia symulowanego:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. 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:

    Screenshot that shows the device confirming that the direct method was received.

    Gdy symulowane urządzenie pomyślnie odbiera wywołanie metody bezpośredniej, wysyła potwierdzenie z powrotem do centrum:

    Screenshot showing that the device returns a direct method acknowledgment.

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.

  1. W oknie terminalu użyj następującego polecenia, aby uruchomić aplikację urządzenia symulowanego:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. 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.

    Screenshot showing the reported properties of a device.

  3. 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:

    Screenshot that shows the device confirming that the desired properties update was received.

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.