Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak utworzyć kod aplikacji backendowej w celu planowania i uruchamiania zadań.
Użyj usługi Azure IoT Hub, aby zaplanować i śledzić zadania aktualizujące maksymalnie miliony urządzeń na potrzeby tych operacji:
- Wywoływanie metod bezpośrednich
- Zaktualizowane bliźniaki urządzeń
Zadanie opakowuje jedną z tych akcji i śledzi wykonywanie względem zestawu urządzeń zdefiniowanych przez zapytanie bliźniaczej reprezentacji urządzenia. Na przykład aplikacja zaplecza może użyć zadania do wywołania metody bezpośredniej na 10 000 urządzeniach, które ponownie uruchamiają urządzenia. Należy określić zestaw urządzeń z zapytaniem bliźniaczej reprezentacji urządzenia i zaplanować uruchomienie zadania w przyszłości. Zadanie monitoruje postęp, gdy każde z urządzeń odbiera i wykonuje metodę bezpośrednią ponownego rozruchu.
Aby dowiedzieć się więcej o każdej z tych możliwości, zobacz:
- Bliźniaki urządzeń i ich właściwości: Wprowadzenie do bliźniaków urządzeń oraz Omówienie i korzystanie z bliźniaków urządzeń w usłudze IoT Hub
- Metody bezpośrednie: Przewodnik dewelopera usługi IoT Hub — metody bezpośrednie
Uwaga
Funkcje opisane w tym artykule są dostępne tylko w warstwie Standardowa usługi IoT Hub. Aby uzyskać więcej informacji na temat warstw podstawowej i standardowej/bezpłatnej usługi IoT Hub, zobacz Wybieranie odpowiedniej warstwy i rozmiaru usługi IoT Hub dla rozwiązania.
Uwaga
Ten artykuł ma na celu uzupełnienie przykładów zestawów SDK usługi Azure IoT, do których odwołuje się ten artykuł. Za pomocą narzędzi zestawu SDK można tworzyć zarówno aplikacje urządzeń, jak i zaplecza.
Wymagania wstępne
Centrum IoT Hub.
Zarejestrowane urządzenie
Jeśli aplikacja używa protokołu MQTT, upewnij się, że port 8883 jest otwarty w zaporze. Protokół MQTT komunikuje się za pośrednictwem portu 8883. Ten port może zostać zablokowany w niektórych środowiskach sieci firmowych i edukacyjnych. Aby uzyskać więcej informacji i sposobów obejścia tego problemu, zobacz Nawiązywanie połączenia z usługą IoT Hub (MQTT).
- Wymaga programu Visual Studio
Omówienie
W tym artykule opisano, jak używać zestawu SDK usługi Azure IoT dla platformy .NET do tworzenia kodu aplikacji usługi zaplecza do zaplanowania zadania, które wywoła metodę bezpośrednią lub przeprowadzi aktualizację stanu urządzenia na jednym lub kilku urządzeniach.
Dodaj pakiet NuGet usługi
Aplikacje usługi zaplecza wymagają pakietu NuGet Microsoft.Azure.Devices .
Używanie instrukcji
Dodaj następujące instrukcje using.
using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;
using System.Threading;
using System.Threading.Tasks;
Nawiązywanie połączenia z centrum IoT
Usługę zaplecza można połączyć z usługą IoT Hub przy użyciu następujących metod:
- Zasady dostępu współdzielonego
- Microsoft Entra
Ważne
Ten artykuł zawiera kroki nawiązywania połączenia z usługą przy użyciu sygnatury dostępu współdzielonego. Ta metoda uwierzytelniania jest wygodna do testowania i oceny, ale uwierzytelnianie w usłudze przy użyciu identyfikatora Entra firmy Microsoft lub tożsamości zarządzanych jest bardziej bezpieczne. Aby dowiedzieć się więcej, zobacz Najlepsze rozwiązania w zakresie zabezpieczeń rozwiązań > IoT w chmurze.
Nawiązywanie połączenia przy użyciu zasad dostępu współdzielonego
Połącz aplikację zaplecza z urządzeniem przy użyciu polecenia CreateFromConnectionString.
W tym artykule opisano kod zaplecza, który może zaplanować zadanie wywołujące metodę bezpośrednią, zaplanować zadanie aktualizujące zastępczą reprezentację urządzenia oraz monitorować postęp zadania dla jednego lub więcej urządzeń. Aby wykonać te operacje, usługa wymaga uprawnień do odczytu rejestru i zapisu rejestru. Domyślnie każde centrum IoT jest tworzone przy użyciu zasad dostępu współdzielonego o nazwie registryReadWrite , które przyznaje te uprawnienia.
Aby uzyskać więcej informacji na temat zasad dostępu współdzielonego, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu sygnatur dostępu współdzielonego.
static JobClient jobClient;
static string connectionString = "{Shared access policy connection string}";
jobClient = JobClient.CreateFromConnectionString(connString);
Nawiązywanie połączenia przy użyciu usługi Microsoft Entra
Aplikacja zaplecza korzystająca z usługi Microsoft Entra musi pomyślnie uwierzytelnić się i uzyskać poświadczenia tokenu zabezpieczającego przed nawiązaniem połączenia z usługą IoT Hub. Ten token jest przekazywany do metody połączenia z IoT Hub. Aby uzyskać ogólne informacje na temat konfigurowania i używania usługi Microsoft Entra dla usługi IoT Hub, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu identyfikatora Microsoft Entra.
Konfigurowanie aplikacji Microsoft Entra
Musisz skonfigurować aplikację Firmy Microsoft Entra skonfigurowaną dla preferowanych poświadczeń uwierzytelniania. Aplikacja zawiera parametry, takie jak klucz tajny klienta, który jest używany przez aplikację zaplecza do uwierzytelniania. Dostępne konfiguracje uwierzytelniania aplikacji to:
- Sekret klienta
- Certyfikat
- Poświadczenia tożsamości federacyjnej
Aplikacje Firmy Microsoft Entra mogą wymagać określonych uprawnień roli w zależności od wykonywanych operacji. Na przykład współautor bliźniaczej reprezentacji usługi IoT Hub jest wymagany do włączenia dostępu do odczytu i zapisu na urządzeniu usługi IoT Hub i bliźniaczych reprezentacjach modułów. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do usługi IoT Hub przy użyciu przypisania ról RBAC platformy Azure.
Aby uzyskać więcej informacji na temat konfigurowania aplikacji Microsoft Entra, zobacz Szybki start: rejestrowanie aplikacji przy użyciu Platforma tożsamości Microsoft.
Uwierzytelnij przy użyciu DefaultAzureCredential
Najprostszym sposobem użycia Microsoft Entra do uwierzytelniania aplikacji zaplecza jest użycie DefaultAzureCredential, ale zaleca się zastosowanie innej metody w środowisku produkcyjnym, w tym określonego TokenCredential
lub uproszczonego ChainedTokenCredential
. Dla uproszczenia w tej sekcji opisano uwierzytelnianie przy użyciu DefaultAzureCredential
i klucza tajnego klienta. Aby uzyskać więcej informacji na temat zalet i wad korzystania z DefaultAzureCredential
, zapoznaj się z Wskazówkami dotyczącymi użycia DefaultAzureCredential.
DefaultAzureCredential
obsługuje różne mechanizmy uwierzytelniania i określa odpowiedni typ poświadczeń na podstawie środowiska, w których jest wykonywany. Próbuje użyć wielu typów poświadczeń w kolejności, dopóki nie znajdzie działającego poświadczenia.
Firma Microsoft Entra wymaga tych pakietów NuGet i odpowiednich using
deklaracji.
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
W tym przykładzie tajny klucz klienta, identyfikator klienta i identyfikator dzierżawy aplikacji Microsoft Entra są dodawane do zmiennych środowiskowych. Te zmienne środowiskowe są używane przez DefaultAzureCredential
program do uwierzytelniania aplikacji. Wynikiem pomyślnego uwierzytelnienia Microsoft Entra jest poświadczenie tokenu zabezpieczającego przekazywane do metody połączenia IoT Hub.
string clientSecretValue = "xxxxxxxxxxxxxxx";
string clientID = "xxxxxxxxxxxxxx";
string tenantID = "xxxxxxxxxxxxx";
Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", clientSecretValue);
Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", clientID);
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", tenantID);
TokenCredential tokenCredential = new DefaultAzureCredential();
Wynikowy tokenCredential można następnie przekazać do metody łączenia z usługą IoT Hub dla dowolnego klienta zestawu SDK, który akceptuje poświadczenia firmy Microsoft Entra:
W tym przykładzie TokenCredential
parametr jest przekazywany do , aby ServiceClient.Create
utworzyć obiekt połączenia ServiceClient .
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
W tym przykładzie TokenCredential
parametr jest przekazywany do RegistryManager.Create
, aby utworzyć obiekt RegistryManager .
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Przykład kodu
Aby zapoznać się z roboczym przykładem uwierzytelniania usługi Entra firmy Microsoft, zobacz Przykład uwierzytelniania opartego na rolach.
Zaplanuj zadanie metody bezpośredniej
Użyj metody ScheduleDeviceMethodAsync , aby zaplanować zadanie uruchamiania metody bezpośredniej na jednym lub wielu urządzeniach.
Użyj obiektu CloudToDeviceMethod, aby określić nazwę metody bezpośredniej oraz wartości limitu czasu połączenia urządzenia.
Na przykład:
// The CloudToDeviceMethod record specifies the direct method name and device connection time-out
CloudToDeviceMethod directMethod =
new CloudToDeviceMethod("LockDoor", TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(5));
W tym przykładzie zaplanowano zadanie dla metody bezpośredniej o nazwie "LockDoor" na jednym urządzeniu o nazwie "Device-1". Urządzenia uwzględnione w zaplanowanym zadaniu są zawarte w drugim parametrze jako warunek zapytania. Aby uzyskać więcej informacji na temat warunków zapytań, zobacz Język zapytań usługi IoT Hub dla sobowtórów urządzeń i modułów, zadań i routingu komunikatów.
string methodJobId = Guid.NewGuid().ToString(); // a unique job ID
static string deviceId = "Device-1"; // In this example, there is only one device affected
JobResponse result = await jobClient.ScheduleDeviceMethodAsync(methodJobId,
$"DeviceId IN ['{deviceId}']",
directMethod,
DateTime.UtcNow,
(long)TimeSpan.FromMinutes(2).TotalSeconds);
Zaplanuj zadanie aktualizacji bliźniaka urządzenia
Użyj ScheduleTwinUpdateAsync, aby zaplanować nowe zadanie aktualizacji żądanych właściwości i tagów bliźniaczej reprezentacji urządzenia do uruchomienia na jednym lub więcej urządzeniach.
Najpierw utwórz i wypełnij obiekt Device Twin urządzenia na potrzeby aktualizacji. Na przykład:
static string deviceId = "Device-1";
Twin twin = new Twin(deviceId);
twin.Tags = new TwinCollection();
twin.Tags["Building"] = "43";
twin.Tags["Floor"] = "3";
twin.ETag = "*";
twin.Properties.Desired["LocationUpdate"] = DateTime.UtcNow;
Następnie wywołaj ScheduleTwinUpdateAsync
. Określ urządzenia, które mają zostać zaktualizowane jako zapytanie w drugim parametrze. Aby uzyskać więcej informacji na temat warunków zapytań, zobacz język zapytań IoT Hub dla bliźniaków urządzeń i modułów, zadań oraz routingu wiadomości.
string twinJobId = Guid.NewGuid().ToString();
JobResponse createJobResponse = jobClient.ScheduleTwinUpdateAsync(
twinJobId,
$"DeviceId IN ['{deviceId}']",
twin,
DateTime.UtcNow,
(long)TimeSpan.FromMinutes(2).TotalSeconds).Result;
Monitorowanie zadania
Użyj polecenia GetJobAsync , aby monitorować stan zadania dla określonego identyfikatora zadania.
W tym przykładzie status zadania jest okresowo sprawdzany dla zadanego identyfikatora, aż do momentu ukończenia lub niepowodzenia zadania. Na przykład:
JobResponse result;
do
{
result = await jobClient.GetJobAsync(jobId);
Console.WriteLine("Job Status : " + result.Status.ToString());
Thread.Sleep(2000);
} while ((result.Status != JobStatus.Completed) && (result.Status != JobStatus.Failed));
Przykłady zaplanowanych zadań SDK
Zestaw SDK usługi Azure IoT dla platformy .NET udostępnia działające przykłady aplikacji usług obsługujących zadania planowania zadań. Aby uzyskać więcej informacji, zobacz:
- Wymaga zestawu Java SE Development Kit 8. Upewnij się, że wybrano Java 8 w sekcji Obsługa długoterminowa, aby przejść do pobierania zestawu JDK 8.
Omówienie
W tym artykule opisano sposób używania zestawu Azure IoT SDK dla Javy do tworzenia kodu aplikacji zaplecza serwisowego w celu zaplanowania zadania do wywołania metody bezpośredniej lub aktualizacji bliźniaka urządzenia na jednym lub więcej urządzeniach.
Instrukcje importowania usługi
Klasa JobClient zawiera metody, których usługi mogą używać do planowania zadań.
Użyj poniższych instrukcji importowania usługi, aby uzyskać dostęp do zestawu AZURE IoT SDK dla języka Java.
import com.microsoft.azure.sdk.iot.service.devicetwin.DeviceTwinDevice;
import com.microsoft.azure.sdk.iot.service.devicetwin.Pair;
import com.microsoft.azure.sdk.iot.service.devicetwin.Query;
import com.microsoft.azure.sdk.iot.service.devicetwin.SqlQuery;
import com.microsoft.azure.sdk.iot.service.jobs.JobClient;
import com.microsoft.azure.sdk.iot.service.jobs.JobResult;
import com.microsoft.azure.sdk.iot.service.jobs.JobStatus;
import java.util.Date;
import java.time.Instant;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
Nawiązywanie połączenia z usługą IoT Hub
Usługę zaplecza można połączyć z usługą IoT Hub przy użyciu następujących metod:
- Zasady dostępu współdzielonego
- Microsoft Entra
Ważne
Ten artykuł zawiera kroki nawiązywania połączenia z usługą przy użyciu sygnatury dostępu współdzielonego. Ta metoda uwierzytelniania jest wygodna do testowania i oceny, ale uwierzytelnianie w usłudze przy użyciu identyfikatora Entra firmy Microsoft lub tożsamości zarządzanych jest bardziej bezpieczne. Aby dowiedzieć się więcej, zobacz Najlepsze rozwiązania w zakresie zabezpieczeń rozwiązań > IoT w chmurze.
Nawiązywanie połączenia przy użyciu zasad dostępu współdzielonego
Użyj konstruktora JobClient , aby utworzyć połączenie z centrum IoT Hub. Obiekt JobClient
obsługuje komunikację z centrum IoT Hub.
W tym artykule opisano kod back-endu, który może zaplanować zadanie wywoływania metody bezpośredniej, zaplanować zadanie aktualizacji bliźniaczego modelu urządzenia i monitorować postęp zadania dla co najmniej jednego urządzenia. Aby wykonać te operacje, usługa wymaga uprawnień do odczytu rejestru i zapisu rejestru. Domyślnie każde centrum IoT jest tworzone przy użyciu zasad dostępu współdzielonego o nazwie registryReadWrite , które przyznaje te uprawnienia.
Aby uzyskać więcej informacji na temat zasad dostępu współdzielonego, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu sygnatur dostępu współdzielonego.
Na przykład:
public static final String iotHubConnectionString = "{Shared access policy connection string}";
JobClient jobClient = new JobClient(iotHubConnectionString);
Nawiązywanie połączenia przy użyciu usługi Microsoft Entra
Aplikacja zaplecza korzystająca z usługi Microsoft Entra musi pomyślnie uwierzytelnić się i uzyskać poświadczenia tokenu zabezpieczającego przed nawiązaniem połączenia z usługą IoT Hub. Ten token jest przekazywany do metody połączenia IoT Hub. Aby uzyskać ogólne informacje na temat konfigurowania i używania usługi Microsoft Entra dla usługi IoT Hub, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu identyfikatora Microsoft Entra.
Aby zapoznać się z omówieniem uwierzytelniania Java SDK, zobacz Uwierzytelnianie platformy Azure przy użyciu języka Java i tożsamości Azure.
Dla uproszczenia ta sekcja koncentruje się na opisywaniu uwierzytelniania przy użyciu klucza tajnego klienta.
Konfigurowanie aplikacji Microsoft Entra
Musisz skonfigurować aplikację Firmy Microsoft Entra skonfigurowaną dla preferowanych poświadczeń uwierzytelniania. Aplikacja zawiera parametry, takie jak klucz tajny klienta, który jest używany przez aplikację zaplecza do uwierzytelniania. Dostępne konfiguracje uwierzytelniania aplikacji to:
- Sekret klienta
- Certyfikat
- Poświadczenie tożsamości federacyjnej
Aplikacje Firmy Microsoft Entra mogą wymagać określonych uprawnień roli w zależności od wykonywanych operacji. Na przykład współautor bliźniaczej reprezentacji usługi IoT Hub jest wymagany do włączenia dostępu do odczytu i zapisu na urządzeniu usługi IoT Hub i bliźniaczych reprezentacjach modułów. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do usługi IoT Hub przy użyciu przypisania roli RBAC platformy Azure.
Aby uzyskać więcej informacji na temat konfigurowania aplikacji Microsoft Entra, zobacz Szybki start: rejestrowanie aplikacji przy użyciu Platforma tożsamości Microsoft.
Uwierzytelnij się przy użyciu DefaultAzureCredential
Najprostszym sposobem użycia Microsoft Entra do uwierzytelniania aplikacji zaplecza jest użycie DefaultAzureCredential, ale w środowisku produkcyjnym zaleca się użycie innej metody, w tym określonej TokenCredential
lub uproszczonej ChainedTokenCredential
.
Aby uzyskać więcej informacji na temat zalet i wad używania programu DefaultAzureCredential
, zobacz Łańcuchy poświadczeń w bibliotece klienta tożsamości platformy Azure dla języka Java.
DefaultAzureCredential obsługuje różne mechanizmy uwierzytelniania i określa odpowiedni typ poświadczeń na podstawie środowiska, w którym jest wykonywane. Próbuje użyć wielu typów poświadczeń w kolejności, dopóki nie znajdzie działającego poświadczenia.
Możesz uwierzytelnić poświadczenia aplikacji Microsoft Entra, używając DefaultAzureCredentialBuilder. Zapisz parametry połączenia, takie jak identyfikator dzierżawy (tenantID), identyfikator klienta (clientID) oraz wartości kluczy tajnych klienta jako zmienne środowiskowe. Po utworzeniu TokenCredential
, przekaż go do ServiceClient lub innego konstruktora jako parametr "credential".
W tym przykładzie DefaultAzureCredentialBuilder
próbuje potwierdzić uwierzytelnienie połączenia z listy opisanej w DefaultAzureCredential. Wynikiem pomyślnego uwierzytelnienia w Microsoft Entra jest poświadczenie tokenu zabezpieczającego przekazane do konstruktora takiego jak ServiceClient.
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Uwierzytelnianie przy użyciu ClientSecretCredentialBuilder
Aby utworzyć poświadczenia przy użyciu informacji o kluczu tajnym klienta, możesz użyć elementu ClientSecretCredentialBuilder . Jeśli ta metoda powiedzie się, zwraca wartość TokenCredential , która może zostać przekazana do klasy ServiceClient lub innego konstruktora jako parametru "credential".
W tym przykładzie do zmiennych środowiskowych dodano wartości klucza tajnego klienta rejestracji aplikacji Firmy Microsoft, identyfikatora klienta i identyfikatora dzierżawy. Te zmienne środowiskowe są używane przez ClientSecretCredentialBuilder
do kompilowania poświadczeń.
string clientSecretValue = System.getenv("AZURE_CLIENT_SECRET");
string clientID = System.getenv("AZURE_CLIENT_ID");
string tenantID = System.getenv("AZURE_TENANT_ID");
TokenCredential credential =
new ClientSecretCredentialBuilder()
.tenantId(tenantID)
.clientId(clientID)
.clientSecret(clientSecretValue)
.build();
Inne klasy uwierzytelniania
Zestaw JAVA SDK zawiera również te klasy, które uwierzytelniają aplikację zaplecza za pomocą usługi Microsoft Entra:
- AuthorizationCodeCredential
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePipelinesCredential
- ChainedTokenCredential
- ClientAssertionCredential
- ClientCertificateCredential
- DeviceCodeCredential
- EnvironmentCredential
- InteractiveBrowserCredential
- ManagedIdentityCredential
- OnBehalfOfCredential
Przykłady kodu
Aby zapoznać się z roboczymi przykładami uwierzytelniania usługi Entra firmy Microsoft, zobacz Przykład uwierzytelniania opartego na rolach.
Planowanie zadania aktualizacji metody bezpośredniej
Użyj metody scheduleDeviceMethod , aby uruchomić metodę bezpośrednią na jednym lub wielu urządzeniach.
Ta przykładowa metoda planuje zadanie dla metody bezpośredniej o nazwie "lockDoor" na urządzeniu o nazwie "Device-1".
// Schedule a job now to call the lockDoor direct method
// against a single device. Response and connection
// timeouts are set to 5 seconds.
String deviceId = "Device-1";
String jobId = "DMCMD" + UUID.randomUUID(); //Job ID must be unique
// How long the job is permitted to run without
// completing its work on the set of devices
private static final long maxExecutionTimeInSeconds = 30;
System.out.println("Schedule job " + jobId + " for device " + deviceId);
try {
JobResult jobResult = jobClient.scheduleDeviceMethod(jobId,
"deviceId='" + deviceId + "'",
"lockDoor",
5L, 5L, null,
new Date(),
maxExecutionTimeInSeconds);
} catch (Exception e) {
System.out.println("Exception scheduling direct method job: " + jobId);
System.out.println(e.getMessage());
}
Zaplanuj zadanie aktualizacji bliźniaczego modelu urządzenia
Użyj polecenia scheduleUpdateTwin , aby zaplanować zadanie uruchamiania aktualizacji bliźniaczej reprezentacji urządzenia na jednym lub wielu urządzeniach.
Najpierw przygotuj rekord DeviceTwinDevice dla aktualizacji bliźniaka urządzenia. Na przykład:
String deviceId = "Device-1";
//Create a device twin desired properties update object
DeviceTwinDevice twin = new DeviceTwinDevice(deviceId);
Set<Pair> desiredProperties = new HashSet<Pair>();
desiredProperties.add(new Pair("Building", 43));
desiredProperties.add(new Pair("Floor", 3));
twin.setDesiredProperties(desiredProperties);
// Optimistic concurrency control
twin.setETag("*");
Następnie wywołaj metodę scheduleUpdateTwin
, aby zaplanować zadanie aktualizacji. Na przykład:
String jobId = "DPCMD" + UUID.randomUUID(); //Unique job ID
// How long the job is permitted to run without
// completing its work on the set of devices
private static final long maxExecutionTimeInSeconds = 30;
// Schedule the update twin job to run now for a single device
System.out.println("Schedule job " + jobId + " for device " + deviceId);
try {
JobResult jobResult = jobClient.scheduleUpdateTwin(jobId,
"deviceId='" + deviceId + "'",
twin,
new Date(),
maxExecutionTimeInSeconds);
} catch (Exception e) {
System.out.println("Exception scheduling desired properties job: " + jobId);
System.out.println(e.getMessage());
}
Monitorowanie zadania
Użyj polecenia getJob , aby pobrać informacje o zadaniu na podstawie określonego identyfikatora zadania.
getJob
Zwraca obiekt JobResult zawierający metody i właściwości, których można użyć do sprawdzania informacji o zadaniu, w tym stanu uruchomienia.
Na przykład:
try {
JobResult jobResult = jobClient.getJob(jobId);
if(jobResult == null)
{
System.out.println("No JobResult for: " + jobId);
return;
}
// Check the job result until it's completed
while(jobResult.getJobStatus() != JobStatus.completed)
{
Thread.sleep(100);
jobResult = jobClient.getJob(jobId);
System.out.println("Status " + jobResult.getJobStatus() + " for job " + jobId);
}
System.out.println("Final status " + jobResult.getJobStatus() + " for job " + jobId);
} catch (Exception e) {
System.out.println("Exception monitoring job: " + jobId);
System.out.println(e.getMessage());
return;
}
Wykonywanie zapytań o stan zadania
Użyj funkcji queryDeviceJob , aby wykonać zapytanie dotyczące stanu zadania dla co najmniej jednego zadania.
Na przykład:
private static void queryDeviceJobs(JobClient jobClient, String start) throws Exception {
System.out.println("\nQuery device jobs since " + start);
// Create a jobs query using the time the jobs started
Query deviceJobQuery = jobClient
.queryDeviceJob(SqlQuery.createSqlQuery("*", SqlQuery.FromType.JOBS, "devices.jobs.startTimeUtc > '" + start + "'", null).getQuery());
// Iterate over the list of jobs and print the details
while (jobClient.hasNextJob(deviceJobQuery)) {
System.out.println(jobClient.getNextJob(deviceJobQuery));
}
}
Przykład zadania w harmonogramie SDK
Zestaw SDK usługi Azure IoT dla języka Java udostępnia działającą przykładową aplikację usługi, która obsługuje zadania planowania zadań. Aby uzyskać więcej informacji, zobacz Przykład klienta zadania.
- Zestaw PYTHON SDK — zalecane jest użycie języka Python w wersji 3.7 lub nowszej . Upewnij się, że używasz 32-bitowej lub 64-bitowej instalacji zgodnie z wymaganiami konfiguracji. Po wyświetleniu monitu podczas instalacji upewnij się, że język Python został dodany do zmiennej środowiskowej specyficznej dla platformy.
Omówienie
W tym artykule opisano sposób użycia zestawu SDK usługi Azure IoT dla języka Python w celu utworzenia kodu aplikacji usługi zaplecza w celu zaplanowania zadania wywoływania metody bezpośredniej lub przeprowadzania aktualizacji żądanej właściwości bliźniaczej reprezentacji urządzenia na co najmniej jednym urządzeniu.
Instalowanie pakietu
Aby tworzyć aplikacje usługi zaplecza, należy zainstalować bibliotekę azure-iot-hub .
pip install azure-iot-hub
Instrukcje importu
Klasa IoTHubJobManager uwidacznia wszystkie metody wymagane do utworzenia aplikacji zaplecza w celu planowania zadań z usługi.
Dodaj następujące polecenia import
.
import os
import sys
import datetime
import time
import threading
import uuid
import msrest
from azure.iot.hub import IoTHubJobManager
from azure.iot.hub.models import JobProperties, JobRequest, Twin, TwinProperties, CloudToDeviceMethod
Nawiązywanie połączenia z centrum IoT
Usługę zaplecza można połączyć z usługą IoT Hub przy użyciu następujących metod:
- Zasady dostępu współdzielonego
- Microsoft Entra
Ważne
Ten artykuł zawiera kroki nawiązywania połączenia z usługą przy użyciu sygnatury dostępu współdzielonego. Ta metoda uwierzytelniania jest wygodna do testowania i oceny, ale uwierzytelnianie w usłudze przy użyciu identyfikatora Entra firmy Microsoft lub tożsamości zarządzanych jest bardziej bezpieczne. Aby dowiedzieć się więcej, zobacz Najlepsze rozwiązania w zakresie zabezpieczeń rozwiązań > IoT w chmurze.
Nawiązywanie połączenia przy użyciu zasad dostępu współdzielonego
Nawiąż połączenie z centrum IoT używając from_connection_string.
W tym artykule opisano kod zaplecza serwera, który może zaplanować zadanie wywołania metody bezpośredniej, zaplanować zadanie aktualizacji bliźniaka urządzenia oraz monitorować postęp zadania dla co najmniej jednego urządzenia. Aby wykonać te operacje, usługa wymaga uprawnień do odczytu rejestru i zapisu rejestru. Domyślnie każde centrum IoT jest tworzone przy użyciu zasad dostępu współdzielonego o nazwie registryReadWrite , które przyznaje te uprawnienia.
Aby uzyskać więcej informacji na temat zasad dostępu współdzielonego, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu sygnatur dostępu współdzielonego.
Na przykład:
IoTHubConnectionString = "{Shared access policy connection string}"
iothub_job_manager = IoTHubJobManager.from_connection_string(IoTHubConnectionString)
Nawiązywanie połączenia przy użyciu usługi Microsoft Entra
Aplikacja zaplecza korzystająca z usługi Microsoft Entra musi pomyślnie uwierzytelnić się i uzyskać poświadczenia tokenu zabezpieczającego przed nawiązaniem połączenia z usługą IoT Hub. Ten token jest przekazywany do metody połączenia z usługą IoT Hub. Aby uzyskać ogólne informacje na temat konfigurowania i używania usługi Microsoft Entra dla usługi IoT Hub, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu identyfikatora Microsoft Entra.
Konfigurowanie aplikacji Microsoft Entra
Musisz skonfigurować aplikację Firmy Microsoft Entra skonfigurowaną dla preferowanych poświadczeń uwierzytelniania. Aplikacja zawiera parametry, takie jak klucz tajny klienta, który jest używany przez aplikację zaplecza do uwierzytelniania. Dostępne konfiguracje uwierzytelniania aplikacji to:
- Klucz tajny klienta
- Certyfikat
- Poświadczenie tożsamości federacyjnej
Aplikacje Firmy Microsoft Entra mogą wymagać określonych uprawnień roli w zależności od wykonywanych operacji. Na przykład wchodzący w skład IoT Hub Twin Contributor jest niezbędny, aby umożliwić dostęp do odczytu i zapisu na urządzeniu IoT Hub oraz w bliźniaczych reprezentacjach modułów. Aby uzyskać więcej informacji, zapoznaj się z Zarządzanie dostępem do usługi IoT Hub za pomocą przypisywania ról RBAC w platformie Azure.
Aby uzyskać więcej informacji na temat konfigurowania aplikacji Microsoft Entra, zobacz Szybki start: rejestrowanie aplikacji przy użyciu Platforma tożsamości Microsoft.
Uwierzytelnianie przy użyciu DefaultAzureCredential
Najprostszym sposobem użycia usługi Microsoft Entra do uwierzytelniania aplikacji zaplecza jest użycie DefaultAzureCredential, ale zaleca się użycie innej metody w środowisku produkcyjnym, w tym określonej TokenCredential
lub uproszczonej ChainedTokenCredential
. Dla uproszczenia w tej sekcji opisano uwierzytelnianie przy użyciu DefaultAzureCredential
i klucza tajnego klienta. Aby uzyskać więcej informacji na temat zalet i wad korzystania z DefaultAzureCredential
, zobacz Wskazówki dotyczące użycia dla elementu DefaultAzureCredential.
DefaultAzureCredential
obsługuje różne mechanizmy uwierzytelniania i określa odpowiedni typ poświadczeń na podstawie środowiska, w których jest wykonywany. Próbuje użyć wielu typów poświadczeń w kolejności, dopóki nie znajdzie działającego poświadczenia.
Microsoft Entra wymaga tych pakietów NuGet i odpowiednich instrukcji using
:
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
W tym przykładzie tajny klucz klienta rejestracji aplikacji Microsoft Entra, identyfikator klienta i identyfikator dzierżawy są dodawane do zmiennych środowiskowych. Te zmienne środowiskowe są używane przez DefaultAzureCredential
program do uwierzytelniania aplikacji. Wynikiem pomyślnego uwierzytelnienia firmy Microsoft Entra jest poświadczenie tokenu zabezpieczającego przekazywane do metody połączenia usługi IoT Hub.
string clientSecretValue = "xxxxxxxxxxxxxxx";
string clientID = "xxxxxxxxxxxxxx";
string tenantID = "xxxxxxxxxxxxx";
Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", clientSecretValue);
Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", clientID);
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", tenantID);
TokenCredential tokenCredential = new DefaultAzureCredential();
Wynikowy tokenCredential można następnie przekazać do metody łączenia z usługą IoT Hub dla dowolnego klienta zestawu SDK, który akceptuje poświadczenia firmy Microsoft Entra:
W tym przykładzie TokenCredential
jest przekazywany do ServiceClient.Create
w celu utworzenia obiektu połączenia ServiceClient.
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
W tym przykładzie TokenCredential
jest przekazywane do RegistryManager.Create
, aby utworzyć obiekt RegistryManager.
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Przykład kodu
Aby zapoznać się z roboczym przykładem uwierzytelniania usługi Entra firmy Microsoft, zobacz Przykład uwierzytelniania opartego na rolach.
Zaplanuj zadanie metody bezpośredniej
Użyj create_scheduled_job , aby zaplanować nową metodę bezpośrednią, aby uruchomić metodę bezpośrednią na jednym lub wielu urządzeniach:
create_scheduled_job
uwagi o parametrach:
-
job_id
musi być unikatowa - Ustaw element
type
na wartośćscheduleDeviceMethod
- Użyj
cloud_to_device_method
do ustawienia nazwy metody bezpośredniej i ładunku - Użyj
max_execution_time_in_seconds
polecenia , aby określić czas wykonywania w sekundach - Użyj
query_condition
do określenia urządzeń, które mają być uwzględnione w wywołaniu metody bezpośredniej. Aby uzyskać więcej informacji na temat warunków zapytań, zobacz język zapytań usługi IoT Hub dotyczący urządzeń i modułów bliźniaczych, zadań i routingu wiadomości.
Na przykład:
METHOD_NAME = "lockDoor"
METHOD_PAYLOAD = "{\"lockTime\":\"10m\"}"
job_id = uuid.uuid4()
DEVICE_ID = "Device-1"
TIMEOUT = 60
job_request = JobRequest()
job_request.job_id = job_id
job_request.type = "scheduleDeviceMethod"
job_request.start_time = datetime.datetime.utcnow().isoformat()
job_request.cloud_to_device_method = CloudToDeviceMethod(method_name=METHOD_NAME, payload=METHOD_PAYLOAD)
job_request.max_execution_time_in_seconds = TIMEOUT
job_request.query_condition = "DeviceId in ['{}']".format(device_id)
new_job_response = iothub_job_manager.create_scheduled_job(job_id, job_request)
Zaplanuj zadanie aktualizacji bliźniaka urządzenia
Użyj create_scheduled_job, aby utworzyć nowe zadanie do uruchomienia aktualizacji żądanych właściwości device twin na jednym lub wielu urządzeniach.
create_scheduled_job
uwagi o parametrach:
-
job_id
musi być unikatowa - Ustaw element
type
na wartośćscheduleUpdateTwin
- Użyj
update_twin
, aby ustawić nazwę metody bezpośredniej i ładunek - Użyj
max_execution_time_in_seconds
polecenia , aby określić czas wykonywania w sekundach - Służy
query_condition
do określania warunku dla co najmniej jednego urządzenia, które mają wywołanie metody bezpośredniej. Aby uzyskać więcej informacji na temat warunków zapytań, zobacz Język zapytań usługi IoT Hub dla bliźniaczych reprezentacji urządzeń i modułów, zadań i routingu komunikatów.
Na przykład:
UPDATE_PATCH = {"building":43,"floor":3}
job_id = uuid.uuid4()
TIMEOUT = 60
job_request = JobRequest()
job_request.job_id = job_id
job_request.type = "scheduleUpdateTwin"
job_request.start_time = datetime.datetime.utcnow().isoformat()
job_request.update_twin = Twin(etag="*", properties=TwinProperties(desired=UPDATE_PATCH))
job_request.max_execution_time_in_seconds = TIMEOUT
job_request.query_condition = "DeviceId in ['{}']".format(device_id)
new_job_response = iothub_job_manager.create_scheduled_job(job_id, job_request)
Monitorowanie zadania
Użyj get_scheduled_job , aby pobrać szczegóły określonego zadania w usłudze IoT Hub.
W tym przykładzie stan zadania jest sprawdzany pod kątem określonego identyfikatora zadania co pięć sekund do momentu ukończenia zadania.
while True:
get_job_response = iothub_job_manager.get_scheduled_job(job_request.job_id)
print_job_response("Get job response: ", get_job_response)
if get_job_response.status == "completed":
print ( "Job is completed." )
time.sleep(5)
Przykłady harmonogramu zadań SDK
Zestaw SDK usługi Azure IoT dla języka Python udostępnia działające przykłady aplikacji usług, które obsługują zadania planowania zadań. Aby uzyskać więcej informacji, zobacz:
- Wymaga Node.js w wersji 10.0.x lub nowszej
Omówienie
W tym artykule opisano sposób użycia zestawu SDK usługi Azure IoT dla Node.js w celu utworzenia kodu aplikacji usługi zaplecza w celu zaplanowania zadania wywoływania metody bezpośredniej lub przeprowadzania aktualizacji bliźniaczej reprezentacji urządzenia na co najmniej jednym urządzeniu.
Instalowanie pakietu zestawu SDK usługi
Uruchom to polecenie, aby zainstalować usługę azure-iothub na maszynie deweloperskiej:
npm install azure-iothub --save
Klasa JobClient uwidacznia wszystkie metody wymagane do interakcji z planowaniem zadań z poziomu aplikacji zaplecza.
Nawiązywanie połączenia z centrum IoT
Usługę zaplecza można połączyć z usługą IoT Hub przy użyciu następujących metod:
- Zasady dostępu współdzielonego
- Microsoft Entra
Ważne
Ten artykuł zawiera kroki nawiązywania połączenia z usługą przy użyciu sygnatury dostępu współdzielonego. Ta metoda uwierzytelniania jest wygodna do testowania i oceny, ale uwierzytelnianie w usłudze przy użyciu identyfikatora Entra firmy Microsoft lub tożsamości zarządzanych jest bardziej bezpieczne. Aby dowiedzieć się więcej, zobacz Najlepsze rozwiązania w zakresie zabezpieczeń rozwiązań > IoT w chmurze.
Nawiązywanie połączenia przy użyciu zasad dostępu współdzielonego
Użyj polecenia fromConnectionString , aby nawiązać połączenie z centrum IoT.
W tym artykule opisano kod zaplecza, który może zaplanować zadanie wywołania metody bezpośredniej, aktualizację bliźniaka urządzenia oraz monitorować postęp zadania dla jednego lub więcej urządzeń. Aby wykonać te operacje, usługa wymaga uprawnień do odczytu rejestru i zapisu rejestru. Domyślnie każde centrum IoT jest tworzone przy użyciu zasad dostępu współdzielonego o nazwie registryReadWrite , które przyznaje te uprawnienia.
Aby uzyskać więcej informacji na temat zasad dostępu współdzielonego, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu sygnatur dostępu współdzielonego.
Na przykład:
'use strict';
var JobClient = require('azure-iothub').JobClient;
var connectionString = '{Shared access policy connection string}';
var jobClient = JobClient.fromConnectionString(connectionString);
Nawiązywanie połączenia przy użyciu usługi Microsoft Entra
Aplikacja zaplecza korzystająca z usługi Microsoft Entra musi pomyślnie uwierzytelnić się i uzyskać poświadczenia tokenu zabezpieczającego przed nawiązaniem połączenia z usługą IoT Hub. Token ten jest przekazywany do metody połączenia z IoT Hub. Aby uzyskać ogólne informacje na temat konfigurowania i używania usługi Microsoft Entra dla usługi IoT Hub, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu identyfikatora Microsoft Entra.
Aby zapoznać się z omówieniem uwierzytelniania zestawu NODE.JS SDK, zobacz:
- Wprowadzenie do uwierzytelniania użytkowników na platformie Azure
- Biblioteka klienta tożsamości platformy Azure dla języka JavaScript
Konfigurowanie aplikacji Microsoft Entra
Musisz skonfigurować aplikację Firmy Microsoft Entra skonfigurowaną dla preferowanych poświadczeń uwierzytelniania. Aplikacja zawiera parametry, takie jak klucz tajny klienta, który jest używany przez aplikację zaplecza do uwierzytelniania. Dostępne konfiguracje uwierzytelniania aplikacji to:
- Sekret klienta
- Certyfikat
- Poświadczenie tożsamości federacyjnej
Aplikacje Firmy Microsoft Entra mogą wymagać określonych uprawnień roli w zależności od wykonywanych operacji. Na przykład współautor bliźniaczej reprezentacji usługi IoT Hub jest wymagany do włączenia dostępu do odczytu i zapisu na urządzeniu usługi IoT Hub i bliźniaczych reprezentacjach modułów. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do usługi IoT Hub przy użyciu przypisania roli RBAC na platformie Azure.
Aby uzyskać więcej informacji na temat konfigurowania aplikacji Microsoft Entra, zobacz Szybki start: rejestrowanie aplikacji przy użyciu Platforma tożsamości Microsoft.
Uwierzytelnij się przy użyciu wartości DefaultAzureCredential
Najprostszym sposobem uwierzytelnienia aplikacji backendowej przy użyciu Microsoft Entra jest użycie DefaultAzureCredential, ale zaleca się stosowanie innej metody w środowisku produkcyjnym, w tym określonej TokenCredential
lub wyspecjalizowanej ChainedTokenCredential
. Dla uproszczenia w tej sekcji opisano uwierzytelnianie przy użyciu DefaultAzureCredential
i klucza tajnego klienta.
Aby uzyskać więcej informacji na temat zalet i wad korzystania z usługi DefaultAzureCredential
, zobacz Łańcuchy poświadczeń w bibliotece klienta tożsamości platformy Azure dla języka JavaScript
DefaultAzureCredential obsługuje różne mechanizmy uwierzytelniania i określa odpowiedni typ poświadczeń na podstawie środowiska, w którym jest wykonywany. Próbuje użyć wielu typów poświadczeń w kolejności, dopóki nie znajdzie działającego poświadczenia.
Firma Microsoft Entra wymaga tego pakietu:
npm install --save @azure/identity
W tym przykładzie klucz tajny klienta rejestracji aplikacji Firmy Microsoft, identyfikator klienta i identyfikator dzierżawy zostały dodane do zmiennych środowiskowych. Te zmienne środowiskowe są używane przez DefaultAzureCredential
program do uwierzytelniania aplikacji. Wynikiem pomyślnego procesu uwierzytelnienia Microsoft Entra jest token zabezpieczający, który jest przekazywany do metody połączenia Centrum IoT.
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
Wynikowy token poświadczeń można następnie przekazać do fromTokenCredential w celu połączenia z IoT Hub dla dowolnego klienta zestawu SDK, który akceptuje poświadczenia Microsoft Entra.
fromTokenCredential
wymaga dwóch parametrów:
- Adres URL usługi platformy Azure — adres URL usługi platformy Azure powinien być w formacie
{Your Entra domain URL}.azure-devices.net
bez prefiksuhttps://
. Na przykładMyAzureDomain.azure-devices.net
. - Token poświadczeń platformy Azure
W tym przykładzie poświadczenia platformy Azure są uzyskiwane przy użyciu polecenia DefaultAzureCredential
. Następnie adres URL domeny i poświadczenia platformy Azure są przekazywane do Registry.fromTokenCredential
w celu utworzenia połączenia z usługą IoT Hub.
const { DefaultAzureCredential } = require("@azure/identity");
let Registry = require('azure-iothub').Registry;
// Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'
// Set environment variables
process.env['AZURE_CLIENT_SECRET'] = clientSecretValue;
process.env['AZURE_CLIENT_ID'] = clientID;
process.env['AZURE_TENANT_ID'] = tenantID;
// Acquire a credential object
const credential = new DefaultAzureCredential()
// Create an instance of the IoTHub registry
hostName = 'MyAzureDomain.azure-devices.net';
let registry = Registry.fromTokenCredential(hostName,credential);
Przykłady kodu
Aby zobaczyć działające przykłady uwierzytelniania w usłudze Microsoft Entra, zapoznaj się z Przykładami tożsamości usługi Azure.
Utwórz zadanie metody bezpośredniej
Użyj metody scheduleDeviceMethod , aby zaplanować zadanie uruchamiania metody bezpośredniej na jednym lub wielu urządzeniach.
Najpierw utwórz zmienną aktualizacji metody bezpośredniej, zawierającą informacje o nazwie metody, obciążeniu i czasie oczekiwania na odpowiedź. Na przykład:
var methodParams = {
methodName: 'lockDoor',
payload: null,
responseTimeoutInSeconds: 15 // Time-out after 15 seconds if device is unable to process method
};
Następnie wywołaj metodę scheduleDeviceMethod
, aby zaplanować zadanie wywołania metody bezpośredniej:
- Każde zadanie musi mieć unikatowy identyfikator zadania. Tego identyfikatora zadania można użyć do monitorowania zadania zgodnie z opisem w sekcji Monitorowanie zadania w tym artykule.
-
queryCondition
Określ parametr do oceny urządzeń do uruchomienia zadania. Aby uzyskać więcej informacji na temat warunków zapytań, zobacz Język zapytań usługi IoT Hub dla bliźniaczych reprezentacji urządzeń i modułów, zadań i routingu komunikatów. - Sprawdź wynik harmonogramu zadań w wywołaniu zwrotnym
jobResult
. Jeśli zadanie zostało pomyślnie zaplanowane, możesz monitorować stan zadania, jak pokazano w sekcji Monitorowanie zadania w tym artykule.
Na przykład:
var methodJobId = uuid.v4();
var queryCondition = "deviceId IN ['myDeviceId']";
var startTime = new Date();
var maxExecutionTimeInSeconds = 300;
jobClient.scheduleDeviceMethod(methodJobId,
queryCondition,
methodParams,
startTime,
maxExecutionTimeInSeconds,
function(err) {
if (err) {
console.error('Could not schedule direct method job: ' + err.message);
} else {
monitorJob(methodJobId, function(err, result) {
if (err) {
console.error('Could not monitor direct method job: ' + err.message);
} else {
console.log(JSON.stringify(result, null, 2));
}
});
}
});
Zaplanuj zadanie aktualizacji bliźniaka urządzenia
Użyj scheduleTwinUpdate, aby utworzyć nowe zadanie do uruchomienia aktualizacji bliźniaczego modelu na jednym lub wielu urządzeniach.
Najpierw utwórz zmienną aktualizacji żądanej właściwości bliźniaka urządzenia.
var twinPatch = {
etag: '*',
properties: {
desired: {
building: '43',
floor: 3
}
}
};
Następnie wywołaj metodę scheduleTwinUpdate
, aby zaplanować zadanie aktualizacji żądanej właściwości bliźniaka urządzenia:
- Każde zadanie musi mieć unikatowy identyfikator zadania. Tego identyfikatora zadania można użyć do monitorowania zadania zgodnie z opisem w sekcji Monitorowanie zadania w tym artykule.
-
queryCondition
Określ parametr do oceny urządzeń do uruchomienia zadania. Aby uzyskać więcej informacji na temat warunków zapytań, zobacz Język zapytań usługi IoT Hub dla bliźniaczych reprezentacji urządzeń i modułów, zadań i routingu komunikatów. - Sprawdź wywołanie zwrotne
jobResult
dla wyniku harmonogramu zadania. Jeśli zadanie zostało pomyślnie zaplanowane, możesz monitorować stan zadania, jak pokazano w sekcji Monitorowanie zadania w tym artykule.
Na przykład:
var twinJobId = uuid.v4();
var queryCondition = "deviceId IN ['myDeviceId']";
var startTime = new Date();
var maxExecutionTimeInSeconds = 300;
console.log('scheduling Twin Update job with id: ' + twinJobId);
jobClient.scheduleTwinUpdate(twinJobId,
queryCondition,
twinPatch,
startTime,
maxExecutionTimeInSeconds,
function(err) {
if (err) {
console.error('Could not schedule twin update job: ' + err.message);
} else {
monitorJob(twinJobId, function(err, result) {
if (err) {
console.error('Could not monitor twin update job: ' + err.message);
} else {
console.log(JSON.stringify(result, null, 2));
}
});
}
});
Monitorowanie zadania
Użyj polecenia getJob , aby monitorować stan zadania dla określonego identyfikatora zadania.
Ta przykładowa funkcja okresowo sprawdza stan zadania dla określonego identyfikatora zadania do czasu zakończenia lub niepowodzenia zadania.
function monitorJob (jobId, callback) {
var jobMonitorInterval = setInterval(function() {
jobClient.getJob(jobId, function(err, result) {
if (err) {
console.error('Could not get job status: ' + err.message);
} else {
console.log('Job: ' + jobId + ' - status: ' + result.status);
if (result.status === 'completed' || result.status === 'failed' || result.status === 'cancelled') {
clearInterval(jobMonitorInterval);
callback(null, result);
}
}
});
}, 5000);
}
Przykład zadania planowania SDK
Zestaw SDK usługi Azure IoT dla Node.js udostępnia działającą przykładową aplikację usługi, która obsługuje zadania planowania zadań. Aby uzyskać więcej informacji, zobacz Test E2E klienta zadań.