İşleri zamanlama ve yayınlama (.NET)
Milyonlarca cihazı güncelleştiren işleri zamanlamak ve izlemek için Azure IoT Hub kullanın. İşleri kullanarak:
İstenen özellikleri güncelleştirme
Etiketleri güncelleştirme
Doğrudan yöntemleri çağırma
İş, bu eylemlerden birini sarmalar ve bir cihaz ikizi sorgusu tarafından tanımlanan bir cihaz kümesine göre yürütmeyi izler. Örneğin bir arka uç uygulaması, cihazları yeniden başlatan 10.000 cihazda doğrudan yöntem çağırmak için bir iş kullanabilir. Cihaz ikizi sorgusuyla cihaz kümesini belirtir ve işi gelecekteki bir zamanda çalışacak şekilde zamanlarsınız. İş, cihazların her biri yeniden başlatma doğrudan yöntemini aldığında ve yürütürken ilerleme durumunu izler.
Bu özelliklerin her biri hakkında daha fazla bilgi edinmek için bkz:
Cihaz ikizi ve özellikler: Cihaz ikizlerini kullanmaya başlama ve IoT Hub'de cihaz ikizlerini anlama ve kullanma
Doğrudan yöntemler: IoT Hub geliştirici kılavuzu - doğrudan yöntemler
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 makalede iki .NET (C#) konsol uygulamasının nasıl oluşturulacağı gösterilmektedir:
Arka uç uygulaması tarafından çağrılabilen LockDoor adlı doğrudan bir yöntem uygulayan SimulateDeviceMethods cihaz uygulaması.
İki iş oluşturan ScheduleJob adlı bir arka uç uygulaması. Bir iş lockDoor doğrudan yöntemini çağırır ve başka bir iş istenen özellik güncelleştirmelerini birden çok cihaza 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.
Kayıtlı bir cihaz. Azure portal bir tane kaydedin.
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 bağlanma (MQTT).
Sanal cihaz uygulaması oluşturma
Bu bölümde, çözüm arka ucu tarafından çağrılan doğrudan bir yönteme yanıt veren bir .NET konsol uygulaması oluşturacaksınız.
Visual Studio'da Yeni proje oluştur'u ve ardından Konsol Uygulaması (.NET Framework) proje şablonunu seçin. Devam etmek için İleri seçeneğini belirleyin.
Yeni projenizi yapılandırın bölümünde projeyi SimulateDeviceMethods olarak adlandırın ve İleri'yi seçin.
.NET Framework varsayılan sürümünü kabul edin ve oluştur'u seçerek projeyi oluşturun.
Çözüm Gezgini'da SimulateDeviceMethods projesine sağ tıklayıp NuGet Paketlerini Yönet'i seçin.
NuGet Paket Yöneticisi'ndeGözat'ı seçin ve Microsoft.Azure.Devices.Client'ı arayın ve seçin. Yükle'yi seçin.
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.
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 Newtonsoft.Json; using System.Threading.Tasks; using System.Text;
Program sınıfına aşağıdaki alanları ekleyin. Yer tutucu değerini önceki bölümde not ettiğiniz cihaz bağlantı dizesiyle değiştirin:
static string DeviceConnectionString = "<yourDeviceConnectionString>"; static DeviceClient Client = null;
Cihazda doğrudan yöntemi uygulamak için aşağıdaki kodu ekleyin:
static Task<MethodResponse> LockDoor(MethodRequest methodRequest, object userContext) { Console.WriteLine(); Console.WriteLine("Locking Door!"); Console.WriteLine("\nReturning response for method {0}", methodRequest.Name); string result = "'Door was locked.'"; return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200)); }
Cihazda cihaz ikizleri dinleyicisini uygulamak için aşağıdaki yöntemi ekleyin:
private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, object userContext) { Console.WriteLine("Desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); }
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); Client.SetMethodHandlerAsync("LockDoor", LockDoor, null); Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null); Console.WriteLine("Waiting for direct method call and device twin update\n Press enter to exit."); Console.ReadLine(); Console.WriteLine("Exiting..."); Client.SetMethodHandlerAsync("LockDoor", null, null); Client.CloseAsync().Wait(); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); }
Çalışmanızı kaydedin ve çözümünüzü oluşturun.
Not
İşleri basit tutmak için bu makalede yeniden deneme ilkeleri uygulanmaz. Üretim kodunda, Geçici hata işlemede önerilen yeniden deneme ilkelerini (bağlantı yeniden denemesi gibi) uygulamanız gerekir.
IoT hub bağlantı dizesini alma
Bu makalede, bir cihazda doğrudan yöntem çağırmak için bir iş zamanlayan, cihaz ikizini güncelleştirmek için bir iş zamanlayan ve her işin ilerleme durumunu izleyen bir arka uç hizmeti oluşturacaksınız. Bu işlemleri gerçekleştirmek için hizmetinizin kayıt defteri okuma ve kayıt defteri yazma izinlerine sahip olması gerekir. Varsayılan olarak, her IoT hub'ı bu izinleri 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:
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.
Hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.
İlke listesinden registryReadWrite ilkesini seçin.
Birincil bağlantı dizesini kopyalayın ve değeri kaydedin.
Paylaşılan erişim ilkeleri ve izinleri IoT Hub hakkında daha fazla bilgi için bkz. Erişim denetimi ve izinleri.
Doğrudan yöntem çağırmak ve cihaz ikizi güncelleştirmeleri göndermek için işleri zamanlama
Bu bölümde, LockDoor doğrudan yöntemini çağırmak ve istenen özellik güncelleştirmelerini birden çok cihaza göndermek için işleri kullanan bir .NET konsol uygulaması (C# kullanarak) oluşturacaksınız.
Visual Studio'da Dosya>Yeni Proje'yi> seçin. Yeni proje oluştur bölümünde Konsol Uygulaması (.NET Framework) öğesini ve ardından İleri'yi seçin.
Yeni projenizi yapılandırın bölümünde projeyi ScheduleJob olarak adlandırın ve Oluştur'u seçin.
.NET Framework varsayılan sürümünü kabul edin ve oluştur'u seçerek projeyi oluşturun.
Çözüm Gezgini'da ScheduleJob projesine sağ tıklayıp NuGet Paketlerini Yönet'i seçin.
NuGet Paket Yöneticisi'ndeGözat'ı seçin, Microsoft.Azure.Devices araması yapın ve seçin, ardından Yükle'yi seçin.
Bu adım Azure IoT hizmeti SDK'sı NuGet paketini ve bağımlılıklarını indirir, yükler ve bunlara bir başvuru ekler.
Aşağıdaki
using
deyimlerini Program.cs dosyasının üst kısmına ekleyin:using Microsoft.Azure.Devices; using Microsoft.Azure.Devices.Shared;
Varsayılan deyimlerde zaten yoksa aşağıdaki
using
deyimi ekleyin.using System.Threading; using System.Threading.Tasks;
Program sınıfına aşağıdaki alanları ekleyin. Yer tutucuları Daha önce IoT hub bağlantı dizesini alma bölümünde kopyaladığınız IoT Hub bağlantı dizesiyle ve cihazınızın adıyla değiştirin.
static JobClient jobClient; static string connString = "<yourIotHubConnectionString>"; static string deviceId = "<yourDeviceId>";
Program sınıfına aşağıdaki yöntemi ekleyin:
public static async Task MonitorJob(string jobId) { JobResponse result; do { result = await jobClient.GetJobAsync(jobId); Console.WriteLine("Job Status : " + result.Status.ToString()); Thread.Sleep(2000); } while ((result.Status != JobStatus.Completed) && (result.Status != JobStatus.Failed)); }
Program sınıfına aşağıdaki yöntemi ekleyin:
public static async Task StartMethodJob(string jobId) { CloudToDeviceMethod directMethod = new CloudToDeviceMethod("LockDoor", TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5)); JobResponse result = await jobClient.ScheduleDeviceMethodAsync(jobId, $"DeviceId IN ['{deviceId}']", directMethod, DateTime.UtcNow, (long)TimeSpan.FromMinutes(2).TotalSeconds); Console.WriteLine("Started Method Job"); }
Program sınıfına başka bir yöntem ekleyin:
public static async Task StartTwinUpdateJob(string jobId) { Twin twin = new Twin(deviceId); twin.Tags = new TwinCollection(); twin.Tags["Building"] = "43"; twin.Tags["Floor"] = "3"; twin.ETag = "*"; twin.Properties.Desired["LocationUpdate"] = DateTime.UtcNow; JobResponse createJobResponse = jobClient.ScheduleTwinUpdateAsync( jobId, $"DeviceId IN ['{deviceId}']", twin, DateTime.UtcNow, (long)TimeSpan.FromMinutes(2).TotalSeconds).Result; Console.WriteLine("Started Twin Update Job"); }
Not
Sorgu söz dizimi hakkında daha fazla bilgi için bkz. IoT Hub sorgu dili.
Son olarak, Main yöntemine aşağıdaki satırları ekleyin:
Console.WriteLine("Press ENTER to start running jobs."); Console.ReadLine(); jobClient = JobClient.CreateFromConnectionString(connString); string methodJobId = Guid.NewGuid().ToString(); StartMethodJob(methodJobId); MonitorJob(methodJobId).Wait(); Console.WriteLine("Press ENTER to run the next job."); Console.ReadLine(); string twinUpdateJobId = Guid.NewGuid().ToString(); StartTwinUpdateJob(twinUpdateJobId); MonitorJob(twinUpdateJobId).Wait(); Console.WriteLine("Press ENTER to exit."); Console.ReadLine();
Çalışmanızı kaydedin ve çözümünüzü oluşturun.
Uygulamaları çalıştırma
Şimdi uygulamaları çalıştırmaya hazırsınız.
Visual Studio Çözüm Gezgini çözümünüze sağ tıklayıp Başlangıç Projelerini Ayarla'yı seçin.
Ortak Özellikler>Başlangıç Projesi'ni ve ardından Birden çok başlangıç projesi'ni seçin.
listenin en üstünde ve ardından
ScheduleJob
öğesinin olduğundan eminSimulateDeviceMethods
olun. Her iki eylemi de Başlangıç olarak ayarlayın ve Tamam'ı seçin.Başlat'a tıklayarak projeleri çalıştırın veya Hata Ayıkla menüsüne gidin ve Hata Ayıklamayı Başlat'a tıklayın.
Hem cihaz hem de arka uç uygulamalarından gelen çıkışı görürsünüz.
Sonraki adımlar
Bu makalede, işleri doğrudan bir yöntem çalıştıracak ve cihaz ikizinin özelliklerini güncelleştirecek şekilde zamanlamıştınız.
IoT Hub ve cihaz yönetimi desenlerini keşfetmeye devam etmek için Raspberry Pi 3 B+ Başvuru Görüntüsünü kullanarak Azure IoT Hub öğreticisi için Cihaz Güncelleştirmesi'nde bir görüntüyü güncelleştirin.