Samouczek: interakcja z urządzeniem IoT Plug and Play połączonym z rozwiązaniem

Usługa IoT Plug and Play upraszcza IoT, umożliwiając interakcję z możliwościami urządzenia bez znajomości podstawowej implementacji urządzenia. W tym samouczku pokazano, jak używać języka C# do nawiązywania połączenia z urządzeniem IoT Plug and Play połączonym z rozwiązaniem i sterowania nim.

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 zestawu Azure IoT SDK dla języka 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 kodu urządzenia

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

cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/Thermostat
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.

Uruchamianie przykładowego rozwiązania

W temacie Konfigurowanie środowiska dla przewodników Szybki start i samouczków dotyczących usługi IoT Plug and Play utworzono dwie zmienne środowiskowe w celu skonfigurowania przykładu w celu nawiązania połączenia z centrum IoT:

  • IOTHUB_CONNECTION_STRING: centrum IoT hub parametry połączenia zanotował wcześniej.
  • IOTHUB_DEVICE_ID: "my-pnp-device".

W tym samouczku użyjesz przykładowego rozwiązania IoT napisanego w języku C# do interakcji z właśnie skonfigurowanym i uruchomionym urządzeniem przykładowym.

  1. W innym oknie terminalu przejdź do folderu azure-iot-sdk-csharp/iothub/service/samples/solutions/PnpServiceSamples/Thermostat .

  2. Uruchom następujące polecenie, aby skompilować przykładową usługę:

    dotnet build
    
  3. Uruchom następujące polecenie, aby uruchomić przykładową usługę:

    dotnet run
    

Pobieranie bliźniaczej reprezentacji urządzenia

Poniższy fragment kodu przedstawia sposób pobierania bliźniaczej reprezentacji urządzenia przez aplikację usługi:

// Get a Twin and retrieves model Id set by Device client
Twin twin = await s_registryManager.GetTwinAsync(s_deviceId);
s_logger.LogDebug($"Model Id of this Twin is: {twin.ModelId}");

Uwaga

W tym przykładzie użyto przestrzeni nazw Microsoft.Azure.Devices.Client z klienta usługi IoT Hub. Aby dowiedzieć się więcej na temat interfejsów API, w tym interfejsu API cyfrowych reprezentacji bliźniaczych, zobacz przewodnik dewelopera usługi.

Ten kod generuje następujące dane wyjściowe:

[09/21/2020 11:26:04]dbug: Thermostat.Program[0]
      Model Id of this Twin is: dtmi:com:example:Thermostat;1

Poniższy fragment kodu pokazuje, jak za pomocą poprawki zaktualizować właściwości za pośrednictwem bliźniaczej reprezentacji urządzenia:

// Update the twin
var twinPatch = new Twin();
twinPatch.Properties.Desired[PropertyName] = PropertyValue;
await s_registryManager.UpdateTwinAsync(s_deviceId, twinPatch, twin.ETag);

Ten kod generuje następujące dane wyjściowe z urządzenia, gdy usługa aktualizuje targetTemperature właściwość:

[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
      Property: Received - { "targetTemperature": 60°C }.
[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
      Property: Update - {"targetTemperature": 60°C } is InProgress.

...

[09/21/2020 11:26:17]dbug: Thermostat.ThermostatSample[0]
      Property: Update - {"targetTemperature": 60°C } is Completed.

Wywoływanie polecenia

Poniższy fragment kodu pokazuje, jak wywołać polecenie:

private static async Task InvokeCommandAsync()
{
    var commandInvocation = new CloudToDeviceMethod(CommandName) { ResponseTimeout = TimeSpan.FromSeconds(30) };

    // Set command payload
    string componentCommandPayload = JsonConvert.SerializeObject(s_dateTime);
    commandInvocation.SetPayloadJson(componentCommandPayload);

    CloudToDeviceMethodResult result = await s_serviceClient.InvokeDeviceMethodAsync(s_deviceId, commandInvocation);

    if (result == null)
    {
        throw new Exception($"Command {CommandName} invocation returned null");
    }

    s_logger.LogDebug($"Command {CommandName} invocation result status is: {result.Status}");
}

Ten kod generuje następujące dane wyjściowe z urządzenia, gdy usługa wywołuje getMaxMinReport polecenie:

[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
      Command: Received - Generating max, min and avg temperature report since 21/09/2020 11:25:58.
[09/21/2020 11:26:05]dbug: Thermostat.ThermostatSample[0]
      Command: MaxMinReport since 21/09/2020 11:25:58: maxTemp=32, minTemp=32, avgTemp=32, startTime=21/09/2020 11:25:59, endTime=21/09/2020 11:26:04

Usługa IoT Plug and Play upraszcza IoT, umożliwiając interakcję z możliwościami urządzenia bez znajomości podstawowej implementacji urządzenia. W tym samouczku pokazano, jak za pomocą języka Java nawiązać połączenie z urządzeniem IoT Plug and Play połączonym z rozwiązaniem i sterować nim.

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:

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 (Java), sklonowaliśmy już repozytorium.

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

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

Kompilowanie i uruchamianie przykładowego urządzenia

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

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

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.

W folderze /device/iot-device-samples/pnp-device-sample/termostat-device-sample uruchom aplikację:

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

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.

Uruchamianie przykładowego rozwiązania

W temacie Konfigurowanie środowiska dla przewodników Szybki start i samouczków dotyczących usługi IoT Plug and Play utworzono dwie zmienne środowiskowe w celu skonfigurowania przykładu w celu nawiązania połączenia z centrum IoT:

  • IOTHUB_CONNECTION_STRING: centrum IoT hub parametry połączenia zanotował wcześniej.
  • IOTHUB_DEVICE_ID: "my-pnp-device".

W tym samouczku użyjesz przykładowego rozwiązania IoT napisanego w języku Java do interakcji z właśnie skonfigurowanym przykładowym urządzeniem.

Uwaga

W tym przykładzie użyto przestrzeni nazw com.microsoft.azure.sdk.iot.service z klienta usługi IoT Hub. Aby dowiedzieć się więcej na temat interfejsów API, w tym interfejsu API cyfrowych reprezentacji bliźniaczych, zobacz przewodnik dewelopera usługi.

  1. Otwórz inne okno terminalu, aby użyć go jako terminalu usługi .

  2. W sklonowanym repozytorium zestawu Java SDK przejdź do folderu service/iot-service-samples/pnp-service-sample/termostat-service-sample .

  3. Aby skompilować i uruchomić przykładową aplikację usługi, uruchom następujące polecenia:

    mvn clean package
    mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.service.Thermostat"
    

Pobieranie bliźniaczej reprezentacji urządzenia

Poniższy fragment kodu przedstawia sposób pobierania bliźniaczej reprezentacji urządzenia w usłudze:

 // Get the twin and retrieve model Id set by Device client.
DeviceTwinDevice twin = new DeviceTwinDevice(deviceId);
twinClient.getTwin(twin);
System.out.println("Model Id of this Twin is: " + twin.getModelId());

Aktualizowanie bliźniaczej reprezentacji urządzenia

Poniższy fragment kodu pokazuje, jak za pomocą poprawki zaktualizować właściwości za pośrednictwem bliźniaczej reprezentacji urządzenia:

String propertyName = "targetTemperature";
double propertyValue = 60.2;
twin.setDesiredProperties(Collections.singleton(new Pair(propertyName, propertyValue)));
twinClient.updateTwin(twin);

Dane wyjściowe urządzenia pokazują, jak urządzenie reaguje na tę aktualizację właściwości.

Wywoływanie polecenia

Poniższy fragment kodu przedstawia wywołanie polecenia na urządzeniu:

// The method to invoke for a device without components should be "methodName" as defined in the DTDL.
String methodToInvoke = "getMaxMinReport";
System.out.println("Invoking method: " + methodToInvoke);

Long responseTimeout = TimeUnit.SECONDS.toSeconds(200);
Long connectTimeout = TimeUnit.SECONDS.toSeconds(5);

// Invoke the command.
String commandInput = ZonedDateTime.now(ZoneOffset.UTC).minusMinutes(5).format(DateTimeFormatter.ISO_DATE_TIME);
MethodResult result = methodClient.invoke(deviceId, methodToInvoke, responseTimeout, connectTimeout, commandInput);
if(result == null)
{
    throw new IOException("Method result is null");
}

System.out.println("Method result status is: " + result.getStatus());

Dane wyjściowe urządzenia pokazują, jak urządzenie reaguje na to polecenie.

Usługa IoT Plug and Play upraszcza IoT, umożliwiając interakcję z możliwościami urządzenia bez znajomości podstawowej implementacji urządzenia. W tym samouczku pokazano, jak używać Node.js do nawiązywania połączenia z urządzeniem IoT Plug and Play połączonym z rozwiązaniem i sterowania nim.

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

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

Sklonuj przykłady z repozytorium zestawu Node SDK. Otwórz okno terminalu w wybranym folderze. Uruchom następujące polecenie, aby sklonować zestaw MICROSOFT Azure IoT SDK dla repozytorium Node.js GitHub:

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

Uruchamianie przykładowego 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 dowiedzieć się więcej na temat przykładowej konfiguracji, zobacz przykładowy plik readme.

W tym samouczku użyjesz przykładowego urządzenia termostatu napisanego w Node.js jako urządzenia IoT Plug and Play. Aby uruchomić przykładowe urządzenie:

  1. Otwórz okno terminalu i przejdź do folderu lokalnego zawierającego zestaw SDK usługi Microsoft Azure IoT dla repozytorium Node.js sklonowanego z usługi GitHub.

  2. To okno terminalu jest używane jako terminal urządzenia . Przejdź do folderu sklonowanego repozytorium i przejdź do folderu /azure-iot-sdk-node/device/samples/javascript . Zainstaluj wszystkie zależności, uruchamiając następujące polecenie:

    npm install
    
  3. Uruchom przykładowe urządzenie termostatu za pomocą następującego polecenia:

    node pnp_simple_thermostat.js
    
  4. Zostaną wyświetlone komunikaty z informacją, że urządzenie wysłało pewne informacje i zgłosiło się w trybie online. Te komunikaty wskazują, że urządzenie zaczęło wysyłać dane telemetryczne do centrum i jest teraz gotowe do odbierania poleceń i aktualizacji właściwości. Nie zamykaj tego terminalu, musisz upewnić się, że przykład usługi działa.

Uruchamianie przykładowego rozwiązania

W temacie Konfigurowanie środowiska dla przewodników Szybki start i samouczków dotyczących usługi IoT Plug and Play utworzono dwie zmienne środowiskowe w celu skonfigurowania przykładu w celu nawiązania połączenia z centrum IoT:

  • IOTHUB_CONNECTION_STRING: centrum IoT hub parametry połączenia zanotował wcześniej.
  • IOTHUB_DEVICE_ID: "my-pnp-device".

W tym samouczku użyjesz przykładowego rozwiązania Node.js IoT do interakcji z właśnie skonfigurowanym i uruchomionym urządzeniem przykładowym.

  1. Otwórz inne okno terminalu, aby użyć go jako terminalu usługi .

  2. W sklonowanym repozytorium zestawu Node SDK przejdź do folderu azure-iot-sdk-node/service/samples/javascript . Zainstaluj wszystkie zależności, uruchamiając następujące polecenie:

    npm install
    

Odczytywanie właściwości

  1. Po uruchomieniu przykładowego urządzenia termostatu w terminalu urządzenia zobaczysz następujące komunikaty wskazujące jego stan online:

    properties have been reported for component
    sending telemetry message 0...
    
  2. Przejdź do terminalu usługi i użyj następującego polecenia, aby uruchomić przykład na potrzeby odczytywania informacji o urządzeniu:

    node twin.js
    
  3. W danych wyjściowych terminalu usługi zwróć uwagę na odpowiedź bliźniaczej reprezentacji urządzenia. Zostanie wyświetlony identyfikator modelu urządzenia i zgłoszone skojarzone właściwości:

    Model Id: dtmi:com:example:Thermostat;1
    {
      "deviceId": "my-pnp-device",
      "etag": "AAAAAAAAAAE=",
      "deviceEtag": "Njc3MDMxNDcy",
      "status": "enabled",
      "statusUpdateTime": "0001-01-01T00:00:00Z",
      "connectionState": "Connected",
      "lastActivityTime": "0001-01-01T00:00:00Z",
      "cloudToDeviceMessageCount": 0,
      "authenticationType": "sas",
      "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
      },
      "modelId": "dtmi:com:example:Thermostat;1",
      "version": 4,
      "properties": {
        "desired": {
          "$metadata": {
            "$lastUpdated": "2020-10-05T11:35:19.4574755Z"
          },
          "$version": 1
        },
        "reported": {
          "maxTempSinceLastReboot": 31.343640523762232,
          "serialNumber": "123abc",
          "$metadata": {
            "$lastUpdated": "2020-10-05T11:35:23.7339042Z",
            "maxTempSinceLastReboot": {
              "$lastUpdated": "2020-10-05T11:35:23.7339042Z"
            },
            "serialNumber": {
              "$lastUpdated": "2020-10-05T11:35:23.7339042Z"
            }
          },
          "$version": 3
        }
      },
      "capabilities": {
        "iotEdge": false
      },
      "tags": {}
    }
    
  4. Poniższy fragment kodu przedstawia kod w twin.js , który pobiera identyfikator modelu bliźniaczej reprezentacji urządzenia:

    var registry = Registry.fromConnectionString(connectionString);
    registry.getTwin(deviceId, function(err, twin) {
      if (err) {
        console.error(err.message);
      } else {
        console.log('Model Id: ' + twin.modelId);
        //...
      }
      //...
    }
    

W tym scenariuszu zwraca wartość .Model Id: dtmi:com:example:Thermostat;1

Uwaga

Te przykłady usług używają klasy Registry z klienta usługi IoT Hub. Aby dowiedzieć się więcej na temat interfejsów API, w tym interfejsu API cyfrowych reprezentacji bliźniaczych, zobacz przewodnik dewelopera usługi.

Aktualizowanie właściwości zapisywalnej

  1. Otwórz plik twin.js w edytorze kodu.

  2. Zapoznaj się z przykładowym kodem, który pokazuje dwa sposoby aktualizowania bliźniaczej reprezentacji urządzenia. Aby użyć pierwszej metody, zmodyfikuj zmienną twinPatch w następujący sposób:

    var twinPatch = {
      tags: {
        city: "Redmond"
      },
      properties: {
        desired: {
          targetTemperature: 42
        }
      }
    };
    

    Właściwość targetTemperature jest definiowana jako właściwość zapisywalna w modelu urządzenia Termostat.

  3. W terminalu usługi użyj następującego polecenia, aby uruchomić przykład aktualizacji właściwości:

    node twin.js
    
  4. W terminalu urządzenia zobaczysz, że urządzenie otrzymało aktualizację:

    The following properties will be updated for the default component:
    {
      targetTemperature: {
        value: 42,
        ac: 200,
        ad: 'Successfully executed patch for targetTemperature',
        av: 2
      }
    }
    updated the property
    
  5. W terminalu usługi uruchom następujące polecenie, aby potwierdzić, że właściwość została zaktualizowana:

    node twin.js
    
  6. W danych wyjściowych terminalu reported usługi w sekcji właściwości zostanie wyświetlona zaktualizowana temperatura docelowa zgłoszona. Ukończenie aktualizacji na urządzeniu może zająć trochę czasu. Powtórz ten krok, aż urządzenie przetworzy aktualizację właściwości:

    "reported": {
      //...
      "targetTemperature": {
        "value": 42,
        "ac": 200,
        "ad": "Successfully executed patch for targetTemperature",
        "av": 4
      },
      //...
    }
    

Wywoływanie polecenia

  1. Otwórz plik device_method.js i przejrzyj kod.

  2. Przejdź do terminalu usługi . Użyj następującego polecenia, aby uruchomić przykład w celu wywołania polecenia :

    set IOTHUB_METHOD_NAME=getMaxMinReport
    set IOTHUB_METHOD_PAYLOAD=commandpayload
    node device_method.js
    
  3. Dane wyjściowe w terminalu usługi zawierają następujące potwierdzenie:

    getMaxMinReport on my-pnp-device:
    {
      "status": 200,
      "payload": {
        "maxTemp": 23.460596940801928,
        "minTemp": 23.460596940801928,
        "avgTemp": 23.460596940801928,
        "endTime": "2020-10-05T12:48:08.562Z",
        "startTime": "2020-10-05T12:47:54.450Z"
      }
    }
    
  4. W terminalu urządzenia zostanie wyświetlone potwierdzenie polecenia:

    MaxMinReport commandpayload
    Response to method 'getMaxMinReport' sent successfully.
    

Usługa IoT Plug and Play upraszcza IoT, umożliwiając interakcję z modelem urządzenia bez znajomości podstawowej implementacji urządzenia. W tym samouczku pokazano, jak używać języka Python do nawiązywania połączenia z urządzeniem IoT Plug and Play połączonym z rozwiązaniem i kontrolowania go.

Wymagania wstępne

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

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.

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

pip install azure-iot-device

Zainstaluj pakiet azure-iot-hub, uruchamiając następujące polecenie:

pip install azure-iot-hub

Uruchamianie przykładowego 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 dowiedzieć się więcej na temat przykładowej konfiguracji, zobacz przykładowy plik readme.

W tym samouczku użyjesz przykładowego urządzenia termostatu napisanego w języku Python jako urządzenia IoT Plug and Play. Aby uruchomić przykładowe urządzenie:

  1. Otwórz okno terminalu w wybranym folderze. Uruchom następujące polecenie, aby sklonować repozytorium GitHub zestawu SDK języka Python urządzenia usługi Azure IoT do tej lokalizacji:

    git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python
    
  2. To okno terminalu jest używane jako terminal urządzenia . Przejdź do folderu sklonowanego repozytorium i przejdź do folderu azure-iot-sdk-python/samples/pnp .

  3. Uruchom przykładowe urządzenie termostatu za pomocą następującego polecenia:

    python simple_thermostat.py
    
  4. Zostaną wyświetlone komunikaty z informacją, że urządzenie wysłało pewne informacje i zgłosiło się w trybie online. Te komunikaty wskazują, że urządzenie zaczęło wysyłać dane telemetryczne do centrum i jest teraz gotowe do odbierania poleceń i aktualizacji właściwości. Nie zamykaj tego terminalu, musisz upewnić się, że przykład usługi działa.

Uruchamianie przykładowego rozwiązania

W tym samouczku użyjesz przykładowego rozwiązania IoT w języku Python do interakcji z właśnie skonfigurowanym przykładowym urządzeniem.

  1. Otwórz inne okno terminalu, aby użyć go jako terminalu usługi . Uruchom następujące polecenie, aby sklonować repozytorium GitHub zestawu SDK języka Python usługi Azure IoT Hub do tej lokalizacji:

    git clone https://github.com/Azure/azure-iot-hub-python
    
  2. Instalowanie narzędzia

  3. Przejdź do folderu /azure-iot-hub-python/samples sklonowanego repozytorium zestawu SDK języka Python.

  4. Otwórz plik registry_manager_pnp_sample.py i przejrzyj kod. W tym przykładzie pokazano, jak używać klasy IoTHubRegistryManager do interakcji z urządzeniem IoT Plug and Play.

Uwaga

Te przykłady usługi używają klasy IoTHubRegistryManager z klienta usługi IoT Hub. Aby dowiedzieć się więcej na temat interfejsów API, w tym interfejsu API cyfrowych reprezentacji bliźniaczych, zobacz przewodnik dewelopera usługi.

Pobieranie bliźniaczej reprezentacji urządzenia

W temacie Konfigurowanie środowiska dla przewodników Szybki start i samouczków dotyczących usługi IoT Plug and Play utworzono dwie zmienne środowiskowe w celu skonfigurowania przykładu w celu nawiązania połączenia z centrum IoT:

  • IOTHUB_CONNECTION_STRING: centrum IoT hub parametry połączenia zanotował wcześniej.
  • IOTHUB_DEVICE_ID: "my-pnp-device".

Użyj następującego polecenia w terminalu usługi, aby uruchomić ten przykład:

set IOTHUB_METHOD_NAME="getMaxMinReport"
set IOTHUB_METHOD_PAYLOAD="hello world"
python registry_manager_pnp_sample.py

Uwaga

Jeśli używasz tego przykładu w systemie Linux, użyj zamiast set.export

Dane wyjściowe przedstawiają bliźniacze reprezentacje urządzenia i wyświetlają jego identyfikator modelu:

The Model ID for this device is:
dtmi:com:example:Thermostat;1

Poniższy fragment kodu przedstawia przykładowy kod z registry_manager_pnp_sample.py:

    # Create IoTHubRegistryManager
    iothub_registry_manager = IoTHubRegistryManager(iothub_connection_str)

    # Get device twin
    twin = iothub_registry_manager.get_twin(device_id)
    print("The device twin is: ")
    print("")
    print(twin)
    print("")

    # Print the device's model ID
    additional_props = twin.additional_properties
    if "modelId" in additional_props:
        print("The Model ID for this device is:")
        print(additional_props["modelId"])
        print("")

Aktualizowanie bliźniaczej reprezentacji urządzenia

W tym przykładzie pokazano, jak zaktualizować targetTemperature właściwość zapisywalną na urządzeniu:

    # Update twin
    twin_patch = Twin()
    twin_patch.properties = TwinProperties(
        desired={"targetTemperature": 42}
    )  # this is relevant for the thermostat device sample
    updated_twin = iothub_registry_manager.update_twin(device_id, twin_patch, twin.etag)
    print("The twin patch has been successfully applied")
    print("")

Możesz sprawdzić, czy aktualizacja jest stosowana w terminalu urządzenia , w którym są wyświetlane następujące dane wyjściowe:

the data in the desired properties patch was: {'targetTemperature': 42, '$version': 2}

Terminal usługi potwierdza, że poprawka zakończyła się pomyślnie:

The twin patch has been successfully applied

Wywoływanie polecenia

Następnie przykład wywołuje polecenie:

W terminalu usługi jest wyświetlany komunikat potwierdzający z urządzenia:

The device method has been successfully invoked

W terminalu urządzenia zobaczysz, że urządzenie otrzymuje polecenie:

Command request received with payload
hello world
Will return the max, min and average temperature from the specified time hello to the current time
Done generating
{"tempReport": {"avgTemp": 34.2, "endTime": "09/07/2020 09:58:11", "maxTemp": 49, "minTemp": 10, "startTime": "09/07/2020 09:56:51"}}

Czyszczenie zasobów

Jeśli skończysz z przewodnikami Szybki start i samouczkami, zobacz Czyszczenie zasobów.

Następne kroki

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