Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Özel ayırma ilkeleri, cihazların IoT hub'larınıza nasıl atandığı üzerinde daha fazla denetim sağlar. Özel ayırma ilkeleriyle, Azure IoT Hub Cihaz Sağlama Hizmeti (DPS) tarafından sağlanan ilkeler senaryonuzun gereksinimlerini karşılamadığında kendi ayırma ilkelerinizi tanımlayabilirsiniz. Özel ayırma ilkesi, Azure İşlevleri barındırılan bir web kancasında uygulanır ve bir veya daha fazla bireysel kayıt ve/veya kayıt grubunda yapılandırılır. Bir cihaz yapılandırılmış bir kayıt girdisi kullanarak DPS'ye kaydolduğunda DPS, cihazın hangi IoT hub'ına kaydedilmesi gerektiğini ve isteğe bağlı olarak ilk durumunu öğrenmek için web kancasını çağırır. Daha fazla bilgi edinmek için bkz. Azure IoT Hub Cihazı Sağlama Hizmeti ile özel ayırma ilkelerini anlama.
Bu öğreticide, C# dilinde yazılmış bir Azure İşlevi kullanılarak özel ayırma ilkesi gösterilmektedir. Cihazlar, Contoso Toasters Bölümünü ve Contoso Isı Pompaları Bölümünü temsil eden iki IoT hub'ına atanır. Sağlama isteğinde bulunan cihazların sağlama için kabul edilmesi gereken aşağıdaki soneklerden birine sahip bir kayıt kimliği olmalıdır:
- Contoso Toasters Bölümü için -contoso-tstrsd-007
- Contoso Isı Pompaları Bölümü için -contoso-hpsd-088
Cihazlar, Azure IoT C SDK'sında bulunan bir sağlama örneği kullanılarak simülasyona alınır.
Bu öğreticide aşağıdaki eylemleri gerçekleştirirsiniz:
- Bir DPS örneği oluşturmak ve iki Contoso bölme IoT hub'ı (Contoso Toasters Division ve Contoso Heat Pumps Division) oluşturup buna bağlamak için Azure CLI'yi kullanın.
- Özel ayırma ilkesini uygulayan bir Azure İşlevi oluşturun.
- Yeni bir kayıt grubu oluşturma, özel ayırma ilkesi için Azure İşlevi'ni kullanır.
- İki sanal cihaz için cihaz simetrik anahtarları oluşturun.
- Azure IoT C SDK'sı için geliştirme ortamını ayarlayın.
- Cihazların simülasyonunu yapın ve özel ayırma ilkesindeki örnek koda göre sağlandığını doğrulayın.
Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.
Önkoşullar
Aşağıdaki önkoşullar bir Windows geliştirme ortamı içindir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.
'C++ile masaüstü geliştirme' iş yükü etkinleştirilmiş Visual Studio 2022. Visual Studio 2015 ve Visual Studio 2017 de desteklenir.
Git yüklü. Daha fazla bilgi için bkz . Git indirmeleri.
Yüklü Azure CLI. Daha fazla bilgi için bkz . Azure CLI'yi yükleme. İsterseniz bu öğreticideki komutları Azure Cloud Shell'deki Bash ortamında da çalıştırabilirsiniz.
Sağlama hizmetini ve iki IoT hub'ını oluşturma
Bu bölümde Azure Cloud Shell'i kullanarak bir sağlama hizmeti ve Contoso Toasters Bölümünü ve Contoso Heat Pumps bölümünü temsil eden iki IoT hub'ı oluşturacaksınız.
İlk olarak, bu öğreticideki komutları basitleştirmek için çalışma alanınızda ortam değişkenlerini ayarlayın.
DPS ve IoT Hub adları genel olarak benzersiz olmalıdır. Yer tutucuyu
SUFFIXkendi değerinizle değiştirin.Ayrıca, bu öğreticinin ilerleyen bölümlerinde oluşturduğunuz Azure İşlevi kodu, adlarında veya
-toasters-adlarında bulunan-heatpumps-IoT hub'larını arar. Önerilen değerleri değiştirirseniz, gerekli alt dizeleri içeren adları kullandığınızdan emin olun.#!/bin/bash export RESOURCE_GROUP="contoso-us-resource-group" export LOCATION="westus" export DPS="contoso-provisioning-service-SUFFIX" export TOASTER_HUB="contoso-toasters-hub-SUFFIX" export HEATPUMP_HUB="contoso-heatpumps-hub-SUFFIX"# PowerShell $env:RESOURCE_GROUP = "contoso-us-resource-group" $env:LOCATION = "westus" $env:DPS = "contoso-provisioning-service-SUFFIX" $env:TOASTER_HUB = "contoso-toasters-hub-SUFFIX" $env:HEATPUMP_HUB = "contoso-heatpumps-hub-SUFFIX"İpucu
Bu öğreticide kullanılan komutlar varsayılan olarak Batı ABD konumunda kaynaklar oluşturur. Kaynaklarınızı, Cihaz Sağlama Hizmeti'ni destekleyen size en yakın bölgede oluşturmanızı öneririz. Azure durum sayfasına gidip "Cihaz Sağlama Hizmeti" araması yaparak kullanılabilir konumların listesini görüntüleyebilirsiniz. Komutlarda konumlar tek kelime veya çok kelime ile belirtilebilir; örneğin: westus, West US, WEST US vb. Değer büyük/küçük harfe duyarlı değildir.
Azure kaynak grubu oluşturmak için az group create komutunu kullanın. Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır.
Aşağıdaki örnek bir kaynak grubu oluşturur. Bu öğreticide oluşturulan tüm kaynaklar için tek bir grup kullanmanızı öneririz. Bu yaklaşım, işiniz bittikten sonra temizlemeyi kolaylaştırır.
az group create --name $RESOURCE_GROUP --location $LOCATIONCihaz Sağlama Hizmeti'nin (DPS) bir örneğini oluşturmak için az iot dps create komutunu kullanın. Sağlama hizmeti contoso-us-resource-group'a eklenir.
az iot dps create --name $DPS --resource-group $RESOURCE_GROUP --location $LOCATIONBu komutun tamamlanması birkaç dakika sürebilir.
Contoso Toasters Division IoT hub'ını oluşturmak için az iot hub create komutunu kullanın. IoT hub'ı contoso-us-resource-group'a eklenir.
az iot hub create --name $TOASTER_HUB --resource-group $RESOURCE_GROUP --location $LOCATION --sku S1Bu komutun tamamlanması birkaç dakika sürebilir.
Contoso Heat Pumps Division IoT hub'ını oluşturmak için az iot hub create komutunu kullanın. Bu IoT hub'ı contoso-us-resource-group'a da eklenir.
az iot hub create --name $HEATPUMP_HUB --resource-group $RESOURCE_GROUP --location $LOCATION --sku S1Bu komutun tamamlanması birkaç dakika sürebilir.
Oluşturduğunuz hub'ların bağlantı dizesi almak için aşağıdaki iki komutu çalıştırın.
az iot hub connection-string show --hub-name $TOASTER_HUB --key primary --query connectionString -o tsv az iot hub connection-string show --hub-name $HEATPUMP_HUB --key primary --query connectionString -o tsvHub'ları DPS kaynağına bağlamak için aşağıdaki komutları çalıştırın. Yer tutucuları önceki adımdaki hub bağlantı dizesi ile değiştirin.
az iot dps linked-hub create --dps-name $DPS --resource-group $RESOURCE_GROUP --location $LOCATION --connection-string <toaster_hub_connection_string> az iot dps linked-hub create --dps-name $DPS --resource-group $RESOURCE_GROUP --location $LOCATION --connection-string <heatpump_hub_connection_string>
Özel ayırma işlevini oluşturma
Bu bölümde, özel ayırma ilkenizi uygulayan bir Azure işlevi oluşturacaksınız. Bu işlev, kayıt kimliğinin -contoso-tstrsd-007 veya -contoso-hpsd-088 dizesini içerip içermediğine bağlı olarak bir cihazın hangi bölüme kayıtlı IoT hub'ına kaydedileceğine karar verir. Ayrıca cihazın tost makinesi mi yoksa ısı pompası mı olduğuna bağlı olarak cihaz ikizinin ilk durumunu ayarlar.
Azure Portal’ında oturum açın.
Arama kutusunda İşlev Uygulaması'nı arayın ve seçin.
İşlev Uygulaması Oluştur veya Oluştur'u seçin.
İşlev Uygulaması Oluştur sayfasındaki Temel Bilgiler sekmesinin altında yeni işlev uygulamanız için aşağıdaki ayarları girin ve Gözden geçir ve oluştur'u seçin:
Parametre Değer Abonelik Bu öğretici için kaynakları oluşturduğunuz aboneliğin seçili olduğundan emin olun. Kaynak Grubu Önceki bölümde oluşturduğunuz kaynak grubunu seçin. Önceki bölümde sağlanan varsayılan değer contoso-us-resource-group şeklindedir. İşlev Uygulamasının adı İşlev uygulamanız için bir ad belirtin. Çalışma zamanı yığını .NET Sürüm herhangi bir işlem içi model sürümünü seçin. Bölge Size yakın bir bölge seçin. Not
Application Insights varsayılan olarak etkindir. Bu öğretici için Application Insights gerekli değildir, ancak özel ayırmayla ilgili karşılaştığınız sorunları anlamanıza ve araştırmanıza yardımcı olabilir. İsterseniz, İzleme sekmesini ve ardından Application Insights'ı Etkinleştir için Hayır'ı seçerek Application Insights'ı devre dışı bırakabilirsiniz.
gözden geçir ve oluştur sekmesinde Oluştur'u seçerek işlev uygulamasını oluşturun.
Dağıtım birkaç dakika sürebilir. Tamamlandığında Kaynağa git'i seçin.
İşlev uygulamasına Genel Bakış sayfasının sol bölmesinde İşlev oluştur'u seçin.
İşlev oluştur sayfasında HTTP Tetikleyicisi şablonunu ve ardından İleri'yi seçin.
Şablon ayrıntıları sekmesinde Yetkilendirme düzeyi olarak Anonim'ive ardından Oluştur'u seçin.
İpucu
Yetkilendirme düzeyini İşlev olarak tutarsanız DPS kayıtlarınızı işlev API anahtarıyla yapılandırmanız gerekir. Daha fazla bilgi için bkz. HTTP tetikleyicisini Azure İşlevleri.
HttpTrigger1 işlevi açıldığında, sol bölmede Kod + Test'i seçin. Bu seçim işlevin kodunu düzenlemenizi sağlar. Run.csx kod dosyası düzenleme için açılmalıdır.
Gerekli NuGet paketlerine başvurun. İlk cihaz ikizini oluşturmak için özel ayırma işlevi, barındırma ortamına yüklenmesi gereken iki NuGet paketinde tanımlanan sınıfları kullanır. Azure İşlevleri ile NuGet paketlerine function.proj dosyası kullanılarak başvurulur. Bu adımda, gerekli derlemeler için bir function.proj dosyasını kaydedip karşıya yüklersiniz. Daha fazla bilgi için bkz. NuGet paketlerini kullanma.
Aşağıdaki satırları sık kullandığınız düzenleyiciye kopyalayın ve dosyayı bilgisayarınızda function.proj olarak kaydedin.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Azure.Devices.Provisioning.Service" Version="1.18.1" /> <PackageReference Include="Microsoft.Azure.Devices.Shared" Version="1.30.1" /> </ItemGroup> </Project>function.proj dosyanızı karşıya yüklemek için kod düzenleyicisinin üzerinde bulunan Karşıya Yükle düğmesini seçin. Karşıya yükledikten sonra, içeriği doğrulamak için açılan kutuyu kullanarak kod düzenleyicisinde dosyayı seçin.
Kod düzenleyicisinde function.proj dosyasını seçin ve içeriğini doğrulayın. function.proj dosyası boşsa, önceki satırları dosyaya kopyalayın ve kaydedin. (Bazen karşıya yükleme, içeriği karşıya yüklemeden dosyayı oluşturur.)
Kod düzenleyicisinde HttpTrigger1 için run.csx dosyasının seçildiğinden emin olun. HttpTrigger1 işlevinin kodunu aşağıdaki kodla değiştirin ve Kaydet'i seçin:
#r "Newtonsoft.Json" using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; using Microsoft.Azure.Devices.Shared; // For TwinCollection using Microsoft.Azure.Devices.Provisioning.Service; // For TwinState public static async Task<IActionResult> Run(HttpRequest req, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); // Get request body string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); dynamic data = JsonConvert.DeserializeObject(requestBody); log.LogInformation("Request.Body:..."); log.LogInformation(requestBody); // Get registration ID of the device string regId = data?.deviceRuntimeContext?.registrationId; string message = "Uncaught error"; bool fail = false; ResponseObj obj = new ResponseObj(); if (regId == null) { message = "Registration ID not provided for the device."; log.LogInformation("Registration ID : NULL"); fail = true; } else { string[] hubs = data?.linkedHubs?.ToObject<string[]>(); // Must have hubs selected on the enrollment if (hubs == null) { message = "No hub group defined for the enrollment."; log.LogInformation("linkedHubs : NULL"); fail = true; } else { // This is a Contoso Toaster Model 007 if (regId.Contains("-contoso-tstrsd-007")) { //Find the "-toasters-" IoT hub configured on the enrollment foreach(string hubString in hubs) { if (hubString.Contains("-toasters-")) obj.iotHubHostName = hubString; } if (obj.iotHubHostName == null) { message = "No toasters hub found for the enrollment."; log.LogInformation(message); fail = true; } else { // Specify the initial tags for the device. TwinCollection tags = new TwinCollection(); tags["deviceType"] = "toaster"; // Specify the initial desired properties for the device. TwinCollection properties = new TwinCollection(); properties["state"] = "ready"; properties["darknessSetting"] = "medium"; // Add the initial twin state to the response. TwinState twinState = new TwinState(tags, properties); obj.initialTwin = twinState; } } // This is a Contoso Heat pump Model 008 else if (regId.Contains("-contoso-hpsd-088")) { //Find the "-heatpumps-" IoT hub configured on the enrollment foreach(string hubString in hubs) { if (hubString.Contains("-heatpumps-")) obj.iotHubHostName = hubString; } if (obj.iotHubHostName == null) { message = "No heat pumps hub found for the enrollment."; log.LogInformation(message); fail = true; } else { // Specify the initial tags for the device. TwinCollection tags = new TwinCollection(); tags["deviceType"] = "heatpump"; // Specify the initial desired properties for the device. TwinCollection properties = new TwinCollection(); properties["state"] = "on"; properties["temperatureSetting"] = "65"; // Add the initial twin state to the response. TwinState twinState = new TwinState(tags, properties); obj.initialTwin = twinState; } } // Unrecognized device. else { fail = true; message = "Unrecognized device registration."; log.LogInformation("Unknown device registration"); } } } log.LogInformation("\nResponse"); log.LogInformation((obj.iotHubHostName != null) ? JsonConvert.SerializeObject(obj) : message); return (fail) ? new BadRequestObjectResult(message) : (ActionResult)new OkObjectResult(obj); } public class ResponseObj { public string iotHubHostName {get; set;} public TwinState initialTwin {get; set;} }
Kaydı oluşturma
Bu bölümde, özel ayırma ilkesini kullanan yeni bir kayıt grubu oluşturacaksınız. Kolaylık olması için bu öğreticide kaydetme işlemi ile birlikte simetrik anahtar doğrulaması kullanılır. Daha güvenli bir çözüm için, güven zinciriyle X.509 sertifika kanıtlamasını kullanmayı göz önünde bulundurun.
Azure portalında oturum açın ve Cihaz Sağlama Hizmeti örneğine gidin.
Gezinti menüsünün Ayarlar bölümünden Kayıtları yönet'i seçin.
Kayıt grubu ekle'yi seçin.
Kayıt grubu ekle sayfasının Kayıt + sağlama sekmesinde, kayıt grubu ayrıntılarını yapılandırmak için aşağıdaki bilgileri sağlayın:
Alan Açıklama Tasdik Kanıtlama mekanizması olarak Simetrik anahtar'ı seçin. Simetrik anahtar ayarları Simetrik anahtarları otomatik olarak oluştur kutusunu işaretleyin. Grup adı Grup adı olarak contoso-custom-allocated-devices girin. Sağlama durumu Bu kaydı etkinleştir kutusunu işaretleyin. İleri: IoT hub'ları'ı seçin.
Kayıt grubu ekle sayfasının IoT hub'ları sekmesinde, kayıt grubunun cihazları hangi IoT hub'larına sağlayabileceğini belirlemek için aşağıdaki bilgileri sağlayın:
Alan Açıklama Hedef IoT hub'ları Bağlı IoT hub'larınızdan birini veya daha fazlasını seçin veya bir IoT hub'ına yeni bir bağlantı ekleyin. Ayırma ilkesi Özel (Azure İşlevi'ni kullan) öğesini seçin. Azure işlevini seçin'i seçin, ardından istemleri izleyerek bu öğretici için oluşturduğunuz işlevi seçin. Gözden geçir ve oluştur’u seçin.
Gözden Geçir + oluştur sekmesinde tüm değerlerinizi doğrulayın ve Oluştur'u seçin.
Kaydı kaydettikten sonra yeniden açın ve Birincil anahtarı not edin. Anahtarların oluşturulması için önce kaydı kaydetmeniz gerekir. Bu anahtar, sonraki bölümde simülasyon cihazları için benzersiz cihaz anahtarları oluşturmak için kullanılır.
İpucu
Azure portalında bir kayıt grubu oluşturduğunuzda ve özel bir ayırma ilkesi seçtiğinizde, Azure portalı işlev anahtarını sizin yerinize otomatik olarak alır ve ekler. Program aracılığıyla bir kayıt oluşturursanız, oluşturma adımının bir parçası olarak anahtarı sağlamanız gerekir.
Benzersiz cihaz anahtarlarını türet
Cihazlar kayıt grubunun birincil simetrik anahtarını doğrudan kullanmaz. Bunun yerine, her cihaz için bir cihaz anahtarı türetmek için birincil anahtarı kullanırsınız. Bu bölümde iki benzersiz cihaz anahtarı oluşturacaksınız. Sanal bir tost makinesi cihazı için bir anahtar kullanılır. Diğer anahtar bir simülasyon ısı pompası cihazı için kullanılır.
Cihaz anahtarını türetmek için, her cihaz için cihaz kayıt kimliğinin HMAC-SHA256 karması hesaplamak ve sonucu Temel 64 biçimine dönüştürmek için daha önce not ettiğiniz birincil anahtar kayıt grubunu kullanırsınız. Kayıt gruplarıyla türetilmiş cihaz anahtarları oluşturma hakkında daha fazla bilgi için, Simetrik anahtar kanıtlama belgesinin Simetrik anahtarlarla grup kayıtları bölümüne bakın.
Bu öğreticideki örnek için aşağıdaki iki cihaz kayıt kimliğini kullanın ve her iki cihaz için bir cihaz anahtarı hesap edin. Her iki kayıt kimlikleri de özel ayırma ilkesi için örnek kodla çalışmak için geçerli bir son eke sahiptir:
- dinlenmeodası499-contoso-tstrsd-007
- mainbuilding167-contoso-hpsd-088
Azure CLI için IoT uzantısı, türetilmiş cihaz anahtarları oluşturmak için iot dps kayıt grubu compute-device-key komutunu sağlar. Bu komut, PowerShell veya Bash kabuğundan Windows tabanlı veya Linux sistemlerinde kullanılabilir.
bağımsız değişkeninin --key değerini kayıt grubunuzdaki Birincil Anahtar ile değiştirin.
az iot dps enrollment-group compute-device-key --key <ENROLLMENT_GROUP_KEY> --registration-id breakroom499-contoso-tstrsd-007
az iot dps enrollment-group compute-device-key --key <ENROLLMENT_GROUP_KEY> --registration-id mainbuilding167-contoso-hpsd-088
Not
Komutun simetrik anahtarı iot dps enrollment-group compute-device-key yerine kayıt grubu kimliğini de sağlayabilirsiniz. Örneğin:
az iot dps enrollment-group compute-device-key -g contoso-us-resource-group --dps-name contoso-provisioning-service-1098 --enrollment-id contoso-custom-allocated-devices --registration-id breakroom499-contoso-tstrsd-007
Simülasyon cihazları, simetrik anahtar kanıtlaması gerçekleştirmek için türetilmiş cihaz anahtarlarını her kayıt kimliğiyle birlikte kullanır.
Azure IoT C SDK'sı için geliştirme ortamını hazırlama
Bu bölümde, Azure IoT C SDK'sını derlemek için kullanılan geliştirme ortamını hazırlamış olacaksınız. SDK, simülasyon cihazının örnek kodunu içerir. Bu simülasyon cihazı, cihazın önyükleme aşamasında yapılandırmayı dener.
Bu bölüm, Windows tabanlı bir iş istasyonuna yöneliktir. Linux örneği için, Bölgesel Linux VM'leri oluşturma bölümüne, Öğretici: Coğrafi gecikme süresi için sağlama kısmında bakın.
CMake derleme sistemini indirin.
Yüklemeyi başlatmadan önce
CMakeVisual Studio önkoşullarının (Visual Studio ve 'C++ile masaüstü geliştirme' iş yükü) yüklü olması önemlidir. Önkoşullar sağlandıktan ve indirme doğrulandıktan sonra, CMake derleme sistemini yükleyin.Komut istemini veya Git Bash kabuğunu açın. C GitHub deposu için Azure IoT Cihaz SDK'sının en son sürümünü kopyalamak için aşağıdaki komutları çalıştırın. Parametrenin değeri
-bolarak önceki adımda bulduğunuz etiketi kullanın, örneğin:lts_03_2025.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --initBu işlemin tamamlanması için birkaç dakika beklemeniz gerekebilir.
Git deposunun kök dizininde bir
cmakealt dizini oluşturun ve o klasöre gidin. Dizinindenazure-iot-sdk-caşağıdaki komutları çalıştırın:mkdir cmake cd cmakeSDK’nın geliştirme istemci platformunuza ve özgü bir sürümünü oluşturmak için aşağıdaki komutu çalıştırın. Dizinde
cmakesimülasyon cihazı için bir Visual Studio çözümü oluşturulur.cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..cmakeC++ derleyicinizi bulamazsa komutunu çalıştırırken derleme hataları görebilirsiniz. Böyle bir durumda Visual Studio komut isteminde komutunu çalıştırmayı deneyin.Derleme başarılı olduktan sonra, son birkaç çıkış satırı aşağıdaki çıkışa benzer şekilde görünür:
$ cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON .. -- Building for: Visual Studio 15 2017 -- Selecting Windows SDK version 10.0.16299.0 to target Windows 10.0.17134. -- The C compiler identification is MSVC 19.12.25835.0 -- The CXX compiler identification is MSVC 19.12.25835.0 ... -- Configuring done -- Generating done -- Build files have been written to: E:/IoT Testing/azure-iot-sdk-c/cmake
Cihazların benzetimini yapmak
Bu bölümde, daha önce ayarladığınız Azure IoT C SDK'sında bulunan prov_dev_client_sample adlı bir sağlama örneğini güncelleştirin.
Bu örnek kod, sağlama isteğini Cihaz Sağlama Hizmeti örneğine gönderen bir cihaz önyükleme sırasının simülasyonunu oluşturur. Önyükleme sırası, özel ayırma ilkesi kullanılarak tost makinesi cihazının tanınmasına ve IoT hub'ına atanmalarına neden olur.
Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin ve Kimlik Kapsamı değerini not edin.
Visual Studio'da, daha önce CMake çalıştırılarak oluşturulan azure_iot_sdks.sln çözüm dosyasını açın. Çözüm dosyası şu konumda olmalıdır:
azure-iot-sdk-c\cmake\azure_iot_sdks.sln.Visual Studio'nun Çözüm Gezgini penceresinde Provision_Samples klasörüne gidin. prov_dev_client_sample adlı örnek projeyi genişletin. Kaynak Dosyalar'ı genişletin ve prov_dev_client_sample.c dosyasını açın.
id_scopesabitini bulun ve değeri daha önce kopyalamış olduğunuz Kimlik Kapsamı değerinizle değiştirin.static const char* id_scope = "0ne00002193";Aynı dosyada
main()işlevinin tanımını bulun. Değişkeninhsm_typeaşağıdaki örnekte gösterildiği gibi olarak ayarlandığındanSECURE_DEVICE_TYPE_SYMMETRIC_KEYemin olun:SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;işlevinde
main()çağrısı bulunProv_Device_Register_Device(). Bu çağrıdan hemen önce, sağlama sırasında özel bir JSON yükü geçirmek için kullanılanProv_Device_Set_Provisioning_Payload()aşağıdaki kod satırlarını ekleyin. Bu özel yük, özel ayırma işlevlerinize daha fazla bilgi sağlamak için kullanılabilir. Bu veri yükü, kayıt kimliğini incelemek yerine cihaz türünü iletmek için de kullanılabilir. DPS ile özel veri yükleri gönderme ve alma hakkında daha fazla bilgi için bkz. Özel ayırmada cihaz yüklerini kullanma.// An example custom payload const char* custom_json_payload = "{\"MyDeviceFirmwareVersion\":\"12.0.2.5\",\"MyDeviceProvisioningVersion\":\"1.0.0.0\"}"; prov_device_result = Prov_Device_Set_Provisioning_Payload(prov_device_handle, custom_json_payload); if (prov_device_result != PROV_DEVICE_RESULT_OK) { (void)printf("\r\nFailure setting provisioning payload: %s\r\n", MU_ENUM_TO_STRING(PROV_DEVICE_RESULT, prov_device_result)); }prov_dev_client_sample projesine sağ tıklayın ve Başlangıç Projesi Olarak Ayarla'yı seçin.
Contoso tost makinesi cihazının benzetimini yapın
Tost makinesi cihazının benzetimini yapmak için prov_dev_client_sample.c'de
prov_dev_set_symmetric_key_info()açıklama satırı yapılan çağrıyı bulun.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");İşlev çağrısını açıklamayı kaldırın ve yer tutucu değerlerini (açılı ayraçlar dahil) daha önce oluşturduğunuz tost makinesi kayıt kimliği ve türetilmiş cihaz anahtarıyla değiştirin. Aşağıdaki kodda gösterilen JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs= anahtar değeri yalnızca örnek olarak verilmiştir.
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("breakroom499-contoso-tstrsd-007", "JC8F96eayuQwwz+PkE7IzjH2lIAjCUnAa61tDigBnSs=");Dosyayı kaydedin.
Çözümü çalıştırmak için Visual Studio menüsünde Hata Ayıkla>Hata ayıklama olmadan başlat'ı seçin. Projeyi yeniden derleme isteminde Evet'i seçerek çalıştırmadan önce projeyi yeniden oluşturun.
Aşağıdaki çıkış, sanal tost makinesi cihazının başarıyla önyüklenmesi ve özel ayırma ilkesi tarafından tost makineleri IoT hub'ına atanacak sağlama hizmeti örneğine bağlanma örneğidir:
Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-toasters-hub-1098.azure-devices.net, deviceId: breakroom499-contoso-tstrsd-007 Press enter key to exit:Aşağıdaki çıkış, tost makinesi cihazı için çalışan özel ayırma işlevi kodundan alınan günlük çıktısı örneğidir. Bir tost makinesi cihazı için hub'ın başarıyla seçildiğine dikkat edin. Ayrıca koda
payloadeklediğiniz özel JSON içeriğini içeren özelliğine de dikkat edin. Bu içerik, kodunuzundeviceRuntimeContextiçinde kullanımı için mevcuttur.Bu günlük kaydı, portaldaki işlev kodunun altındaki Günlükler'e tıklayarak kullanılabilir:
2022-08-03T20:34:41.178 [Information] Executing 'Functions.HttpTrigger1' (Reason='This function was programmatically called via the host APIs.', Id=12950752-6d75-4f41-844b-c253a6653d4f) 2022-08-03T20:34:41.340 [Information] C# HTTP trigger function processed a request. 2022-08-03T20:34:41.341 [Information] Request.Body:... 2022-08-03T20:34:41.341 [Information] {"enrollmentGroup":{"enrollmentGroupId":"contoso-custom-allocated-devices","attestation":{"type":"symmetricKey"},"capabilities":{"iotEdge":false},"etag":"\"0000f176-0000-0700-0000-62eaad1e0000\"","provisioningStatus":"enabled","reprovisionPolicy":{"updateHubAssignment":true,"migrateDeviceData":true},"createdDateTimeUtc":"2022-08-03T17:15:10.8464255Z","lastUpdatedDateTimeUtc":"2022-08-03T17:15:10.8464255Z","allocationPolicy":"custom","iotHubs":["contoso-toasters-hub-1098.azure-devices.net","contoso-heatpumps-hub-1098.azure-devices.net"],"customAllocationDefinition":{"webhookUrl":"https://contoso-function-app-1098.azurewebsites.net/api/HttpTrigger1?****","apiVersion":"2021-10-01"}},"deviceRuntimeContext":{"registrationId":"breakroom499-contoso-tstrsd-007","currentIotHubHostName":"contoso-toasters-hub-1098.azure-devices.net","currentDeviceId":"breakroom499-contoso-tstrsd-007","symmetricKey":{},"payload":{"MyDeviceFirmwareVersion":"12.0.2.5","MyDeviceProvisioningVersion":"1.0.0.0"}},"linkedHubs":["contoso-toasters-hub-1098.azure-devices.net","contoso-heatpumps-hub-1098.azure-devices.net"]} 2022-08-03T20:34:41.382 [Information] Response 2022-08-03T20:34:41.398 [Information] {"iotHubHostName":"contoso-toasters-hub-1098.azure-devices.net","initialTwin":{"properties":{"desired":{"state":"ready","darknessSetting":"medium"}},"tags":{"deviceType":"toaster"}}} 2022-08-03T20:34:41.399 [Information] Executed 'Functions.HttpTrigger1' (Succeeded, Id=12950752-6d75-4f41-844b-c253a6653d4f, Duration=227ms)
Contoso ısı pompası cihazının simülasyonunu yapın
Isı pompası cihazının simülasyonunu yapmak için prov_dev_client_sample.c'deki
prov_dev_set_symmetric_key_info()çağrıyı daha önce oluşturduğunuz ısı pompası kayıt kimliği ve türetilmiş cihaz anahtarıyla yeniden güncelleştirin. Aşağıdaki kodda gösterilen 6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg= anahtar değeri de yalnızca örnek olarak verilmiştir.// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("mainbuilding167-contoso-hpsd-088", "6uejA9PfkQgmYylj8Zerp3kcbeVrGZ172YLa7VSnJzg=");Dosyayı kaydedin.
Çözümü çalıştırmak için Visual Studio menüsünde Hata Ayıkla>Hata ayıklama olmadan başlat'ı seçin. Projeyi yeniden derleme isteminde, çalıştırmadan önce projeyi yeniden derlemek için Evet'i seçin.
Aşağıdaki çıkış, özel ayırma ilkesi tarafından Contoso ısı pompaları IoT hub'ına atanacak sağlama hizmeti örneğinin başarıyla önyüklenmesi ve bağlanması simülasyon ısı pompası cihazının bir örneğidir:
Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-heatpumps-hub-1098.azure-devices.net, deviceId: mainbuilding167-contoso-hpsd-088 Press enter key to exit:
Özel ayırma ilkeleriyle ilgili sorunları giderme
Aşağıdaki tabloda beklenen senaryolar ve alabileceğiniz sonuç hata kodları gösterilmektedir. Azure İşlevleri özel ayırma ilkesi hatalarını gidermeye yardımcı olması için bu tabloyu kullanın.
| Senaryo | Sağlama Hizmeti'nden kayıt sonucu | SDK Sonuçları Sağlama |
|---|---|---|
| Web kancası, 'iotHubHostName' geçerli bir IoT hub ana bilgisayar adına ayarlandığında "200 OK" döndürür. | Sonuç durumu: Atanan | SDK, hub bilgileriyle birlikte PROV_DEVICE_RESULT_OK döndürür |
| Web çengeli, yanıtta 'iotHubHostName' yer alsa da boş bir dize veya null olarak ayarlanarak 200 OK yanıtını döndürür. | Sonuç durumu: Başarısız Hata kodu: CustomAllocationIotHubNotSpecified (400208) |
SDK PROV_DEVICE_RESULT_HUB_NOT_SPECIFIED döndürür |
| Web kancası 401 Yetkisiz değerini döndürür | Sonuç durumu: Başarısız Hata kodu: CustomAllocationUnauthorizedAccess (400209) |
SDK, PROV_DEVICE_RESULT_UNAUTHORIZED döndürür |
| Cihazı devre dışı bırakmak için bir Bireysel Kayıt oluşturuldu | Sonuç durumu: Devre dışı | SDK, PROV_DEVICE_RESULT_DISABLED döndürür |
| Web kancası hata kodu >= 429 döndürür | DPS'nin orkestrasyonu birkaç kez tekrar denenir. Yeniden deneme ilkesi şu anda: - Yeniden deneme sayısı: 10 - başlangıç aralığı: 1 sn - Artış: 9 sn |
SDK hatayı yoksayar ve belirtilen zamanda başka bir durum sorgulama iletisi gönderir. |
| Web kancası başka bir durum kodu döndürür | Sonuç durumu: Başarısız Hata kodu: CustomAllocationFailed (400207) |
SDK, PROV_DEVICE_RESULT_DEV_AUTH_ERROR döndürür |
Kaynakları temizleme
Bu öğreticide oluşturulan kaynaklarla çalışmaya devam etmek istiyorsanız, bunları bırakabilirsiniz. Kaynakları kullanmaya devam etmek istemiyorsanız gereksiz ücretlerden kaçınmak için aşağıdaki adımları kullanarak bu öğreticide oluşturulan tüm kaynakları silin.
Buradaki adımlarda, contoso-us-resource-group adlı aynı kaynak grubunda açıklandığı gibi bu öğreticideki tüm kaynakları oluşturduğunuz varsayılır.
Önemli
Silinen kaynak grupları geri alınamaz. Kaynak grubu ve içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. IoT hub'ını tutmak istediğiniz kaynakları içeren mevcut bir kaynak grubunda oluşturduysanız, kaynak grubunu silmek yerine yalnızca IoT Hub kaynağını silin.
Kaynak grubunu ada göre silmek için:
Azure portalında oturum açın ve Kaynak grupları’nı seçin.
Ada göre filtrele... metin kutusuna, kaynaklarınızı içeren contoso-us-resource-group kaynak grubunun adını yazın.
Sonuç listesinde kaynak grubunuzun sağında ... ve ardından Kaynak grubunu sil'i seçin.
Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adını yeniden yazın ve sil'i seçin. Birkaç dakika sonra kaynak grubu ve içerdiği kaynakların tümü silinir.
Sonraki adımlar
Özel ayırma ilkeleri hakkında daha fazla bilgi edinmek için bkz.