Aracılığıyla paylaş


IoT Hub modül kimliğini ve modül ikizlerini (.NET) kullanmaya başlama

Modül kimlikleri ve modül ikizleri, Azure IoT Hub cihaz kimliğine ve cihaz ikizine benzer, ancak daha hassas ayrıntı düzeyi sağlar. Azure IoT Hub cihaz kimliği ve cihaz ikizi, arka uç uygulamasının bir cihazı yapılandırmasına ve cihazın koşullarına görünürlük sağlamasına olanak sağlarken, modül kimliği ve modül ikizi bir cihazın tek tek bileşenleri için bu özellikleri sağlar. İşletim sistemi cihazları veya üretici yazılımı cihazları gibi birden çok bileşeni olan yetenekli cihazlarda modül kimlikleri ve modül ikizleri, her bileşen için yalıtılmış yapılandırma ve koşullar sağlar.

Not

Bu makalede açıklanan özellikler yalnızca standart IoT Hub katmanında kullanılabilir. Temel ve standart/ücretsiz IoT Hub katmanları hakkında daha fazla bilgi için bkz. Çözümünüz için doğru IoT Hub katmanı seçme.

Bu makalenin sonunda iki .NET konsol uygulamasına sahipsiniz:

  • CreateIdentities: Cihaz ve modül istemcilerinizi bağlamak için bir cihaz kimliği, modül kimliği ve ilişkili güvenlik anahtarı oluşturur.

  • UpdateModuleTwinReportedProperties: Güncelleştirilmiş modül ikizini, bildirilen özellikleri IoT hub'ınıza gönderir.

Not

Hem cihaz hem de arka uç uygulamaları oluşturmak için kullanılabilen SDK araçları hakkında daha fazla bilgi için bkz. Azure IoT SDK'ları .

Önkoşullar

  • Visual Studio.

  • IoT hub'ı. CLI veya Azure portal ile bir tane oluşturun.

Modül kimlik doğrulaması

Modül kimliklerinin kimliğini doğrulamak için simetrik anahtarları veya X.509 sertifikalarını kullanabilirsiniz. X.509 sertifika kimlik doğrulaması için, modülün sertifikasının ortak adı (CN) gibi CN=<deviceid>/<moduleid>biçimlendirilmiş olmalıdır. Örnek:

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

IoT hub bağlantı dizesini alma

Bu makalede, kimlik kayıt defterine bir cihaz ekleyen ve ardından bu cihaza bir modül ekleyen bir arka uç hizmeti oluşturacaksınız. Hizmetiniz için kayıt defteri yazma izni gerekiyor. Varsayılan olarak, her IoT hub'ı bu izni veren registryReadWrite adlı bir paylaşılan erişim ilkesiyle oluşturulur.

registryReadWrite ilkesinin IoT Hub bağlantı dizesini almak için şu adımları izleyin:

  1. Azure portalKaynak grupları'nı seçin. Hub'ınızın bulunduğu kaynak grubunu seçin ve ardından kaynak listesinden hub'ınızı seçin.

  2. Hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.

  3. İlke listesinden registryReadWrite ilkesini seçin.

  4. Birincil bağlantı dizesini kopyalayın ve değeri kaydedin.

    Bağlantı dizesinin nasıl alındığını gösteren ekran görüntüsü

Paylaşılan erişim ilkeleri ve izinleri IoT Hub hakkında daha fazla bilgi için bkz. Erişim denetimi ve izinleri.

Modül kimliği oluşturma

Bu bölümde, hub'ınızdaki kimlik kayıt defterinde bir cihaz kimliği ve modül kimliği oluşturan bir .NET konsol uygulaması oluşturacaksınız. Bir cihaz veya modül, kimlik kayıt defterinde bir girdisi olmadığı sürece hub'a bağlanamaz. Daha fazla bilgi için IoT Hub geliştirici kılavuzunun Kimlik Kayıt Defteri bölümüne bakın.

Bu konsol uygulamasını çalıştırdığınızda, hem cihaz hem de modül için benzersiz bir kimlik ve anahtar oluşturur. Cihazınız ve modülünüz, IoT Hub'a cihazdan buluta iletiler gönderdiğinde kendilerini tanımlamak için bu değerleri kullanır. Kimlikler büyük/küçük harfe duyarlıdır.

  1. Visual Studio'yu açın ve Yeni proje oluştur'u seçin.

  2. Yeni proje oluştur bölümünde Konsol Uygulaması (.NET Framework) öğesini seçin.

  3. İleri'yi seçerek Yeni projenizi yapılandırın'ı açın. Projeye CreateIdentities adını verin ve İleri'yi seçin.

    'CreateIdentities' ile 'Yeni projenizi yapılandırın' açılan penceresini gösteren ekran görüntüsü.

  4. Varsayılan .NET Framework seçeneğini değiştirmeyin ve Oluştur'u seçerek projenizi oluşturun.

  5. Visual Studio'da Araçlar>NuGet Paket Yöneticisi>Çözüm için NuGet Paketlerini Yönet'i açın. Gözat sekmesini seçin.

  6. Microsoft.Azure.Devices araması. Seçin ve ardından Yükle'yi seçin.

    .NET hizmet SDK'sı geçerli sürümünü Azure IoT Hub yükleme

  7. Aşağıdaki using deyimlerini Program.cs dosyasının üst kısmına ekleyin:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Common.Exceptions;
    
  8. Program sınıfına aşağıdaki alanları ekleyin. Yer tutucu değerini, önceki bölümde hub için oluşturduğunuz IoT Hub bağlantı dizesiyle değiştirin.

    const string connectionString = "<replace_with_iothub_connection_string>";
    const string deviceID = "myFirstDevice";
    const string moduleID = "myFirstModule";
    
  9. Aşağıdaki kodu Main sınıfına ekleyin.

    static void Main(string[] args)
    {
        AddDeviceAsync().Wait();
        AddModuleAsync().Wait();
    }
    
  10. Program sınıfına aşağıdaki yöntemleri ekleyin:

    private static async Task AddDeviceAsync()
    {
       RegistryManager registryManager = 
         RegistryManager.CreateFromConnectionString(connectionString);
       Device device;
    
       try
       {
           device = await registryManager.AddDeviceAsync(new Device(deviceID));
       }
       catch (DeviceAlreadyExistsException)
        {
            device = await registryManager.GetDeviceAsync(deviceID);
        }
    
        Console.WriteLine("Generated device key: {0}", 
          device.Authentication.SymmetricKey.PrimaryKey);
    }
    
    private static async Task AddModuleAsync()
    {
        RegistryManager registryManager = 
          RegistryManager.CreateFromConnectionString(connectionString);
        Module module;
    
        try
        {
            module = 
              await registryManager.AddModuleAsync(new Module(deviceID, moduleID));
        }
        catch (ModuleAlreadyExistsException)
        {
            module = await registryManager.GetModuleAsync(deviceID, moduleID);
        }
    
        Console.WriteLine("Generated module key: {0}", module.Authentication.SymmetricKey.PrimaryKey);
    }
    

    AddDeviceAsync yöntemi myFirstDevice kimliğine sahip bir cihaz kimliği oluşturur. Bu cihaz kimliği kimlik kayıt defterinde zaten varsa, kod yalnızca mevcut cihaz bilgilerini alır. Bu durumda uygulama, bu kimliğin birincil anahtarını görüntüler. Hub'ınıza bağlanmak için sanal cihaz uygulamasında bu anahtarı kullanırsınız.

    yöntemi, AddModuleAsyncmyFirstDevice cihazı altında myFirstModule kimliğine sahip bir modül kimliği oluşturur. Bu modül kimliği kimlik kayıt defterinde zaten varsa, kod yalnızca mevcut modül bilgilerini alır. Bu durumda uygulama, bu kimliğin birincil anahtarını görüntüler. Hub'ınıza bağlanmak için sanal modül uygulamasında bu anahtarı kullanırsınız.

    Önemli

    Cihaz kimliği; müşteri desteği ve sorun giderme için toplanan günlüklerde görünüyor olabilir, bu nedenle adlandırırken herhangi bir önemli bilgi vermekten kaçının.

  11. Bu uygulamayı çalıştırın ve cihaz anahtarını ve modül anahtarını not edin.

Not

IoT Hub kimlik kayıt defteri, hub'a güvenli erişim sağlamak için yalnızca cihaz ve modül kimliklerini depolar. Kimlik kayıt defteri, cihaz kimliklerini ve anahtarlarını güvenlik kimlik bilgileri olarak kullanmak için depolar. Kimlik kayıt defterinin her cihaz için depoladığı etkin/devre dışı bayrağını kullanarak, ilgili cihaza erişimi devre dışı bırakabilirsiniz. Uygulamanızın cihaza özgü diğer meta verileri depolaması gerekiyorsa uygulamaya özgü bir depo kullanmalıdır. Modül kimlikleri için etkin/devre dışı bayrağı yoktur. Daha fazla bilgi için bkz. IoT Hub geliştirici kılavuzu.

.NET cihaz SDK’sını kullanarak modül ikizini güncelleştirme

Şimdi simülasyon cihazınızdan bulutla iletişim kuralım. Bir modül kimliği oluşturulduktan sonra, IoT Hub’ında örtük olarak bir modül ikizi oluşturulur. Bu bölümde, modül ikizi tarafından raporlanan özelliklerini güncelleştiren simülasyon cihazınızda bir .NET konsol uygulaması oluşturursunuz.

Modül bağlantı dizenizi almak için IoT hub'ınıza gidin ve Cihazlar'ı seçin. myFirstDevice öğesini bulup seçerek açın ve ardından myFirstModule öğesini seçerek açın. Modül Kimliği Ayrıntıları'ndaBağlantı dizesini (birincil anahtar) kopyalayın ve konsol uygulaması için kaydedin.

'Modül Kimliği Ayrıntıları' sayfasını gösteren ekran görüntüsü.

  1. Visual Studio'da Dosya YeniProje'yi seçerek > çözümünüzeyeni> bir proje ekleyin. Yeni proje oluştur bölümünde Konsol Uygulaması (.NET Framework) öğesini ve ardından İleri'yi seçin.

  2. Yeni projenizi yapılandırın bölümünde projeyi UpdateModuleTwinReportedProperties olarak adlandırın ve İleri'yi seçin.

    'Yeni projenizi yapılandırın' açılan penceresini gösteren ekran görüntüsü.

  3. Varsayılan .NET Framework seçeneğini değiştirmeyin ve Oluştur'u seçerek projenizi oluşturun.

  4. Visual Studio'da Araçlar>NuGet Paket Yöneticisi>Çözüm için NuGet Paketlerini Yönet'i açın. Gözat sekmesini seçin.

  5. Microsoft.Azure.Devices.Client'ı arayıp seçin ve ardından Yükle'yi seçin.

    'Microsoft.Azure.Devices.Client' öğesinin seçili olduğunu ve 'Yükle' düğmesinin vurgulandığını gösteren ekran görüntüsü.

  6. Aşağıdaki using deyimlerini Program.cs dosyasının üst kısmına ekleyin:

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    
  7. Program sınıfına aşağıdaki alanları ekleyin. Yer tutucu değerini, modül bağlantı dizesiyle değiştirin.

    private const string ModuleConnectionString = "<Your module connection string>";
    private static ModuleClient Client = null;
    static void ConnectionStatusChangeHandler(ConnectionStatus status, 
      ConnectionStatusChangeReason reason)
    {
        Console.WriteLine("Connection Status Changed to {0}; the reason is {1}", 
          status, reason);
    }
    
  8. Aşağıdaki OnDesiredPropertyChanged yöntemini Program sınıfına ekleyin:

    private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, 
      object userContext)
        {
            Console.WriteLine("desired property change:");
            Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
            Console.WriteLine("Sending current time as reported property");
            TwinCollection reportedProperties = new TwinCollection
            {
                ["DateTimeLastDesiredPropertyChangeReceived"] = DateTime.Now
            };
    
            await Client.UpdateReportedPropertiesAsync(reportedProperties).ConfigureAwait(false);
        }
    
  9. Main yöntemine aşağıdaki satırları ekleyin:

    static void Main(string[] args)
    {
        Microsoft.Azure.Devices.Client.TransportType transport = 
          Microsoft.Azure.Devices.Client.TransportType.Amqp;
    
        try
        {
            Client = 
              ModuleClient.CreateFromConnectionString(ModuleConnectionString, transport);
            Client.SetConnectionStatusChangesHandler(ConnectionStatusChangeHandler);
            Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null).Wait();
    
            Console.WriteLine("Retrieving twin");
            var twinTask = Client.GetTwinAsync();
            twinTask.Wait();
            var twin = twinTask.Result;
            Console.WriteLine(JsonConvert.SerializeObject(twin.Properties)); 
    
            Console.WriteLine("Sending app start time as reported property");
            TwinCollection reportedProperties = new TwinCollection();
            reportedProperties["DateTimeLastAppLaunch"] = DateTime.Now;
    
            Client.UpdateReportedPropertiesAsync(reportedProperties);
        }
        catch (AggregateException ex)
        {
            Console.WriteLine("Error in sample: {0}", ex);
        }
    
        Console.WriteLine("Waiting for Events.  Press enter to exit...");
        Console.ReadLine();
        Client.CloseAsync().Wait();
    }
    

    Artık modül ikizini alma ve bildirilen özellikleri AMQP protokolüyle güncelleştirme hakkında bilgi edineceksiniz.

  10. İsteğe bağlı olarak, modülünüzden IoT Hub bir olay göndermek için bu deyimleri Main yöntemine ekleyebilirsiniz. Bu satırları bloğun try catch altına yerleştirin.

    Byte[] bytes = new Byte[2];
    bytes[0] = 0;
    bytes[1] = 1;
    var sendEventsTask = Client.SendEventAsync(new Message(bytes));
    sendEventsTask.Wait();
    Console.WriteLine("Event sent to IoT Hub.");
    

Uygulamaları çalıştırma

Artık uygulamaları çalıştırabilirsiniz.

  1. Visual Studio'da, Çözüm Gezgini'de çözümünüze sağ tıklayın ve başlangıç projelerini ayarla'yı seçin.

  2. Ortak Özellikler'in altında Başlangıç Projesi'ni seçin.

  3. Birden çok başlangıç projesi'ni ve ardından uygulamalar için eylem olarak Başlat'ı ve değişikliklerinizi kabul etmek için Tamam'ı seçin.

  4. Uygulamaları başlatmak için F5 tuşuna basın.

Sonraki adımlar

IoT Hub’ı kullanmaya başlamak ve diğer IoT senaryolarını keşfetmek için bkz: