Samouczek: łączenie aplikacji urządzeń z wieloma składnikami IoT Plug and Play działających w systemie Linux lub Windows z usługą IoT Hub
W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana w języku C i jest zawarta w zestawie SDK urządzenia Usługi Azure IoT dla języka C. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.
W tym samouczku zostały wykonane następujące czynności:
- Pobierz przykładowy kod.
- Skompiluj przykładowy kod.
- Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
- Przejrzyj kod źródłowy.
Wymagania wstępne
Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.
Ten samouczek można wykonać w systemie Linux lub Windows. Polecenia powłoki w tym samouczku są zgodne z konwencją systemu Linux dla separatorów ścieżek "/
", jeśli obserwujesz w systemie Windows, pamiętaj, aby zamienić te separatory na "\
".
Wymagania wstępne różnią się w zależności od systemu operacyjnego:
Linux
W tym samouczku założono, że używasz systemu Ubuntu Linux. Kroki opisane w tym samouczku zostały przetestowane przy użyciu systemu Ubuntu 18.04.
Aby ukończyć ten samouczek w systemie Linux, zainstaluj następujące oprogramowanie w lokalnym środowisku systemu Linux:
Zainstaluj bibliotekę GCC, git, narzędzie cmake i wszystkie wymagane zależności przy użyciu apt-get
polecenia :
sudo apt-get update
sudo apt-get install -y git cmake build-essential curl libcurl4-openssl-dev libssl-dev uuid-dev
Sprawdź, czy wersja biblioteki ma wartość 2.8.12, a wersja GCC jest wyższa niż 4.4.7.cmake
cmake --version
gcc --version
Windows
Aby ukończyć ten samouczek w systemie Windows, zainstaluj następujące oprogramowanie w lokalnym środowisku systemu Windows:
- Visual Studio (Community, Professional lub Enterprise) — upewnij się, że podczas instalowania programu Visual Studio dołączysz pakiet roboczy Programowanie aplikacji klasycznych z językiem C++.
- Git.
- CMake.
Pobieranie kodu
Jeśli ukończono samouczek : łączenie przykładowej aplikacji urządzenia IoT Plug and Play działającej w systemie Linux lub Windows z usługą IoT Hub (C), która została już pobrana.
W tym samouczku przygotujesz środowisko programistyczne, którego można użyć do sklonowania i skompilowania zestawu SDK języka C urządzenia usługi Azure IoT Hub.
Otwórz wiersz polecenia w wybranym folderze. Wykonaj następujące polecenie, aby sklonować repozytorium GitHub zestawów SDK i bibliotek języka C usługi Azure IoT do tej lokalizacji:
git clone https://github.com/Azure/azure-iot-sdk-c.git
cd azure-iot-sdk-c
git submodule update --init
Spodziewaj się, że wykonanie tej operacji potrwa kilka minut.
Kompilowanie i uruchamianie kodu
Możesz skompilować i uruchomić kod przy użyciu programu Visual Studio lub cmake
w wierszu polecenia.
Korzystanie z programu Visual Studio
Otwórz folder główny sklonowanego repozytorium. Po kilku sekundach obsługa narzędzia CMake w programie Visual Studio tworzy wszystko, co należy uruchomić i debugować projekt.
Gdy program Visual Studio jest gotowy, w Eksplorator rozwiązań przejdź do przykładowego iothub_client/samples/pnp/pnp_temperature_controller/.
Kliknij prawym przyciskiem myszy plik pnp_temperature_controller.c i wybierz polecenie Dodaj konfigurację debugowania. Wybierz pozycję Domyślne.
Program Visual Studio otwiera plik launch.vs.json . Edytuj ten plik, jak pokazano w poniższym fragmencie kodu, aby ustawić wymagane zmienne środowiskowe. Zanotujesz identyfikator zakresu i klucz podstawowy rejestracji po zakończeniu konfigurowania środowiska na potrzeby przewodników Szybki start i samouczków dotyczących usługi IoT Plug and Play:
{ "version": "0.2.1", "defaults": {}, "configurations": [ { "type": "default", "project": "iothub_client\\samples\\pnp\\pnp_temperature_controller\\pnp_temperature_controller.c", "projectTarget": "", "name": "pnp_temperature_controller.c", "env": { "IOTHUB_DEVICE_SECURITY_TYPE": "DPS", "IOTHUB_DEVICE_DPS_ID_SCOPE": "<Your ID scope>", "IOTHUB_DEVICE_DPS_DEVICE_ID": "my-pnp-device", "IOTHUB_DEVICE_DPS_DEVICE_KEY": "<Your enrollment primary key>" } } ] }
Kliknij prawym przyciskiem myszy plik pnp_temperature_controller.c i wybierz polecenie Ustaw jako element startowy.
Aby śledzić wykonywanie kodu w programie Visual Studio, dodaj punkt przerwania do
main
funkcji w pliku pnp_temperature_controller.c .Teraz możesz uruchomić i debugować przykład z menu Debugowanie .
Urządzenie jest teraz gotowe do odbierania poleceń i aktualizacji właściwości i zaczął wysyłać dane telemetryczne do centrum. Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.
Użyj cmake
w wierszu polecenia
Aby skompilować przykład:
Utwórz podfolder cmake w folderze głównym sklonowanego zestawu SDK urządzenia i przejdź do tego folderu:
cd azure-iot-sdk-c mkdir cmake cd cmake
Uruchom następujące polecenia, aby wygenerować i skompilować pliki projektu dla zestawu SDK i przykładów:
cmake .. cmake --build .
W obszarze Konfigurowanie środowiska utworzono cztery zmienne środowiskowe w celu skonfigurowania przykładu pod kątem używania usługi Device Provisioning Service (DPS) do nawiązywania połączenia z centrum IoT:
- IOTHUB_DEVICE_SECURITY_TYPE z wartością
DPS
- IOTHUB_DEVICE_DPS_ID_SCOPE z zakresem identyfikatora usługi DPS.
- IOTHUB_DEVICE_DPS_DEVICE_ID z wartością
my-pnp-device
. - IOTHUB_DEVICE_DPS_DEVICE_KEY przy użyciu klucza podstawowego rejestracji.
- IOTHUB_DEVICE_DPS_ENDPOINT z wartością
global.azure-devices-provisioning.net
.
Aby dowiedzieć się więcej na temat przykładowej konfiguracji, zobacz przykładowy plik readme.
Aby uruchomić przykład:
W folderze cmake przejdź do folderu zawierającego plik wykonywalny i uruchom go:
# Bash cd iothub_client/samples/pnp/pnp_temperature_controller ./pnp_temperature_controller
REM Windows cd iothub_client\samples\pnp\pnp_temperature_controller\Debug pnp_temperature_controller.exe
Urządzenie jest teraz gotowe do odbierania poleceń i aktualizacji właściwości i zaczął wysyłać dane telemetryczne do centrum. Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.
Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT
Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.
Otwórz eksploratora usługi Azure IoT.
Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.
Na stronie Ustawienia usługi IoT Plug and Play wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.
Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.
Kliknij identyfikator urządzenia utworzonego wcześniej.
W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.
Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.
Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.
Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.
Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.
Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.
Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.
Aby wyświetlić nową wartość, wybierz przycisk Odśwież .
Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.
Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.
Przeglądanie kodu
Ten przykład implementuje urządzenie kontrolera temperatury IoT Plug and Play. Ten przykład implementuje model z wieloma składnikami. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.
Funkcje pomocnika IoT Plug and Play
W tym przykładzie kod używa niektórych funkcji pomocnika z folderu /common :
pnp_device_client_ll zawiera metodę connect dla usługi IoT Plug and Play z model-id
dołączonym parametrem: PnP_CreateDeviceClientLLHandle
.
pnp_protocol: zawiera funkcje pomocnika IoT Plug and Play:
PnP_CreateReportedProperty
PnP_CreateReportedPropertyWithStatus
PnP_ParseCommandName
PnP_CreateTelemetryMessageHandle
PnP_ProcessTwinData
PnP_CopyPayloadToString
PnP_CreateDeviceClientLLHandle_ViaDps
Te funkcje pomocnicze są wystarczająco ogólne, aby używać ich we własnym projekcie. W tym przykładzie użyto ich w trzech plikach odpowiadających każdemu składnikowi w modelu:
- pnp_deviceinfo_component
- pnp_temperature_controller
- pnp_thermostat_component
Na przykład w pliku SendReportedPropertyForDeviceInformation
pnp_deviceinfo_component funkcja używa dwóch funkcji pomocnika:
if ((jsonToSend = PnP_CreateReportedProperty(componentName, propertyName, propertyValue)) == NULL)
{
LogError("Unable to build reported property response for propertyName=%s, propertyValue=%s", propertyName, propertyValue);
}
else
{
const char* jsonToSendStr = STRING_c_str(jsonToSend);
size_t jsonToSendStrLen = strlen(jsonToSendStr);
if ((iothubClientResult = IoTHubDeviceClient_LL_SendReportedState(deviceClientLL, (const unsigned char*)jsonToSendStr, jsonToSendStrLen, NULL, NULL)) != IOTHUB_CLIENT_OK)
{
LogError("Unable to send reported state for property=%s, error=%d", propertyName, iothubClientResult);
}
else
{
LogInfo("Sending device information property to IoTHub. propertyName=%s, propertyValue=%s", propertyName, propertyValue);
}
}
Każdy składnik w przykładzie jest zgodny z tym wzorcem.
Przepływ kodu
Funkcja main
inicjuje połączenie i wysyła identyfikator modelu:
deviceClient = CreateDeviceClientAndAllocateComponents();
Kod służy PnP_CreateDeviceClientLLHandle
do nawiązywania połączenia z centrum IoT Hub, ustawiania modelId
jako opcji i konfigurowania metody urządzenia i obsługi wywołania zwrotnego bliźniaczej reprezentacji urządzenia dla metod bezpośrednich i aktualizacji bliźniaczej reprezentacji urządzenia:
g_pnpDeviceConfiguration.deviceMethodCallback = PnP_TempControlComponent_DeviceMethodCallback;
g_pnpDeviceConfiguration.deviceTwinCallback = PnP_TempControlComponent_DeviceTwinCallback;
g_pnpDeviceConfiguration.modelId = g_temperatureControllerModelId;
...
deviceClient = PnP_CreateDeviceClientLLHandle(&g_pnpDeviceConfiguration);
&g_pnpDeviceConfiguration
zawiera również informacje o połączeniu. Zmienna środowiskowa IOTHUB_DEVICE_SECURITY_TYPE określa, czy przykład używa parametry połączenia, czy usługi aprowizacji urządzeń w celu nawiązania połączenia z centrum IoT.
Gdy urządzenie wyśle identyfikator modelu, stanie się urządzeniem IoT Plug and Play.
Gdy są dostępne programy obsługi wywołania zwrotnego, urządzenie reaguje na aktualizacje bliźniaczej reprezentacji i wywołania metody bezpośredniej:
W przypadku wywołania zwrotnego
PnP_TempControlComponent_DeviceTwinCallback
bliźniaczej reprezentacji urządzenia funkcja wywołujePnP_ProcessTwinData
funkcję do przetwarzania danych.PnP_ProcessTwinData
używa wzorca odwiedzających, aby przeanalizować kod JSON, a następnie odwiedzić każdą właściwość, wywołującPnP_TempControlComponent_ApplicationPropertyCallback
poszczególne elementy.W przypadku wywołań zwrotnych
PnP_TempControlComponent_DeviceMethodCallback
poleceń funkcja używa funkcji pomocnika do analizowania nazw poleceń i składników:PnP_ParseCommandName(methodName, &componentName, &componentNameSize, &pnpCommandName);
Następnie
PnP_TempControlComponent_DeviceMethodCallback
funkcja wywołuje polecenie w składniku:LogInfo("Received PnP command for component=%.*s, command=%s", (int)componentNameSize, componentName, pnpCommandName); if (strncmp((const char*)componentName, g_thermostatComponent1Name, g_thermostatComponent1Size) == 0) { result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle1, pnpCommandName, rootValue, response, responseSize); } else if (strncmp((const char*)componentName, g_thermostatComponent2Name, g_thermostatComponent2Size) == 0) { result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle2, pnpCommandName, rootValue, response, responseSize); } else { LogError("PnP component=%.*s is not supported by TemperatureController", (int)componentNameSize, componentName); result = PNP_STATUS_NOT_FOUND; }
Funkcja main
inicjuje właściwości tylko do odczytu wysyłane do centrum IoT:
PnP_TempControlComponent_ReportSerialNumber_Property(deviceClient);
PnP_DeviceInfoComponent_Report_All_Properties(g_deviceInfoComponentName, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle1, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle2, deviceClient);
Funkcja main
wprowadza pętlę w celu zaktualizowania zdarzeń i danych telemetrycznych dla każdego składnika:
while (true)
{
PnP_TempControlComponent_SendWorkingSet(deviceClient);
PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle1, deviceClient);
PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle2, deviceClient);
}
Funkcja PnP_ThermostatComponent_SendTelemetry
pokazuje, jak używać PNP_THERMOSTAT_COMPONENT
struktury. W przykładzie użyto tej struktury do przechowywania informacji o dwóch termostatach w kontrolerze temperatury. Kod używa PnP_CreateTelemetryMessageHandle
funkcji do przygotowania komunikatu i wysłania go:
messageHandle = PnP_CreateTelemetryMessageHandle(pnpThermostatComponent->componentName, temperatureStringBuffer);
...
iothubResult = IoTHubDeviceClient_LL_SendEventAsync(deviceClientLL, messageHandle, NULL, NULL);
Funkcja main
ostatecznie niszczy różne składniki i zamyka połączenie z koncentratorem.
W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana w języku C# i jest zawarta w zestawie SDK urządzenia usługi Azure IoT dla języka C#. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.
W tym samouczku zostały wykonane następujące czynności:
- Pobierz przykładowy kod.
- Skompiluj przykładowy kod.
- Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
- Przejrzyj kod źródłowy.
Wymagania wstępne
Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.
Ten samouczek można uruchomić w systemie Linux lub Windows. Polecenia powłoki w tym samouczku są zgodne z konwencją systemu Linux dla separatorów ścieżek "/
", jeśli obserwujesz w systemie Windows, pamiętaj, aby zamienić te separatory na "\
".
Klonowanie repozytorium zestawu SDK przy użyciu przykładowego kodu
Jeśli ukończono Samouczek: łączenie przykładowej aplikacji urządzenia IoT Plug and Play działającej w systemie Windows z usługą IoT Hub (C#) zostało już sklonowane.
Sklonuj przykłady z repozytorium GitHub dla usługi Azure IoT Samples for C#. Otwórz wiersz polecenia w wybranym folderze. Uruchom następujące polecenie, aby sklonować repozytorium GitHub zestawu MICROSOFT Azure IoT SDK dla platformy .NET :
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Kompilowanie kod
Teraz możesz skompilować przykład i uruchomić go. Uruchom następujące polecenia, aby skompilować przykład:
cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/TemperatureController
dotnet build
Uruchamianie przykładu urządzenia
Aby uruchomić przykład, uruchom następujące polecenie:
dotnet run
Urządzenie jest teraz gotowe do odbierania poleceń i aktualizacji właściwości i zaczął wysyłać dane telemetryczne do centrum. Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.
Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT
Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.
Otwórz eksploratora usługi Azure IoT.
Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.
Na stronie Ustawienia usługi IoT Plug and Play wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.
Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.
Kliknij identyfikator urządzenia utworzonego wcześniej.
W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.
Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.
Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.
Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.
Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.
Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.
Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.
Aby wyświetlić nową wartość, wybierz przycisk Odśwież .
Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.
Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.
Przeglądanie kodu
Ten przykład implementuje urządzenie kontrolera temperatury IoT Plug and Play. Model, który ten przykład implementuje, używa wielu składników. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.
Kod urządzenia łączy się z centrum IoT Hub przy użyciu standardowej CreateFromConnectionString
metody. Urządzenie wysyła identyfikator modelu modelu DTDL, który implementuje w żądaniu połączenia. Urządzenie, które wysyła identyfikator modelu, to urządzenie IoT Plug and Play:
private static DeviceClient InitializeDeviceClient(string hostname, IAuthenticationMethod authenticationMethod)
{
var options = new ClientOptions
{
ModelId = ModelId,
};
var deviceClient = DeviceClient.Create(hostname, authenticationMethod, TransportType.Mqtt, options);
deviceClient.SetConnectionStatusChangesHandler((status, reason) =>
{
s_logger.LogDebug($"Connection status change registered - status={status}, reason={reason}.");
});
return deviceClient;
}
Identyfikator modelu jest przechowywany w kodzie, jak pokazano w poniższym fragmencie kodu:
private const string ModelId = "dtmi:com:example:TemperatureController;1";
Po nawiązaniu połączenia urządzenia z centrum IoT kod rejestruje programy obsługi poleceń. Polecenie reboot
jest definiowane w składniku domyślnym. Polecenie getMaxMinReport
jest definiowane w każdym z dwóch składników termostatu:
await _deviceClient.SetMethodHandlerAsync("reboot", HandleRebootCommandAsync, _deviceClient, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat1*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat1, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat2*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat2, cancellationToken);
Istnieją oddzielne programy obsługi dla żądanych aktualizacji właściwości na dwóch składnikach termostatu:
_desiredPropertyUpdateCallbacks.Add(Thermostat1, TargetTemperatureUpdateCallbackAsync);
_desiredPropertyUpdateCallbacks.Add(Thermostat2, TargetTemperatureUpdateCallbackAsync);
Przykładowy kod wysyła dane telemetryczne z każdego składnika termostatu:
await SendTemperatureAsync(Thermostat1, cancellationToken);
await SendTemperatureAsync(Thermostat2, cancellationToken);
Metoda SendTemperatureTelemetryAsync
używa PnpHhelper
klasy do tworzenia komunikatów dla każdego składnika:
using Message msg = PnpHelper.CreateIothubMessageUtf8(telemetryName, JsonConvert.SerializeObject(currentTemperature), componentName);
Klasa PnpHelper
zawiera inne przykładowe metody, których można używać z wieloma modelami składników.
Użyj narzędzia Azure IoT Explorer, aby wyświetlić dane telemetryczne i właściwości z dwóch składników termostatu:
Za pomocą narzędzia Eksplorator usługi Azure IoT można również wywoływać polecenia w jednym z dwóch składników termostatu lub w składniku domyślnym.
W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana w języku Java i jest zawarta w zestawie SDK urządzenia usługi Azure IoT dla języka Java. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.
W tym samouczku zostały wykonane następujące czynności:
- Pobierz przykładowy kod.
- Skompiluj przykładowy kod.
- Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
- Przejrzyj kod źródłowy.
Wymagania wstępne
Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.
Ten samouczek można uruchomić w systemie Linux lub Windows. Polecenia powłoki w tym samouczku są zgodne z konwencją systemu Linux dla separatorów ścieżek "/
", jeśli obserwujesz w systemie Windows, pamiętaj, aby zamienić te separatory na "\
".
Aby ukończyć ten samouczek, zainstaluj następujące oprogramowanie w lokalnym środowisku programistycznym:
Pobieranie kodu
Jeśli ukończono Samouczek: łączenie przykładowej aplikacji urządzenia IoT Plug and Play z usługą IoT Hub (Java) zostało już sklonowane.
Otwórz wiersz polecenia w wybranym katalogu. Wykonaj następujące polecenie, aby sklonować repozytorium GitHub zestawów SDK i bibliotek Java usługi Azure IoT do tej lokalizacji:
git clone https://github.com/Azure/azure-iot-sdk-java.git
Spodziewaj się, że wykonanie tej operacji potrwa kilka minut.
Kompilowanie kod
Przejdź do folderu głównego przykładu kontrolera temperatury w sklonowanym repozytorium zestawu Java SDK i skompiluj go:
cd azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample
mvn clean package
Uruchamianie przykładu urządzenia
W obszarze Konfigurowanie środowiska utworzono cztery zmienne środowiskowe w celu skonfigurowania przykładu pod kątem używania usługi Device Provisioning Service (DPS) do nawiązywania połączenia z centrum IoT:
- IOTHUB_DEVICE_SECURITY_TYPE z wartością
DPS
- IOTHUB_DEVICE_DPS_ID_SCOPE z zakresem identyfikatora usługi DPS.
- IOTHUB_DEVICE_DPS_DEVICE_ID z wartością
my-pnp-device
. - IOTHUB_DEVICE_DPS_DEVICE_KEY przy użyciu klucza podstawowego rejestracji.
- IOTHUB_DEVICE_DPS_ENDPOINT z wartością
global.azure-devices-provisioning.net
.
Aby uruchomić przykładową aplikację, przejdź do folderu /device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample i uruchom następujące polecenie:
mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.device.TemperatureController"
Urządzenie jest teraz gotowe do odbierania poleceń i aktualizacji właściwości i zaczął wysyłać dane telemetryczne do centrum. Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.
Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT
Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.
Otwórz eksploratora usługi Azure IoT.
Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.
Na stronie Ustawienia usługi IoT Plug and Play wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.
Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.
Kliknij identyfikator urządzenia utworzonego wcześniej.
W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.
Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.
Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.
Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.
Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.
Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.
Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.
Aby wyświetlić nową wartość, wybierz przycisk Odśwież .
Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.
Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.
Przeglądanie kodu
Ten przykład implementuje urządzenie kontrolera temperatury IoT Plug and Play. Model, który ten przykład implementuje, używa wielu składników. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.
Kod urządzenia używa klasy standardowej DeviceClient
do nawiązywania połączenia z centrum IoT Hub. Urządzenie wysyła identyfikator modelu modelu DTDL, który implementuje w żądaniu połączenia. Urządzenie, które wysyła identyfikator modelu, to urządzenie IoT Plug and Play:
private static void initializeDeviceClient() throws URISyntaxException, IOException {
ClientOptions options = new ClientOptions();
options.setModelId(MODEL_ID);
deviceClient = new DeviceClient(deviceConnectionString, protocol, options);
deviceClient.registerConnectionStatusChangeCallback((status, statusChangeReason, throwable, callbackContext) -> {
log.debug("Connection status change registered: status={}, reason={}", status, statusChangeReason);
if (throwable != null) {
log.debug("The connection status change was caused by the following Throwable: {}", throwable.getMessage());
throwable.printStackTrace();
}
}, deviceClient);
deviceClient.open();
}
Identyfikator modelu jest przechowywany w kodzie, jak pokazano w poniższym fragmencie kodu:
private static final String MODEL_ID = "dtmi:com:example:Thermostat;1";
Po nawiązaniu połączenia urządzenia z centrum IoT kod rejestruje programy obsługi poleceń.
deviceClient.subscribeToDeviceMethod(new MethodCallback(), null, new MethodIotHubEventCallback(), null);
Istnieją oddzielne programy obsługi dla żądanych aktualizacji właściwości na dwóch składnikach termostatu:
deviceClient.startDeviceTwin(new TwinIotHubEventCallback(), null, new GenericPropertyUpdateCallback(), null);
Map<Property, Pair<TwinPropertyCallBack, Object>> desiredPropertyUpdateCallback = Stream.of(
new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
new Property(THERMOSTAT_1, null),
new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_1)),
new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
new Property(THERMOSTAT_2, null),
new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_2))
).collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue));
deviceClient.subscribeToTwinDesiredProperties(desiredPropertyUpdateCallback);
Przykładowy kod wysyła dane telemetryczne z każdego składnika termostatu:
sendTemperatureReading(THERMOSTAT_1);
sendTemperatureReading(THERMOSTAT_2);
Metoda sendTemperatureReading
używa PnpHhelper
klasy do tworzenia komunikatów dla każdego składnika:
Message message = PnpHelper.createIotHubMessageUtf8(telemetryName, currentTemperature, componentName);
Klasa PnpHelper
zawiera inne przykładowe metody, których można używać z wieloma modelami składników.
Użyj narzędzia Azure IoT Explorer, aby wyświetlić dane telemetryczne i właściwości z dwóch składników termostatu:
Za pomocą narzędzia Eksplorator usługi Azure IoT można również wywoływać polecenia w jednym z dwóch składników termostatu lub w składniku domyślnym.
W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana dla Node.js i jest zawarta w zestawie SDK urządzenia usługi Azure IoT Hub dla Node.js. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.
W tym samouczku zostały wykonane następujące czynności:
- Pobierz przykładowy kod.
- Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
- Przejrzyj kod źródłowy.
Wymagania wstępne
Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.
Aby ukończyć ten samouczek, musisz Node.js na komputerze deweloperskim. Najnowszą zalecaną wersję dla wielu platform można pobrać z nodejs.org.
Możesz sprawdzić bieżącą wersję środowiska Node.js na komputerze deweloperskim przy użyciu następującego polecenia:
node --version
Pobieranie kodu
Jeśli ukończono Samouczek: łączenie przykładowej aplikacji urządzenia IoT Plug and Play działającej w systemie Windows z usługą IoT Hub (Node) zostało już sklonowane.
Otwórz wiersz polecenia w wybranym katalogu. Wykonaj następujące polecenie, aby sklonować zestaw SDK usługi Microsoft Azure IoT dla repozytorium Node.js GitHub do tej lokalizacji:
git clone https://github.com/Azure/azure-iot-sdk-node
Instalowanie wymaganych bibliotek
Zestaw SDK urządzenia służy do kompilowania dołączonego przykładowego kodu. Utworzona aplikacja symuluje urządzenie Plug and Play z wieloma składnikami, które łączą się z centrum IoT. Aplikacja wysyła dane telemetryczne i właściwości i odbiera polecenia.
- W lokalnym oknie terminalu przejdź do folderu sklonowanego repozytorium i przejdź do folderu /azure-iot-sdk-node/device/samples/javascript . Następnie uruchom następujące polecenie, aby zainstalować wymagane biblioteki:
npm install
To polecenie instaluje odpowiednie pliki npm wymagane do uruchomienia przykładów w folderze.
Przeglądanie kodu
Przejdź do folderu azure-iot-sdk-node/device/samples/javascript .
Folder azure-iot-sdk-node/device/samples/javascript zawiera przykładowy kod urządzenia kontrolera temperatury IoT Plug and Play.
Kod w pliku pnp_temperature_controller.js implementuje urządzenie kontrolera temperatury IoT Plug and Play. Model, który ten przykład implementuje, używa wielu składników. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.
Otwórz plik pnp_temperature_controller.js w wybranym edytorze kodu. Przykładowy kod pokazuje, jak:
Zdefiniuj element
modelId
DTMI dla wdrażanych urządzeń. Ten element DTMI jest zdefiniowany przez użytkownika i musi być zgodny z dtMI modelu DTDL kontrolera temperatury.Zaimplementuj składniki zdefiniowane w modelu DTDL kontrolera temperatury. Składniki w rzeczywistym kontrolerze temperatury powinny implementować te dwa interfejsy. Te dwa interfejsy są już publikowane w centralnym repozytorium. W tym przykładzie dwa interfejsy to:
- Termostat
- Informacje o urządzeniu opracowane przez platformę Azure
Zdefiniuj nazwy składników. Ten przykład zawiera dwa termostaty i jeden składnik informacyjny urządzenia.
Zdefiniuj nazwy poleceń, na które odpowiada urządzenie.
Zdefiniuj stałą
serialNumber
. ElementserialNumber
jest stały dla każdego danego urządzenia.Zdefiniuj programy obsługi poleceń.
Zdefiniuj funkcje do wysyłania odpowiedzi poleceń.
Definiowanie funkcji pomocnika w celu rejestrowania żądań poleceń.
Zdefiniuj funkcję pomocnika, aby utworzyć właściwości.
Zdefiniuj odbiornik aktualizacji właściwości.
Zdefiniuj funkcję do wysyłania danych telemetrycznych z tego urządzenia. Zarówno termostaty, jak i domyślny składnik wysyłają dane telemetryczne. Ta funkcja otrzymuje nazwę składnika jako parametr.
Zdefiniuj
main
funkcję, która:Używa zestawu SDK urządzenia do tworzenia klienta urządzenia i nawiązywania połączenia z centrum IoT Hub. Urządzenie dostarcza
modelId
urządzenie, aby usługa IoT Hub mogła zidentyfikować urządzenie jako urządzenie IoT Plug and Play.Uruchamia nasłuchiwanie żądań poleceń przy użyciu
onDeviceMethod
funkcji . Funkcja konfiguruje odbiornik dla żądań poleceń z usługi:- Kod DTDL urządzenia definiuje
reboot
polecenia igetMaxMinReport
. - Funkcja
commandHandler
definiuje sposób, w jaki urządzenie reaguje na polecenie.
- Kod DTDL urządzenia definiuje
Rozpoczyna wysyłanie danych telemetrycznych przy użyciu metod
setInterval
isendTelemetry
.Używa funkcji do utworzenia
helperCreateReportedPropertiesPatch
właściwości iupdateComponentReportedProperties
właściwości , aby zaktualizować właściwości.Służy
desiredPropertyPatchListener
do nasłuchiwania aktualizacji właściwości.Wyłącza wszystkie odbiorniki i zadania oraz zamyka pętlę po naciśnięciu Q lub q.
W obszarze Konfigurowanie środowiska utworzono cztery zmienne środowiskowe w celu skonfigurowania przykładu pod kątem używania usługi Device Provisioning Service (DPS) do nawiązywania połączenia z centrum IoT:
- IOTHUB_DEVICE_SECURITY_TYPE z wartością
DPS
- IOTHUB_DEVICE_DPS_ID_SCOPE z zakresem identyfikatora usługi DPS.
- IOTHUB_DEVICE_DPS_DEVICE_ID z wartością
my-pnp-device
. - IOTHUB_DEVICE_DPS_DEVICE_KEY przy użyciu klucza podstawowego rejestracji.
- IOTHUB_DEVICE_DPS_ENDPOINT z wartością
global.azure-devices-provisioning.net
.
Aby dowiedzieć się więcej na temat przykładowej konfiguracji, zobacz przykładowy plik readme.
Po wyświetleniu kodu użyj następującego polecenia, aby uruchomić przykład:
node pnp_temperature_controller.js
Zobaczysz następujące dane wyjściowe wskazujące, że urządzenie zaczęło wysyłać dane telemetryczne do centrum i jest teraz gotowe do odbierania poleceń i aktualizacji właściwości.
Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.
Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT
Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.
Otwórz eksploratora usługi Azure IoT.
Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.
Na stronie Ustawienia usługi IoT Plug and Play wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.
Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.
Kliknij identyfikator urządzenia utworzonego wcześniej.
W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.
Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.
Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.
Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.
Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.
Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.
Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.
Aby wyświetlić nową wartość, wybierz przycisk Odśwież .
Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.
Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.
W tym samouczku pokazano, jak utworzyć przykładową aplikację urządzenia IoT Plug and Play ze składnikami, połączyć ją z centrum IoT i użyć narzędzia Azure IoT Explorer, aby wyświetlić informacje wysyłane do centrum. Przykładowa aplikacja jest napisana w języku Python i jest zawarta w zestawie SDK urządzenia usługi Azure IoT dla języka Python. Konstruktor rozwiązań może użyć narzędzia Azure IoT Explorer, aby zrozumieć możliwości urządzenia IoT Plug and Play bez konieczności wyświetlania kodu urządzenia.
W tym samouczku zostały wykonane następujące czynności:
- Pobierz przykładowy kod.
- Uruchom przykładową aplikację urządzenia i sprawdź, czy nawiązuje połączenie z centrum IoT Hub.
- Przejrzyj kod źródłowy.
Wymagania wstępne
Przed kontynuowaniem upewnij się, że skonfigurowano środowisko, w tym centrum IoT Hub.
Ten samouczek można uruchomić w systemie Linux lub Windows. Polecenia powłoki w tym samouczku są zgodne z konwencją systemu Linux dla separatorów ścieżek "/
", jeśli obserwujesz w systemie Windows, pamiętaj, aby zamienić te separatory na "\
".
Do ukończenia tego samouczka potrzebny jest język Python zainstalowany na komputerze deweloperskim. Zapoznaj się z zestawem SDK języka Python usługi Azure IoT, aby zapoznać się z bieżącymi wymaganiami dotyczącymi wersji języka Python. Możesz sprawdzić wersję języka Python za pomocą następującego polecenia:
python --version
Najnowszą zalecaną wersję dla wielu platform można pobrać z python.org.
Pobieranie kodu
Pakiet azure-iot-device jest publikowany jako.
W lokalnym środowisku języka Python zainstaluj pakiet w następujący sposób:
pip install azure-iot-device
Jeśli ukończono Samouczek: łączenie przykładowej aplikacji urządzenia IoT Plug and Play działającej w systemie Windows z usługą IoT Hub (Python), sklonowaliśmy już repozytorium.
Sklonuj repozytorium IoT zestawu SDK języka Python:
git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python
Przeglądanie kodu
Ten przykład implementuje urządzenie kontrolera temperatury IoT Plug and Play. Model, który ten przykład implementuje, używa wielu składników. Plik modelu języka DTDL (Digital Twins Definition Language) dla urządzenia temperatury definiuje dane telemetryczne, właściwości i polecenia, które implementuje urządzenie.
Folder azure-iot-sdk-python/samples/pnp zawiera przykładowy kod urządzenia IoT Plug and Play. Pliki przykładu kontrolera temperatury to:
- temp_controller_with_thermostats.py
- pnp_helper.py
Kontroler temperatury ma wiele składników i składnik domyślny oparty na modelu DTDL kontrolera temperatury.
Otwórz plik temp_controller_with_thermostats.py w wybranym edytorze. Kod w tym pliku:
Importy
pnp_helper.py
umożliwiające uzyskanie dostępu do metod pomocnika.Definiuje dwa identyfikatory modelu cyfrowej reprezentacji bliźniaczej (DTMI), które jednoznacznie reprezentują dwa różne interfejsy zdefiniowane w modelu DTDL. Składniki w rzeczywistym kontrolerze temperatury powinny implementować te dwa interfejsy. Te dwa interfejsy są już publikowane w centralnym repozytorium. Te interfejsy DTMI muszą być znane użytkownikowi i różnią się w zależności od scenariusza implementacji urządzenia. W przypadku bieżącego przykładu te dwa interfejsy reprezentują:
- Termostat
- Informacje o urządzeniu opracowane przez platformę Azure.
Definiuje jednostki DTMI
model_id
dla wdrażanego urządzenia. DtMI jest definiowany przez użytkownika i musi być zgodny z dtMI w pliku modelu DTDL.Definiuje nazwy podane składnikom w pliku DTDL. Istnieją dwa termostaty w języku DTDL i jeden składnik informacji o urządzeniu. Stała o nazwie
serial_number
jest również definiowana w składniku domyślnym. Nieserial_number
można zmienić urządzenia.Definiuje implementacje programu obsługi poleceń. Te programy obsługi definiują, co robi urządzenie, gdy odbiera żądania poleceń.
Definiuje funkcje służące do tworzenia odpowiedzi polecenia. Te funkcje definiują sposób, w jaki urządzenie odpowiada na żądania poleceń. Funkcje odpowiedzi polecenia są tworzone, jeśli polecenie musi wysłać niestandardową odpowiedź z powrotem do centrum IoT. Jeśli funkcja odpowiedzi dla polecenia nie zostanie podana, zostanie wysłana ogólna odpowiedź. W tym przykładzie tylko polecenie getMaxMinReport ma niestandardową odpowiedź.
Definiuje funkcję do wysyłania danych telemetrycznych z tego urządzenia. Zarówno termostaty, jak i składnik domyślny wysyłają dane telemetryczne. Ta funkcja ma opcjonalny parametr nazwy składnika, aby umożliwić mu określenie, który składnik wysłał dane telemetryczne.
Definiuje odbiornik dla żądań poleceń.
Definiuje odbiornik dla aktualizacji żądanych właściwości.
main
Ma funkcję, która:Używa zestawu SDK urządzenia do tworzenia klienta urządzenia i nawiązywania połączenia z centrum IoT Hub. Urządzenie wysyła
model_id
element , aby centrum IoT mogło zidentyfikować urządzenie jako urządzenie IoT Plug and Play.create_reported_properties
Używa funkcji w pliku pomocnika do utworzenia właściwości. Przekaż nazwę składnika i właściwości jako pary klucz-wartość do tej funkcji.Aktualizuje czytelne właściwości składników przez wywołanie metody
patch_twin_reported_properties
.Uruchamia nasłuchiwanie żądań poleceń przy użyciu
execute_command_listener
funkcji . Funkcja konfiguruje odbiornik dla żądań poleceń z usługi. Podczas konfigurowania odbiornika należy podaćmethod_name
parametr ,user_command_handler
i opcjonalnycreate_user_response_handler
jako parametry.- Element
method_name
definiuje żądanie polecenia. W tym przykładzie model definiuje polecenia reboot i getMaxMinReport. - Funkcja
user_command_handler
definiuje, co powinno zrobić urządzenie po odebraniu polecenia. - Funkcja
create_user_response_handler
tworzy odpowiedź, która ma zostać wysłana do centrum IoT, gdy polecenie zostanie wykonane pomyślnie. Tę odpowiedź można wyświetlić w portalu. Jeśli ta funkcja nie zostanie podana, do usługi zostanie wysłana ogólna odpowiedź.
- Element
Służy
execute_property_listener
do nasłuchiwania aktualizacji właściwości.Rozpoczyna wysyłanie danych telemetrycznych przy użyciu polecenia
send_telemetry
. Przykładowy kod używa pętli do wywoływania trzech funkcji wysyłania danych telemetrycznych. Każdy z nich jest wywoływany co osiem sekundWyłącza wszystkie odbiorniki i zadania oraz zamyka pętlę po naciśnięciu Q lub q.
W obszarze Konfigurowanie środowiska utworzono cztery zmienne środowiskowe w celu skonfigurowania przykładu pod kątem używania usługi Device Provisioning Service (DPS) do nawiązywania połączenia z centrum IoT:
- IOTHUB_DEVICE_SECURITY_TYPE z wartością
DPS
- IOTHUB_DEVICE_DPS_ID_SCOPE z zakresem identyfikatora usługi DPS.
- IOTHUB_DEVICE_DPS_DEVICE_ID z wartością
my-pnp-device
. - IOTHUB_DEVICE_DPS_DEVICE_KEY przy użyciu klucza podstawowego rejestracji.
- IOTHUB_DEVICE_DPS_ENDPOINT z wartością
global.azure-devices-provisioning.net
.
Aby dowiedzieć się więcej na temat przykładowej konfiguracji, zobacz przykładowy plik readme.
Użyj następującego polecenia, aby uruchomić przykład:
python temp_controller_with_thermostats.py
Przykładowe urządzenie wysyła komunikaty telemetryczne co kilka sekund do centrum IoT Hub.
Zobaczysz następujące dane wyjściowe, które wskazują, że urządzenie wysyła dane telemetryczne do centrum i jest teraz gotowe do odbierania poleceń i aktualizacji właściwości.
Zachowaj przykład uruchomiony podczas wykonywania następnych kroków.
Weryfikowanie kodu za pomocą eksploratora usługi Azure IoT
Po uruchomieniu przykładu klienta urządzenia użyj narzędzia Azure IoT Explorer, aby sprawdzić, czy działa.
Otwórz eksploratora usługi Azure IoT.
Jeśli na stronie Centra IoT nie dodano jeszcze połączenia z centrum IoT, wybierz pozycję + Dodaj połączenie. Wprowadź parametry połączenia dla utworzonego wcześniej centrum IoT, a następnie wybierz pozycję Zapisz.
Na stronie Ustawienia usługi IoT Plug and Play wybierz pozycję + Dodaj > folder lokalny i wybierz folder modele lokalne, w którym zapisano pliki modelu.
Na stronie Centra IoT kliknij nazwę centrum, z którym chcesz pracować. Zostanie wyświetlona lista urządzeń zarejestrowanych w centrum IoT.
Kliknij identyfikator urządzenia utworzonego wcześniej.
W menu po lewej stronie są wyświetlane różne typy informacji dostępnych dla urządzenia.
Wybierz pozycję Składniki usługi IoT Plug and Play, aby wyświetlić informacje o modelu dla urządzenia.
Możesz wyświetlić różne składniki urządzenia. Domyślny składnik i wszystkie dodatkowe. Wybierz składnik do pracy.
Wybierz stronę Telemetria, a następnie wybierz pozycję Uruchom, aby wyświetlić dane telemetryczne wysyłane przez urządzenie dla tego składnika.
Wybierz stronę Właściwości (tylko do odczytu), aby wyświetlić właściwości tylko do odczytu zgłoszone dla tego składnika.
Wybierz stronę Właściwości (zapisywalne), aby wyświetlić właściwości zapisywalne, które można zaktualizować dla tego składnika.
Wybierz właściwość według jej nazwy, wprowadź nową wartość, a następnie wybierz pozycję Aktualizuj żądaną wartość.
Aby wyświetlić nową wartość, wybierz przycisk Odśwież .
Wybierz stronę Polecenia, aby wyświetlić wszystkie polecenia dla tego składnika.
Wybierz polecenie, które chcesz przetestować, aby ustawić parametr, jeśli istnieje. Wybierz pozycję Wyślij polecenie , aby wywołać polecenie na urządzeniu. Urządzenie może odpowiedzieć na polecenie w oknie wiersza polecenia, w którym jest uruchomiony przykładowy kod.
Czyszczenie zasobów
Jeśli planujesz kontynuować dalsze artykuły dla deweloperów urządzeń, możesz zachować i ponownie użyć zasobów używanych w tym artykule. W przeciwnym razie możesz usunąć zasoby utworzone w tym artykule, aby uniknąć dodatkowych opłat.
Możesz usunąć jednocześnie zarówno centrum, jak i zarejestrowane urządzenie, usuwając całą grupę zasobów za pomocą następującego polecenia interfejsu wiersza polecenia platformy Azure. Nie używaj tego polecenia, jeśli te zasoby współużytkują grupę zasobów z innymi zasobami, które chcesz zachować.
az group delete --name <YourResourceGroupName>
Aby usunąć tylko centrum IoT Hub, uruchom następujące polecenie przy użyciu interfejsu wiersza polecenia platformy Azure:
az iot hub delete --name <YourIoTHubName>
Aby usunąć tylko tożsamość urządzenia zarejestrowaną w centrum IoT Hub, uruchom następujące polecenie przy użyciu interfejsu wiersza polecenia platformy Azure:
az iot hub device-identity delete --hub-name <YourIoTHubName> --device-id <YourDeviceID>
Możesz również usunąć sklonowane przykładowe pliki z maszyny deweloperów.
Następne kroki
W tym samouczku przedstawiono sposób łączenia urządzenia IoT Plug and Play ze składnikami centrum IoT Hub. Aby dowiedzieć się więcej o modelach urządzeń usługi IoT Plug and Play, zobacz: