Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak vytvořit kód back-endové aplikace pro plánování a vysílání úloh.
Pomocí služby Azure IoT Hub můžete plánovat a sledovat úlohy, které aktualizují až miliony zařízení pro tyto operace:
- Vyvolání přímých metod
- Aktualizace digitálních dvojníků zařízení
Úloha obsahuje jednu z těchto akcí a sleduje průběh vůči sadě zařízení definované dotazem na dvojče zařízení. Back-endová aplikace může například pomocí úlohy vyvolat přímou metodu na 10 000 zařízeních, která zařízení restartuje. Zadáte sadu zařízení dotazem na dvojče zařízení a naplánujete úlohu ke spuštění v budoucnu. Úloha monitoruje průběh, když každé zařízení přijme a spustí přímou metodu restartování.
Další informace o každé z těchto funkcí najdete tady:
- Dvojče zařízení a vlastnosti: Začínáme s dvojčaty zařízení a Pochopit a používat dvojčata zařízení ve službě IoT Hub
- Přímé metody: Příručka pro vývojáře ioT Hubu – přímé metody
Poznámka:
Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard služby IoT Hub. Další informace o úrovních Basic a Standard/Free IoT Hub najdete v tématu Volba správné úrovně a velikosti služby IoT Hub pro vaše řešení.
Poznámka:
Tento článek je určený k doplnění vzorků SDK Azure IoT, na které je odkazováno v tomto článku. Nástroje sady SDK můžete použít k sestavení zařízení i back-endových aplikací.
Požadavky
IoT centrum
Zaregistrované zařízení
Pokud vaše aplikace používá protokol MQTT, ujistěte se, že je v bráně firewall otevřený port 8883. Protokol MQTT komunikuje přes port 8883. Tento port může být blokovaný v některých podnikových a vzdělávacích síťových prostředích. Další informace a způsoby řešení tohoto problému najdete v tématu Připojení ke službě IoT Hub (MQTT).
- Vyžaduje Visual Studio.
Přehled
Tento článek popisuje, jak pomocí sady Azure IoT SDK pro platformu .NET vytvořit kód aplikace back-endové služby pro naplánování úlohy k vyvolání přímého volání metody nebo provedení aktualizace dvojčete zařízení u jednoho nebo více zařízení.
Přidejte balíček NuGet pro službu
Aplikace back-endových služeb vyžadují balíček NuGet Microsoft.Azure.Devices .
Použití příkazů
Přidejte následující příkazy using.
using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;
using System.Threading;
using System.Threading.Tasks;
Připojení ke službě IoT Hub
Back-endovou službu můžete ke službě IoT Hub připojit pomocí následujících metod:
- Zásady sdíleného přístupu
- Microsoft Entra
Důležité
Tento článek obsahuje postup připojení ke službě pomocí sdíleného přístupového podpisu. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování ve službě pomocí MICROSOFT Entra ID nebo spravovaných identit je bezpečnější přístup. Další informace najdete v tématu Osvědčené postupy zabezpečení zabezpečení řešení > IoT v cloudu.
Připojení pomocí zásad sdíleného přístupu
Připojte back-endovou aplikaci k zařízení pomocí createFromConnectionString.
Tento článek popisuje back-endový kód, který může naplánovat úlohu pro vyvolání přímé metody, naplánování úlohy pro aktualizaci dvojčete zařízení a monitorování průběhu úlohy pro jedno nebo více zařízení. K provedení těchto operací potřebuje vaše služba oprávnění ke čtení registru a zápisu do registru. Ve výchozím nastavení se každé centrum IoT vytvoří se zásadami sdíleného přístupu nazvanými registryReadWrite, které udělí tato oprávnění.
Další informace o zásadách sdíleného přístupu najdete v tématu Řízení přístupu ke službě IoT Hub pomocí sdílených přístupových podpisů.
static JobClient jobClient;
static string connectionString = "{Shared access policy connection string}";
jobClient = JobClient.CreateFromConnectionString(connString);
Připojení pomocí Microsoft Entra
Back-endová aplikace, která používá Microsoft Entra, se musí před připojením ke službě IoT Hub úspěšně ověřit a získat přihlašovací údaje tokenu zabezpečení. Tento token se předá metodě připojení IoT Hubu. Obecné informace o nastavení a používání Microsoft Entra pro IoT Hub naleznete v tématu Řízení přístupu ke službě IoT Hub pomocí Microsoft Entra ID.
Konfigurace aplikace Microsoft Entra
Musíte nastavit aplikaci Microsoft Entra, která je nakonfigurovaná pro vaše upřednostňované přihlašovací údaje ověřování. Aplikace obsahuje parametry, jako je tajný klíč klienta, který používá back-endová aplikace k ověření. Dostupné konfigurace ověřování aplikací:
- Klientské tajemství
- Certifikát
- Pověření federované identity
Aplikace Microsoft Entra mohou v závislosti na provedených operacích vyžadovat určitá oprávnění role. K povolení přístupu ke čtení a zápisu k dvojicím zařízení a modulů IoT Hub je například potřeba Přispěvatel dvojčete IoT Hub. Pro více informací si přečtěte Správa přístupu ke službě IoT Hub pomocí přiřazení rolí Azure RBAC.
Další informace o nastavení aplikace Microsoft Entra najdete v tématu Rychlý start: Registrace aplikace na platformě Microsoft Identity Platform.
Ověřování pomocí DefaultAzureCredential
Nejjednodušší způsob, jak použít Microsoft Entra k ověření serverové aplikace, je využití DefaultAzureCredential, ale v produkčním prostředí je doporučeno použít jinou metodu, včetně konkrétního TokenCredential nebo zjednodušeného ChainedTokenCredential. Pro zjednodušení popisuje tato část ověřování pomocí DefaultAzureCredential a tajný klíč klienta. Další informace o výhodách a nevýhodách použití naleznete v pokynech k použití DefaultAzureCredentialpro DefaultAzureCredential.
DefaultAzureCredential podporuje různé mechanismy ověřování a určuje odpovídající typ přihlašovacích údajů na základě prostředí, ve které se provádí. Pokusí se použít více typů přihlašovacích údajů v pořadí, dokud nenajde funkční přihlašovací údaje.
Microsoft Entra vyžaduje tyto balíčky NuGet a odpovídající using příkazy:
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
V tomto příkladu se do proměnných prostředí přidají tajný klíč klienta, klientské ID a ID tenanta pro registraci aplikace Microsoft Entra. Tyto proměnné prostředí DefaultAzureCredential používá k ověření aplikace. Výsledkem úspěšného ověřování Microsoft Entra je zabezpečený tokenový přihlašovací údaj, který je předán do metody připojení IoT Hubu.
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();
Výsledný tokenCredential se pak dá předat metodě připojení ke službě IoT Hub pro libovolného klienta sady SDK, který přijímá přihlašovací údaje Microsoft Entra:
V tomto příkladu je TokenCredential předán do ServiceClient.Create pro vytvoření objektu připojení ServiceClient.
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
V tomto příkladu je TokenCredential předán do RegistryManager.Create, aby se vytvořil objekt RegistryManager.
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Ukázka kódu
Pro ukázku ověřování služby Microsoft Entra se podívejte na ukázku ověřování na základě rolí.
Naplánujte úlohu přímé metody
Pomocí ScheduleDeviceMethodAsync naplánujte úlohu, která spustí přímou metodu na jednom nebo několika zařízeních.
Pomocí CloudToDeviceMethod objektu zadejte název přímé metody a hodnoty časového limitu připojení zařízení.
Příklad:
// The CloudToDeviceMethod record specifies the direct method name and device connection time-out
CloudToDeviceMethod directMethod =
new CloudToDeviceMethod("LockDoor", TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(5));
Tento příklad naplánuje úlohu pro přímou metodu s názvem LockDoor na jednom zařízení s názvem Device-1. Zařízení zahrnutá v naplánované úloze obsahují druhý parametr jako podmínku dotazu. Další informace o podmínkách dotazu najdete v dotazovacím jazyce služby IoT Hub pro dvojčata zařízení a modulů, úlohy a směrování zpráv.
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);
Naplánování úlohy aktualizace dvojčete zařízení
Pomocí ScheduleTwinUpdateAsync naplánujte nové požadované vlastnosti dvojčete zařízení a úlohu aktualizace značek, která se spustí na jednom nebo více zařízeních.
Nejprve vytvořte a naplňte objekt Twin zařízení pro aktualizaci. Příklad:
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;
V dalším kroku zavolejte ScheduleTwinUpdateAsync. Zadejte zařízení, která se mají aktualizovat jako dotaz v druhém parametru. Další informace o podmínkách dotazu najdete v dotazovacím jazyce služby IoT Hub pro dvojčata zařízení a modulů, úlohy a směrování zpráv.
string twinJobId = Guid.NewGuid().ToString();
JobResponse createJobResponse = jobClient.ScheduleTwinUpdateAsync(
twinJobId,
$"DeviceId IN ['{deviceId}']",
twin,
DateTime.UtcNow,
(long)TimeSpan.FromMinutes(2).TotalSeconds).Result;
Monitorovat úlohu
Ke sledování stavu úlohy pro konkrétní ID úlohy použijte GetJobAsync .
Tento příklad pravidelně kontroluje stav úlohy podle ID úlohy, dokud se stav úlohy nedokončí nebo se nezdaří. Příklad:
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));
Příklady úloh plánu sady SDK
Sada Azure IoT SDK pro .NET poskytuje funkční ukázky aplikací služeb, které zpracovávají úlohy plánování úloh. Další informace naleznete v tématu:
- Vyžaduje Java SE Development Kit 8. Ujistěte se, že jste v části Dlouhodobá podpora vybrali Javu 8 a přejděte ke stažení sady JDK 8.
Přehled
Tento článek popisuje, jak pomocí sady Azure IoT SDK pro Javu vytvořit kód aplikace back-endové služby k naplánování úlohy pro vyvolání přímé metody nebo provedení aktualizace dvojčete zařízení na jednom nebo více zařízeních.
Příkazy importu služby
Třída JobClient obsahuje metody, které mohou služby použít k plánování úloh.
Pro přístup k sadě Azure IoT SDK pro Javu použijte následující příkazy importu služby.
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;
Připojení ke službě IoT Hub
Back-endovou službu můžete ke službě IoT Hub připojit pomocí následujících metod:
- Zásady sdíleného přístupu
- Microsoft Entra
Důležité
Tento článek obsahuje postup připojení ke službě pomocí sdíleného přístupového podpisu. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování ve službě pomocí MICROSOFT Entra ID nebo spravovaných identit je bezpečnější přístup. Další informace najdete v tématu Osvědčené postupy zabezpečení zabezpečení řešení > IoT v cloudu.
Připojení pomocí zásad sdíleného přístupu
K vytvoření připojení ke službě IoT Hub použijte konstruktor JobClient . Objekt JobClient zpracovává komunikaci s centrem IoT.
Tento článek popisuje back-endový kód, který může naplánovat úlohu pro vyvolání přímé metody, naplánování úlohy pro aktualizaci dvojčete zařízení a monitorování průběhu úlohy pro jedno nebo více zařízení. K provedení těchto operací potřebuje vaše služba oprávnění ke čtení registru a zápisu do registru. Ve výchozím nastavení se každé centrum IoT vytvoří se zásadami sdíleného přístupu nazvanými registryReadWrite, které udělí tato oprávnění.
Další informace o zásadách sdíleného přístupu najdete v tématu Řízení přístupu ke službě IoT Hub pomocí sdílených přístupových podpisů.
Příklad:
public static final String iotHubConnectionString = "{Shared access policy connection string}";
JobClient jobClient = new JobClient(iotHubConnectionString);
Připojení pomocí Microsoft Entra
Back-endová aplikace, která používá Microsoft Entra, se musí před připojením ke službě IoT Hub úspěšně ověřit a získat přihlašovací údaje tokenu zabezpečení. Tento token se předá metodě připojení IoT Hubu. Obecné informace o nastavení a používání Microsoft Entra pro IoT Hub naleznete v tématu Řízení přístupu ke službě IoT Hub pomocí Microsoft Entra ID.
Pro přehled ověřování pro Java SDK, podívejte se na Ověřování Azure s Java a Azure Identity.
Pro zjednodušení se tato část zaměřuje na popis ověřování pomocí tajného klíče klienta.
Konfigurace aplikace Microsoft Entra
Musíte nastavit aplikaci Microsoft Entra, která je nakonfigurovaná pro vaše upřednostňované přihlašovací údaje ověřování. Aplikace obsahuje parametry, jako je tajný klíč klienta, který používá back-endová aplikace k ověření. Dostupné konfigurace ověřování aplikací:
- Klientské tajemství
- Certifikát
- Pověření federované identity
Aplikace Microsoft Entra mohou v závislosti na provedených operacích vyžadovat určitá oprávnění role. K povolení přístupu ke čtení a zápisu k dvojicím zařízení a modulů IoT Hub je například potřeba Přispěvatel dvojčete IoT Hub. Pro více informací si přečtěte Správa přístupu ke službě IoT Hub pomocí přiřazení rolí Azure RBAC.
Další informace o nastavení aplikace Microsoft Entra najdete v tématu Rychlý start: Registrace aplikace na platformě Microsoft Identity Platform.
Ověřování pomocí DefaultAzureCredential
Nejjednodušší způsob, jak použít Microsoft Entra k ověření serverové aplikace, je využití DefaultAzureCredential, ale v produkčním prostředí je doporučeno použít jinou metodu, včetně konkrétního TokenCredential nebo zjednodušeného ChainedTokenCredential.
Další informace o výhodách a nevýhodách použití DefaultAzureCredentialnajdete v řetězcích přihlašovacích údajů v klientské knihovně Azure Identity pro Javu.
DefaultAzureCredential podporuje různé mechanismy ověřování a určuje odpovídající typ přihlašovacích údajů na základě prostředí, ve které se provádí. Pokusí se použít více typů přihlašovacích údajů v pořadí, dokud nenajde funkční přihlašovací údaje.
Přihlašovací údaje aplikace Microsoft Entra můžete ověřit pomocí defaultAzureCredentialBuilder. Uložte parametry připojení, jako jsou tenantID, tajný klíč klienta, ID klienta a hodnoty tajných kódů klienta, jako proměnné prostředí. Jakmile je TokenCredential vytvořen, předejte ho jako parametr 'credential' do ServiceClient nebo jiného konstruktoru.
V tomto příkladu DefaultAzureCredentialBuilder se pokusí ověřit připojení ze seznamu popsaného v části DefaultAzureCredential. Výsledkem úspěšného ověření Microsoft Entra je token zabezpečení, který je předán konstruktoru, jako ServiceClient.
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Ověřování pomocí ClientSecretCredentialBuilder
Pomocí ClientSecretCredentialBuilder můžete vytvořit přihlašovací údaje pomocí tajných informací klienta. Pokud je tato metoda úspěšná, vrátí tokenCredential , který lze předat ServiceClient nebo jinému tvůrci jako parametr credential.
V tomto příkladu byly do proměnných prostředí přidány hodnoty tajného klíče klienta, ID klienta a ID tenanta pro registraci aplikace Microsoft Entra. Tyto proměnné prostředí jsou používány ClientSecretCredentialBuilder ke generování přihlašovacích údajů.
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();
Jiné třídy ověřování
Sada Java SDK také obsahuje tyto třídy, které ověřují back-endovou aplikaci pomocí Microsoft Entra:
- AuthorizationCodeCredential
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePipelinesCredential
- ChainedTokenCredential
- ClientAssertionCredential
- ClientCertificateCredential
- DeviceCodeCredential
- EnvironmentCredential
- InteractiveBrowserCredential
- ManagedIdentityCredential
- OnBehalfOfCredential
Ukázky kódu
Pracovní ukázky ověřování služby Microsoft Entra najdete v ukázce ověřování na základě rolí.
Naplánování úlohy aktualizace přímé metody
Pomocí scheduleDeviceMethod spusťte přímou metodu na jednom nebo několika zařízeních.
Tato ukázková metoda naplánuje úlohu pro přímou metodu s názvem lockDoor na zařízení s názvem 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());
}
Naplánujte úlohu aktualizace dvojčete zařízení
Pomocí scheduleUpdateTwin naplánujte úlohu, která spustí aktualizaci dvojčete zařízení na jednom nebo několika zařízeních.
Nejprve si připravte záznam DeviceTwinDevice na aktualizaci zařízení dvojče. Příklad:
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("*");
Pak zavolejte scheduleUpdateTwin a naplánujte úlohu aktualizace. Příklad:
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());
}
Monitorovat úlohu
Pomocí funkce getJob můžete načíst informace o úloze na základě konkrétního ID úlohy.
getJob
vrátí JobResult objekt, který obsahuje metody a vlastnosti, které můžete použít ke kontrole informací o úloze včetně stavu spuštění.
Příklad:
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;
}
Zjistit stav úlohy
K dotazování stavu úlohy pro jednu nebo více úloh použijte queryDeviceJob .
Příklad:
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));
}
}
Příklad úlohy plánování sady SDK
Sada Azure IoT SDK pro Javu poskytuje funkční ukázku aplikace služby, která zpracovává úlohy plánování úloh. Další informace naleznete v části Ukázkový klient úloh.
- Python SDK – Doporučuje se Python verze 3.7 nebo novější . Ujistěte se, že používáte 32bitovou, nebo 64bitovou instalaci podle požadavků vašeho nastavení. Při vyzvání během instalace nezapomeňte přidat Python do proměnné prostředí specifické pro vaši platformu.
Přehled
Tento článek popisuje, jak pomocí sady Azure IoT SDK pro Python vytvořit kód aplikace back-endové služby pro naplánování úlohy, která spustí přímou metodu nebo provede aktualizaci požadovaných vlastností dvojčete zařízení na jednom či více zařízeních.
Instalace balíčku
Aby bylo možné vytvářet aplikace back-endové služby, musí být nainstalovaná knihovna azure-iot-hub .
pip install azure-iot-hub
Příkazy importu
Třída IoTHubJobManager zveřejňuje všechny metody potřebné k vytvoření back-endové aplikace pro plánování úloh ze služby.
Přidejte následující prohlášení 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
Připojení ke službě IoT Hub
Back-endovou službu můžete ke službě IoT Hub připojit pomocí následujících metod:
- Zásady sdíleného přístupu
- Microsoft Entra
Důležité
Tento článek obsahuje postup připojení ke službě pomocí sdíleného přístupového podpisu. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování ve službě pomocí MICROSOFT Entra ID nebo spravovaných identit je bezpečnější přístup. Další informace najdete v tématu Osvědčené postupy zabezpečení zabezpečení řešení > IoT v cloudu.
Připojení pomocí zásad sdíleného přístupu
Připojte se ke službě IoT Hub pomocí from_connection_string.
Tento článek popisuje back-endový kód, který může naplánovat úlohu pro vyvolání přímé metody, naplánování úlohy pro aktualizaci dvojčete zařízení a monitorování průběhu úlohy pro jedno nebo více zařízení. K provedení těchto operací potřebuje vaše služba oprávnění ke čtení registru a zápisu do registru. Ve výchozím nastavení se každé centrum IoT vytvoří se zásadami sdíleného přístupu nazvanými registryReadWrite, které udělí tato oprávnění.
Další informace o zásadách sdíleného přístupu najdete v tématu Řízení přístupu ke službě IoT Hub pomocí sdílených přístupových podpisů.
Příklad:
IoTHubConnectionString = "{Shared access policy connection string}"
iothub_job_manager = IoTHubJobManager.from_connection_string(IoTHubConnectionString)
Připojení pomocí Microsoft Entra
Back-endová aplikace, která používá Microsoft Entra, se musí před připojením ke službě IoT Hub úspěšně ověřit a získat přihlašovací údaje tokenu zabezpečení. Tento token se předá metodě připojení IoT Hubu. Obecné informace o nastavení a používání Microsoft Entra pro IoT Hub naleznete v tématu Řízení přístupu ke službě IoT Hub pomocí Microsoft Entra ID.
Konfigurace aplikace Microsoft Entra
Musíte nastavit aplikaci Microsoft Entra, která je nakonfigurovaná pro vaše upřednostňované přihlašovací údaje ověřování. Aplikace obsahuje parametry, jako je tajný klíč klienta, který používá back-endová aplikace k ověření. Dostupné konfigurace ověřování aplikací:
- Klientské tajemství
- Certifikát
- Pověření federované identity
Aplikace Microsoft Entra mohou v závislosti na provedených operacích vyžadovat určitá oprávnění role. K povolení přístupu ke čtení a zápisu k dvojicím zařízení a modulů IoT Hub je například potřeba Přispěvatel dvojčete IoT Hub. Pro více informací si přečtěte Správa přístupu ke službě IoT Hub pomocí přiřazení rolí Azure RBAC.
Další informace o nastavení aplikace Microsoft Entra najdete v tématu Rychlý start: Registrace aplikace na platformě Microsoft Identity Platform.
Ověřování pomocí DefaultAzureCredential
Nejjednodušší způsob, jak použít Microsoft Entra k ověření serverové aplikace, je využití DefaultAzureCredential, ale v produkčním prostředí je doporučeno použít jinou metodu, včetně konkrétního TokenCredential nebo zjednodušeného ChainedTokenCredential. Pro zjednodušení popisuje tato část ověřování pomocí DefaultAzureCredential a tajný klíč klienta. Další informace o výhodách a nevýhodách použití naleznete v pokynech k použití DefaultAzureCredentialpro DefaultAzureCredential.
DefaultAzureCredential podporuje různé mechanismy ověřování a určuje odpovídající typ přihlašovacích údajů na základě prostředí, ve které se provádí. Pokusí se použít více typů přihlašovacích údajů v pořadí, dokud nenajde funkční přihlašovací údaje.
Microsoft Entra vyžaduje tyto balíčky NuGet a odpovídající using příkazy:
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
V tomto příkladu se do proměnných prostředí přidá tajný klíč klienta registrace aplikace Microsoft Entra, ID klienta a ID tenanta. Tyto proměnné prostředí DefaultAzureCredential používá k ověření aplikace. Výsledkem úspěšného ověřování Microsoft Entra je zabezpečený tokenový přihlašovací údaj, který je předán do metody připojení IoT Hubu.
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();
Výsledný tokenCredential se pak dá předat metodě připojení ke službě IoT Hub pro libovolného klienta sady SDK, který přijímá přihlašovací údaje Microsoft Entra:
V tomto příkladu je TokenCredential předán do ServiceClient.Create pro vytvoření objektu připojení ServiceClient.
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
V tomto příkladu je TokenCredential předán do RegistryManager.Create, aby se vytvořil objekt RegistryManager.
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Ukázka kódu
Pro ukázku ověřování služby Microsoft Entra se podívejte na ukázku ověřování na základě rolí.
Naplánujte úlohu přímé metody
Pomocí create_scheduled_job naplánujte novou přímou metodu pro spuštění přímé metody na jednom nebo několika zařízeních:
create_scheduled_job poznámky k parametru:
-
job_idmusí být jedinečné. - Nastavte
typena hodnotuscheduleDeviceMethod. - Pomocí
cloud_to_device_methodnastavte název přímé metody a datovou část. - Slouží
max_execution_time_in_secondsk určení doby provádění v sekundách. - Slouží
query_conditionk určení zařízení, která mají být zahrnuta pro volání přímé metody. Další informace o podmínkách dotazu najdete v dotazovacím jazyce služby IoT Hub pro dvojčata zařízení a modulů, úlohy a směrování zpráv.
Příklad:
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)
Naplánování úlohy aktualizace dvojčete zařízení
Pomocí create_scheduled_job vytvořte novou úlohu pro spuštění aktualizace požadovaných vlastností dvojčete zařízení na jednom nebo několika zařízeních.
create_scheduled_job poznámky k parametru:
-
job_idmusí být jedinečné. - Nastavte
typena hodnotuscheduleUpdateTwin. - Pomocí
update_twinnastavte název přímé metody a datovou část. - Slouží
max_execution_time_in_secondsk určení doby provádění v sekundách. - Slouží
query_conditionk určení podmínky pro jedno nebo více zařízení, která mají přímé volání metody. Další informace o podmínkách dotazu najdete v dotazovacím jazyce služby IoT Hub pro dvojčata zařízení a modulů, úlohy a směrování zpráv.
Příklad:
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)
Monitorovat úlohu
Pomocí get_scheduled_job načtěte podrobnosti o konkrétní úloze ve službě IoT Hub.
Tento příklad zkontroluje stav úlohy pro konkrétní ID úlohy každých pět sekund, dokud úloha nebude dokončena.
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)
Příklady úloh plánu sady SDK
Sada Azure IoT SDK pro Python poskytuje funkční ukázky aplikací služeb, které zpracovávají úlohy plánování úloh. Další informace naleznete v tématu:
- Vyžaduje Node.js verze 10.0.x nebo novější.
Přehled
Tento článek popisuje, jak pomocí sady Azure IoT SDK pro Node.js vytvořit aplikační kód pro backendovou službu ke spuštění úlohy za účelem inicializace přímé metody nebo provedení aktualizace dvojčete zařízení na jednom či více zařízeních.
Nainstalujte balíček SDK služby
Spuštěním tohoto příkazu nainstalujte azure-iothub na vývojový počítač:
npm install azure-iothub --save
Třída JobClient zveřejňuje všechny metody potřebné k interakci s plánováním úloh z back-endové aplikace.
Připojení ke službě IoT Hub
Back-endovou službu můžete ke službě IoT Hub připojit pomocí následujících metod:
- Zásady sdíleného přístupu
- Microsoft Entra
Důležité
Tento článek obsahuje postup připojení ke službě pomocí sdíleného přístupového podpisu. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování ve službě pomocí MICROSOFT Entra ID nebo spravovaných identit je bezpečnější přístup. Další informace najdete v tématu Osvědčené postupy zabezpečení zabezpečení řešení > IoT v cloudu.
Připojení pomocí zásad sdíleného přístupu
Použijte fromConnectionString pro připojení ke službě IoT Hub.
Tento článek popisuje back-endový kód, který může naplánovat úlohu pro vyvolání přímé metody, naplánování úlohy pro aktualizaci dvojčete zařízení a monitorování průběhu úlohy pro jedno nebo více zařízení. K provedení těchto operací potřebuje vaše služba oprávnění ke čtení registru a zápisu do registru. Ve výchozím nastavení se každé centrum IoT vytvoří se zásadami sdíleného přístupu nazvanými registryReadWrite, které udělí tato oprávnění.
Další informace o zásadách sdíleného přístupu najdete v tématu Řízení přístupu ke službě IoT Hub pomocí sdílených přístupových podpisů.
Příklad:
'use strict';
var JobClient = require('azure-iothub').JobClient;
var connectionString = '{Shared access policy connection string}';
var jobClient = JobClient.fromConnectionString(connectionString);
Připojení pomocí Microsoft Entra
Back-endová aplikace, která používá Microsoft Entra, se musí před připojením ke službě IoT Hub úspěšně ověřit a získat přihlašovací údaje tokenu zabezpečení. Tento token se předá metodě připojení IoT Hubu. Obecné informace o nastavení a používání Microsoft Entra pro IoT Hub naleznete v tématu Řízení přístupu ke službě IoT Hub pomocí Microsoft Entra ID.
Přehled ověřování Node.js SDK najdete v těchto tématech:
Konfigurace aplikace Microsoft Entra
Musíte nastavit aplikaci Microsoft Entra, která je nakonfigurovaná pro vaše upřednostňované přihlašovací údaje ověřování. Aplikace obsahuje parametry, jako je tajný klíč klienta, který používá back-endová aplikace k ověření. Dostupné konfigurace ověřování aplikací:
- Klientské tajemství
- Certifikát
- Pověření federované identity
Aplikace Microsoft Entra mohou v závislosti na provedených operacích vyžadovat určitá oprávnění role. K povolení přístupu ke čtení a zápisu k dvojicím zařízení a modulů IoT Hub je například potřeba Přispěvatel dvojčete IoT Hub. Pro více informací si přečtěte Správa přístupu ke službě IoT Hub pomocí přiřazení rolí Azure RBAC.
Další informace o nastavení aplikace Microsoft Entra najdete v tématu Rychlý start: Registrace aplikace na platformě Microsoft Identity Platform.
Ověřování pomocí DefaultAzureCredential
Nejjednodušší způsob, jak použít Microsoft Entra k ověření serverové aplikace, je využití DefaultAzureCredential, ale v produkčním prostředí je doporučeno použít jinou metodu, včetně konkrétního TokenCredential nebo zjednodušeného ChainedTokenCredential. Pro zjednodušení popisuje tato část ověřování pomocí DefaultAzureCredential a tajný klíč klienta.
Další informace o výhodách a nevýhodách použití DefaultAzureCredentialnajdete v řetězcích přihlašovacích údajů v klientské knihovně Azure Identity pro JavaScript.
DefaultAzureCredential podporuje různé mechanismy ověřování a určuje odpovídající typ přihlašovacích údajů na základě prostředí, ve které se provádí. Pokusí se použít více typů přihlašovacích údajů v pořadí, dokud nenajde funkční přihlašovací údaje.
Microsoft Entra vyžaduje tento balíček:
npm install --save @azure/identity
V tomto příkladu byly do proměnných prostředí přidány tajný klíč registrace aplikace Microsoft Entra, ID klienta a ID tenanta. Tyto proměnné prostředí DefaultAzureCredential používá k ověření aplikace. Výsledkem úspěšného ověřování Microsoft Entra je zabezpečený tokenový přihlašovací údaj, který je předán do metody připojení IoT Hubu.
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
Výsledný token přihlašovacích údajů lze následně předat do fromTokenCredential, aby se připojil ke službě IoT Hub pro kterékoli klienty sady SDK, které podporují přihlašovací údaje Microsoft Entra.
fromTokenCredential vyžaduje dva parametry:
- Adresa URL služby Azure – Adresa URL služby Azure by měla být ve formátu
{Your Entra domain URL}.azure-devices.netbez předponyhttps://. NapříkladMyAzureDomain.azure-devices.net. - Token přihlašovacích údajů Azure
V tomto příkladu se přihlašovací údaje Azure získávají pomocí DefaultAzureCredential. Adresa URL domény Azure a přihlašovací údaje se pak zadají do Registry.fromTokenCredential pro vytvoření připojení ke službě 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);
Ukázky kódu
Pracovní ukázky ověřování služby Microsoft Entra najdete v příkladech identit Azure.
Vytvořte úlohu přímé metody
Pomocí scheduleDeviceMethod naplánujte úlohu tak, aby spustila přímou metodu na jednom nebo několika zařízeních.
Nejprve vytvořte proměnnou aktualizace přímé metody s názvem metody, datovou částí a informacemi o vypršení časového limitu odpovědi. Příklad:
var methodParams = {
methodName: 'lockDoor',
payload: null,
responseTimeoutInSeconds: 15 // Time-out after 15 seconds if device is unable to process method
};
Pak voláním scheduleDeviceMethod naplánujte úlohu volání přímé metody:
- Každá úloha musí mít jedinečné ID úlohy. Toto ID úlohy můžete použít k monitorování úlohy, jak je popsáno v části Monitorování úlohy tohoto článku.
-
queryConditionZadejte parametr pro vyhodnocení zařízení, na kterých se má úloha spouštět. Další informace o podmínkách dotazu najdete v dotazovacím jazyce služby IoT Hub pro dvojčata zařízení a modulů, úlohy a směrování zpráv. -
jobResultZkontrolujte zpětné volání pro výsledek plánu úlohy. Pokud byla úloha úspěšně naplánovaná, můžete monitorovat stav úlohy, jak je znázorněno v části Monitorování úlohy tohoto článku.
Příklad:
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));
}
});
}
});
Naplánování úlohy aktualizace dvojčete zařízení
Pomocí scheduleTwinUpdate vytvořte novou úlohu pro spuštění aktualizace dvojčete zařízení na jednom nebo několika zařízeních.
Nejprve vytvořte proměnnou pro aktualizaci požadované vlastnosti digitálního dvojčete zařízení.
var twinPatch = {
etag: '*',
properties: {
desired: {
building: '43',
floor: 3
}
}
};
Potom voláním scheduleTwinUpdate naplánujte úlohu aktualizace požadované vlastnosti dvojčete zařízení:
- Každá úloha musí mít jedinečné ID úlohy. Toto ID úlohy můžete použít k monitorování úlohy, jak je popsáno v části Monitorování úlohy tohoto článku.
-
queryConditionZadejte parametr pro vyhodnocení zařízení, na kterých se má úloha spouštět. Další informace o podmínkách dotazu najdete v dotazovacím jazyce služby IoT Hub pro dvojčata zařízení a modulů, úlohy a směrování zpráv. - Zkontrolujte
jobResultcallback pro výsledek plánovaného úkolu. Pokud byla úloha úspěšně naplánovaná, můžete monitorovat stav úlohy, jak je znázorněno v části Monitorování úlohy tohoto článku.
Příklad:
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));
}
});
}
});
Monitorovat úlohu
Pomocí funkce getJob můžete monitorovat stav úlohy pro konkrétní ID úlohy.
Tato ukázková funkce pravidelně kontroluje stav úlohy pro konkrétní ID úlohy, dokud se úloha nedokoní nebo se nezdaří.
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);
}
Příklad úlohy plánování sady SDK
Sada Azure IoT SDK pro Node.js poskytuje funkční ukázku aplikace služby, která zpracovává úlohy plánování úloh. Další informace naleznete v tématu E2E test klienta práce.