Zelfstudie: Een IoT-Plug en Play toepassingen voor meerdere onderdelen die worden uitgevoerd in Linux of Windows verbinden met IoT 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 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.
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:
- Visual Studio (Community, Professional of Enterprise): zorg ervoor dat u de workload Desktop Development with C++ kiest tijdens het installeren van Visual Studio.
- Git.
- CMake.
De code downloaden
Als u de zelfstudie hebt voltooid: Een voorbeeld van een IoT-Plug en Play-apparaattoepassing die wordt uitgevoerd in Linux of Windows, verbinden met 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
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.
Wanneer Visual Studio gereed is, gaat u in Solution Explorer naar het voorbeeld iothub_client/samples/pnp/pnp_temperature_controller/.
Klik met de rechtermuisknop op het bestand pnp_temperature_controller.c en selecteer Foutopsporing van configuratie. Selecteer Standaard.
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>" } } ] }
Klik met de rechtermuisknop op het bestand pnp_temperature_controller.c en selecteer Instellen als item voor opstarten.
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.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:
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
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:
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.
Open Azure IoT Explorer.
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.
Selecteer + Lokale map toevoegen > op de pagina IoT Plug en Play-instellingen en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.
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.
Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.
In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.
Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.
U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.
Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.
Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.
Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.
Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.
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 functiePnP_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, waarbijPnP_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.
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: Een voorbeeld van een IoT-Plug en Play-apparaattoepassing die wordt uitgevoerd in Windows, verbinden met 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.
Open Azure IoT Explorer.
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.
Selecteer + Lokale map toevoegen > op de pagina IoT Plug en Play-instellingen en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.
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.
Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.
In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.
Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.
U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.
Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.
Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.
Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.
Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.
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 PnpHelper
-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:
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.
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: Een voorbeeld van een IoT-Plug en Play-apparaattoepassing verbinden met 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.
Open Azure IoT Explorer.
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.
Selecteer + Lokale map toevoegen > op de pagina IoT Plug en Play-instellingen en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.
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.
Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.
In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.
Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.
U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.
Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.
Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.
Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.
Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.
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 PnpHelper
-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:
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.
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: Een voorbeeld van een IoT-Plug en Play-apparaattoepassing die wordt uitgevoerd in Windows, verbinden met 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.
- 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. HetserialNumber
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
engetMaxMinReport
. - De functie
commandHandler
definieert hoe het apparaat reageert op een opdracht.
- De apparaat-DTDL definieert de opdrachten
Begint telemetrie te verzenden met
setInterval
ensendTelemetry
.Maakt gebruik van de functie
helperCreateReportedPropertiesPatch
om de eigenschappen te maken en vanupdateComponentReportedProperties
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.
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.
Open Azure IoT Explorer.
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.
Selecteer + Lokale map toevoegen > op de pagina IoT Plug en Play-instellingen en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.
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.
Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.
In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.
Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.
U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.
Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.
Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.
Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.
Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.
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.
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: Een voorbeeld van een IoT-Plug en Play-apparaattoepassing die wordt uitgevoerd in Windows, verbinden met 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:
Importeert
pnp_helper.py
om toegang te krijgen tot de hulpmethoden.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.
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.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. Eenserial_number
kan niet veranderen voor apparaat.Definieert de implementaties van opdrachthandlers. Deze handlers definiëren wat het apparaat doet wanneer het opdrachtaanvragen ontvangt.
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.
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.
Definieert een listener voor opdrachtverzoeken.
Definieert een listener voor gewenste updates van eigenschappen.
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 eenmethod_name
,user_command_handler
en een optioneelcreate_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.
- De
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 aangeroepenSchakelt 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.
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.
Open Azure IoT Explorer.
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.
Selecteer + Lokale map toevoegen > op de pagina IoT Plug en Play-instellingen en selecteer de map met lokale modellen waarin u uw modelbestanden hebt opgeslagen.
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.
Klik op de apparaat-id van het apparaat dat u eerder hebt gemaakt.
In het menu aan de linkerkant ziet u de verschillende soorten informatie die beschikbaar zijn voor het apparaat.
Selecteer IoT Plug en Play-onderdelen om de modelgegevens voor uw apparaat weer te geven.
U kunt de verschillende onderdelen van het apparaat weergeven. Het standaardonderdeel en eventuele extra onderdelen. Selecteer een onderdeel om mee te werken.
Selecteer de pagina Telemetrie en selecteer vervolgens Start om de telemetriegegevens te bekijken die via het apparaat worden verzonden voor dit onderdeel.
Selecteer de pagina Eigenschappen (alleen-lezen) om de eigenschappen met het kenmerk Alleen-lezen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer de pagina Eigenschappen (schrijfbaar) om de schrijfbare eigenschappen te bekijken die zijn gerapporteerd voor dit onderdeel.
Selecteer een eigenschap via de bijbehorende naam, voer een waarde voor de eigenschap in, en selecteer Gewenste waarde bijwerken.
Selecteer de knop Vernieuwen om de nieuwe waarde weer te geven.
Selecteer de pagineren Opdrachten om alle opdrachten voor dit onderdeel te bekijken.
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: