Aracılığıyla paylaş


Cihaz yönetimini (.NET) kullanmaya başlama

Arka uç uygulamaları, cihazlarda cihaz yönetimi eylemlerini uzaktan başlatmak ve izlemek için cihaz ikizleri ve doğrudan yöntemler gibi Azure IoT Hub temel öğelerini kullanabilir. Bu makalede bir arka uç uygulamasının ve cihaz uygulamasının IoT Hub'ı kullanarak uzak cihaz yeniden başlatmayı başlatmak ve izlemek için birlikte nasıl çalışabileceği gösterilir.

Not

Bu makalede açıklanan özellikler yalnızca IoT Hub'ın standart 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ını seçme.

Buluttaki bir arka uç uygulamasından cihaz yönetimi eylemlerini (yeniden başlatma, fabrika sıfırlama ve üretici yazılımı güncelleştirmesi gibi) başlatmak için doğrudan bir yöntem kullanın. Cihaz aşağıdakiler için sorumludur:

  • IoT Hub'dan gönderilen yöntem isteğini işleme.

  • Cihazda ilgili cihaza özgü eylemi başlatma.

  • IoT Hub'a bildirilen özellikler aracılığıyla durum güncelleştirmeleri sağlama.

Cihaz yönetimi eylemlerinizin ilerleme durumunu raporlamak üzere cihaz ikizi sorguları çalıştırmak için bulutta bir arka uç uygulaması kullanabilirsiniz.

Bu makalede şunların nasıl oluşturulacağı gösterilmektedir:

  • SimulateManagedDevice: Cihazı yeniden başlatan ve son yeniden başlatma zamanını bildiren doğrudan bir yönteme sahip simülasyon cihazı uygulaması. Doğrudan yöntemler buluttan çağrılır.

  • TriggerReboot: IoT hub'ınız aracılığıyla sanal cihaz uygulamasında doğrudan yöntemi çağıran bir .NET konsol uygulaması. Yanıtı görüntüler ve bildirilen özellikleri güncelleştirir.

Önkoşullar

  • Visual Studio.

  • Azure aboneliğinizde bir IoT hub'ı. Henüz bir hub'ına sahip değilseniz IoT hub'ı oluşturma makalesindeki adımları izleyebilirsiniz.

  • IoT hub'ınıza kayıtlı bir cihaz. IoT hub'ınızda bir cihaz yoksa Cihazı kaydetme bölümünde yer alan adımları izleyin.

  • Güvenlik duvarınızda 8883 numaralı bağlantı noktasının açık olduğundan emin olun. Bu makaledeki cihaz örneği, 8883 numaralı bağlantı noktası üzerinden iletişim kuran MQTT protokollerini kullanır. Bu bağlantı noktası bazı kurumsal ve eğitim ağı ortamlarında engellenebilir. Bu sorunu çözmenin daha fazla bilgi ve yolları için bkz . IoT Hub'a (MQTT) Bağlanma.

Doğrudan yöntemle cihaz uygulaması oluşturma

Bu bölümde şunları yapacaksınız:

  • Bulut tarafından çağrılan doğrudan bir yönteme yanıt veren bir .NET konsol uygulaması oluşturun.

  • Simülasyon cihazı yeniden başlatmayı tetikleme.

  • Cihaz ikizi sorgularının cihazları tanımlamasını ve en son ne zaman yeniden başlatıldıklarını etkinleştirmek için bildirilen özellikleri kullanın.

Simülasyon cihazı uygulamasını oluşturmak için şu adımları izleyin:

  1. Visual Studio'yu açın ve Yeni proje oluştur'u seçin, ardından Konsol Uygulaması (.NET Framework) proje şablonunu bulup seçin ve ardından İleri'yi seçin.

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

    Yeni bir Visual Studio projesinin nasıl adlandırıldığını gösteren ekran görüntüsü.

  3. Varsayılan .NET Framework sürümünü koruyun ve Oluştur'u seçin.

  4. Çözüm Gezgini yeni SimulateManagedDevice projesine sağ tıklayıp NuGet Paketlerini Yönet'i seçin.

  5. Gözat'ı seçin, ardından Microsoft.Azure.Devices.Client'ı arayın ve seçin. Yükle'yi seçin.

    Microsoft.Azure.Devices.Client paketinin nasıl yükleneceğini gösteren ekran görüntüsü.

    Bu adım Azure IoT cihaz SDK'sı NuGet paketini ve bağımlılıklarını indirir, yükler ve bunlara bir başvuru ekler.

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

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    
  7. Program sınıfına aşağıdaki alanları ekleyin. {device connection string} Yer tutucu değerini IoT Hub'ına bir cihaz kaydettiğinizde gördüğünüz cihaz bağlantı dizesi değiştirin:

    static string DeviceConnectionString = "{device connection string}";
    static DeviceClient Client = null;
    
  8. Cihazda doğrudan yöntemi uygulamak için aşağıdakileri ekleyin:

    static Task<MethodResponse> onReboot(MethodRequest methodRequest, object userContext)
    {
        // In a production device, you would trigger a reboot 
        //   scheduled to start after this method returns.
        // For this sample, we simulate the reboot by writing to the console
        //   and updating the reported properties.
        try
        {
            Console.WriteLine("Rebooting!");
    
            // Update device twin with reboot time. 
            TwinCollection reportedProperties, reboot, lastReboot;
            lastReboot = new TwinCollection();
            reboot = new TwinCollection();
            reportedProperties = new TwinCollection();
            lastReboot["lastReboot"] = DateTime.Now;
            reboot["reboot"] = lastReboot;
            reportedProperties["iothubDM"] = reboot;
            Client.UpdateReportedPropertiesAsync(reportedProperties).Wait();
        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine("Error in sample: {0}", ex.Message);
        }
    
        string result = @"{""result"":""Reboot started.""}";
        return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200));
    }
    
  9. Son olarak, Aşağıdaki kodu Main yöntemine ekleyerek IoT hub'ınıza bağlantıyı açın ve yöntem dinleyicisini başlatın:

    try
    {
        Console.WriteLine("Connecting to hub");
        Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, 
          TransportType.Mqtt);
    
        // setup callback for "reboot" method
        Client.SetMethodHandlerAsync("reboot", onReboot, null).Wait();
        Console.WriteLine("Waiting for reboot method\n Press enter to exit.");
        Console.ReadLine();
    
        Console.WriteLine("Exiting...");
    
        // as a good practice, remove the "reboot" handler
        Client.SetMethodHandlerAsync("reboot", null, null).Wait();
        Client.CloseAsync().Wait();
    }
    catch (Exception ex)
    {
        Console.WriteLine();
        Console.WriteLine("Error in sample: {0}", ex.Message);
    }
    
  10. Çözüm Gezgini'da çözümünüze sağ tıklayın ve ardından Başlangıç Projelerini Ayarla'yı seçin.

  11. Ortak Özellikler>Başlangıç Projesi için Tek başlangıç projesi'ni seçin ve ardından SimulateManagedDevice projesini seçin. Değişikliklerinizi kaydetmek için Tamam'ı seçin.

  12. Derleme Çözümü Oluştur'a>tıklayın.

Not

İşleri basit tutmak için bu makalede herhangi bir yeniden deneme ilkesi uygulanmaz. Üretim kodunda, Geçici hata işlemede önerilen yeniden deneme ilkelerini (üstel geri alma gibi) uygulamanız gerekir.

IoT hub'ını bağlantı dizesi alma

Bu makalede, bir cihazda doğrudan yöntem çağıran bir arka uç hizmeti oluşturacaksınız. IoT Hub aracılığıyla bir cihazda doğrudan yöntem çağırmak için hizmetinizin hizmet bağlama iznine sahip olması gerekir. Varsayılan olarak, her IoT Hub bu izni veren hizmet adlı bir paylaşılan erişim ilkesiyle oluşturulur.

Hizmet ilkesi için IoT Hub bağlantı dizesi almak için şu adımları izleyin:

  1. Azure portalında Kaynak 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. IoT hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.

  3. İlke listesinden hizmet ilkesini seçin.

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

Azure portalında IoT Hub'ınızdan bağlantı dizesi almayı gösteren ekran görüntüsü.

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

Yeniden başlatmayı tetikleyen bir hizmet uygulaması oluşturma

Bu bölümde, C# kullanarak doğrudan bir yöntem kullanarak cihazda uzaktan yeniden başlatma başlatan bir .NET konsol uygulaması oluşturacaksınız. Uygulama, cihaz için son yeniden başlatma zamanını bulmak için cihaz ikizi sorgularını kullanı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) proje şablonunu bulup seçin ve ardından İleri'yi seçin.

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

    Yeni bir Visual Studio projesinin nasıl yapılandırıldığını gösteren ekran görüntüsü.

  4. .NET Framework'ün varsayılan sürümünü kabul edin, ardından oluştur'u seçerek projeyi oluşturun.

  5. Çözüm Gezgini'de TriggerReboot projesine sağ tıklayın ve ardından NuGet Paketlerini Yönet'i seçin.

  6. Gözat'ı seçin, ardından Microsoft.Azure.Devices araması yapın ve seçin. Microsoft.Azure.Devices paketini yüklemek için Yükle'yi seçin.

    Microsoft.Azure.Devices paketinin nasıl yükleneceğini gösteren ekran görüntüsü.

    Bu adım Azure IoT hizmet SDK'sı NuGet paketini ve bağımlılıklarını indirir, yükler ve bunlara bir başvuru ekler.

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

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  8. Program sınıfına aşağıdaki alanları ekleyin. {iot hub connection string} Yer tutucu değerini daha önce IoT hub'ını alma bağlantı dizesi'nde kopyaladığınız IoT Hub bağlantı dizesi ile değiştirin.

    static RegistryManager registryManager;
    static string connString = "{iot hub connection string}";
    static ServiceClient client;
    static string targetDevice = "myDeviceId";
    
  9. Program sınıfına aşağıdaki yöntemi ekleyin. Bu kod, yeniden başlatan cihazın cihaz ikizini alır ve bildirilen özelliklerin çıkışını alır.

    public static async Task QueryTwinRebootReported()
    {
        Twin twin = await registryManager.GetTwinAsync(targetDevice);
        Console.WriteLine(twin.Properties.Reported.ToJson());
    }
    
  10. Program sınıfına aşağıdaki yöntemi ekleyin. Bu kod, doğrudan bir yöntem kullanarak cihazda yeniden başlatmayı başlatır.

    public static async Task StartReboot()
    {
        client = ServiceClient.CreateFromConnectionString(connString);
        CloudToDeviceMethod method = new CloudToDeviceMethod("reboot");
        method.ResponseTimeout = TimeSpan.FromSeconds(30);
    
        CloudToDeviceMethodResult result = await 
          client.InvokeDeviceMethodAsync(targetDevice, method);
    
        Console.WriteLine("Invoked firmware update on device.");
    }
    
  11. Son olarak, Main yöntemine aşağıdaki satırları ekleyin:

    registryManager = RegistryManager.CreateFromConnectionString(connString);
    StartReboot().Wait();
    QueryTwinRebootReported().Wait();
    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
    
  12. Derleme Çözümü Oluştur'a>tıklayın.

Not

Bu makale, cihazın bildirilen özellikleri için yalnızca tek bir sorgu gerçekleştirir. Üretim kodunda, bildirilen özelliklerdeki değişiklikleri algılamak için yoklama önerilir.

Uygulamaları çalıştırma

Artık uygulamaları çalıştırmaya hazırsınız.

  1. .NET cihaz uygulaması SimulateManagedDevice'i çalıştırmak için Çözüm Gezgini'de SimulateManagedDevice projesine sağ tıklayın, Hata Ayıkla'yı ve ardından Yeni örneği başlat'ı seçin. Uygulama, IoT hub'ınızdaki yöntem çağrılarını dinlemeye başlamalıdır.

  2. Bundan sonra cihaz bağlanıp yöntem çağrılarını bekliyor, TriggerReboot projesine sağ tıklayın, Hata Ayıkla'yı ve ardından Yeni örneği başlat'ı seçin.

    SimulatedManagedDevice konsolunda Yeniden Başlatma'yı ve TetikleyiciReboot konsolunda yazılan son yeniden başlatma zamanını içeren cihazın bildirilen özelliklerini görmeniz gerekir.

    Hizmet ve cihaz uygulaması çalıştırma

Cihaz yönetimi eylemlerini özelleştirme ve genişletme

IoT çözümleriniz tanımlı cihaz yönetimi desenleri kümesini genişletebilir veya cihaz ikizi ve buluttan cihaza yöntemi temel öğelerini kullanarak özel desenleri etkinleştirebilir. Cihaz yönetimi eylemlerine diğer örnekler arasında fabrika sıfırlaması, üretici yazılımı güncelleştirmesi, yazılım güncelleştirmesi, güç yönetimi, ağ ve bağlantı yönetimi ve veri şifreleme sayılabilir.

Cihaz bakım pencereleri

Genellikle, cihazları kesintileri ve kapalı kalma süresini en aza indiren bir zamanda eylem gerçekleştirecek şekilde yapılandırırsınız. Cihaz bakım pencereleri, bir cihazın yapılandırmasını güncelleştirme zamanını tanımlamak için yaygın olarak kullanılan bir desendir. Arka uç çözümleriniz, cihazınızda bakım penceresi sağlayan bir ilke tanımlamak ve etkinleştirmek için cihaz ikizinin istenen özelliklerini kullanabilir. Cihaz bakım penceresi ilkesini aldığında, ilkenin durumunu bildirmek için cihaz ikizinin bildirilen özelliğini kullanabilir. Arka uç uygulaması daha sonra cihaz ikizi sorgularını kullanarak cihazların ve her ilkenin uyumluluğunu kanıtlayabilir.

Sonraki adımlar

Bu makalede, bir cihazda uzaktan yeniden başlatma tetikleme için doğrudan bir yöntem kullandınız. Bildirilen özellikleri kullanarak cihazdan son yeniden başlatma zamanını bildirdiniz ve cihazın buluttan son yeniden başlatma zamanını bulmak için cihaz ikizini sorguladıysanız.

ToToTo, Raspberry Pi 3 B+ Başvuru Görüntüsünü kullanarak Azure IoT Hub için Cihaz Güncelleştirmesi makalesinde IoT Hub'ı ve uçtan uca görüntü tabanlı güncelleştirme gibi cihaz yönetimi desenlerini kullanmaya devam etmek için.

IoT çözümünüzü genişletmeyi ve yöntem çağrılarını birden çok cihazda zamanlamayı öğrenmek için bkz . İşleri zamanlama ve yayınlama.