Delen via


Zelfstudie: een IoT-Plug en Play toepassingen voor meerdere onderdelen die worden uitgevoerd in Linux of Windows naar IoT Hub Verbinding maken

In deze zelfstudie ziet u hoe u een voorbeeld van een IoT Plug and Play-apparaattoepassing met onderdelen maakt, hoe u de toepassing verbindt met uw IoT-hub en hoe u het hulpprogramma Azure IoT Explorer gebruikt om de gegevens weer te geven die naar de hub worden verzonden. De voorbeeldtoepassing is geschreven in C en is opgenomen in de Azure IoT device SDK voor C. Een ontwikkelaar van oplossingen kan het hulpprogramma Azure IoT Explorer gebruiken om inzicht te krijgen in de mogelijkheden van een IoT Plug and Play-apparaat zonder apparaatcode weer te geven.

Code zoeken

In deze zelfstudie hebt u:

  • Download de voorbeeldcode.
  • Bouw de voorbeeldcode.
  • Voer de voorbeeldtoepassing van het apparaat uit en controleer of deze verbinding maakt met uw IoT-hub.
  • Controleer de broncode.

Vereisten

Zorg er, voordat u doorgaat, voor dat u uw omgeving hebt ingesteld, inclusief de IoT-hub.

U kunt deze zelfstudie voltooien in Linux of Windows. De shell-opdrachten in deze zelfstudie volgen de Linux-conventie voor padscheidingstekens /. Als u de stappen uitvoert in Windows, moet u deze scheidingstekens vervangen door \.

De vereisten verschillen per besturingssysteem:

Linux

In deze zelfstudie wordt ervan uitgegaan dat u Ubuntu Linux gebruikt. De stappen in deze zelfstudie zijn getest met Ubuntu 18.04.

Om deze zelfstudie in Linux te voltooien installeert u de volgende software in uw lokale Linux-omgeving:

Installeer GCC, Git, cmakeen alle vereiste afhankelijkheden met behulp van de opdracht apt-get:

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

Controleer of de versie van cmake hoger is dan 2.8.12 en of de versie van GCC hoger dan 4.4.7.

cmake --version
gcc --version

Windows

Om deze zelfstudie in Windows te voltooien, installeert u de volgende software in uw lokale Windows-omgeving:

De code downloaden

Als u de zelfstudie hebt voltooid: Verbinding maken een voorbeeld-IoT-Plug en Play-apparaattoepassing die wordt uitgevoerd in Linux of Windows naar IoT Hub (C) die u al hebt gedownload.

In deze zelfstudie bereidt u een ontwikkelomgeving voor die kan worden gebruikt voor het klonen en compileren van de Azure IoT Hub Device C-SDK.

Open een opdrachtprompt in de map van uw keuze. Voer de volgende opdracht uit om de GitHub-opslagplaats Azure IoT C-SDK’s en -bibliotheken te klonen op deze locatie:

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

Deze bewerking kan enkele minuten in beslag nemen.

De code bouwen en uitvoeren

U kunt de code bouwen en uitvoeren met behulp van Visual Studio of cmake op de opdrachtregel.

Visual Studio gebruiken

  1. Open de hoofdmap van de gekloonde opslagplaats. Na enkele seconden maakt de CMake-ondersteuning in Visual Studio alles wat u nodig hebt om het project uit te voeren en fouten op te sporen.

  2. Wanneer Visual Studio gereed is, gaat u in Solution Explorer naar het voorbeeld iothub_client/samples/pnp/pnp_temperature_controller/.

  3. Klik met de rechtermuisknop op het bestand pnp_temperature_controller.c en selecteer Foutopsporing van configuratie. Selecteer Standaard.

  4. Het bestand launch.vs.json wordt geopend in Visual Studio. Bewerk dit bestand, zoals wordt weergegeven in het volgende fragment, om de vereiste omgevingsvariabelen in te stellen. U hebt een notitie gemaakt van de bereik-ID en de primaire sleutel voor inschrijving na hetinstellen van uw omgeving voor de quickstarts en zelfstudies voor IoT Plug en 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. Klik met de rechtermuisknop op het bestand pnp_temperature_controller.c en selecteer Instellen als item voor opstarten.

  6. Om de code-uitvoering in Visual Studio bij te houden voegt u een onderbrekingspunt toe aan de functie main in het bestand pnp_temperature_controller.c.

  7. U kunt het voorbeeld nu uitvoeren en fouten opsporen vanuit het menu Foutopsporing.

Het apparaat is nu klaar om opdrachten en updates van eigenschappen te ontvangen, en is begonnen met het verzenden van telemetriegegevens naar de hub. Laat het voorbeeld actief tijdens het uitvoeren van de volgende stappen.

Gebruik cmake in de opdrachtregel

Het voorbeeld bouwen:

  1. Maak een submap cmake in de hoofdmap van de gekloonde Device SDK en ga naar deze map:

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    
  2. Voer de volgende opdrachten uit om de projectbestanden voor SDK en voorbeelden te genereren en te bouwen:

    cmake ..
    cmake --build .
    

In Uw omgeving instellen hebt u vier omgevingsvariabelen gemaakt om het voorbeeld te configureren om de Device Provisioning Service (DPS) te gebruiken om verbinding te maken met uw IoT-hub:

  • IOTHUB_DEVICE_SECURITY_TYPE met de waarde DPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE met het id-bereik van DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID met de waarde my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY met de primaire sleutel voor inschrijving.
  • IOTHUB_DEVICE_DPS_ENDPOINT met de waarde global.azure-devices-provisioning.net.

Zie het Leesmij-voorbeeld voor meer informatie over de voorbeeldconfiguratie.

Het voorbeeld uitvoeren:

  1. Navigeer vanuit de map cmake naar de map met het uitvoerbare bestand en voer het uit:

    # 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
    

Het apparaat is nu klaar om opdrachten en updates van eigenschappen te ontvangen, en is begonnen met het verzenden van telemetriegegevens naar de hub. Laat het voorbeeld actief tijdens het uitvoeren van de volgende stappen.

Code valideren met de Azure IoT Explorer

Nadat het voorbeeld van de apparaatclient is gestart, gebruikt u het hulpprogramma Azure IoT Explorer om te verifiëren dat het werkt.

  1. Open Azure IoT Explorer.

  2. Selecteer op de pagina IoT-hubs de optie + Verbinding toevoegen als u nog geen verbinding hebt toegevoegd aan uw IoT-hub. Voer de verbindingsreeks toe voor de IoT-hub die u eerder hebt gemaakt, en selecteer Opslaan.

  3. Selecteer op de pagina IoT Plug en Play Instellingen de map + Lokale map toevoegen > en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.

  4. Klik op de pagina IoT-hubs op de naam van de hub waarmee u wilt werken. U ziet een lijst met apparaten die zijn geregistreerd bij de IoT-hub.

  5. Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.

  6. In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.

  7. Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.

  8. U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.

  9. Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.

  10. Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.

  11. Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.

  12. Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.

  13. Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.

  14. Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.

  15. Selecteer de opdracht die u wilt testen, en stel de parameter in, indien van toepassing. Selecteer Opdracht verzenden om de opdracht aan te roepen op het apparaat. In het opdrachtpromptvenster waar de voorbeeldcode wordt uitgevoerd, ziet u dat het apparaat reageert op de opdracht.

De code bekijken

Met dit voorbeeld wordt een IoT Plug and Play-temperatuurregelingsapparaat geïmplementeerd. Met dit voorbeeld wordt een model met meerdere onderdelen geïmplementeerd. Het DTDL-modelbestand (Digital Twins Definition Language) voor het temperatuurapparaat definieert de telemetrie, eigenschappen en opdrachten die het apparaat implementeert.

Helper-functies van IoT Plug en Play

Voor dit voorbeeld gebruikt de code enkele helper-functies uit de map /common:

pnp_device_client_ll: bevat de verbindingsmethode voor IoT Plug en Play met model-id opgenomen als een parameter: PnP_CreateDeviceClientLLHandle.

pnp_protocol: bevat de helper-functies van IoT Plug en Play:

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

Deze helper-functies zijn algemeen genoeg om in uw eigen project te gebruiken. In dit voorbeeld worden ze in drie bestanden gebruikt die overeenkomen met elk onderdeel in het model:

  • pnp_deviceinfo_component
  • pnp_temperature_controller
  • pnp_thermostat_component

In het bestand pnp_deviceinfo_component gebruikt de functie SendReportedPropertyForDeviceInformation bijvoorbeeld twee helper-functies:

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);
    }
}

Elk onderdeel in het voorbeeld volgt dit patroon.

Codestroom

Met de functie main wordt de verbinding geïnitialiseerd en de model-id verzonden:

deviceClient = CreateDeviceClientAndAllocateComponents();

De code gebruikt PnP_CreateDeviceClientLLHandle om verbinding te maken met de IoT-hub. Stel modelId in als een optie, en stel de apparaatmethode en callback-handlers voor de apparaatdubbel in, voor directe methoden en updates voor de apparaatdubbel:

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

deviceClient = PnP_CreateDeviceClientLLHandle(&g_pnpDeviceConfiguration);

&g_pnpDeviceConfiguration bevat ook de verbindingsgegevens. De omgevingsvariabele IOTHUB_DEVICE_SECURITY_TYPE bepaalt of het voorbeeld via een verbindingsreeks of via de service voor apparaatinrichting verbinding maakt met de IoT-hub.

Wanneer het apparaat een model-id verzendt, wordt het een IoT Plug en Play-apparaat.

Nu de callback-handlers zijn ingesteld, reageert het apparaat op updates voor de apparaatdubbel en op aanroepen via de directe methode:

  • Voor de apparaatdubbel-callback roept de PnP_TempControlComponent_DeviceTwinCallback de functie PnP_ProcessTwinData aan om de gegevens te verwerken. PnP_ProcessTwinData maakt gebruik van het bezoeker-patroon om de JSON te parseren en vervolgens elke eigenschap te bezoeken, waarbij PnP_TempControlComponent_ApplicationPropertyCallback voor elk element wordt aangeroepen.

  • Voor de opdrachten-callback gebruikt de functie PnP_TempControlComponent_DeviceMethodCallback de helper-functie om de namen van opdrachten en onderdelen te parseren:

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

    De functie PnP_TempControlComponent_DeviceMethodCallback roept vervolgens de opdracht voor het onderdeel aan:

    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;
    }
    

De functie main initialiseert de eigenschappen met het kenmerk Alleen-lezen die naar de IoT-hub zijn verzonden:

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);

De functie main start een lus om gebeurtenis- en telemetriegegevens voor elk onderdeel bij te werken:

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

De functie PnP_ThermostatComponent_SendTelemetry laat zien hoe u de struct PNP_THERMOSTAT_COMPONENT gebruikt. In het voorbeeld wordt deze struct gebruikt om informatie op te slaan over de twee thermostaten in de temperatuurregelaar. De code gebruikt de functie PnP_CreateTelemetryMessageHandle om het bericht voor te bereiden en te verzenden:

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

De functie main vernietigt ten slotte de verschillende onderdelen en sluit de verbinding met de hub.

In deze zelfstudie ziet u hoe u een voorbeeld van een IoT Plug and Play-apparaattoepassing met onderdelen maakt, hoe u de toepassing verbindt met uw IoT-hub en hoe u het hulpprogramma Azure IoT Explorer gebruikt om de gegevens weer te geven die naar de hub worden verzonden. De voorbeeldtoepassing wordt geschreven in C# en is inbegrepen in de Azure IoT device-SDK voor C#. Een ontwikkelaar van oplossingen kan het hulpprogramma Azure IoT Explorer gebruiken om inzicht te krijgen in de mogelijkheden van een IoT Plug and Play-apparaat zonder apparaatcode weer te geven.

Code zoeken

In deze zelfstudie hebt u:

  • Download de voorbeeldcode.
  • Bouw de voorbeeldcode.
  • Voer de voorbeeldtoepassing van het apparaat uit en controleer of deze verbinding maakt met uw IoT-hub.
  • Controleer de broncode.

Vereisten

Zorg er, voordat u doorgaat, voor dat u uw omgeving hebt ingesteld, inclusief de IoT-hub.

U kunt deze zelfstudie uitvoeren in Linux of Windows. De shell-opdrachten in deze zelfstudie volgen de Linux-conventie voor padscheidingstekens /. Als u de stappen uitvoert in Windows, moet u deze scheidingstekens vervangen door \.

Kloon de SDK-opslagplaats met de voorbeeldcode

Als u de zelfstudie hebt voltooid: Verbinding maken een Voorbeeld-IoT-Plug en Play-apparaattoepassing die wordt uitgevoerd in Windows naar IoT Hub (C#), hebt u de opslagplaats al gekloond.

Kloon de voorbeelden uit de GitHub-opslagplaats met Azure IoT-voorbeelden voor C#. Open een opdrachtprompt in de map van uw keuze. Voer de volgende opdracht uit om de Microsoft Azure IoT SDK voor .NET GitHub-opslagplaats te klonen:

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

De code bouwen

U kunt nu het voorbeeld bouwen en uitvoeren. Voer de volgende opdrachten uit om het voorbeeld te bouwen:

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

Het apparaatvoorbeeld uitvoeren

Voer de volgende opdracht uit om het voorbeeld uit te voeren:

dotnet run

Het apparaat is nu klaar om opdrachten en updates van eigenschappen te ontvangen, en is begonnen met het verzenden van telemetriegegevens naar de hub. Laat het voorbeeld actief tijdens het uitvoeren van de volgende stappen.

Code valideren met Azure IoT Explorer

Nadat het voorbeeld van de apparaatclient is gestart, gebruikt u het hulpprogramma Azure IoT Explorer om te verifiëren dat het werkt.

  1. Open Azure IoT Explorer.

  2. Selecteer op de pagina IoT-hubs de optie + Verbinding toevoegen als u nog geen verbinding hebt toegevoegd aan uw IoT-hub. Voer de verbindingsreeks toe voor de IoT-hub die u eerder hebt gemaakt, en selecteer Opslaan.

  3. Selecteer op de pagina IoT Plug en Play Instellingen de map + Lokale map toevoegen > en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.

  4. Klik op de pagina IoT-hubs op de naam van de hub waarmee u wilt werken. U ziet een lijst met apparaten die zijn geregistreerd bij de IoT-hub.

  5. Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.

  6. In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.

  7. Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.

  8. U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.

  9. Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.

  10. Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.

  11. Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.

  12. Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.

  13. Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.

  14. Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.

  15. Selecteer de opdracht die u wilt testen, en stel de parameter in, indien van toepassing. Selecteer Opdracht verzenden om de opdracht aan te roepen op het apparaat. In het opdrachtpromptvenster waar de voorbeeldcode wordt uitgevoerd, ziet u dat het apparaat reageert op de opdracht.

De code bekijken

Met dit voorbeeld wordt een IoT Plug and Play-temperatuurregelingsapparaat geïmplementeerd. Het model dat met dit voorbeeld wordt geïmplementeerd, maakt gebruik van meerdere onderdelen. Het DTDL-modelbestand (Digital Twins Definition Language) voor het temperatuurapparaat definieert de telemetrie, eigenschappen en opdrachten die het apparaat implementeert.

De apparaatcode maakt verbinding met uw IoT-hub met behulp van de standaardmethode CreateFromConnectionString. Het apparaat verzendt de model-id van het DTDL-model dat het in de verbindingsaanvraag implementeert. Een apparaat dat een model-id verzendt, is een IoT Plug and Play-apparaat:

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;
}

De model-id wordt in de code opgeslagen, zoals weergegeven in het volgende fragment:

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

Nadat het apparaat verbinding heeft gemaakt met uw IoT-hub, registreert de code de opdrachthandlers. De opdracht reboot wordt gedefinieerd in het standaardonderdeel. De opdracht getMaxMinReport wordt gedefinieerd in elk van de twee thermostaatonderdelen:

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

Er zijn afzonderlijke handlers voor de gewenste updates voor eigenschappen in de twee thermostaatonderdelen:

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

De voorbeeldcode verzendt telemetrie vanuit elk thermostaatonderdeel:

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

De SendTemperatureTelemetryAsync-methode maakt gebruik van de PnpHhelper-klasse om berichten voor elk onderdeel te maken:

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

De PnpHelper-klasse bevat andere voorbeeldmethoden die u kunt gebruiken met een model met meerdere onderdelen.

Gebruik het hulpprogramma Azure IoT Explorer om de telemetrie en eigenschappen uit de twee thermostaatonderdelen weer te geven:

Apparaat met meerdere onderdelen in Azure IoT Explorer

U kunt het hulpprogramma Azure IoT Explorer ook gebruiken om opdrachten aan te roepen in een van de twee thermostaatonderdelen of in het hoofdonderdeel.

In deze zelfstudie ziet u hoe u een voorbeeld van een IoT Plug and Play-apparaattoepassing met onderdelen maakt, hoe u de toepassing verbindt met uw IoT-hub en hoe u het hulpprogramma Azure IoT Explorer gebruikt om de gegevens weer te geven die naar de hub worden verzonden. De voorbeeldtoepassing wordt geschreven in Java en is inbegrepen in de Azure IoT Device SDK voor Java. Een ontwikkelaar van oplossingen kan het hulpprogramma Azure IoT Explorer gebruiken om inzicht te krijgen in de mogelijkheden van een IoT Plug and Play-apparaat zonder apparaatcode weer te geven.

Code zoeken

In deze zelfstudie hebt u:

  • Download de voorbeeldcode.
  • Bouw de voorbeeldcode.
  • Voer de voorbeeldtoepassing van het apparaat uit en controleer of deze verbinding maakt met uw IoT-hub.
  • Controleer de broncode.

Vereisten

Zorg er, voordat u doorgaat, voor dat u uw omgeving hebt ingesteld, inclusief de IoT-hub.

U kunt deze zelfstudie uitvoeren in Linux of Windows. De shell-opdrachten in deze zelfstudie volgen de Linux-conventie voor padscheidingstekens /. Als u de stappen uitvoert in Windows, moet u deze scheidingstekens vervangen door \.

Installeer de volgende software in uw lokale ontwikkelomgeving om deze zelfstudie te voltooien:

De code downloaden

Als u de zelfstudie hebt voltooid: Verbinding maken een Voorbeeld-IoT-Plug en Play-apparaattoepassing naar IoT Hub (Java) hebt u de opslagplaats al gekloond.

Open een opdrachtprompt in de map van uw keuze. Voer de volgende opdracht uit om de GitHub-opslagplaats Azure IoT Java-SDK’s en -bibliotheken te klonen op deze locatie:

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

Deze bewerking kan enkele minuten in beslag nemen.

De code bouwen

Navigeer naar de hoofdmap van het voorbeeld van de temperatuurcontroller in de gekloonde Java SDK-opslagplaats en bouw deze:

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

Het apparaatvoorbeeld uitvoeren

In Uw omgeving instellen hebt u vier omgevingsvariabelen gemaakt om het voorbeeld te configureren om de Device Provisioning Service (DPS) te gebruiken om verbinding te maken met uw IoT-hub:

  • IOTHUB_DEVICE_SECURITY_TYPE met de waarde DPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE met het id-bereik van DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID met de waarde my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY met de primaire sleutel voor inschrijving.
  • IOTHUB_DEVICE_DPS_ENDPOINT met de waarde global.azure-devices-provisioning.net.

Als u de voorbeeldtoepassing wilt uitvoeren, gaat u naar de map /device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample en voert u de volgende opdracht uit:

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

Het apparaat is nu klaar om opdrachten en updates van eigenschappen te ontvangen, en is begonnen met het verzenden van telemetriegegevens naar de hub. Laat het voorbeeld actief tijdens het uitvoeren van de volgende stappen.

Code valideren met Azure IoT Explorer

Nadat het voorbeeld van de apparaatclient is gestart, gebruikt u het hulpprogramma Azure IoT Explorer om te verifiëren dat het werkt.

  1. Open Azure IoT Explorer.

  2. Selecteer op de pagina IoT-hubs de optie + Verbinding toevoegen als u nog geen verbinding hebt toegevoegd aan uw IoT-hub. Voer de verbindingsreeks toe voor de IoT-hub die u eerder hebt gemaakt, en selecteer Opslaan.

  3. Selecteer op de pagina IoT Plug en Play Instellingen de map + Lokale map toevoegen > en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.

  4. Klik op de pagina IoT-hubs op de naam van de hub waarmee u wilt werken. U ziet een lijst met apparaten die zijn geregistreerd bij de IoT-hub.

  5. Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.

  6. In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.

  7. Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.

  8. U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.

  9. Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.

  10. Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.

  11. Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.

  12. Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.

  13. Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.

  14. Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.

  15. Selecteer de opdracht die u wilt testen, en stel de parameter in, indien van toepassing. Selecteer Opdracht verzenden om de opdracht aan te roepen op het apparaat. In het opdrachtpromptvenster waar de voorbeeldcode wordt uitgevoerd, ziet u dat het apparaat reageert op de opdracht.

De code bekijken

Met dit voorbeeld wordt een IoT Plug and Play-temperatuurregelingsapparaat geïmplementeerd. Het model dat met dit voorbeeld wordt geïmplementeerd, maakt gebruik van meerdere onderdelen. Het DTDL-modelbestand (Digital Twins Definition Language) voor het temperatuurapparaat definieert de telemetrie, eigenschappen en opdrachten die het apparaat implementeert.

De apparaatcode maakt gebruik van de standaard DeviceClient-klasse om verbinding te maken met uw IoT-hub. Het apparaat verzendt de model-id van het DTDL-model dat het in de verbindingsaanvraag implementeert. Een apparaat dat een model-id verzendt, is een IoT Plug and Play-apparaat:

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();
}

De model-id wordt in de code opgeslagen, zoals weergegeven in het volgende fragment:

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

Nadat het apparaat verbinding heeft gemaakt met uw IoT-hub, registreert de code de opdrachthandlers.

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

Er zijn afzonderlijke handlers voor de gewenste updates voor eigenschappen in de twee thermostaatonderdelen:

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);

De voorbeeldcode verzendt telemetrie vanuit elk thermostaatonderdeel:

sendTemperatureReading(THERMOSTAT_1);
sendTemperatureReading(THERMOSTAT_2);

De sendTemperatureReading-methode maakt gebruik van de PnpHhelper-klasse om berichten voor elk onderdeel te maken:

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

De PnpHelper-klasse bevat andere voorbeeldmethoden die u kunt gebruiken met een model met meerdere onderdelen.

Gebruik het hulpprogramma Azure IoT Explorer om de telemetrie en eigenschappen uit de twee thermostaatonderdelen weer te geven:

Apparaat met meerdere onderdelen in Azure IoT Explorer

U kunt het hulpprogramma Azure IoT Explorer ook gebruiken om opdrachten aan te roepen in een van de twee thermostaatonderdelen of in het hoofdonderdeel.

In deze zelfstudie ziet u hoe u een voorbeeld van een IoT Plug and Play-apparaattoepassing met onderdelen maakt, hoe u de toepassing verbindt met uw IoT-hub en hoe u het hulpprogramma Azure IoT Explorer gebruikt om de gegevens weer te geven die naar de hub worden verzonden. De voorbeeldtoepassing wordt geschreven voor Node.js en is opgenomen in de Azure IoT Device-SDK voor Node.js. Een ontwikkelaar van oplossingen kan het hulpprogramma Azure IoT Explorer gebruiken om inzicht te krijgen in de mogelijkheden van een IoT Plug and Play-apparaat zonder apparaatcode weer te geven.

Code zoeken

In deze zelfstudie hebt u:

  • Download de voorbeeldcode.
  • Voer de voorbeeldtoepassing van het apparaat uit en controleer of deze verbinding maakt met uw IoT-hub.
  • Controleer de broncode.

Vereisten

Zorg er, voordat u doorgaat, voor dat u uw omgeving hebt ingesteld, inclusief de IoT-hub.

Voor deze zelfstudie hebt u Node.js nodig op uw ontwikkelcomputer. U kunt de nieuwste aanbevolen omgeving voor meerdere platforms downloaden van nodejs.org.

Gebruik de volgende opdracht om de huidige versie van Node.js op uw ontwikkelcomputer te controleren:

node --version

De code downloaden

Als u de zelfstudie hebt voltooid: Verbinding maken een Voorbeeld-IoT-Plug en Play-apparaattoepassing die wordt uitgevoerd in Windows naar IoT Hub (Node), hebt u de opslagplaats al gekloond.

Open een opdrachtprompt in de map van uw keuze. Voer de volgende opdracht uit om de GitHub-opslagplaats Microsoft Azure IoT SDK voor Node.js te klonen op deze locatie:

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

Vereiste bibliotheken installeren

U gebruikt de SDK van het apparaat om de opgenomen voorbeeldcode te maken. De toepassing die u bouwt, simuleert een Plug en Play-apparaat met meerdere onderdelen dat verbinding maakt met een IoT-hub. De toepassing verzendt telemetrie en eigenschappen en ontvangt opdrachten.

  1. Ga in een lokaal terminalvenster naar de map van uw gekloonde opslagplaats en navigeer naar de map /azure-iot-sdk-node/device/samples/javascript . Voer vervolgens de volgende opdracht uit om de vereiste bibliotheken te installeren:
npm install

Met deze opdracht worden de relevante NPM-bestanden geïnstalleerd die nodig zijn om de voorbeelden in de map uit te voeren.

De code bekijken

Navigeer naar de map azure-iot-sdk-node/device/samples/javascript .

De map azure-iot-sdk-node/device/samples/javascript bevat de voorbeeldcode voor het IoT-Plug en Play temperatuurcontrollerapparaat.

De code in het pnp_temperature_controller.js-bestand implementeert een IoT Plug en Play temperatuurcontrollerapparaat. Het model dat met dit voorbeeld wordt geïmplementeerd, maakt gebruik van meerdere onderdelen. Het DTDL-modelbestand (Digital Twins Definition Language) voor het temperatuurapparaat definieert de telemetrie, eigenschappen en opdrachten die het apparaat implementeert.

Open het bestand pnp_temperature_controller.js in een code-editor van uw keuze. De voorbeeldcode laat zien hoe u het volgende kunt doen:

  • Definieer de modelId DTMI voor het apparaat dat u implementeert. Deze DTMI is door de gebruiker gedefinieerd en moet overeenkomen met de DTMI van het DTDL-model voor de temperatuurregeling.

  • De onderdelen implementeren die zijn gedefinieerd in het DTDL model van de temperatuurregeling. De onderdelen van een echte temperatuurregeling moeten deze twee interfaces implementeren. Deze twee interfaces zijn al gepubliceerd in een centrale opslagplaats. In dit voorbeeld zijn dit de twee interfaces:

    • Thermostaat
    • Apparaatgegevens ontwikkeld door Azure
  • Onderdeelnamen definiëren. Dit voorbeeld bevat twee thermostaten en één onderdeel met apparaatgegevens.

  • Definieer opdrachtnamen voor de opdrachten die het apparaat beantwoordt.

  • De constante serialNumber definiëren. Het serialNumber staat vast voor een bepaald apparaat.

  • De opdracht-handlers definiëren.

  • De functies definiëren voor het verzenden van opdrachtantwoorden.

  • De helperfuncties definiëren voor het vastleggen van opdrachtverzoeken.

  • Een helperfunctie definiëren om de eigenschappen te maken.

  • Een listener definiëren voor updates van eigenschappen.

  • Een functie definiëren om telemetrie te verzenden vanaf dit apparaat. Beide thermostaten en de standaardcomponent verzenden telemetrie. Deze functie ontvangt de onderdeelnaam als parameter.

  • Een main-functie definiëren die:

    • De apparaat-SDK gebruikt om een apparaatclient te maken en verbinding te maken met uw IoT-hub. Het apparaat verzendt de modelId zodat de IoT-hub het apparaat kan identificeren als een IoT Plug en Play-apparaat.

    • Begint te luisteren naar opdrachtaanvragen met de functie onDeviceMethod. De functie stelt een listener in voor opdrachtverzoeken vanaf de service:

      • De apparaat-DTDL definieert de opdrachten reboot en getMaxMinReport.
      • De functie commandHandler definieert hoe het apparaat reageert op een opdracht.
    • Begint telemetrie te verzenden met setInterval en sendTelemetry.

    • Maakt gebruik van de functie helperCreateReportedPropertiesPatch om de eigenschappen te maken en van updateComponentReportedProperties om de eigenschappen bij te werken.

    • Gebruikt desiredPropertyPatchListener om naar updates van eigenschappen te luisteren.

    • Schakelt alle listeners en taken uit, en sluit de lus af wanneer u op Q of q drukt.

In Uw omgeving instellen hebt u vier omgevingsvariabelen gemaakt om het voorbeeld te configureren om de Device Provisioning Service (DPS) te gebruiken om verbinding te maken met uw IoT-hub:

  • IOTHUB_DEVICE_SECURITY_TYPE met de waarde DPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE met het id-bereik van DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID met de waarde my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY met de primaire sleutel voor inschrijving.
  • IOTHUB_DEVICE_DPS_ENDPOINT met de waarde global.azure-devices-provisioning.net.

Zie het Leesmij-voorbeeld voor meer informatie over de voorbeeldconfiguratie.

Nu u de code hebt gezien, gebruikt u de volgende opdracht om het voorbeeld uit te voeren:

node pnp_temperature_controller.js

U ziet de volgende uitvoer, wat aangeeft dat het apparaat nu telemetriegegevens naar de hub stuurt en nu klaar is om opdrachten en updates van eigenschappen te ontvangen.

Bevestigingsberichten van apparaat

Laat het voorbeeld actief tijdens het uitvoeren van de volgende stappen.

Code valideren met Azure IoT Explorer

Nadat het voorbeeld van de apparaatclient is gestart, gebruikt u het hulpprogramma Azure IoT Explorer om te verifiëren dat het werkt.

  1. Open Azure IoT Explorer.

  2. Selecteer op de pagina IoT-hubs de optie + Verbinding toevoegen als u nog geen verbinding hebt toegevoegd aan uw IoT-hub. Voer de verbindingsreeks toe voor de IoT-hub die u eerder hebt gemaakt, en selecteer Opslaan.

  3. Selecteer op de pagina IoT Plug en Play Instellingen de map + Lokale map toevoegen > en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.

  4. Klik op de pagina IoT-hubs op de naam van de hub waarmee u wilt werken. U ziet een lijst met apparaten die zijn geregistreerd bij de IoT-hub.

  5. Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.

  6. In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.

  7. Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.

  8. U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.

  9. Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.

  10. Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.

  11. Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.

  12. Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.

  13. Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.

  14. Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.

  15. Selecteer de opdracht die u wilt testen, en stel de parameter in, indien van toepassing. Selecteer Opdracht verzenden om de opdracht aan te roepen op het apparaat. In het opdrachtpromptvenster waar de voorbeeldcode wordt uitgevoerd, ziet u dat het apparaat reageert op de opdracht.

In deze zelfstudie ziet u hoe u een voorbeeld van een IoT Plug and Play-apparaattoepassing met onderdelen maakt, hoe u de toepassing verbindt met uw IoT-hub en hoe u het hulpprogramma Azure IoT Explorer gebruikt om de gegevens weer te geven die naar de hub worden verzonden. De voorbeeldtoepassing wordt geschreven in Python en is inbegrepen in de Azure IoT device-SDK voor Python. Een ontwikkelaar van oplossingen kan het hulpprogramma Azure IoT Explorer gebruiken om inzicht te krijgen in de mogelijkheden van een IoT Plug and Play-apparaat zonder apparaatcode weer te geven.

Code zoeken

In deze zelfstudie hebt u:

  • Download de voorbeeldcode.
  • Voer de voorbeeldtoepassing van het apparaat uit en controleer of deze verbinding maakt met uw IoT-hub.
  • Controleer de broncode.

Vereisten

Zorg er, voordat u doorgaat, voor dat u uw omgeving hebt ingesteld, inclusief de IoT-hub.

U kunt deze zelfstudie uitvoeren in Linux of Windows. De shell-opdrachten in deze zelfstudie volgen de Linux-conventie voor padscheidingstekens /. Als u de stappen uitvoert in Windows, moet u deze scheidingstekens vervangen door \.

Als u deze zelfstudie wilt voltooien, moet Python zijn geïnstalleerd op uw ontwikkelcomputer. Controleer de Azure IoT Python SDK op de huidige python-versievereisten. U kunt uw Python-versie controleren met de volgende opdracht:

python --version

U kunt de nieuwste aanbevolen versie voor meerdere platforms downloaden van python.org.

De code downloaden

Het azure-iot-device-pakket wordt gepubliceerd als PIP.

Installeer het pakket in uw lokale Python-omgeving als volgt:

pip install azure-iot-device

Als u de zelfstudie hebt voltooid: Verbinding maken een Voorbeeld-IoT-Plug en Play-apparaattoepassing die wordt uitgevoerd in Windows naar IoT Hub (Python), hebt u de opslagplaats al gekloond.

Kloon de IoT-opslagplaats van de Python-SDK:

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

De code bekijken

Met dit voorbeeld wordt een IoT Plug and Play-temperatuurregelingsapparaat geïmplementeerd. Het model dat met dit voorbeeld wordt geïmplementeerd, maakt gebruik van meerdere onderdelen. Het DTDL-modelbestand (Digital Twins Definition Language) voor het temperatuurapparaat definieert de telemetrie, eigenschappen en opdrachten die het apparaat implementeert.

De map azure-iot-sdk-python/samples/pnp bevat de voorbeeldcode voor het IoT-Plug en Play-apparaat. De bestanden voor het voorbeeld van een temperatuurregeling zijn:

  • temp_controller_with_thermostats.py
  • pnp_helper.py

Temperatuurregeling heeft meerdere onderdelen en een standaardcomponent, gebaseerd op het DTDL-model van de temperatuurregeling.

Open het bestand temp_controller_with_thermostats.py in een editor naar keuze. De code in dit bestand:

  1. Importeert pnp_helper.py om toegang te krijgen tot de hulpmethoden.

  2. Definieert twee DTMI's (digital twin model identifiers) die twee verschillende interfaces vertegenwoordigen, zoals gedefinieerd in het DTDL-model. De onderdelen van een echte temperatuurregeling moeten deze twee interfaces implementeren. Deze twee interfaces zijn al gepubliceerd in een centrale opslagplaats. Deze DTMIS's moeten bekend zijn bij de gebruiker en variëren afhankelijk van het scenario van apparaatimplementatie. Voor het huidige voorbeeld vertegenwoordigen deze twee interfaces:

    • Een thermostaat
    • Apparaatgegevens ontwikkeld door Azure.
  3. Definieert de DTMI model_id voor het apparaat dat wordt geïmplementeerd. De DTMI is gebruikersgedefinieerd en moet overeenkomen met de DTMI in het DTDL-modelbestand.

  4. Definieert de namen voor de onderdelen in het DTDL-bestand. De DTDL bevat twee thermostaten en één onderdeel met apparaatgegevens. Er wordt ook een constante met de naam serial_number gedefinieerd in de standaardcomponent. Een serial_number kan niet veranderen voor apparaat.

  5. Definieert de implementaties van opdrachthandlers. Deze handlers definiëren wat het apparaat doet wanneer het opdrachtaanvragen ontvangt.

  6. Definieert functies om een opdrachtreactie te maken. Met deze functies wordt gedefinieerd hoe het apparaat reageert op opdrachtaanvragen. U maakt functies voor opdrachtreacties als een opdracht een aangepaste reactie moet terugsturen naar de IoT-hub. Als er geen antwoordfunctie is opgegeven voor een opdracht, wordt een algemeen antwoord verzonden. In dit voorbeeld heeft alleen de getMaxMinReport-opdracht een aangepast antwoord.

  7. Definieert een functie om telemetrie te verzenden vanaf dit apparaat. Zowel de thermostaten als de standaardcomponent verzenden telemetrie. Deze functie heeft een optionele parameter voor de componentnaam waarmee kan worden geïdentificeerd welk onderdeel de telemetrie heeft verzonden.

  8. Definieert een listener voor opdrachtverzoeken.

  9. Definieert een listener voor gewenste updates van eigenschappen.

  10. Heeft een main-functie die:

    • De apparaat-SDK gebruikt om een apparaatclient te maken en verbinding te maken met uw IoT-hub. Het apparaat verzendt de model_id zodat de IoT-hub het apparaat kan identificeren als een IoT Plug en Play-apparaat.

    • Maakt gebruik van de functie create_reported_properties in het hulpbestand om de eigenschappen te maken. Geeft de onderdeelnaam en de eigenschappen door aan deze functie als sleutel-/waardeparen.

    • Werkt de leesbare eigenschappen voor zijn onderdelen bij door patch_twin_reported_properties aan te roepen.

    • Begint te luisteren naar opdrachtaanvragen met de functie execute_command_listener. De functie stelt een listener in voor opdrachtverzoeken vanaf de service. Wanneer u de listener instelt, geeft u een method_name, user_command_handleren een optioneel create_user_response_handler op als parameters.

      • De method_name definieert de opdrachtverzoeken. In dit voorbeeld definieert het model de opdrachten die opnieuw worden opgestart en getMaxMinReport.
      • De functie user_command_handler definieert wat het apparaat moet doen wanneer het een opdracht ontvangt.
      • De functie create_user_response_handler maakt een antwoord aan dat naar uw IoT-hub verzonden kan worden wanneer een opdracht met succes wordt uitgevoerd. U kunt dit antwoord bekijken in de portal. Als deze functie niet wordt opgegeven, dan wordt een algemeen antwoord verzonden naar de service.
    • Gebruikt execute_property_listener om naar updates van eigenschappen te luisteren.

    • Begint telemetrie te verzenden met send_telemetry. De voorbeeldcode gebruikt een lus om drie functies voor het verzenden van telemetrie aan te roepen. Ze worden elk om de acht seconden aangeroepen

    • Schakelt alle listeners en taken uit, en sluit de lus af wanneer u op Q of q drukt.

In Uw omgeving instellen hebt u vier omgevingsvariabelen gemaakt om het voorbeeld te configureren om de Device Provisioning Service (DPS) te gebruiken om verbinding te maken met uw IoT-hub:

  • IOTHUB_DEVICE_SECURITY_TYPE met de waarde DPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE met het id-bereik van DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID met de waarde my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY met de primaire sleutel voor inschrijving.
  • IOTHUB_DEVICE_DPS_ENDPOINT met de waarde global.azure-devices-provisioning.net.

Zie het Leesmij-voorbeeld voor meer informatie over de voorbeeldconfiguratie.

Gebruik de volgende opdracht om het voorbeeld uit te voeren:

python temp_controller_with_thermostats.py

Het voorbeeldapparaat verzendt om de paar seconden telemetrieberichten naar uw IoT-hub.

U ziet de volgende uitvoer, wat aangeeft dat het apparaat telemetriegegevens naar de hub stuurt en nu klaar is om opdrachten en updates van eigenschappen te ontvangen.

Bevestigingsberichten van apparaat

Laat het voorbeeld actief tijdens het uitvoeren van de volgende stappen.

Code valideren met Azure IoT Explorer

Nadat het voorbeeld van de apparaatclient is gestart, gebruikt u het hulpprogramma Azure IoT Explorer om te verifiëren dat het werkt.

  1. Open Azure IoT Explorer.

  2. Selecteer op de pagina IoT-hubs de optie + Verbinding toevoegen als u nog geen verbinding hebt toegevoegd aan uw IoT-hub. Voer de verbindingsreeks toe voor de IoT-hub die u eerder hebt gemaakt, en selecteer Opslaan.

  3. Selecteer op de pagina IoT Plug en Play Instellingen de map + Lokale map toevoegen > en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.

  4. Klik op de pagina IoT-hubs op de naam van de hub waarmee u wilt werken. U ziet een lijst met apparaten die zijn geregistreerd bij de IoT-hub.

  5. Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.

  6. In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.

  7. Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.

  8. U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.

  9. Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.

  10. Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.

  11. Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.

  12. Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.

  13. Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.

  14. Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.

  15. Selecteer de opdracht die u wilt testen, en stel de parameter in, indien van toepassing. Selecteer Opdracht verzenden om de opdracht aan te roepen op het apparaat. In het opdrachtpromptvenster waar de voorbeeldcode wordt uitgevoerd, ziet u dat het apparaat reageert op de opdracht.

Resources opschonen

Als u van plan bent om door te gaan met meer artikelen over apparaatontwikkelaars, kunt u de resources die u in dit artikel hebt gebruikt, behouden en opnieuw gebruiken. Anders kunt u de resources die u in dit artikel hebt gemaakt, verwijderen om meer kosten te voorkomen.

U kunt zowel de hub als het geregistreerde apparaat tegelijk verwijderen door met de volgende Azure CLI-opdracht de hele resourcegroep te verwijderen. Gebruik deze opdracht niet als deze resources een resourcegroep delen met andere resources die u wilt houden.

az group delete --name <YourResourceGroupName>

Als u alleen de IoT-hub wilt verwijderen, voert u de volgende opdracht uit met behulp van Azure CLI:

az iot hub delete --name <YourIoTHubName>

Als u alleen de apparaat-id wilt verwijderen die u hebt geregistreerd bij de IoT-hub, voert u de volgende opdracht uit met behulp van Azure CLI:

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

Mogelijk wilt u ook de gekloonde voorbeeldbestanden verwijderen van uw ontwikkelcomputer.

Volgende stappen

In deze zelfstudie hebt u geleerd hoe u een IoT Plug and Play-apparaat met onderdelen kunt verbinden met een IoT-hub. Voor meer informatie over IoT Plug and Play-apparaatmodellen raadpleegt u: