Udostępnij za pośrednictwem


Samouczek: Połączenie aplikacji urządzeń z wieloma składnikami IoT Plug and Play działających w systemie Linux lub Windows do usługi IoT Hub

W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana w języku C i jest zawarta w zestawie SDK urządzenia Usługi Azure IoT dla języka C. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.

Przeglądaj kod

W tym samouczku zostały wykonane następujące czynności:

  • Pobierz przykładowy kod.
  • Skompiluj przykładowy kod.
  • Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
  • Przejrzyj kod źródłowy.

Wymagania wstępne

Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.

Ten samouczek można wykonać w systemie Linux lub Windows. Polecenia powłoki w tym samouczku są zgodne z konwencją systemu Linux dla separatorów ścieżek "/", jeśli obserwujesz w systemie Windows, pamiętaj, aby zamienić te separatory na "\".

Wymagania wstępne różnią się w zależności od systemu operacyjnego:

Linux

W tym samouczku założono, że używasz systemu Ubuntu Linux. Kroki opisane w tym samouczku zostały przetestowane przy użyciu systemu Ubuntu 18.04.

Aby ukończyć ten samouczek w systemie Linux, zainstaluj następujące oprogramowanie w lokalnym środowisku systemu Linux:

Zainstaluj bibliotekę GCC, git, narzędzie cmake i wszystkie wymagane zależności przy użyciu apt-get polecenia :

sudo apt-get update
sudo apt-get install -y git cmake build-essential curl libcurl4-openssl-dev libssl-dev uuid-dev

Sprawdź, czy wersja biblioteki ma wartość 2.8.12, a wersja GCC jest wyższa niż 4.4.7.cmake

cmake --version
gcc --version

Windows

Aby ukończyć ten samouczek w systemie Windows, zainstaluj następujące oprogramowanie w lokalnym środowisku systemu Windows:

Pobieranie kodu

Jeśli ukończono samouczek: Połączenie przykładową aplikację urządzenia IoT Plug and Play działającą w systemie Linux lub Windows do usługi IoT Hub (C), która została już pobrana.

W tym samouczku przygotujesz środowisko programistyczne, którego można użyć do sklonowania i skompilowania zestawu SDK języka C urządzenia usługi Azure IoT Hub.

Otwórz wiersz polecenia w wybranym folderze. Wykonaj następujące polecenie, aby sklonować repozytorium GitHub zestawów SDK i bibliotek języka C usługi Azure IoT do tej lokalizacji:

git clone https://github.com/Azure/azure-iot-sdk-c.git
cd azure-iot-sdk-c
git submodule update --init

Spodziewaj się, że wykonanie tej operacji potrwa kilka minut.

Kompilowanie i uruchamianie kodu

Możesz skompilować i uruchomić kod przy użyciu programu Visual Studio lub cmake w wierszu polecenia.

Korzystanie z programu Visual Studio

  1. Otwórz folder główny sklonowanego repozytorium. Po kilku sekundach obsługa narzędzia CMake w programie Visual Studio tworzy wszystko, co należy uruchomić i debugować projekt.

  2. Gdy program Visual Studio jest gotowy, w Eksplorator rozwiązań przejdź do przykładowego iothub_client/samples/pnp/pnp_temperature_controller/.

  3. Kliknij prawym przyciskiem myszy plik pnp_temperature_controller.c i wybierz polecenie Dodaj konfigurację debugowania. Wybierz pozycję Domyślne.

  4. Program Visual Studio otwiera plik launch.vs.json . Edytuj ten plik, jak pokazano w poniższym fragmencie kodu, aby ustawić wymagane zmienne środowiskowe. Zanotujesz identyfikator zakresu i klucz podstawowy rejestracji po zakończeniu konfigurowania środowiska na potrzeby przewodników Szybki start i samouczków dotyczących usługi IoT Plug and Play:

    {
      "version": "0.2.1",
      "defaults": {},
      "configurations": [
        {
          "type": "default",
          "project": "iothub_client\\samples\\pnp\\pnp_temperature_controller\\pnp_temperature_controller.c",
          "projectTarget": "",
          "name": "pnp_temperature_controller.c",
          "env": {
            "IOTHUB_DEVICE_SECURITY_TYPE": "DPS",
            "IOTHUB_DEVICE_DPS_ID_SCOPE": "<Your ID scope>",
            "IOTHUB_DEVICE_DPS_DEVICE_ID": "my-pnp-device",
            "IOTHUB_DEVICE_DPS_DEVICE_KEY": "<Your enrollment primary key>"
          }
        }
      ]
    }
    
  5. Kliknij prawym przyciskiem myszy plik pnp_temperature_controller.c i wybierz polecenie Ustaw jako element startowy.

  6. Aby śledzić wykonywanie kodu w programie Visual Studio, dodaj punkt przerwania do main funkcji w pliku pnp_temperature_controller.c .

  7. Teraz możesz uruchomić i debugować przykład z menu Debugowanie .

Urządzenie jest teraz gotowe do odbierania poleceń i aktualizacji właściwości i zaczął wysyłać dane telemetryczne do centrum. Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.

Użyj cmake w wierszu polecenia

Aby skompilować przykład:

  1. Utwórz podfolder cmake w folderze głównym sklonowanego zestawu SDK urządzenia i przejdź do tego folderu:

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    
  2. Uruchom następujące polecenia, aby wygenerować i skompilować pliki projektu dla zestawu SDK i przykładów:

    cmake ..
    cmake --build .
    

W obszarze Konfigurowanie środowiska utworzono cztery zmienne środowiskowe w celu skonfigurowania przykładu pod kątem używania usługi Device Provisioning Service (DPS) do nawiązywania połączenia z centrum IoT:

  • IOTHUB_DEVICE_SECURITY_TYPE z wartościąDPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE z zakresem identyfikatora usługi DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID z wartością my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY przy użyciu klucza podstawowego rejestracji.
  • IOTHUB_DEVICE_DPS_ENDPOINT z wartością global.azure-devices-provisioning.net.

Aby dowiedzieć się więcej na temat przykładowej konfiguracji, zobacz przykładowy plik readme.

Aby uruchomić przykład:

  1. W folderze cmake przejdź do folderu zawierającego plik wykonywalny i uruchom go:

    # Bash
    cd iothub_client/samples/pnp/pnp_temperature_controller
    ./pnp_temperature_controller
    
    REM Windows
    cd iothub_client\samples\pnp\pnp_temperature_controller\Debug
    pnp_temperature_controller.exe
    

Urządzenie jest teraz gotowe do odbierania poleceń i aktualizacji właściwości i zaczął wysyłać dane telemetryczne do centrum. Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.

Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT

Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.

  1. Otwórz eksploratora usługi Azure IoT.

  2. Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.

  3. Na stronie IoT Plug and Play Ustawienia wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.

  4. Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.

  5. Kliknij identyfikator urządzenia utworzonego wcześniej.

  6. W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.

  7. Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.

  8. Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.

  9. Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.

  10. Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.

  11. Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.

  12. Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.

  13. Aby wyświetlić nową wartość, wybierz przycisk Odśwież .

  14. Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.

  15. Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.

Przeglądanie kodu

Ten przykład implementuje urządzenie kontrolera temperatury IoT Plug and Play. Ten przykład implementuje model z wieloma składnikami. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.

Funkcje pomocnika IoT Plug and Play

W tym przykładzie kod używa niektórych funkcji pomocnika z folderu /common :

pnp_device_client_ll zawiera metodę connect dla usługi IoT Plug and Play z model-id dołączonym parametrem: PnP_CreateDeviceClientLLHandle.

pnp_protocol: zawiera funkcje pomocnika IoT Plug and Play:

  • PnP_CreateReportedProperty
  • PnP_CreateReportedPropertyWithStatus
  • PnP_ParseCommandName
  • PnP_CreateTelemetryMessageHandle
  • PnP_ProcessTwinData
  • PnP_CopyPayloadToString
  • PnP_CreateDeviceClientLLHandle_ViaDps

Te funkcje pomocnicze są wystarczająco ogólne, aby używać ich we własnym projekcie. W tym przykładzie użyto ich w trzech plikach odpowiadających każdemu składnikowi w modelu:

  • pnp_deviceinfo_component
  • pnp_temperature_controller
  • pnp_thermostat_component

Na przykład w pliku SendReportedPropertyForDeviceInformation pnp_deviceinfo_component funkcja używa dwóch funkcji pomocnika:

if ((jsonToSend = PnP_CreateReportedProperty(componentName, propertyName, propertyValue)) == NULL)
{
    LogError("Unable to build reported property response for propertyName=%s, propertyValue=%s", propertyName, propertyValue);
}
else
{
    const char* jsonToSendStr = STRING_c_str(jsonToSend);
    size_t jsonToSendStrLen = strlen(jsonToSendStr);

    if ((iothubClientResult = IoTHubDeviceClient_LL_SendReportedState(deviceClientLL, (const unsigned char*)jsonToSendStr, jsonToSendStrLen, NULL, NULL)) != IOTHUB_CLIENT_OK)
    {
        LogError("Unable to send reported state for property=%s, error=%d", propertyName, iothubClientResult);
    }
    else
    {
        LogInfo("Sending device information property to IoTHub.  propertyName=%s, propertyValue=%s", propertyName, propertyValue);
    }
}

Każdy składnik w przykładzie jest zgodny z tym wzorcem.

Przepływ kodu

Funkcja main inicjuje połączenie i wysyła identyfikator modelu:

deviceClient = CreateDeviceClientAndAllocateComponents();

Kod służy PnP_CreateDeviceClientLLHandle do nawiązywania połączenia z centrum IoT Hub, ustawiania modelId jako opcji i konfigurowania metody urządzenia i obsługi wywołania zwrotnego bliźniaczej reprezentacji urządzenia dla metod bezpośrednich i aktualizacji bliźniaczej reprezentacji urządzenia:

g_pnpDeviceConfiguration.deviceMethodCallback = PnP_TempControlComponent_DeviceMethodCallback;
g_pnpDeviceConfiguration.deviceTwinCallback = PnP_TempControlComponent_DeviceTwinCallback;
g_pnpDeviceConfiguration.modelId = g_temperatureControllerModelId;
...

deviceClient = PnP_CreateDeviceClientLLHandle(&g_pnpDeviceConfiguration);

&g_pnpDeviceConfiguration zawiera również informacje o połączeniu. Zmienna środowiskowa IOTHUB_DEVICE_SECURITY_TYPE określa, czy przykład używa parametry połączenia, czy usługi aprowizacji urządzeń w celu nawiązania połączenia z centrum IoT.

Gdy urządzenie wyśle identyfikator modelu, stanie się urządzeniem IoT Plug and Play.

Gdy są dostępne programy obsługi wywołania zwrotnego, urządzenie reaguje na aktualizacje bliźniaczej reprezentacji i wywołania metody bezpośredniej:

  • W przypadku wywołania zwrotnego PnP_TempControlComponent_DeviceTwinCallback bliźniaczej reprezentacji urządzenia funkcja wywołuje PnP_ProcessTwinData funkcję do przetwarzania danych. PnP_ProcessTwinDataużywa wzorca odwiedzających, aby przeanalizować kod JSON, a następnie odwiedzić każdą właściwość, wywołując PnP_TempControlComponent_ApplicationPropertyCallback poszczególne elementy.

  • W przypadku wywołań zwrotnych PnP_TempControlComponent_DeviceMethodCallback poleceń funkcja używa funkcji pomocnika do analizowania nazw poleceń i składników:

    PnP_ParseCommandName(methodName, &componentName, &componentNameSize, &pnpCommandName);
    

    Następnie PnP_TempControlComponent_DeviceMethodCallback funkcja wywołuje polecenie w składniku:

    LogInfo("Received PnP command for component=%.*s, command=%s", (int)componentNameSize, componentName, pnpCommandName);
    if (strncmp((const char*)componentName, g_thermostatComponent1Name, g_thermostatComponent1Size) == 0)
    {
        result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle1, pnpCommandName, rootValue, response, responseSize);
    }
    else if (strncmp((const char*)componentName, g_thermostatComponent2Name, g_thermostatComponent2Size) == 0)
    {
        result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle2, pnpCommandName, rootValue, response, responseSize);
    }
    else
    {
        LogError("PnP component=%.*s is not supported by TemperatureController", (int)componentNameSize, componentName);
        result = PNP_STATUS_NOT_FOUND;
    }
    

Funkcja main inicjuje właściwości tylko do odczytu wysyłane do centrum IoT:

PnP_TempControlComponent_ReportSerialNumber_Property(deviceClient);
PnP_DeviceInfoComponent_Report_All_Properties(g_deviceInfoComponentName, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle1, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle2, deviceClient);

Funkcja main wprowadza pętlę w celu zaktualizowania zdarzeń i danych telemetrycznych dla każdego składnika:

while (true)
{
    PnP_TempControlComponent_SendWorkingSet(deviceClient);
    PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle1, deviceClient);
    PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle2, deviceClient);
}

Funkcja PnP_ThermostatComponent_SendTelemetry pokazuje, jak używać PNP_THERMOSTAT_COMPONENT struktury. W przykładzie użyto tej struktury do przechowywania informacji o dwóch termostatach w kontrolerze temperatury. Kod używa PnP_CreateTelemetryMessageHandle funkcji do przygotowania komunikatu i wysłania go:

messageHandle = PnP_CreateTelemetryMessageHandle(pnpThermostatComponent->componentName, temperatureStringBuffer);
...
iothubResult = IoTHubDeviceClient_LL_SendEventAsync(deviceClientLL, messageHandle, NULL, NULL);

Funkcja main ostatecznie niszczy różne składniki i zamyka połączenie z koncentratorem.

W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana w języku C# i jest zawarta w zestawie SDK urządzenia usługi Azure IoT dla języka C#. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.

Przeglądaj kod

W tym samouczku zostały wykonane następujące czynności:

  • Pobierz przykładowy kod.
  • Skompiluj przykładowy kod.
  • Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
  • Przejrzyj kod źródłowy.

Wymagania wstępne

Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.

Ten samouczek można uruchomić w systemie Linux lub Windows. Polecenia powłoki w tym samouczku są zgodne z konwencją systemu Linux dla separatorów ścieżek "/", jeśli obserwujesz w systemie Windows, pamiętaj, aby zamienić te separatory na "\".

Klonowanie repozytorium zestawu SDK przy użyciu przykładowego kodu

Jeśli ukończono Samouczek: Połączenie przykładową aplikację urządzenia IoT Plug and Play działającą w systemie Windows do usługi IoT Hub (C#),sklonujesz już repozytorium.

Sklonuj przykłady z repozytorium GitHub dla usługi Azure IoT Samples for C#. Otwórz wiersz polecenia w wybranym folderze. Uruchom następujące polecenie, aby sklonować repozytorium GitHub zestawu MICROSOFT Azure IoT SDK dla platformy .NET :

git clone https://github.com/Azure/azure-iot-sdk-csharp.git

Kompilowanie kod

Teraz możesz skompilować przykład i uruchomić go. Uruchom następujące polecenia, aby skompilować przykład:

cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/TemperatureController
dotnet build

Uruchamianie przykładu urządzenia

Aby uruchomić przykład, uruchom następujące polecenie:

dotnet run

Urządzenie jest teraz gotowe do odbierania poleceń i aktualizacji właściwości i zaczął wysyłać dane telemetryczne do centrum. Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.

Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT

Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.

  1. Otwórz eksploratora usługi Azure IoT.

  2. Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.

  3. Na stronie IoT Plug and Play Ustawienia wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.

  4. Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.

  5. Kliknij identyfikator urządzenia utworzonego wcześniej.

  6. W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.

  7. Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.

  8. Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.

  9. Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.

  10. Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.

  11. Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.

  12. Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.

  13. Aby wyświetlić nową wartość, wybierz przycisk Odśwież .

  14. Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.

  15. Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.

Przeglądanie kodu

Ten przykład implementuje urządzenie kontrolera temperatury IoT Plug and Play. Model, który ten przykład implementuje, używa wielu składników. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.

Kod urządzenia łączy się z centrum IoT Hub przy użyciu standardowej CreateFromConnectionString metody. Urządzenie wysyła identyfikator modelu modelu DTDL, który implementuje w żądaniu połączenia. Urządzenie, które wysyła identyfikator modelu, to urządzenie IoT Plug and Play:

private static DeviceClient InitializeDeviceClient(string hostname, IAuthenticationMethod authenticationMethod)
{
    var options = new ClientOptions
    {
        ModelId = ModelId,
    };

    var deviceClient = DeviceClient.Create(hostname, authenticationMethod, TransportType.Mqtt, options);
    deviceClient.SetConnectionStatusChangesHandler((status, reason) =>
    {
        s_logger.LogDebug($"Connection status change registered - status={status}, reason={reason}.");
    });

    return deviceClient;
}

Identyfikator modelu jest przechowywany w kodzie, jak pokazano w poniższym fragmencie kodu:

private const string ModelId = "dtmi:com:example:TemperatureController;1";

Po nawiązaniu połączenia urządzenia z centrum IoT kod rejestruje programy obsługi poleceń. Polecenie reboot jest definiowane w składniku domyślnym. Polecenie getMaxMinReport jest definiowane w każdym z dwóch składników termostatu:

await _deviceClient.SetMethodHandlerAsync("reboot", HandleRebootCommandAsync, _deviceClient, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat1*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat1, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat2*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat2, cancellationToken);

Istnieją oddzielne programy obsługi dla żądanych aktualizacji właściwości na dwóch składnikach termostatu:

_desiredPropertyUpdateCallbacks.Add(Thermostat1, TargetTemperatureUpdateCallbackAsync);
_desiredPropertyUpdateCallbacks.Add(Thermostat2, TargetTemperatureUpdateCallbackAsync);

Przykładowy kod wysyła dane telemetryczne z każdego składnika termostatu:

await SendTemperatureAsync(Thermostat1, cancellationToken);
await SendTemperatureAsync(Thermostat2, cancellationToken);

Metoda SendTemperatureTelemetryAsync używa PnpHhelper klasy do tworzenia komunikatów dla każdego składnika:

using Message msg = PnpHelper.CreateIothubMessageUtf8(telemetryName, JsonConvert.SerializeObject(currentTemperature), componentName);

Klasa PnpHelper zawiera inne przykładowe metody, których można używać z wieloma modelami składników.

Użyj narzędzia Azure IoT Explorer, aby wyświetlić dane telemetryczne i właściwości z dwóch składników termostatu:

Urządzenie z wieloma składnikami w eksploratorze usługi Azure IoT

Za pomocą narzędzia Eksplorator usługi Azure IoT można również wywoływać polecenia w jednym z dwóch składników termostatu lub w składniku domyślnym.

W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana w języku Java i jest zawarta w zestawie SDK urządzenia usługi Azure IoT dla języka Java. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.

Przeglądaj kod

W tym samouczku zostały wykonane następujące czynności:

  • Pobierz przykładowy kod.
  • Skompiluj przykładowy kod.
  • Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
  • Przejrzyj kod źródłowy.

Wymagania wstępne

Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.

Ten samouczek można uruchomić w systemie Linux lub Windows. Polecenia powłoki w tym samouczku są zgodne z konwencją systemu Linux dla separatorów ścieżek "/", jeśli obserwujesz w systemie Windows, pamiętaj, aby zamienić te separatory na "\".

Aby ukończyć ten samouczek, zainstaluj następujące oprogramowanie w lokalnym środowisku programistycznym:

Pobieranie kodu

Jeśli ukończono Samouczek: Połączenie przykładową aplikację urządzenia IoT Plug and Play do usługi IoT Hub (Java), sklonowaliśmy już repozytorium.

Otwórz wiersz polecenia w wybranym katalogu. Wykonaj następujące polecenie, aby sklonować repozytorium GitHub zestawów SDK i bibliotek Java usługi Azure IoT do tej lokalizacji:

git clone https://github.com/Azure/azure-iot-sdk-java.git

Spodziewaj się, że wykonanie tej operacji potrwa kilka minut.

Kompilowanie kod

Przejdź do folderu głównego przykładu kontrolera temperatury w sklonowanym repozytorium zestawu Java SDK i skompiluj go:

cd azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample
mvn clean package

Uruchamianie przykładu urządzenia

W obszarze Konfigurowanie środowiska utworzono cztery zmienne środowiskowe w celu skonfigurowania przykładu pod kątem używania usługi Device Provisioning Service (DPS) do nawiązywania połączenia z centrum IoT:

  • IOTHUB_DEVICE_SECURITY_TYPE z wartościąDPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE z zakresem identyfikatora usługi DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID z wartością my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY przy użyciu klucza podstawowego rejestracji.
  • IOTHUB_DEVICE_DPS_ENDPOINT z wartością global.azure-devices-provisioning.net.

Aby uruchomić przykładową aplikację, przejdź do folderu /device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample i uruchom następujące polecenie:

mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.device.TemperatureController"

Urządzenie jest teraz gotowe do odbierania poleceń i aktualizacji właściwości i zaczął wysyłać dane telemetryczne do centrum. Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.

Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT

Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.

  1. Otwórz eksploratora usługi Azure IoT.

  2. Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.

  3. Na stronie IoT Plug and Play Ustawienia wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.

  4. Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.

  5. Kliknij identyfikator urządzenia utworzonego wcześniej.

  6. W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.

  7. Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.

  8. Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.

  9. Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.

  10. Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.

  11. Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.

  12. Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.

  13. Aby wyświetlić nową wartość, wybierz przycisk Odśwież .

  14. Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.

  15. Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.

Przeglądanie kodu

Ten przykład implementuje urządzenie kontrolera temperatury IoT Plug and Play. Model, który ten przykład implementuje, używa wielu składników. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.

Kod urządzenia używa klasy standardowej DeviceClient do nawiązywania połączenia z centrum IoT Hub. Urządzenie wysyła identyfikator modelu modelu DTDL, który implementuje w żądaniu połączenia. Urządzenie, które wysyła identyfikator modelu, to urządzenie IoT Plug and Play:

private static void initializeDeviceClient() throws URISyntaxException, IOException {
    ClientOptions options = new ClientOptions();
    options.setModelId(MODEL_ID);
    deviceClient = new DeviceClient(deviceConnectionString, protocol, options);

    deviceClient.registerConnectionStatusChangeCallback((status, statusChangeReason, throwable, callbackContext) -> {
        log.debug("Connection status change registered: status={}, reason={}", status, statusChangeReason);

        if (throwable != null) {
            log.debug("The connection status change was caused by the following Throwable: {}", throwable.getMessage());
            throwable.printStackTrace();
        }
    }, deviceClient);

    deviceClient.open();
}

Identyfikator modelu jest przechowywany w kodzie, jak pokazano w poniższym fragmencie kodu:

private static final String MODEL_ID = "dtmi:com:example:Thermostat;1";

Po nawiązaniu połączenia urządzenia z centrum IoT kod rejestruje programy obsługi poleceń.

deviceClient.subscribeToDeviceMethod(new MethodCallback(), null, new MethodIotHubEventCallback(), null);

Istnieją oddzielne programy obsługi dla żądanych aktualizacji właściwości na dwóch składnikach termostatu:

deviceClient.startDeviceTwin(new TwinIotHubEventCallback(), null, new GenericPropertyUpdateCallback(), null);
Map<Property, Pair<TwinPropertyCallBack, Object>> desiredPropertyUpdateCallback = Stream.of(
        new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
                new Property(THERMOSTAT_1, null),
                new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_1)),
        new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
                new Property(THERMOSTAT_2, null),
                new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_2))
).collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue));

deviceClient.subscribeToTwinDesiredProperties(desiredPropertyUpdateCallback);

Przykładowy kod wysyła dane telemetryczne z każdego składnika termostatu:

sendTemperatureReading(THERMOSTAT_1);
sendTemperatureReading(THERMOSTAT_2);

Metoda sendTemperatureReading używa PnpHhelper klasy do tworzenia komunikatów dla każdego składnika:

Message message = PnpHelper.createIotHubMessageUtf8(telemetryName, currentTemperature, componentName);

Klasa PnpHelper zawiera inne przykładowe metody, których można używać z wieloma modelami składników.

Użyj narzędzia Azure IoT Explorer, aby wyświetlić dane telemetryczne i właściwości z dwóch składników termostatu:

Urządzenie z wieloma składnikami w eksploratorze usługi Azure IoT

Za pomocą narzędzia Eksplorator usługi Azure IoT można również wywoływać polecenia w jednym z dwóch składników termostatu lub w składniku domyślnym.

W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana dla Node.js i jest zawarta w zestawie SDK urządzenia usługi Azure IoT Hub dla Node.js. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.

Przeglądaj kod

W tym samouczku zostały wykonane następujące czynności:

  • Pobierz przykładowy kod.
  • Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
  • Przejrzyj kod źródłowy.

Wymagania wstępne

Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.

Aby ukończyć ten samouczek, musisz Node.js na komputerze deweloperskim. Najnowszą zalecaną wersję dla wielu platform można pobrać z nodejs.org.

Możesz sprawdzić bieżącą wersję środowiska Node.js na komputerze deweloperskim przy użyciu następującego polecenia:

node --version

Pobieranie kodu

Jeśli ukończono Samouczek: Połączenie przykładową aplikację urządzenia IoT Plug and Play działającą w systemie Windows do usługi IoT Hub (Node) zostało już sklonowane repozytorium.

Otwórz wiersz polecenia w wybranym katalogu. Wykonaj następujące polecenie, aby sklonować zestaw SDK usługi Microsoft Azure IoT dla repozytorium Node.js GitHub do tej lokalizacji:

git clone https://github.com/Azure/azure-iot-sdk-node

Instalowanie wymaganych bibliotek

Zestaw SDK urządzenia służy do kompilowania dołączonego przykładowego kodu. Utworzona aplikacja symuluje urządzenie Plug and Play z wieloma składnikami, które łączą się z centrum IoT. Aplikacja wysyła dane telemetryczne i właściwości i odbiera polecenia.

  1. W lokalnym oknie terminalu przejdź do folderu sklonowanego repozytorium i przejdź do folderu /azure-iot-sdk-node/device/samples/javascript . Następnie uruchom następujące polecenie, aby zainstalować wymagane biblioteki:
npm install

To polecenie instaluje odpowiednie pliki npm wymagane do uruchomienia przykładów w folderze.

Przeglądanie kodu

Przejdź do folderu azure-iot-sdk-node/device/samples/javascript .

Folder azure-iot-sdk-node/device/samples/javascript zawiera przykładowy kod urządzenia kontrolera temperatury IoT Plug and Play.

Kod w pliku pnp_temperature_controller.js implementuje urządzenie kontrolera temperatury IoT Plug and Play. Model, który ten przykład implementuje, używa wielu składników. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.

Otwórz plik pnp_temperature_controller.js w wybranym edytorze kodu. Przykładowy kod pokazuje, jak:

  • Zdefiniuj element modelId DTMI dla wdrażanych urządzeń. Ten element DTMI jest zdefiniowany przez użytkownika i musi być zgodny z dtMI modelu DTDL kontrolera temperatury.

  • Zaimplementuj składniki zdefiniowane w modelu DTDL kontrolera temperatury. Składniki w rzeczywistym kontrolerze temperatury powinny implementować te dwa interfejsy. Te dwa interfejsy są już publikowane w centralnym repozytorium. W tym przykładzie dwa interfejsy to:

    • Termostat
    • Informacje o urządzeniu opracowane przez platformę Azure
  • Zdefiniuj nazwy składników. Ten przykład zawiera dwa termostaty i jeden składnik informacyjny urządzenia.

  • Zdefiniuj nazwy poleceń, na które odpowiada urządzenie.

  • Zdefiniuj stałą serialNumber . Element serialNumber jest stały dla każdego danego urządzenia.

  • Zdefiniuj programy obsługi poleceń.

  • Zdefiniuj funkcje do wysyłania odpowiedzi poleceń.

  • Definiowanie funkcji pomocnika w celu rejestrowania żądań poleceń.

  • Zdefiniuj funkcję pomocnika, aby utworzyć właściwości.

  • Zdefiniuj odbiornik aktualizacji właściwości.

  • Zdefiniuj funkcję do wysyłania danych telemetrycznych z tego urządzenia. Zarówno termostaty, jak i domyślny składnik wysyłają dane telemetryczne. Ta funkcja otrzymuje nazwę składnika jako parametr.

  • Zdefiniuj main funkcję, która:

    • Używa zestawu SDK urządzenia do tworzenia klienta urządzenia i nawiązywania połączenia z centrum IoT Hub. Urządzenie dostarcza modelId urządzenie, aby usługa IoT Hub mogła zidentyfikować urządzenie jako urządzenie IoT Plug and Play.

    • Uruchamia nasłuchiwanie żądań poleceń przy użyciu onDeviceMethod funkcji . Funkcja konfiguruje odbiornik dla żądań poleceń z usługi:

      • Kod DTDL urządzenia definiuje reboot polecenia i getMaxMinReport .
      • Funkcja commandHandler definiuje sposób, w jaki urządzenie reaguje na polecenie.
    • Rozpoczyna wysyłanie danych telemetrycznych przy użyciu metod setInterval i sendTelemetry.

    • Używa funkcji do utworzenia helperCreateReportedPropertiesPatch właściwości i updateComponentReportedProperties właściwości , aby zaktualizować właściwości.

    • Służy desiredPropertyPatchListener do nasłuchiwania aktualizacji właściwości.

    • Wyłącza wszystkie odbiorniki i zadania oraz zamyka pętlę po naciśnięciu klawisza Q lub q.

W obszarze Konfigurowanie środowiska utworzono cztery zmienne środowiskowe w celu skonfigurowania przykładu pod kątem używania usługi Device Provisioning Service (DPS) do nawiązywania połączenia z centrum IoT:

  • IOTHUB_DEVICE_SECURITY_TYPE z wartościąDPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE z zakresem identyfikatora usługi DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID z wartością my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY przy użyciu klucza podstawowego rejestracji.
  • IOTHUB_DEVICE_DPS_ENDPOINT z wartością global.azure-devices-provisioning.net.

Aby dowiedzieć się więcej na temat przykładowej konfiguracji, zobacz przykładowy plik readme.

Po wyświetleniu kodu użyj następującego polecenia, aby uruchomić przykład:

node pnp_temperature_controller.js

Zobaczysz następujące dane wyjściowe wskazujące, że urządzenie zaczęło wysyłać dane telemetryczne do centrum i jest teraz gotowe do odbierania poleceń i aktualizacji właściwości.

Komunikaty potwierdzenia urządzenia

Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.

Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT

Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.

  1. Otwórz eksploratora usługi Azure IoT.

  2. Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.

  3. Na stronie IoT Plug and Play Ustawienia wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.

  4. Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.

  5. Kliknij identyfikator urządzenia utworzonego wcześniej.

  6. W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.

  7. Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.

  8. Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.

  9. Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.

  10. Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.

  11. Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.

  12. Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.

  13. Aby wyświetlić nową wartość, wybierz przycisk Odśwież .

  14. Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.

  15. Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.

W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana w języku Python i jest zawarta w zestawie SDK urządzenia usługi Azure IoT dla języka Python. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.

Przeglądaj kod

W tym samouczku zostały wykonane następujące czynności:

  • Pobierz przykładowy kod.
  • Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
  • Przejrzyj kod źródłowy.

Wymagania wstępne

Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.

Ten samouczek można uruchomić w systemie Linux lub Windows. Polecenia powłoki w tym samouczku są zgodne z konwencją systemu Linux dla separatorów ścieżek "/", jeśli obserwujesz w systemie Windows, pamiętaj, aby zamienić te separatory na "\".

Do ukończenia tego samouczka potrzebny jest język Python zainstalowany na komputerze deweloperskim. Zapoznaj się z zestawem SDK języka Python usługi Azure IoT, aby zapoznać się z bieżącymi wymaganiami dotyczącymi wersji języka Python. Możesz sprawdzić wersję języka Python za pomocą następującego polecenia:

python --version

Najnowszą zalecaną wersję dla wielu platform można pobrać z python.org.

Pobieranie kodu

Pakiet azure-iot-device jest publikowany jako pip.

W lokalnym środowisku języka Python zainstaluj pakiet w następujący sposób:

pip install azure-iot-device

Jeśli ukończono Samouczek: Połączenie przykładową aplikację urządzenia IoT Plug and Play działającą w systemie Windows do usługi IoT Hub (Python), sklonowaliśmy już repozytorium.

Sklonuj repozytorium IoT zestawu SDK języka Python:

git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python

Przeglądanie kodu

Ten przykład implementuje urządzenie kontrolera temperatury IoT Plug and Play. Model, który ten przykład implementuje, używa wielu składników. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.

Folder azure-iot-sdk-python/samples/pnp zawiera przykładowy kod urządzenia IoT Plug and Play. Pliki przykładu kontrolera temperatury to:

  • temp_controller_with_thermostats.py
  • pnp_helper.py

Kontroler temperatury ma wiele składników i składnik domyślny oparty na modelu DTDL kontrolera temperatury.

Otwórz plik temp_controller_with_thermostats.py w wybranym edytorze. Kod w tym pliku:

  1. Importy pnp_helper.py umożliwiające uzyskanie dostępu do metod pomocnika.

  2. Definiuje dwa identyfikatory modelu cyfrowej reprezentacji bliźniaczej (DTMI), które jednoznacznie reprezentują dwa różne interfejsy zdefiniowane w modelu DTDL. Składniki w rzeczywistym kontrolerze temperatury powinny implementować te dwa interfejsy. Te dwa interfejsy są już publikowane w centralnym repozytorium. Te interfejsy DTMI muszą być znane użytkownikowi i różnią się w zależności od scenariusza implementacji urządzenia. W przypadku bieżącego przykładu te dwa interfejsy reprezentują:

    • Termostat
    • Informacje o urządzeniu opracowane przez platformę Azure.
  3. Definiuje jednostki DTMI model_id dla wdrażanego urządzenia. DtMI jest definiowany przez użytkownika i musi być zgodny z dtMI w pliku modelu DTDL.

  4. Definiuje nazwy podane składnikom w pliku DTDL. Istnieją dwa termostaty w języku DTDL i jeden składnik informacji o urządzeniu. Stała o nazwie serial_number jest również definiowana w składniku domyślnym. Nie serial_number można zmienić urządzenia.

  5. Definiuje implementacje programu obsługi poleceń. Te programy obsługi definiują, co robi urządzenie, gdy odbiera żądania poleceń.

  6. Definiuje funkcje służące do tworzenia odpowiedzi polecenia. Te funkcje definiują sposób, w jaki urządzenie odpowiada na żądania poleceń. Funkcje odpowiedzi polecenia są tworzone, jeśli polecenie musi wysłać niestandardową odpowiedź z powrotem do centrum IoT. Jeśli funkcja odpowiedzi dla polecenia nie zostanie podana, zostanie wysłana ogólna odpowiedź. W tym przykładzie tylko polecenie getMaxMinReport ma niestandardową odpowiedź.

  7. Definiuje funkcję do wysyłania danych telemetrycznych z tego urządzenia. Zarówno termostaty, jak i składnik domyślny wysyłają dane telemetryczne. Ta funkcja ma opcjonalny parametr nazwy składnika, aby umożliwić mu określenie, który składnik wysłał dane telemetryczne.

  8. Definiuje odbiornik dla żądań poleceń.

  9. Definiuje odbiornik dla aktualizacji żądanych właściwości.

  10. main Ma funkcję, która:

    • Używa zestawu SDK urządzenia do tworzenia klienta urządzenia i nawiązywania połączenia z centrum IoT Hub. Urządzenie wysyła model_id element , aby centrum IoT mogło zidentyfikować urządzenie jako urządzenie IoT Plug and Play.

    • create_reported_properties Używa funkcji w pliku pomocnika do utworzenia właściwości. Przekaż nazwę składnika i właściwości jako pary klucz-wartość do tej funkcji.

    • Aktualizacje czytelne właściwości składników przez wywołanie metody patch_twin_reported_properties.

    • Uruchamia nasłuchiwanie żądań poleceń przy użyciu execute_command_listener funkcji . Funkcja konfiguruje odbiornik dla żądań poleceń z usługi. Podczas konfigurowania odbiornika należy podać method_nameparametr , user_command_handleri opcjonalny create_user_response_handler jako parametry.

      • Element method_name definiuje żądanie polecenia. W tym przykładzie model definiuje polecenia reboot i getMaxMinReport.
      • Funkcja user_command_handler definiuje, co powinno zrobić urządzenie po odebraniu polecenia.
      • Funkcja create_user_response_handler tworzy odpowiedź, która ma zostać wysłana do centrum IoT, gdy polecenie zostanie wykonane pomyślnie. Tę odpowiedź można wyświetlić w portalu. Jeśli ta funkcja nie zostanie podana, do usługi zostanie wysłana ogólna odpowiedź.
    • Służy execute_property_listener do nasłuchiwania aktualizacji właściwości.

    • Rozpoczyna wysyłanie danych telemetrycznych przy użyciu polecenia send_telemetry. Przykładowy kod używa pętli do wywoływania trzech funkcji wysyłania danych telemetrycznych. Każdy z nich jest wywoływany co osiem sekund

    • Wyłącza wszystkie odbiorniki i zadania oraz zamyka pętlę po naciśnięciu klawisza Q lub q.

W obszarze Konfigurowanie środowiska utworzono cztery zmienne środowiskowe w celu skonfigurowania przykładu pod kątem używania usługi Device Provisioning Service (DPS) do nawiązywania połączenia z centrum IoT:

  • IOTHUB_DEVICE_SECURITY_TYPE z wartościąDPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE z zakresem identyfikatora usługi DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID z wartością my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY przy użyciu klucza podstawowego rejestracji.
  • IOTHUB_DEVICE_DPS_ENDPOINT z wartością global.azure-devices-provisioning.net.

Aby dowiedzieć się więcej na temat przykładowej konfiguracji, zobacz przykładowy plik readme.

Użyj następującego polecenia, aby uruchomić przykład:

python temp_controller_with_thermostats.py

Przykładowe urządzenie wysyła komunikaty telemetryczne co kilka sekund do centrum IoT Hub.

Zobaczysz następujące dane wyjściowe, które wskazują, że urządzenie wysyła dane telemetryczne do centrum i jest teraz gotowe do odbierania poleceń i aktualizacji właściwości.

Komunikaty potwierdzenia urządzenia

Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.

Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT

Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.

  1. Otwórz eksploratora usługi Azure IoT.

  2. Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.

  3. Na stronie IoT Plug and Play Ustawienia wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.

  4. Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.

  5. Kliknij identyfikator urządzenia utworzonego wcześniej.

  6. W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.

  7. Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.

  8. Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.

  9. Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.

  10. Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.

  11. Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.

  12. Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.

  13. Aby wyświetlić nową wartość, wybierz przycisk Odśwież .

  14. Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.

  15. Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.

Czyszczenie zasobów

Jeśli planujesz kontynuować dalsze artykuły dla deweloperów urządzeń, możesz zachować i ponownie użyć zasobów używanych w tym artykule. W przeciwnym razie możesz usunąć zasoby utworzone w tym artykule, aby uniknąć dodatkowych opłat.

Możesz usunąć jednocześnie zarówno centrum, jak i zarejestrowane urządzenie, usuwając całą grupę zasobów za pomocą następującego polecenia interfejsu wiersza polecenia platformy Azure. Nie używaj tego polecenia, jeśli te zasoby współużytkują grupę zasobów z innymi zasobami, które chcesz zachować.

az group delete --name <YourResourceGroupName>

Aby usunąć tylko centrum IoT Hub, uruchom następujące polecenie przy użyciu interfejsu wiersza polecenia platformy Azure:

az iot hub delete --name <YourIoTHubName>

Aby usunąć tylko tożsamość urządzenia zarejestrowaną w centrum IoT Hub, uruchom następujące polecenie przy użyciu interfejsu wiersza polecenia platformy Azure:

az iot hub device-identity delete --hub-name <YourIoTHubName> --device-id <YourDeviceID>

Możesz również usunąć sklonowane przykładowe pliki z maszyny deweloperów.

Następne kroki

W tym samouczku przedstawiono sposób łączenia urządzenia IoT Plug and Play ze składnikami centrum IoT Hub. Aby dowiedzieć się więcej o modelach urządzeń usługi IoT Plug and Play, zobacz: