Ikereszközök – első lépések
Az Azure IoT Hub eszköz SDK-jával és a service SDK-val olyan alkalmazásokat fejleszthet, amelyek az ikereszközök gyakori feladatait kezelik. Az ikereszközök olyan JSON-dokumentumok, amelyek eszközállapot-információkat tárolnak, beleértve a metaadatokat, a konfigurációkat és a feltételeket. Az IoT Hub minden olyan eszközhöz megőrzi az ikereszközt, amely csatlakozik hozzá.
Az ikereszközökkel a következőket végezheti el:
- Eszköz metaadatainak tárolása a megoldás háttérrendszeréből
- Az eszközalkalmazás aktuális állapotinformációinak, például az elérhető képességeknek és feltételeknek, például a használt kapcsolati módszernek a jelentése
- A hosszan futó munkafolyamatok, például a belső vezérlőprogram és a konfigurációs frissítések állapotának szinkronizálása egy eszközalkalmazás és egy háttéralkalmazás között
- Az eszköz metaadatainak, konfigurációjának vagy állapotának lekérdezése
Az ikereszközökkel kapcsolatos további információkért, beleértve az ikereszközök használatát, olvassa el az IoT Hub ikerpéldányainak ismertetése és használata című témakört.
Feljegyzés
A cikkben ismertetett funkciók csak az IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub-szintekről további információt a megoldáshoz megfelelő IoT Hub-szint kiválasztása című témakörben talál.
Ez a cikk bemutatja, hogyan fejleszthet két alkalmazástípust:
- Az eszközalkalmazások képesek kezelni a kívánt tulajdonságok frissítésére vonatkozó kéréseket, és reagálhatnak a jelentett tulajdonságok módosításaira.
- A szolgáltatásalkalmazások frissíthetik az ikereszköz-címkéket, beállíthatják az új kívánt tulajdonságokat, és lekérdezhetik az eszközöket az ikereszköz-értékek alapján.
Feljegyzés
Ez a cikk az ebben a cikkben hivatkozott Azure IoT SDK-minták kiegészítésére szolgál. Az SDK-eszközökkel eszköz- és háttéralkalmazásokat is létrehozhat.
Előfeltételek
Egy IoT-központ
Regisztrált eszköz
Ha az alkalmazás az MQTT protokollt használja, győződjön meg arról, hogy a 8883-es port nyitva van a tűzfalon. Az MQTT protokoll a 8883-es porton keresztül kommunikál. Ez a port néhány vállalati és oktatási hálózati környezetben blokkolható. További információkért és a probléma megoldásának módjaiért lásd: Csatlakozás az IoT Hubhoz (MQTT).
- Visual Studio-t igényel
Áttekintés
Ez a cikk azt ismerteti, hogyan hozhat létre eszköz- és háttérszolgáltatás-alkalmazáskódot az ikereszközökhöz készült Azure IoT SDK for .NET használatával.
Eszközalkalmazás létrehozása
Az eszközalkalmazások olvashatják és írhatnak ikerjelentésű tulajdonságokat, és értesítést kaphatnak a háttéralkalmazás vagy az IoT Hub által beállított kívánt ikertulajdonság-módosításokról.
Ez a szakasz azt ismerteti, hogyan használhatja az eszközalkalmazás kódját a következőre:
- Ikereszköz lekérése és jelentett tulajdonságok vizsgálata
- Jelentett ikereszköz-tulajdonságok frissítése
- Kívánt tulajdonságfrissítési visszahíváskezelő létrehozása
Szükséges eszköz NuGet-csomag
A C# nyelven írt eszközügyfél-alkalmazásokhoz a Microsoft.Azure.Devices.Client NuGet-csomag szükséges.
Adja hozzá ezt az using
utasítást az eszköztár használatához.
using Microsoft.Azure.Devices.Client;
Eszköz csatlakoztatása az IoT Hubhoz
Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:
- Megosztott hozzáférési kulcs
- X.509-tanúsítvány
Fontos
Ez a cikk az eszközök közös hozzáférésű jogosultságkóddal, más néven szimmetrikus kulcshitelesítéssel való csatlakoztatásának lépéseit tartalmazza. Ez a hitelesítési módszer alkalmas tesztelésre és kiértékeléshez, de az eszköz hitelesítése X.509-tanúsítványokkal biztonságosabb módszer. További információkért tekintse meg a kapcsolatbiztonság ajánlott biztonsági eljárásait>.
Hitelesítés megosztott hozzáférési kulccsal
A DeviceClient osztály az eszköz ikereszközeivel való interakcióhoz szükséges összes metódust elérhetővé teszi.
Csatlakozzon az eszközhöz a CreateFromConnectionString metódussal, valamint az eszköz kapcsolati sztring és a kapcsolat átviteli protokolljával.
A CreateFromConnectionString
TransportType átviteli protokoll paramétere a következő átviteli protokollokat támogatja:
Mqtt
Mqtt_WebSocket_Only
Mqtt_Tcp_Only
Amqp
Amqp_WebSocket_Only
Amqp_Tcp_Only
Az Http1
ikereszköz-frissítések esetében a protokoll nem támogatott.
Ez a példa az átviteli protokoll használatával csatlakozik egy Mqtt
eszközhöz.
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
static string DeviceConnectionString = "{IoT hub device connection string}";
static _deviceClient = null;
_deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString,
TransportType.Mqtt);
Hitelesítés X.509-tanúsítvánnyal
Eszköz csatlakoztatása az IoT Hubhoz X.509-tanúsítvány használatával:
A DeviceAuthenticationWithX509Certificate használatával olyan objektumot hozhat létre, amely eszköz- és tanúsítványinformációkat tartalmaz.
DeviceAuthenticationWithX509Certificate
második paraméterként lesz átadvaDeviceClient.Create
(2. lépés).A DeviceClient.Create használatával X.509-tanúsítvány használatával csatlakoztathatja az eszközt az IoT Hubhoz.
Ebben a példában az eszköz- és tanúsítványinformációk ki lesznek töltve a auth
DeviceAuthenticationWithX509Certificate
továbbított DeviceClient.Create
objektumban.
Ez a példa a tanúsítvány bemeneti paraméterértékeit mutatja be helyi változóként az egyértelműség érdekében. Éles rendszerben a bizalmas bemeneti paramétereket környezeti változókban vagy más biztonságosabb tárolási helyen tárolhatja. Például a gazdagépnév környezeti változójának olvasására használható Environment.GetEnvironmentVariable("HOSTNAME")
.
RootCertPath = "~/certificates/certs/sensor-thl-001-device.cert.pem";
Intermediate1CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate1.cert.pem";
Intermediate2CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate2.cert.pem";
DevicePfxPath = "~/certificates/certs/sensor-thl-001-device.cert.pfx";
DevicePfxPassword = "1234";
DeviceName = "MyDevice";
HostName = "xxxxx.azure-devices.net";
var chainCerts = new X509Certificate2Collection();
chainCerts.Add(new X509Certificate2(RootCertPath));
chainCerts.Add(new X509Certificate2(Intermediate1CertPath));
chainCerts.Add(new X509Certificate2(Intermediate2CertPath));
using var deviceCert = new X509Certificate2(DevicePfxPath, DevicePfxPassword);
using var auth = new DeviceAuthenticationWithX509Certificate(DeviceName, deviceCert, chainCerts);
using var deviceClient = DeviceClient.Create(
HostName,
auth,
TransportType.Amqp);
További információ a tanúsítványhitelesítésről:
- Identitások hitelesítése X.509-tanúsítványokkal
- Oktatóanyag: Tanúsítványok létrehozása és feltöltése teszteléshez
Kódminták
Az X.509-tanúsítványhitelesítés munkamintáiért lásd:
- Csatlakozás X.509-tanúsítvánnyal
- DeviceClientX509AuthenticationE2ETests
- Irányított projekt – IoT-eszközök biztonságos és nagy léptékű kiépítése az IoT Hub Device Provisioning Service-vel
Ikereszköz lekérése és tulajdonságok vizsgálata
Hívja meg a GetTwinAsync-et az aktuális ikereszköz-tulajdonságok lekéréséhez. Számos Ikerobjektum-tulajdonságot használhat a JSON-adatok meghatározott területeinek eléréséhez, beleértve Properties
a Twin
, Status
, Tags
és .Version
Ez a példa lekéri az ikereszköz tulajdonságait, és JSON formátumban nyomtatja ki az ikerértékeket.
Console.WriteLine("Retrieving twin...");
Twin twin = await _deviceClient.GetTwinAsync();
Console.WriteLine("\tInitial twin value received:");
Console.WriteLine($"\t{twin.ToJson()}");
Jelentett ikereszköz-tulajdonságok frissítése
Iker jelentett tulajdonság frissítése:
- TwinCollection-objektum létrehozása a jelentett tulajdonságfrissítéshez
- Egy vagy több jelentett tulajdonság frissítése az objektumon
TwinCollection
belül - Az UpdateReportedPropertiesAsync használatával küldje le a jelentett tulajdonságmódosításokat az IoT Hub szolgáltatásba
Példa:
try
{
Console.WriteLine("Sending sample start time as reported property");
TwinCollection reportedProperties = new TwinCollection();
reportedProperties["DateTimeLastAppLaunch"] = DateTime.UtcNow;
await _deviceClient.UpdateReportedPropertiesAsync(reportedProperties);
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine("Error in sample: {0}", ex.Message);
}
Kívánt tulajdonságfrissítési visszahíváskezelő létrehozása
Hozzon létre egy kívánt tulajdonságfrissítési visszahíváskezelőt, amely akkor hajtja végre a kívánt tulajdonság módosítását az ikereszközben, ha a visszahíváskezelő metódus nevét a SetDesiredPropertyUpdateCallbackAsync értékre továbbítja.
Ez a hívás például úgy állítja be a rendszert, hogy értesítse a kívánt tulajdonság módosításakor elnevezettOnDesiredPropertyChangedAsync
metódust.
await _deviceClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChangedAsync, null);
Az ikertulajdonságok TwinCollectionként kerülnek átadásra a visszahívási metódusnak, és struktúrákként KeyValuePair
vizsgálhatók.
Ez a példa fogadja a kívánt tulajdonságfrissítéseket, TwinCollection
majd végighalad a gyűjteményfrissítéseken, és kinyomtatja.KeyValuePair
A gyűjtemény végigcsukása KeyValuePair
után a kód meghívja UpdateReportedPropertiesAsync
a DateTimeLastDesiredPropertyChangeReceived
jelentett tulajdonság frissítését, hogy naprakészen tartsa az utolsó frissítési időt.
private async Task OnDesiredPropertyChangedAsync(TwinCollection desiredProperties, object userContext)
{
var reportedProperties = new TwinCollection();
Console.WriteLine("\tDesired properties requested:");
Console.WriteLine($"\t{desiredProperties.ToJson()}");
// For the purpose of this sample, we'll blindly accept all twin property write requests.
foreach (KeyValuePair<string, object> desiredProperty in desiredProperties)
{
Console.WriteLine($"Setting {desiredProperty.Key} to {desiredProperty.Value}.");
reportedProperties[desiredProperty.Key] = desiredProperty.Value;
}
Console.WriteLine("\tAlso setting current time as reported property");
reportedProperties["DateTimeLastDesiredPropertyChangeReceived"] = DateTime.UtcNow;
await _deviceClient.UpdateReportedPropertiesAsync(reportedProperties);
}
SDK-eszközminta
A .NET-hez készült Azure IoT SDK egy ikereszköz-feladatokat kezelő eszközalkalmazás működő mintáját biztosítja. További információ: TwinSample.
Háttéralkalmazás létrehozása
A háttéralkalmazások az IoT Hubon keresztül csatlakoznak egy eszközhöz, és beolvashatják az eszköz jelentett és kívánt tulajdonságait, megírhatják az eszköz kívánt tulajdonságait, és lefuttathatják az eszköz lekérdezéseit.
Ez a szakasz azt ismerteti, hogyan hozhat létre háttéralkalmazás-kódot a következőre:
- Ikereszközmezők olvasása és frissítése
- Ikereszköz-lekérdezés létrehozása
A RegistryManager osztály minden olyan metódust elérhetővé tesz, amely egy háttéralkalmazás létrehozásához szükséges a szolgáltatásból származó ikereszközökkel való interakcióhoz.
Szolgáltatás NuGet-csomag hozzáadása
A háttérszolgáltatás-alkalmazásokhoz a Microsoft.Azure.Devices NuGet-csomag szükséges.
Csatlakozás az IoT Hubhoz
Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:
- Megosztott hozzáférési szabályzat
- Microsoft Entra
Fontos
Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.
Csatlakozás megosztott hozzáférési szabályzattal
Háttéralkalmazás csatlakoztatása egy eszközhöz a CreateFromConnectionString használatával. Az alkalmazásnak szolgáltatáscsatlakozási engedélyre van szüksége az ikereszköz kívánt tulajdonságainak módosításához, és a beállításjegyzék olvasási engedélyére van szüksége az identitásjegyzék lekérdezéséhez. Nincs olyan alapértelmezett megosztott hozzáférési szabályzat, amely csak ezt a két engedélyt tartalmazza, ezért létre kell hoznia egyet, ha még nem létezik. Adja meg ezt a megosztott hozzáférési szabályzatot, kapcsolati sztring paraméterként.fromConnectionString
A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.
using Microsoft.Azure.Devices;
static RegistryManager registryManager;
static string connectionString = "{Shared access policy connection string}";
registryManager = RegistryManager.CreateFromConnectionString(connectionString);
Csatlakozás a Microsoft Entra használatával
A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.
A Microsoft Entra alkalmazás konfigurálása
Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazáshitelesítési konfigurációk a következők:
- Titkos ügyfélkód
- Tanúsítvány
- Összevont identitás hitelesítő adatai
A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.
A Microsoft Entra-alkalmazások beállításáról további információt a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.
Hitelesítés DefaultAzureCredential használatával
A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential
vagy pared-down ChainedTokenCredential
metódust is. Az egyszerűség kedvéért ez a szakasz a hitelesítést és az ügyfél titkos kódjának használatát DefaultAzureCredential
ismerteti. A használat DefaultAzureCredential
előnyeiről és hátrányairól további információt a DefaultAzureCredential használati útmutatója tartalmaz.
DefaultAzureCredential
támogatja a különböző hitelesítési mechanizmusokat, és meghatározza a megfelelő hitelesítőadat-típust az általa futtatott környezet alapján. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.
A Microsoft Entra megköveteli ezeket a NuGet-csomagokat és a hozzájuk tartozó using
utasításokat:
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
Ebben a példában a Microsoft Entra alkalmazásregisztrációs ügyfélkulcsa, ügyfél-azonosítója és bérlőazonosítója hozzáadódik a környezeti változókhoz. Ezek a környezeti változók az DefaultAzureCredential
alkalmazás hitelesítésére szolgálnak. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet egy IoT Hub-kapcsolati módszernek ad át.
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();
Az eredményül kapott TokenCredential ezután átadható egy IoT Hub-metódushoz való csatlakozásnak minden olyan SDK-ügyfél esetében, amely elfogadja a Microsoft Entra hitelesítő adatait:
Ebben a példában a TokenCredential
serviceClient kapcsolati objektum létrehozásához szükséges átadás ServiceClient.Create
történik.
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
Ebben a példában a rendszer átadja a TokenCredential
RegistryManager objektum létrehozásához.RegistryManager.Create
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Kódminta
A Microsoft Entra szolgáltatáshitelesítés működő mintájáért tekintse meg a szerepköralapú hitelesítési mintát.
Ikereszközmezők olvasása és frissítése
A GetTwinAsync meghívásával lekérheti az aktuális ikereszköz-mezőket egy ikerobjektumba.
Az Twin
osztály tartalmazza az ikereszköz egyes szakaszainak megfelelő tulajdonságokat .
Twin
Az osztály tulajdonságaival megtekintheti és frissítheti az ikereszköz-mezőket. Az objektumtulajdonságok használatával Twin
több ikermezőt is frissíthet, mielőtt a frissítéseket az eszközre UpdateTwinAsync
íranál.
Az ikermező-frissítések elvégzése után hívja meg az UpdateTwinAsync-et , hogy írja Twin
vissza az objektummező frissítéseit egy eszközre. Hibakezelővel párosított logika és catch
használat try
a hibásan formázott javításhibák UpdateTwinAsync
elfogásához.
Ikereszköz-címkék olvasása és frissítése
Az ikereszközök címkéinek adatainak olvasásához és írásához használja az ikereszközcímkék tulajdonságot.
Címkék frissítése ikerobjektum használatával
Ez a példa létrehoz egy címkejavítást location
, hozzárendeli az Twin
objektumhoz a Tags
tulajdonság használatával, majd alkalmazza a javítást a tulajdonság használatával UpdateTwinAsync
.
// Retrieve the device twin
var twin = await registryManager.GetTwinAsync("myDeviceId");
// Create the tag patch
var tagspatch =
@"{
tags: {
location: {
region: 'US',
plant: 'Redmond43'
}
}
}";
// Assign the patch to the Twin object
twin.Tags["location"] = tagspatch;
// Apply the patch to update the device twin tags section
try
{
await registryManager.UpdateTwinAsync(twin.DeviceId, patch, twin.ETag);
}
catch (Exception e)
{
console.WriteLine("Twin update failed.", e.Message);
}
Címkék frissítése JSON-sztring használatával
JSON formátumú ikereszköz-információfrissítési javítást hozhat létre és alkalmazhat. Az IoT Hub elemzi és alkalmazza a javítást, ha megfelelően van formázva.
Ez a példa meghívja GetTwinAsync
az aktuális ikereszköz-mezők objektumba Twin
való lekérését, létrehoz egy JSON formátumú javítást tag
régió- és növényhelyadatokkal, majd meghívja UpdateTwinAsync
a javítás alkalmazását az ikereszköz frissítéséhez. Ha nem sikerült, hibaüzenet jelenik meg UpdateTwinAsync
.
// Retrieve the device twin
var twin = await registryManager.GetTwinAsync("myDeviceId");
// Create the JSON tags patch
var patch =
@"{
tags: {
location: {
region: 'US',
plant: 'Redmond43'
}
}
}";
// Apply the patch to update the device twin tags
try
{
await registryManager.UpdateTwinAsync(twin.DeviceId, patch, twin.ETag);
}
catch (Exception e)
{
console.WriteLine("Twin update failed.", e.Message);
}
Ikerpéldány kívánt tulajdonságainak megtekintése és frissítése
Az ikereszköz TwinProperties.Desired tulajdonságával olvashatók és írhatóak az eszköz kívánt tulajdonságadatai. Ikertulajdonságok Desired
frissítése JSON-formátumú javítással.
Ez a példa meghívja GetTwinAsync
az aktuális ikereszköz-mezők egy Twin
objektumba való lekérését, frissíti az ikerpéldány speed
kívánt tulajdonságát, majd meghívja UpdateTwinAsync
az Twin
objektum alkalmazását az ikereszköz frissítésére.
// Retrieve the device twin
var twin = await registryManager.GetTwinAsync("myDeviceId");
twin.Properties.Desired["speed"] = "type: '5G'";
await registryManager.UpdateTwinAsync(twin.DeviceId, twin, twin.ETag);
Egyéb ikerfrissítési módszerek
Az ikerfrissítéseket az alábbi SDK-módszerekkel is alkalmazhatja:
- A ReplaceTwinAsync hívásával cserélje le a teljes ikereszközt.
- Az UpdateTwins2Async hívásával frissítheti a rendszerben korábban létrehozott ikerpéldányok listáját.
Ikereszköz-lekérdezés létrehozása
Ez a szakasz két ikereszköz-lekérdezést mutat be. Az ikereszköz-lekérdezések OLYAN SQL-szerű lekérdezések, amelyek az ikereszköz-eredményhalmazt adnak vissza.
Ikereszköz-lekérdezés létrehozásához hívja meg a CreateQueryt , hogy küldjön be egy ikerpéldány SQL-lekérdezést, és szerezzen be egy IQuery-felületet . Igény szerint meghívhat CreateQuery
egy második paramétert is, hogy oldalonként maximális számú elemet adjon meg.
A következő hívás GetNextAsTwinAsync
vagy GetNextAsJsonAsync
metódus a szükséges számú alkalommal az összes ikereredmény lekéréséhez.
- GetNextAsTwinAsync a következő lapozott eredmény ikerobjektumkéntvaló lekéréséhez.
- GetNextAsJsonAsync a következő lapszámozott eredmény JSON-sztringekként való lekéréséhez.
Az IQuery
interfész tartalmaz egy HasMoreResults logikai tulajdonságot, amellyel ellenőrizheti, hogy több ikereredményt szeretne-e lekérni.
Ez a példa lekérdezés csak a Redmond43-üzemben található eszközök ikereszközeit választja ki.
var query = registryManager.CreateQuery(
"SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'", 100);
var twinsInRedmond43 = await query.GetNextAsTwinAsync();
Console.WriteLine("Devices in Redmond43: {0}",
string.Join(", ", twinsInRedmond43.Select(t => t.DeviceId)));
Ez a példa lekérdezés pontosítja az első lekérdezést, amely csak a mobilhálózaton keresztül csatlakozó eszközöket választja ki.
query = registryManager.CreateQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity.type = 'cellular'", 100);
var twinsInRedmond43UsingCellular = await query.GetNextAsTwinAsync();
Console.WriteLine("Devices in Redmond43 using cellular network: {0}",
string.Join(", ", twinsInRedmond43UsingCellular.Select(t => t.DeviceId)));
SDK-szolgáltatásminta
A .NET-hez készült Azure IoT SDK egy olyan szolgáltatásalkalmazás működő mintáját biztosítja, amely ikereszköz-feladatokat kezel. További információ: Registry Manager-minta.
- A Java SE fejlesztői készlet 8-at igényel. A JDK 8 letöltéséhez győződjön meg arról, hogy a Hosszú távú támogatás alatt a Java 8-at választja.
Áttekintés
Ez a cikk azt ismerteti, hogyan hozhat létre eszköz- és háttérszolgáltatás-alkalmazáskódot az ikereszközökhöz készült Azure IoT SDK for Java használatával.
Eszközalkalmazás létrehozása
Az eszközalkalmazások olvashatják és írhatnak ikerjelentésű tulajdonságokat, és értesítést kaphatnak a háttéralkalmazás vagy az IoT Hub által beállított kívánt ikertulajdonság-módosításokról.
Ez a szakasz azt ismerteti, hogyan hozhat létre eszközalkalmazás-kódot a következő módon:
- Ikereszköz lekérése és megtekintése
- Jelentett ikereszköz-tulajdonságok frissítése
- Feliratkozás a kívánt tulajdonságmódosításokra
A DeviceClient osztály az eszköz ikereszközeivel való interakcióhoz szükséges összes metódust elérhetővé teszi.
Fontos
Ez a cikk az eszközök közös hozzáférésű jogosultságkóddal, más néven szimmetrikus kulcshitelesítéssel való csatlakoztatásának lépéseit tartalmazza. Ez a hitelesítési módszer alkalmas tesztelésre és kiértékeléshez, de az eszköz hitelesítése X.509-tanúsítványokkal biztonságosabb módszer. További információkért tekintse meg a kapcsolatbiztonság ajánlott biztonsági eljárásait>.
Eszközimportálási utasítások
Az alábbi eszközimportálási utasítások segítségével érheti el a Java-hoz készült Azure IoT SDK-t.
import com.microsoft.azure.sdk.iot.device.*;
import com.microsoft.azure.sdk.iot.device.DeviceTwin.*;
Eszköz csatlakoztatása az IoT Hubhoz
Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:
- Megosztott hozzáférési kulcs
- X.509-tanúsítvány
Fontos
Ez a cikk az eszközök közös hozzáférésű jogosultságkóddal, más néven szimmetrikus kulcshitelesítéssel való csatlakoztatásának lépéseit tartalmazza. Ez a hitelesítési módszer alkalmas tesztelésre és kiértékeléshez, de az eszköz hitelesítése X.509-tanúsítványokkal biztonságosabb módszer. További információkért tekintse meg a kapcsolatbiztonság ajánlott biztonsági eljárásait>.
Hitelesítés megosztott hozzáférési kulccsal
Eszköz csatlakoztatása az IoT Hubhoz:
Az IotHubClientProtocol használatával válasszon egy átviteli protokollt. Példa:
IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
DeviceClient
A konstruktor használatával adja hozzá az eszköz elsődleges kapcsolati sztring és protokollt.String connString = "{IoT hub device connection string}"; DeviceClient client = new DeviceClient(connString, protocol);
Nyissa meg az eszközt az IoT Hubhoz való csatlakozáshoz. Ha az ügyfél már meg van nyitva, a metódus nem tesz semmit.
client.open(true);
Hitelesítés X.509-tanúsítvánnyal
Eszköz csatlakoztatása az IoT Hubhoz X.509-tanúsítvány használatával:
- Hozza létre az SSLContext objektumot a buildSSLContext használatával.
- Adja hozzá az
SSLContext
adatokat egy ClientOptions-objektumhoz . - Hívja meg a DeviceClientet az
ClientOptions
információk használatával az eszköz–IoT Hub kapcsolat létrehozásához.
Ez a példa a tanúsítvány bemeneti paraméterértékeit mutatja be helyi változóként az egyértelműség érdekében. Éles rendszerben a bizalmas bemeneti paramétereket környezeti változókban vagy más biztonságosabb tárolási helyen tárolhatja. Például egy nyilvános kulcsú tanúsítványsztring környezeti változójának olvasására használható Environment.GetEnvironmentVariable("PUBLICKEY")
.
private static final String publicKeyCertificateString =
"-----BEGIN CERTIFICATE-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END CERTIFICATE-----\n";
//PEM encoded representation of the private key
private static final String privateKeyString =
"-----BEGIN EC PRIVATE KEY-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END EC PRIVATE KEY-----\n";
SSLContext sslContext = SSLContextBuilder.buildSSLContext(publicKeyCertificateString, privateKeyString);
ClientOptions clientOptions = ClientOptions.builder().sslContext(sslContext).build();
DeviceClient client = new DeviceClient(connString, protocol, clientOptions);
További információ a tanúsítványhitelesítésről:
- Identitások hitelesítése X.509-tanúsítványokkal
- Oktatóanyag: Tanúsítványok létrehozása és feltöltése teszteléshez
Kódminták
Az X.509-tanúsítványhitelesítés munkamintáiért lásd:
Ikereszköz lekérése és megtekintése
Az ügyfélkapcsolat megnyitása után hívja meg a getTwint , hogy lekérje az aktuális ikertulajdonságokat egy Twin
objektumba.
Példa:
private static Twin twin;
System.out.println("Getting current twin");
twin = client.getTwin();
System.out.println("Received current twin:");
System.out.println(twin);
Ikereszköz jelentett tulajdonságainak frissítése
Az aktuális ikerpéldány beolvasása után megkezdheti a jelentett tulajdonságfrissítéseket. A jelentett tulajdonságfrissítéseket az aktuális ikerpéldány lekérése nélkül is elvégezheti, ha a megfelelő jelentett tulajdonságverzióval rendelkezik. Ha jelentést küld a tulajdonságokról, és "az előfeltétel meghiúsult" hibaüzenetet kap, akkor a jelentett tulajdonságok verziója elavult. Ebben az esetben kérje le újra a legújabb verziót getTwin
.
Jelentett tulajdonságok frissítése:
Hívja meg a getReportedProperties parancsot, hogy lekérje az iker jelentett tulajdonságait egy TwinCollection objektumba.
A Put használatával frissíthet egy jelentett tulajdonságot az objektumon
TwinCollection
belül. Minden jelentett tulajdonságfrissítés hívásaput
.Az updateReportedProperties használatával alkalmazza a metódussal frissített jelentett tulajdonságok csoportját
put
.
Példa:
TwinCollection reportedProperties = twin.getReportedProperties();
int newTemperature = new Random().nextInt(80);
reportedProperties.put("HomeTemp(F)", newTemperature);
System.out.println("Updating reported property \"HomeTemp(F)\" to value " + newTemperature);
ReportedPropertiesUpdateResponse response = client.updateReportedProperties(reportedProperties);
System.out.println("Successfully set property \"HomeTemp(F)\" to value " + newTemperature);
Feliratkozás a kívánt tulajdonságmódosításokra
A subscribeToDesiredProperties meghívása a kívánt tulajdonságmódosításokra való feliratkozáshoz. Ez az ügyfél minden alkalommal visszahívást kap egy Twin
objektummal, amikor egy kívánt tulajdonság frissül. A visszahívás vagy a teljes kívánt tulajdonságkészletet tartalmazza, vagy csak a frissített kívánt tulajdonságot a kívánt tulajdonság módosításának módjától függően.
Ez a példa feliratkozik a kívánt tulajdonságmódosításokra. A kívánt tulajdonságmódosításokat a rendszer egy nevesített DesiredPropertiesUpdatedHandler
kezelőnek továbbítja.
client.subscribeToDesiredProperties(new DesiredPropertiesUpdatedHandler(), null);
Ebben a példában a kívánt tulajdonságmódosítási visszahíváskezelő meghívja a DesiredPropertiesUpdatedHandler
getDesiredProperties parancsot a tulajdonságmódosítások lekérésére, majd kinyomtatja a frissített ikertulajdonságokat.
private static class DesiredPropertiesUpdatedHandler implements DesiredPropertiesCallback
{
@Override
public void onDesiredPropertiesUpdated(Twin desiredPropertyUpdateTwin, Object context)
{
if (twin == null)
{
// No need to care about this update because these properties will be present in the twin retrieved by getTwin.
System.out.println("Received desired properties update before getting current twin. Ignoring this update.");
return;
}
// desiredPropertyUpdateTwin.getDesiredProperties() contains all the newly updated desired properties as well as the new version of the desired properties
twin.getDesiredProperties().putAll(desiredPropertyUpdateTwin.getDesiredProperties());
twin.getDesiredProperties().setVersion(desiredPropertyUpdateTwin.getDesiredProperties().getVersion());
System.out.println("Received desired property update. Current twin:");
System.out.println(twin);
}
}
SDK-eszközminta
A Java-hoz készült Azure IoT SDK tartalmaz egy működő mintát az eszközalkalmazás ebben a cikkben ismertetett fogalmainak teszteléséhez. További információ: Ikereszköz-minta.
Háttéralkalmazás létrehozása
Ez a szakasz a következő háttéralkalmazások létrehozását ismerteti:
- Ikereszközök címkéinek frissítése
- Eszközök lekérdezése szűrőkkel a címkéken és tulajdonságokon
A ServiceClient
DeviceTwin osztály olyan metódusokat tartalmaz, amelyekkel a szolgáltatások hozzáférhetnek az ikereszközökhöz.
Szolgáltatásimportálási utasítások
Az alábbi szolgáltatásimportálási utasítások segítségével érheti el a Java-hoz készült Azure IoT SDK-t.
import com.microsoft.azure.sdk.iot.service.devicetwin.*;
import com.microsoft.azure.sdk.iot.service.exceptions.IotHubException;
Csatlakozás az IoT Hubhoz
Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:
- Megosztott hozzáférési szabályzat
- Microsoft Entra
Fontos
Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.
Csatlakozás megosztott hozzáférési szabályzattal
A DeviceTwin konstruktor használatával hozza létre a kapcsolatot az IoT Hubbal. Az DeviceTwin
objektum kezeli az IoT Hubbal folytatott kommunikációt.
Az alkalmazásnak szolgáltatáscsatlakozási engedélyre van szüksége az ikereszköz kívánt tulajdonságainak módosításához, és a beállításjegyzék olvasási engedélyére van szüksége az identitásjegyzék lekérdezéséhez. Nincs olyan alapértelmezett megosztott hozzáférési szabályzat, amely csak ezt a két engedélyt tartalmazza, ezért létre kell hoznia egyet, ha még nem létezik. Adja meg ezt a megosztott hozzáférési szabályzatot, kapcsolati sztring paraméterként.fromConnectionString
A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.
A DeviceTwinDevice objektum az ikereszközt jelöli annak tulajdonságaival és címkéivel.
Példa:
public static final String iotHubConnectionString = "{Shared access policy connection string}";
public static final String deviceId = "myDeviceId";
public static final String region = "US";
public static final String plant = "Redmond43";
// Get the DeviceTwin and DeviceTwinDevice objects
DeviceTwin twinClient = new DeviceTwin(iotHubConnectionString);
DeviceTwinDevice device = new DeviceTwinDevice(deviceId);
Csatlakozás a Microsoft Entra használatával
A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.
A Java SDK-hitelesítés áttekintéséhez tekintse meg a Java és az Azure Identity használatával történő Azure-hitelesítést.
Az egyszerűség kedvéért ez a szakasz az ügyféltitkos hitelesítés leírására összpontosít.
A Microsoft Entra alkalmazás konfigurálása
Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazáshitelesítési konfigurációk a következők:
- Titkos ügyfélkód
- Tanúsítvány
- Összevont identitás hitelesítő adatai
A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.
A Microsoft Entra-alkalmazások beállításáról további információt a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.
Hitelesítés DefaultAzureCredential használatával
A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential
vagy pared-down ChainedTokenCredential
metódust is.
A használat DefaultAzureCredential
előnyeiről és hátrányairól további információt a Java Azure Identity ügyfélkódtárában található Hitelesítőadat-láncok című témakörben talál.
A DefaultAzureCredential különböző hitelesítési mechanizmusokat támogat, és meghatározza a megfelelő hitelesítőadat-típust a környezet alapján, amelyben végrehajtja. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.
A Microsoft Entra alkalmazás hitelesítő adatait a DefaultAzureCredentialBuilder használatával hitelesítheti. Mentse a kapcsolati paramétereket, például az ügyfél titkos bérlőazonosítóját, az ügyfélazonosítót és az ügyfél titkos kódértékeit környezeti változóként. A létrehozás után adja át a TokenCredential
ServiceClientnek vagy más szerkesztőnek hitelesítőadat-paraméterként.
Ebben a példában DefaultAzureCredentialBuilder
megpróbál hitelesíteni egy kapcsolatot a DefaultAzureCredential szakaszban leírt listából. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet a rendszer átad egy konstruktornak, például a ServiceClientnek.
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Hitelesítés a ClientSecretCredentialBuilder használatával
A ClientSecretCredentialBuilder használatával létrehozhat egy hitelesítő adatot az ügyfél titkos adataival. Ha sikeres, ez a metódus egy TokenCredential értéket ad vissza, amely átadható a ServiceClientnek vagy más szerkesztőnek hitelesítőadat-paraméterként.
Ebben a példában a Microsoft Entra alkalmazásregisztrációs ügyfél titkos kódját, ügyfél-azonosítóját és bérlőazonosító-értékeit hozzáadtuk a környezeti változókhoz. Ezeket a környezeti változókat a hitelesítő adatok létrehozásához használják ClientSecretCredentialBuilder
.
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();
Egyéb hitelesítési osztályok
A Java SDK az alábbi osztályokat is tartalmazza, amelyek egy háttéralkalmazást hitelesítenek a Microsoft Entra használatával:
- AuthorizationCodeCredential
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePipelinesCredential
- ChainedTokenCredential
- ClientAssertionCredential
- ClientCertificateCredential
- DeviceCodeCredential
- EnvironmentCredential
- InteractiveBrowserCredential
- ManagedIdentityCredential
- OnBehalfOfCredential
Kódminták
A Microsoft Entra szolgáltatáshitelesítés működő mintáiért lásd a szerepköralapú hitelesítési mintát.
Ikereszköz-mezők frissítése
Az ikereszköz mezőinek frissítése:
Az ikereszköz aktuális mezőinek lekérése a getTwin használatával
Ez a példa lekéri és kinyomtatja az ikereszköz-mezőket:
// Get the device twin from IoT Hub System.out.println("Device twin before update:"); twinClient.getTwin(device); System.out.println(device);
HashSet
Objektumadd
használata ikercímkepárok csoportjáhozA setTags használatával egy objektumból
tags
származó címkepárok csoportját adhat hozzá egyDeviceTwinDevice
objektumhozAz ikerpéldány frissítése az IoT Hubon az updateTwin használatával
Ez a példa frissíti az ikereszköz régió- és üzemi ikereszköz-címkéinek frissítését:
// Update device twin tags if they are different // from the existing values String currentTags = device.tagsToString(); if ((!currentTags.contains("region=" + region) && !currentTags.contains("plant=" + plant))) { // Create the tags and attach them to the DeviceTwinDevice object Set<Pair> tags = new HashSet<Pair>(); tags.add(new Pair("region", region)); tags.add(new Pair("plant", plant)); device.setTags(tags); // Update the device twin in IoT Hub System.out.println("Updating device twin"); twinClient.updateTwin(device); } // Retrieve and display the device twin with the tag values from IoT Hub System.out.println("Device twin after update:"); twinClient.getTwin(device); System.out.println(device);
Ikereszköz-lekérdezés létrehozása
Ez a szakasz két ikereszköz-lekérdezést mutat be. Az ikereszköz-lekérdezések OLYAN SQL-szerű lekérdezések, amelyek az ikereszköz-eredményhalmazt adnak vissza.
A Lekérdezés osztály olyan metódusokat tartalmaz, amelyekkel SQL-stílusú lekérdezéseket hozhat létre ikerpéldányok, feladatok, eszközfeladatok vagy nyers adatok esetén az IoT Hubba.
Eszköz-lekérdezés létrehozása:
Az ikerpéldányok SQL-lekérdezésének létrehozása a createSqlQuery használatával
A hasNextDeviceTwin használatával ellenőrizze, hogy van-e másik ikereszköz az eredményhalmazban
A getNextDeviceTwin használatával kérje le a következő ikereszközt az eredményhalmazból
Az alábbi példa lekérdezések legfeljebb 100 eszközt adnak vissza.
Ez a példa lekérdezés csak a Redmond43-üzemben található eszközök ikereszközeit választja ki.
// Query the device twins in IoT Hub
System.out.println("Devices in Redmond:");
// Construct the query
SqlQuery sqlQuery = SqlQuery.createSqlQuery("*", SqlQuery.FromType.DEVICES, "tags.plant='Redmond43'", null);
// Run the query, returning a maximum of 100 devices
Query twinQuery = twinClient.queryTwin(sqlQuery.getQuery(), 100);
while (twinClient.hasNextDeviceTwin(twinQuery)) {
DeviceTwinDevice d = twinClient.getNextDeviceTwin(twinQuery);
System.out.println(d.getDeviceId());
}
Ez a példa lekérdezés pontosítja az első lekérdezést, amely csak a mobilhálózaton keresztül csatlakozó eszközöket választja ki.
System.out.println("Devices in Redmond using a cellular network:");
// Construct the query
sqlQuery = SqlQuery.createSqlQuery("*", SqlQuery.FromType.DEVICES, "tags.plant='Redmond43' AND properties.reported.connectivityType = 'cellular'", null);
// Run the query, returning a maximum of 100 devices
twinQuery = twinClient.queryTwin(sqlQuery.getQuery(), 3);
while (twinClient.hasNextDeviceTwin(twinQuery)) {
DeviceTwinDevice d = twinClient.getNextDeviceTwin(twinQuery);
System.out.println(d.getDeviceId());
}
SDK-szolgáltatásminta
A Java-hoz készült Azure IoT SDK egy olyan szolgáltatásalkalmazás működő mintáját biztosítja, amely ikereszköz-feladatokat kezel. További információ: Ikereszköz-minta.
- Python SDK – A Python 3.7-es vagy újabb verziója ajánlott. Mindenképp a rendszernek megfelelő, 32 vagy 64 bites telepítést használja. Amikor a rendszer erre kéri, mindenképp adja hozzá a Pythont a platformspecifikus környezeti változóhoz.
Áttekintés
Ez a cikk azt ismerteti, hogyan hozhat létre eszköz- és háttérszolgáltatás-alkalmazáskódot az ikereszközökhöz az Azure IoT SDK for Python használatával.
Csomagok telepítése
Az azure-iot-device kódtárat telepíteni kell az eszközalkalmazások létrehozásához.
pip install azure-iot-device
A háttérszolgáltatás-alkalmazások létrehozásához telepíteni kell az azure-iot-hub kódtárat.
pip install azure-iot-hub
Eszközalkalmazás létrehozása
Az eszközalkalmazások olvashatják és írhatnak ikerjelentésű tulajdonságokat, és értesítést kaphatnak a háttéralkalmazás vagy az IoT Hub által beállított kívánt ikertulajdonság-módosításokról.
Az IoTHubDeviceClient osztály olyan metódusokat tartalmaz, amelyek az ikereszközökkel való együttműködéshez használhatók.
Ez a szakasz azt ismerteti, hogyan hozhat létre olyan eszközalkalmazás-kódot, amely:
- Lekéri az ikereszközt, és megvizsgálja a jelentett tulajdonságokat
- Az eszköz ikereszköz-tulajdonságainak javítása
Eszközimportálási utasítás
Adja hozzá ezt a kódot a függvények IoTHubDeviceClient
azure.iot.device SDK-ból való importálásához.
from azure.iot.device import IoTHubDeviceClient
Eszköz csatlakoztatása az IoT Hubhoz
Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:
- Megosztott hozzáférési kulcs
- X.509-tanúsítvány
Fontos
Ez a cikk az eszközök közös hozzáférésű jogosultságkóddal, más néven szimmetrikus kulcshitelesítéssel való csatlakoztatásának lépéseit tartalmazza. Ez a hitelesítési módszer alkalmas tesztelésre és kiértékeléshez, de az eszköz hitelesítése X.509-tanúsítványokkal biztonságosabb módszer. További információkért tekintse meg a kapcsolatbiztonság ajánlott biztonsági eljárásait>.
Hitelesítés megosztott hozzáférési kulccsal
Eszköz csatlakoztatása az IoT Hubhoz:
- Hívja meg create_from_connection_string az eszköz elsődleges kapcsolati sztring hozzáadásához.
- Csatlakozás hívása az eszközügyfél csatlakoztatásához.
Példa:
# Add your IoT hub primary connection string
CONNECTION_STRING = "{Device primary connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
# Connect the client
device_client.connect()
Hitelesítés X.509-tanúsítvánnyal
Eszköz csatlakoztatása az IoT Hubhoz X.509-tanúsítvány használatával:
- Az X.509-tanúsítványparaméterek hozzáadása a create_from_x509_certificate használatával
- Csatlakozás hívása az eszközügyfél csatlakoztatásához
Ez a példa a tanúsítvány bemeneti paraméterértékeit mutatja be helyi változóként az egyértelműség érdekében. Éles rendszerben a bizalmas bemeneti paramétereket környezeti változókban vagy más biztonságosabb tárolási helyen tárolhatja. Például a gazdagépnév környezeti változójának olvasására használható os.getenv("HOSTNAME")
.
# The Azure IoT hub name
hostname = "xxxxx.azure-devices.net"
# The device that has been created on the portal using X509 CA signing or self-signing capabilities
device_id = "MyDevice"
# The X.509 certificate file name
cert_file = "~/certificates/certs/sensor-thl-001-device.cert.pfx"
key_file = "~/certificates/certs/sensor-thl-001-device.cert.key"
# The optional certificate pass phrase
pass_phrase = "1234"
x509 = X509(
cert_file,
key_file,
pass_phrase,
)
# The client object is used to interact with your Azure IoT hub.
device_client = IoTHubDeviceClient.create_from_x509_certificate(
hostname=hostname, device_id=device_id, x509=x509
)
# Connect to IoT Hub
await device_client.connect()
További információ a tanúsítványhitelesítésről:
- Identitások hitelesítése X.509-tanúsítványokkal
- Oktatóanyag: Tanúsítványok létrehozása és feltöltése teszteléshez
Kódminták
Az X.509-tanúsítványhitelesítés működő mintáit az Async Hub-forgatókönyvekben az x509-ben végződő fájlnevek példáiban tekinti meg.
Ikereszköz lekérése és jelentett tulajdonságok vizsgálata
Lekérheti és megvizsgálhatja az ikereszköz adatait, beleértve a címkéket és a tulajdonságokat. A lekért ikereszköz-információk megegyeznek az ikereszköz JSON-formátumú adataival, amelyeket az Azure Portalon tekinthet meg egy eszköz számára.
Hívja meg get_twin , hogy lekérje az ikereszközt az Azure IoT Hub szolgáltatásból. Az ikeradatok egy nyomtatható vagy vizsgálható változóba kerülnek.
Ez a példa lekéri az ikereszközt, és a print
paranccsal JSON formátumban jeleníti meg az ikereszközt.
# get the twin
twin = await device_client.get_twin()
print("Twin document:")
print("{}".format(twin))
Az eszköz ikereszköz-tulajdonságainak javítása
Az eszköz által jelentett tulajdonságok JSON formátumban történő frissítéséhez javítást alkalmazhat.
Javítás alkalmazása a jelentett tulajdonságok frissítéséhez:
- Hozzárendelhet egy jelentett tulajdonság JSON-javítást egy változóhoz.
- Hívja meg patch_twin_reported_properties , hogy alkalmazza a JSON-javítást a jelentett tulajdonságokra. Ez egy szinkron hívás, ami azt jelenti, hogy ez a függvény addig nem tér vissza, amíg a javítást el nem küldi a szolgáltatásnak, és nyugtázza.
Ha patch_twin_reported_properties
hibát ad vissza, ez a függvény a megfelelő hibát eredményezi.
# create the reported properties patch
reported_properties = {"temperature": random.randint(320, 800) / 10}
print("Setting reported temperature to {}".format(reported_properties["temperature"]))
# update the reported properties and wait for the result
await device_client.patch_twin_reported_properties(reported_properties)
Ezeket a metódusokat is meghívhatja az ikereszközök frissítéséhez:
- Hívja meg replace_twin az ikereszköz-címkék és a kívánt tulajdonságok cseréjéhez.
- Hívja meg update_twin az ikereszközök címkéinek és a kívánt tulajdonságoknak a frissítéséhez.
Bejövő kívánt tulajdonságok javításkezelője
Hívja meg a on_twin_desired_properties_patch_received , hogy hozzon létre egy kezelőfüggvényt vagy koroutint, amelyet ikertulajdonság-javítás fogadásakor hív meg. A kezelő egy argumentumot vesz fel, amely az ikerjavítás JSON-szótárobjektum formájában.
Ez a példa beállít egy kívánt tulajdonságjavítás-kezelőt.twin_patch_handler
Példa:
try:
# Set handlers on the client
device_client.on_twin_desired_properties_patch_received = twin_patch_handler
except:
# Clean up in the event of failure
client.shutdown()
A twin_patch_handler
JSON kívánt tulajdonságfrissítéseinek fogadása és nyomtatása.
# Define behavior for receiving twin desired property patches
def twin_patch_handler(twin_patch):
print("Twin patch received:")
print(twin_patch)
SDK-eszközminták
A Pythonhoz készült Azure IoT SDK a következő mintákat tartalmazza:
- get_twin – Csatlakozzon egy eszközhöz, és kérje le az ikeradatokat.
- update_twin_reported_properties – Az ikerpéldány jelentett tulajdonságainak frissítése.
- receive_twin_desired_properties – A kívánt tulajdonságok fogadása és frissítése.
Háttéralkalmazás létrehozása
A háttéralkalmazások az IoT Hubon keresztül csatlakoznak egy eszközhöz, és beolvashatják az eszköz jelentett és kívánt tulajdonságait, megírhatják az eszköz kívánt tulajdonságait, és lefuttathatják az eszköz lekérdezéseit.
Ez a szakasz azt ismerteti, hogyan hozhat létre háttéralkalmazást a következőre:
- Ikercímkék és kívánt tulajdonságok frissítése
- Eszközök lekérdezése szűrőkkel a címkéken és tulajdonságokon
Az IoTHubRegistryManager osztály minden olyan metódust elérhetővé tesz, amely egy háttéralkalmazás létrehozásához szükséges a szolgáltatás ikereszközeivel való interakcióhoz.
Csatlakozás az IoT Hubhoz
Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:
- Megosztott hozzáférési szabályzat
- Microsoft Entra
Fontos
Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.
Csatlakozás megosztott hozzáférési szabályzattal
Csatlakozzon az IoT Hubhoz from_connection_string használatával. Az alkalmazásnak szolgáltatáscsatlakozási engedélyre van szüksége az ikereszköz kívánt tulajdonságainak módosításához, és a beállításjegyzék olvasási engedélyére van szüksége az identitásjegyzék lekérdezéséhez. Nincs olyan alapértelmezett megosztott hozzáférési szabályzat, amely csak ezt a két engedélyt tartalmazza, ezért létre kell hoznia egyet, ha még nem létezik. Adja meg ezt a megosztott hozzáférési szabályzatot, kapcsolati sztring paraméterként.fromConnectionString
A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.
Példa:
import sys
from time import sleep
from azure.iot.hub import IoTHubRegistryManager
from azure.iot.hub.models import Twin, TwinProperties, QuerySpecification, QueryResult
# Connect to IoT hub
IOTHUB_CONNECTION_STRING = "{IoT hub service connection string}"
iothub_registry_manager = IoTHubRegistryManager.from_connection_string(IOTHUB_CONNECTION_STRING)
Csatlakozás a Microsoft Entra használatával
A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.
A Python SDK-hitelesítés áttekintését lásd : Python-alkalmazások hitelesítése Az Azure-szolgáltatásokban a Pythonhoz készült Azure SDK használatával
A Microsoft Entra alkalmazás konfigurálása
Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazáshitelesítési konfigurációk a következők:
- Titkos ügyfélkód
- Tanúsítvány
- Összevont identitás hitelesítő adatai
A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.
A Microsoft Entra-alkalmazások beállításáról további információt a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.
Hitelesítés DefaultAzureCredential használatával
A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential
vagy pared-down ChainedTokenCredential
metódust is. Az egyszerűség kedvéért ez a szakasz a hitelesítést és az ügyfél titkos kódjának használatát DefaultAzureCredential
ismerteti. A használat DefaultAzureCredential
előnyeiről és hátrányairól további információt a PythonHoz készült Azure Identity ügyfélkódtár hitelesítőadat-láncai című témakörben talál.
A DefaultAzureCredential különböző hitelesítési mechanizmusokat támogat, és meghatározza a megfelelő hitelesítőadat-típust a környezet alapján, amelyben végrehajtja. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.
A Microsoft Entra megköveteli ezt az importálási csomagot és a megfelelő import
utasítást:
pip install azure-identity
from azure.identity import DefaultAzureCredential
Ebben a példában a Microsoft Entra alkalmazásregisztrációs ügyfél titkos kódját, ügyfél-azonosítóját és bérlőazonosítóját hozzáadtuk a környezeti változókhoz. Ezek a környezeti változók az DefaultAzureCredential
alkalmazás hitelesítésére szolgálnak. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet egy IoT Hub-kapcsolati módszernek ad át.
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
Az eredményül kapott AccessToken ezután átadható az from_token_credential
IoT Hubhoz való csatlakozáshoz minden olyan SDK-ügyfélhez, amely elfogadja a Microsoft Entra hitelesítő adatait:
- IoTHubRegistryManager az IoT Hub szolgáltatáskapcsolatának létrehozásához Entra-jogkivonat hitelesítő adataival.
- IoTHubJobManager
- DigitalTwinClient
- IoTHubHttpRuntimeManager
- IoTHubConfigurationManager
from_token_credential
két paramétert igényel:
- Az Azure-szolgáltatás URL-címe – Az Azure-szolgáltatás URL-címének előtag nélküli
https://
formátumban{Your Entra domain URL}.azure-devices.net
kell lennie. Például:MyAzureDomain.azure-devices.net
. - Az Azure hitelesítőadat-jogkivonata
Ebben a példában az Azure-hitelesítő adatokat a rendszer a használatával szerzi be DefaultAzureCredential
. Ezután megjelenik IoTHubRegistryManager.from_token_credential
az Azure-szolgáltatás URL-címe és hitelesítő adatai az IoT Hubhoz való kapcsolat létrehozásához.
import sys
import os
from azure.identity import DefaultAzureCredential
from azure.iot.hub import IoTHubRegistryManager
# Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'
# Set environment variables
os.environ['AZURE_CLIENT_SECRET'] = clientSecretValue
os.environ['AZURE_CLIENT_ID'] = clientID
os.environ['AZURE_TENANT_ID'] = tenantID
# Acquire a credential object
credential = DefaultAzureCredential()
# Use Entra to authorize IoT Hub service
print("Connecting to IoTHubRegistryManager...")
iothub_registry_manager = IoTHubRegistryManager.from_token_credential(
url="MyAzureDomain.azure-devices.net",
token_credential=credential)
Kódminták
A Microsoft Entra szolgáltatáshitelesítés működő mintáit a Pythonhoz készült Microsoft Authentication Library (MSAL) című témakörben talál.
Ikercímkék és kívánt tulajdonságok frissítése
Egyszerre frissítheti az ikereszköz-címkéket és a kívánt tulajdonságokat egy háttéralkalmazásból a update_twin használatával.
- Az ikereszköz aktuális verziójának lekéréséhez hívja meg a get_twin
- Az Ikerosztály használatával JSON formátumban adhat hozzá címkéket és tulajdonságokat.
- Hívja meg
update_twin
, hogy alkalmazza a javítást az ikereszközre. A replace_twin is használhatja az ikereszköz kívánt tulajdonságainak és címkéinek cseréjére.
Ez a példa frissíti region
és plant
címkézi az adatokat, és beállít egy power_level
kívánt tulajdonságot a következőre 1
: .
new_tags = {
'location' : {
'region' : 'US',
'plant' : 'Redmond43'
}
}
DEVICE_ID = "[Device Id]"
twin = iothub_registry_manager.get_twin(DEVICE_ID)
twin_patch = Twin(tags=new_tags, properties= TwinProperties(desired={'power_level' : 1}))
twin = iothub_registry_manager.update_twin(DEVICE_ID, twin_patch, twin.etag)
Ikereszköz-lekérdezés létrehozása
Ikereszköz-lekérdezésekkel lekérdezheti az ikereszköz adatait. Az ikereszköz-lekérdezések OLYAN SQL-szerű lekérdezések, amelyek az ikereszköz-eredményhalmazt adnak vissza.
Ikereszköz-lekérdezés használata:
Sql-szerű lekérdezéskérés definiálásához használjon QuerySpecification objektumot.
Az query_iot_hub használatával lekérdezhet egy IoTHubot, és lekérheti az ikereszköz adatait az SQL-hez hasonló lekérdezési specifikáció használatával.
Ez a példa két lekérdezést futtat. Az első csak az üzemen belüli Redmond43
eszközök ikereszközeit választja ki, a második pedig pontosítja a lekérdezést, hogy csak azokat az eszközöket válassza ki, amelyek szintén mobilhálózaton keresztül csatlakoznak. Az eredmények minden lekérdezés után megjelennek.
query_spec = QuerySpecification(query="SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'")
query_result = iothub_registry_manager.query_iot_hub(query_spec, None, 100)
print("Devices in Redmond43 plant: {}".format(', '.join([twin.device_id for twin in query_result.items])))
print()
query_spec = QuerySpecification(query="SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity = 'cellular'")
query_result = iothub_registry_manager.query_iot_hub(query_spec, None, 100)
print("Devices in Redmond43 plant using cellular network: {}".format(', '.join([twin.device_id for twin in query_result.items])))
print()
SDK-szolgáltatásminta
A Pythonhoz készült Azure IoT SDK egy olyan szolgáltatásalkalmazás működő mintáját biztosítja, amely ikereszköz-feladatokat kezel. További információt a Registry Manager lekérdezésmintájában talál.
- Node.js 10.0.x vagy újabb verziót igényel
Áttekintés
Ez a cikk azt ismerteti, hogyan használható az Azure IoT SDK for Node.js eszköz- és háttérszolgáltatás-alkalmazáskód létrehozására az ikereszközökhöz.
Eszközalkalmazás létrehozása
Az eszközalkalmazások olvashatják és írhatnak ikerjelentésű tulajdonságokat, és értesítést kaphatnak a háttéralkalmazás vagy az IoT Hub által beállított kívánt ikertulajdonság-módosításokról.
Ez a szakasz azt ismerteti, hogyan használható az azure-iot-device csomag az Azure IoT SDK-ban Node.js eszközalkalmazás létrehozásához a következő célokra:
- Ikereszköz lekérése és jelentett tulajdonságok vizsgálata
- Jelentett ikereszköz-tulajdonságok frissítése
- Értesítés a kívánt tulajdonságmódosításról
Fontos
Ez a cikk az eszközök közös hozzáférésű jogosultságkóddal, más néven szimmetrikus kulcshitelesítéssel való csatlakoztatásának lépéseit tartalmazza. Ez a hitelesítési módszer alkalmas tesztelésre és kiértékeléshez, de az eszköz hitelesítése X.509-tanúsítványokkal biztonságosabb módszer. További információkért tekintse meg a kapcsolatbiztonság ajánlott biztonsági eljárásait>.
Eszköz SDK-csomagjának telepítése
Futtassa ezt a parancsot az azure-iot-device SDK telepítéséhez a fejlesztői gépen:
npm install azure-iot-device --save
Eszköz csatlakoztatása az IoT Hubhoz
Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:
- X.509-tanúsítvány
- Megosztott hozzáférési kulcs
Fontos
Ez a cikk az eszközök közös hozzáférésű jogosultságkóddal, más néven szimmetrikus kulcshitelesítéssel való csatlakoztatásának lépéseit tartalmazza. Ez a hitelesítési módszer alkalmas tesztelésre és kiértékeléshez, de az eszköz hitelesítése X.509-tanúsítványokkal biztonságosabb módszer. További információkért tekintse meg a kapcsolatbiztonság ajánlott biztonsági eljárásait>.
Hitelesítés X.509-tanúsítvánnyal
Az X.509-tanúsítvány az eszköz–IoT Hub kapcsolatátvitelhez van csatolva.
Eszköz–IoT Hub kapcsolat konfigurálása X.509-tanúsítvány használatával:
AConnectionString hívásával adja hozzá az eszköz- vagy identitásmodul kapcsolati sztring, és adja hozzá az
Client
objektum átviteli típusát. Adja hozzáx509=true
a kapcsolati sztring, hogy jelezze, hogy a rendszer tanúsítványt ad hozzáDeviceClientOptions
. Példa:Eszköz kapcsolati sztring:
HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true
Identitásmodul kapcsolati sztring:
HostName=xxxxx.azure-devices.net;DeviceId=Device-1;ModuleId=Module-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true
Konfiguráljon egy JSON-változót tanúsítványadatokkal, és adja át a DeviceClientOptionsnak.
Hívja meg a setOptionst , hogy adjon hozzá egy X.509-tanúsítványt és kulcsot (és opcionálisan jelszót) az ügyfélátvitelhez.
Nyissa meg a hívást az eszköz és az IoT Hub közötti kapcsolat megnyitásához.
Ez a példa egy JSON-változó tanúsítványkonfigurációs adatait mutatja be. A rendszer átadja a tanúsítványkonfigurációt clientOptions
setOptions
, és a kapcsolat a következő használatával open
nyílik meg: .
const Client = require('azure-iot-device').Client;
const Protocol = require('azure-iot-device-mqtt').Mqtt;
// Connection string illustrated for demonstration only. Never hard-code the connection string in production. Instead use an environmental variable or other secure storage.
const connectionString = `HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true`
const client = Client.fromConnectionString(connectionString, Protocol);
var clientOptions = {
cert: myX509Certificate,
key: myX509Key,
passphrase: passphrase,
http: {
receivePolicy: {
interval: 10
}
}
}
client.setOptions(clientOptions);
client.open(connectCallback);
További információ a tanúsítványhitelesítésről:
- Identitások hitelesítése X.509-tanúsítványokkal
- Tanúsítványok létrehozása és feltöltése teszteléshez
Kódminta
Az X.509-tanúsítványhitelesítés működő mintájáért tekintse meg az X.509 egyszerű mintaeszközt.
Hitelesítés megosztott hozzáférési kulccsal
Az azure-iot-device csomag olyan objektumokat tartalmaz, amelyek IoT-eszközökhöz illesztenek. Az ikerosztály ikerspecifikus objektumokat tartalmaz. Ez a szakasz az ikereszköz-adatok olvasására és írására használt osztálykódot ismerteti Client
.
Átviteli protokoll kiválasztása
Az Client
objektum a következő protokollokat támogatja:
Amqp
-
Http
- HasználatHttp
esetén a példány ritkán (legalább 25 percenként) ellenőrzi azClient
IoT Hubtól érkező üzeneteket. Mqtt
MqttWs
AmqpWs
Telepítse a szükséges átviteli protokollokat a fejlesztői gépen.
Ez a parancs például telepíti a protokollt Mqtt
:
npm install azure-iot-device-mqtt --save
Az MQTT, az AMQP és a HTTPS-támogatás közötti különbségekről további információt a felhőalapú kommunikációs útmutatóban és a Kommunikációs protokoll kiválasztása című témakörben talál.
Ügyfélmodul létrehozása
Modul létrehozása Client
a telepített csomag használatával.
Példa:
const Client = require('azure-iot-device').Client;
Protokollmodul létrehozása
Modul létrehozása Protocol
telepített átviteli csomag használatával.
Ez a példa az MQTT protokollt rendeli hozzá:
const Protocol = require('azure-iot-device-mqtt').Mqtt;
Az eszköz kapcsolati sztring és átviteli protokolljának hozzáadása
Hívás aConnectionStringtől az eszközkapcsolati paraméterek megadásához:
- connStr – Egy olyan kapcsolati sztring, amely egy IoT Hub "eszközcsatlakoztatási" engedélyeit foglalja magában. A kapcsolati sztring a következő formátumban tartalmazza a gazdagépnevet, az eszközazonosítót és a megosztott hozzáférési kulcsot: "HostName=<iothub_host_name>; DeviceId=<device_id>; SharedAccessKey=<device_key>".
- transportCtor – A szállítási protokoll.
Ez a példa az átviteli protokollt Mqtt
használja:
const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Mqtt;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Az IoT Hubhoz való kapcsolat megnyitása
A nyitott metódussal megnyithat egy kapcsolatot egy IoT-eszköz és az IoT Hub között.
Hiba .catch(err)
észlelése és kezelőkód végrehajtása.
Példa:
client.open() //open the connection
.catch((err) => {
console.error('Could not connect: ' + err.message);
});
Ikereszköz lekérése és jelentett tulajdonságok vizsgálata
Hívja meg a getTwint az ikereszköz aktuális információinak ikerobjektumba való lekéréséhez.
Példa:
client.getTwin(function(err, twin))
if (err)
console.error('could not get twin');
Jelentett ikereszköz-tulajdonságok frissítése
Az eszköz jelentett tulajdonságainak frissítéséhez használja a frissítést . A metódus második paramétereként adjon meg egy JSON formátumú javítást az első paraméter és a függvény végrehajtási állapotának visszahívási módszereként.
Ebben a példában a rendszer egy JSON formátumú ikereszköz-javítást tárol a patch
változóban. A javítás a következő ikereszköz-frissítési connectivity
cellular
értéket tartalmazza: . A rendszer átadja a javítás- és hibakezelőt a update
metódusnak. Hiba esetén megjelenik egy konzol hibaüzenete.
var patch = {
connectivity: {
type: 'cellular'
}
}
twin.properties.reported.update(patch, function(err)
{
if (err)
{
console.error('could not update twin');
}
else
{
console.log('twin state reported');
process.exit();
}
});
Értesítés a kívánt tulajdonságmódosításról
Hozzon létre egy kívánt tulajdonságfrissítési eseményfigyelőt, amely a visszahíváskezelő metódus nevének twin.on-ra való átadásával hajtja végre a kívánt tulajdonság módosításakor az eszközön.
A kívánt tulajdonságesemény-figyelő az alábbi űrlapok egyikét használhatja:
- Az összes javítás fogadása egyetlen eseménykezelővel
- Esemény fogadása, ha valami megváltozik a tulajdonságok csoportosítása alatt
- Esemény fogadása egyetlen tulajdonságmódosításhoz
Az összes javítás fogadása egyetlen eseménykezelővel
Létrehozhat egy figyelőt a kívánt tulajdonságmódosítások fogadásához.
Ez a példakód a szolgáltatástól kapott tulajdonságokat adja ki.
twin.on('properties.desired', function (delta) {
console.log('new desired properties received:');
console.log(JSON.stringify(delta));
});
Esemény fogadása, ha valami megváltozik a tulajdonságok csoportosítása alatt
Létrehozhat egy figyelőt, hogy eseményt fogadjon, ha a tulajdonságcsoportba tartozó bármi megváltozik.
Példa:
A
minTemperature
tulajdonságok ésmaxTemperature
a tulajdonságok egy névvel ellátottproperties.desired.climate changes
tulajdonságcsoport alatt találhatók.Egy háttérszolgáltatás-alkalmazás alkalmazza ezt a javítást a frissítésre
minTemperature
ésmaxTemperature
a kívánt tulajdonságokra:const twinPatch1 = { properties: { desired: { climate: { minTemperature: 68, maxTemperature: 76, }, }, }, };
Ez a kód beállít egy kívánt tulajdonságmódosítási eseményfigyelőt, amely aktiválja a
properties.desired.climate
tulajdonságcsoporton belüli összes módosítást. Ha a csoporton belül a kívánt tulajdonság megváltozik, a konzolon megjelenő minimális és maximális hőmérséklet-változási üzenetek:twin.on('properties.desired.climate', function (delta) { if (delta.minTemperature || delta.maxTemperature) { console.log('updating desired temp:'); console.log('min temp = ' + twin.properties.desired.climate.minTemperature); console.log('max temp = ' + twin.properties.desired.climate.maxTemperature); } });
Esemény fogadása egyetlen tulajdonságmódosításhoz
Beállíthat egy figyelőt egyetlen tulajdonságmódosításhoz. Ebben a példában az esemény kódja csak akkor lesz végrehajtva, ha a fanOn
logikai érték a javítás része. A kód az új kívánt fanOn
állapotot adja ki, amikor a szolgáltatás frissíti.
Egy háttéralkalmazás alkalmazza ezt a kívánt tulajdonságjavítást:
const twinPatch2 = { properties: { desired: { climate: { hvac: { systemControl: { fanOn: true, }, }, }, }, }, };
A figyelő csak akkor aktiválódik, ha a
fanOn
tulajdonság megváltozik:twin.on('properties.desired.climate.hvac.systemControl', function (fanOn) { console.log('setting fan state to ' + fanOn); });
Eszköz SDK-minták
Az Azure IoT SDK for Node.js két ikereszköz-mintát tartalmaz:
Háttéralkalmazás létrehozása
A háttéralkalmazások az IoT Hubon keresztül csatlakoznak egy eszközhöz, és beolvashatják az eszköz jelentett és kívánt tulajdonságait, megírhatják az eszköz kívánt tulajdonságait, és lefuttathatják az eszköz lekérdezéseit.
Ez a szakasz a következő háttéralkalmazások létrehozását ismerteti:
- Ikereszköz lekérése és frissítése
- Ikereszköz-lekérdezés létrehozása
Szolgáltatás SDK-csomag telepítése
Futtassa ezt a parancsot az Azure-iotHub fejlesztői gépen való telepítéséhez:
npm install azure-iothub --save
A Beállításjegyzék-osztály minden olyan metódust elérhetővé tesz, amely az ikereszközökkel való interakcióhoz szükséges egy háttéralkalmazásból.
Csatlakozás az IoT Hubhoz
Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:
- Megosztott hozzáférési szabályzat
- Microsoft Entra
Fontos
Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.
Csatlakozás megosztott hozzáférési szabályzattal
A fromConnectionString használatával csatlakozhat az IoT Hubhoz. Az alkalmazásnak szolgáltatáscsatlakozási engedélyre van szüksége az ikereszköz kívánt tulajdonságainak módosításához, és a beállításjegyzék olvasási engedélyére van szüksége az identitásjegyzék lekérdezéséhez. Nincs olyan alapértelmezett megosztott hozzáférési szabályzat, amely csak ezt a két engedélyt tartalmazza, ezért létre kell hoznia egyet, ha még nem létezik. Adja meg ezt a megosztott hozzáférési szabályzatot, kapcsolati sztring paraméterként.fromConnectionString
A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.
'use strict';
var iothub = require('azure-iothub');
var connectionString = '{Shared access policy connection string}';
var registry = iothub.Registry.fromConnectionString(connectionString);
Csatlakozás a Microsoft Entra használatával
A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.
Az SDK-hitelesítés Node.js áttekintése:
A Microsoft Entra alkalmazás konfigurálása
Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazáshitelesítési konfigurációk a következők:
- Titkos ügyfélkód
- Tanúsítvány
- Összevont identitás hitelesítő adatai
A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.
A Microsoft Entra-alkalmazások beállításáról további információt a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.
Hitelesítés DefaultAzureCredential használatával
A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential
vagy pared-down ChainedTokenCredential
metódust is. Az egyszerűség kedvéért ez a szakasz a hitelesítést és az ügyfél titkos kódjának használatát DefaultAzureCredential
ismerteti.
A használat DefaultAzureCredential
előnyeiről és hátrányairól további információt a JavaScripthez készült Azure Identity ügyfélkódtár hitelesítőadat-láncai című témakörben talál .
A DefaultAzureCredential különböző hitelesítési mechanizmusokat támogat, és meghatározza a megfelelő hitelesítőadat-típust a környezet alapján, amelyben végrehajtja. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.
A Microsoft Entra a következő csomagot igényli:
npm install --save @azure/identity
Ebben a példában a Microsoft Entra alkalmazásregisztrációs ügyfél titkos kódját, ügyfél-azonosítóját és bérlőazonosítóját hozzáadtuk a környezeti változókhoz. Ezek a környezeti változók az DefaultAzureCredential
alkalmazás hitelesítésére szolgálnak. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet egy IoT Hub-kapcsolati módszernek ad át.
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
Az eredményül kapott hitelesítő jogkivonat ezután átadható a FromTokenCredential-nak , hogy csatlakozzon az IoT Hubhoz minden olyan SDK-ügyfélhez, amely elfogadja a Microsoft Entra hitelesítő adatait:
fromTokenCredential
két paramétert igényel:
- Az Azure-szolgáltatás URL-címe – Az Azure-szolgáltatás URL-címének előtag nélküli
https://
formátumban{Your Entra domain URL}.azure-devices.net
kell lennie. Például:MyAzureDomain.azure-devices.net
. - Az Azure hitelesítőadat-jogkivonata
Ebben a példában az Azure-hitelesítő adatokat a rendszer a használatával szerzi be DefaultAzureCredential
. A rendszer ezután az Azure-tartomány URL-címét és hitelesítő adatait adja meg Registry.fromTokenCredential
az IoT Hubhoz való kapcsolat létrehozásához.
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);
Kódminták
A Microsoft Entra szolgáltatáshitelesítés működő mintáit az Azure-identitásra vonatkozó példákban talál.
Ikereszköz lekérése és frissítése
Létrehozhat egy javítást, amely egy ikereszköz címkéjét és kívánt tulajdonságfrissítéseit tartalmazza.
Ikereszköz frissítése:
- Hívja meg a getTwint az ikereszköz-objektum lekéréséhez.
- Formázza az ikereszköz frissítését tartalmazó javítást. A javítás JSON formátumban van formázva az ikerosztályban leírtak szerint. A háttérszolgáltatás-javítások tartalmazhatnak címke- és kívánt tulajdonságfrissítéseket. További információ a javításformátumról: Címkék és tulajdonságok formátuma.
- Hívja meg a frissítést az ikereszköz frissítéséhez a javítással.
Ebben a példában a rendszer lekéri az ikereszköztmyDeviceId
, majd egy javítást alkalmaz a rendszer az ikerpéldányokra, amelyek a címkefrissítést region: 'US', plant: 'Redmond43'
tartalmazzáklocation
.
registry.getTwin('myDeviceId', function(err, twin){
if (err) {
console.error(err.constructor.name + ': ' + err.message);
} else {
var patch = {
tags: {
location: {
region: 'US',
plant: 'Redmond43'
}
}
};
twin.update(patch, function(err) {
if (err) {
console.error('Could not update twin: ' + err.constructor.name + ': ' + err.message);
} else {
console.log(twin.deviceId + ' twin updated successfully');
queryTwins();
}
});
}
});
Ikereszköz-lekérdezés létrehozása
SQL-szerű eszköz lekérdezéseket hozhat létre az ikereszközökről származó információk gyűjtéséhez.
A createQuery használatával olyan lekérdezést hozhat létre, amely egy IoT Hub-példányon futtatható, és információkat kereshet az eszközökről vagy feladatokról.
createQuery
két paramétert tartalmaz:
- sqlQuery – SQL-sztringként írt lekérdezés.
- pageSize – A kívánt találatok száma oldalanként (nem kötelező. alapértelmezett: 1000, max: 10000).
Ha a pageSize paraméter meg van adva, a lekérdezési objektum tartalmaz egy hasMoreResults
logikai tulajdonságot, amelyet a metódussal ellenőrizheti és használhat a nextAsTwin
következő ikereredmény-lap lekéréséhez, amennyire csak szükséges, az összes eredmény lekéréséhez. Az olyan eredményekhez, amelyek nem ikereszközök, például az összesítő lekérdezések eredményei, meghívható egy metódus next
.
Ez a példa lekérdezés csak az üzemben található Redmond43
eszközök ikereszközeit választja ki.
var queryTwins = function() {
var query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'", 100);
query.nextAsTwin(function(err, results) {
if (err) {
console.error('Failed to fetch the results: ' + err.message);
} else {
console.log("Devices in Redmond43: " + results.map(function(twin) {return twin.deviceId}).join(','));
}
});
Ez a példa lekérdezés pontosítja az első lekérdezést, amely csak a mobilhálózaton keresztül csatlakozó eszközöket választja ki.
query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity.type = 'cellular'", 100);
query.nextAsTwin(function(err, results) {
if (err) {
console.error('Failed to fetch the results: ' + err.message);
} else {
console.log("Devices in Redmond43 using cellular network: " + results.map(function(twin) {return twin.deviceId}).join(','));
}
});
};
Service SDK-minta
A Node.js-hez készült Azure IoT SDK egy olyan szolgáltatásalkalmazás működő mintáját biztosítja, amely ikereszköz-feladatokat kezel. További információ: Device Twin Backend Service – Ez a projekt egy adott eszköz ikereszköz-frissítéseinek küldéséhez használható.