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.
Applies to:
IoT Edge 1.5
Önemli
IoT Edge 1.5 LTS, desteklenen bir sürümdür. IoT Edge 1.4 LTS, 12 Kasım 2024'te kullanım ömrüne ulaştı. Önceki bir sürümü kullanıyorsanız bkz. Update IoT Edge.
Bu öğreticide kodunuzun nasıl geliştirilip bir IoT Edge cihazına dağıtılacağı gösterilmektedir. Azure IoT Edge modülleri, iş mantığınızı çalıştıran kodu doğrudan IoT Edge cihazınızda dağıtmanıza olanak tanır. Linux cihazına Koda Dağıtım Hızlı Başlangıç Kılavuzu'nda bir IoT Edge cihazını ayarladınız ve Azure Marketplace'ten bir modül dağıttınız.
Bu makalede iki IoT Edge geliştirme aracı için adımlar açıklanmaktadır:
- geliştirme için tercih edilen Azure IoT Edge Geliştirme Aracı komut satırı (CLI).
- Visual Studio Code için Azure IoT Edge araçları uzantısı, maintenance modunda.
Aracınızı seçmek için bu makalenin başındaki araç seçici düğmesini kullanın.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Geliştirme makinenizi ayarlama
- Yeni proje oluşturmak için IoT Edge araçlarını kullanma
- Projenizi Docker kapsayıcısı olarak derleyin ve Azure kapsayıcı kayıt defterinde depolayın
- Kodunuzu IoT Edge bir cihaza dağıtma
Bu öğreticide oluşturduğunuz IoT Edge modülü, cihazınızın oluşturduğu sıcaklık verilerini filtreler. Yalnızca sıcaklık belirlenen eşiğin üzerindeyse yukarı akış iletileri gönderir. Uçtaki bu analiz türü, buluta gönderilen ve bulutta depolanan veri miktarını azaltmaya yardımcı olur.
Önkoşullar
Geliştirme makinesi:
- Kendi bilgisayarınızı veya sanal makinenizi kullanın.
- Geliştirme makinenizin bir kapsayıcı altyapısı çalıştırmak için iç içe sanallaştırmayı desteklediğine emin olun.
- Linux cihazları için IoT Edge modülleri geliştirmek üzere kapsayıcı altyapısı çalıştıran çoğu işletim sistemini kullanabilirsiniz. Bu öğreticide Windows bir bilgisayar kullanılır, ancak macOS veya Linux'ta bilinen farklara da işaret eder.
- Visual Studio Code yükle
- Azure CLI yükleyin.
bir Azure IoT Edge cihazı:
- IoT Edge ayrı bir cihazda çalıştırın. Geliştirme makinesinin ve IoT Edge cihazın ayrı tutulması gerçek bir dağıtım senaryosunun benzetimini gerçekleştirir ve kavramların açık kalmasına yardımcı olur. “Kodları Linux Cihazına Dağıtın” hızlı başlangıç makalesi kullanarak Azure'da bir IoT Edge cihazı oluşturun veya Azure Resource Manager şablonu kullanarak IoT Edge etkin bir sanal makine dağıtın.
Bulut kaynakları:
- Ücretsiz veya standart katman Azure IoT Hub kullanın.
Azure hesabınız yoksa başlamadan önce free hesabı oluşturun.
İpucu
Visual Studio Code veya Visual Studio 2022'de etkileşimli hata ayıklama yönergeleri için:
Bu öğreticide Visual Studio Code için geliştirme adımları yer alır.
Temel kavramlar
Bu öğreticide bir IoT Edge modülü geliştirme adımları gösterilir. IoT Edge modülü yürütülebilir kod içeren bir kapsayıcıdır. bir IoT Edge cihaza bir veya daha fazla modül dağıtabilirsiniz. Modüller algılayıcılardan veri alma, verileri temizleme ve analiz etme veya bir IoT Hub ileti gönderme gibi belirli görevleri yerine getirme. Daha fazla bilgi için bkz. Azure IoT Edge modüllerini anlama.
IoT Edge modülleri geliştirirken geliştirme makinesi ile modülün dağıtıldığı hedef IoT Edge cihaz arasındaki farkı anlamanız gerekir. Modül kodunuzu tutmak için oluşturduğunuz kapsayıcı, hedef cihazın işletim sistemiyle (OS) eşleşmelidir. Örneğin en yaygın senaryo, IoT Edge çalıştıran bir Linux cihazını hedeflemek için bir Windows bilgisayarda modül geliştirmektir. Bu durumda kapsayıcı işletim sistemi Linux'tır. Bu öğreticiyi takip ederken, geliştirme makinesi işletim sistemi ile kapsayıcı işletim sistemi arasındaki farkı aklınızda bulundurun.
İpucu
Windows üzerinde Linux için
Bu öğretici, Linux kapsayıcıları kullanan ve IoT Edge çalıştıran cihazları hedef alır. Geliştirme makineniz Linux kapsayıcıları çalıştırdıkça tercih ettiğiniz işletim sistemini kullanın. linux kapsayıcıları ile geliştirme için Visual Studio Code önerilir, bu nedenle bu öğretici bunu kullanır. İki araç arasında destek farklılıkları olsa da Visual Studio de kullanabilirsiniz.
Aşağıdaki tabloda, Visual Studio Code ve Visual Studio Linux kapsayıcıları için desteklenen geliştirme senaryoları listelenmektedir.
| Visual Studio Code | Visual Studio 2019/2022 | |
|---|---|---|
| Linux cihaz mimarisi | Linux AMD64 Linux ARM32v7 Linux ARM64 |
Linux AMD64 Linux ARM32 Linux ARM64 |
| Azure services | Azure Functions Azure Stream Analytics Azure Machine Learning |
|
| Diller | C C# Java Node.js Python |
C C# (programlama dili) |
| Daha fazla bilgi | Visual Studio Code için Azure IoT Edge |
Visual Studio 2019 için Azure IoT Edge Araçları Visual Studio 2022 için Azure IoT Edge Araçları |
Kapsayıcı motoru yükle
IoT Edge modülleri kapsayıcı olarak paketlenir, bu nedenle geliştirme makinenizde derlemek ve yönetmek için Docker uyumlu bir kapsayıcı yönetim sistemi gerekir. Docker Desktop, güçlü özellik desteğine sahip olduğundan geliştirme için popüler bir seçimdir. Windows üzerinde Docker Desktop, Linux kapsayıcıları ile Windows kapsayıcılar arasında geçiş yapmanızı sağlar, böylece farklı türlerdeki IoT Edge cihazlar için modüller geliştirebilirsiniz.
Geliştirme makinenize Docker yüklemek için Docker belgelerini kullanın:
Windows için Docker Desktop'ı yükleyin. Windows için Docker Desktop'ı yüklediğinizde Linux mu yoksa Windows kapsayıcıları mı kullanmak istediğiniz sorulur. Bu ayarı istediğiniz zaman değiştirebilirsiniz. Modüller Linux cihazlarını hedeflediğinden bu öğreticide Linux kapsayıcıları kullanılır. Daha fazla bilgi için bkz. Windows ve Linux kapsayıcıları arasında geçiş yapma.
Çeşitli Linux platformlarında yükleme bilgileri için Docker CE hakkında makalesini okuyun. Windows Subsystem for Linux (WSL) için Windows için Docker Desktop'ı yükleyin.
Araçları ayarlama
IoT Edge çözümünüzü oluşturmak için Python tabanlı Azure IoT Edge Geliştirme Aracı yükleyin. İki seçeneğiniz vardır:
- Tercih edilen önceden oluşturulmuş IoT Edge Dev Container kullanın.
- aracı iotedgedev geliştirme kurulumu kullanarak yükleyin.
Önemli
Azure IoT Edge araçları Visual Studio Code uzantısı için
IoT Edge modülleri geliştirmek için Visual Studio Code için IoT uzantılarını kullanın. Bu uzantılar proje şablonları sunar, dağıtım bildiriminin oluşturulmasını otomatikleştirir ve IoT Edge cihazları izlemenize ve yönetmenize olanak tanır. Bu bölümde Visual Studio Code ve IoT uzantısını yükledikten sonra Visual Studio Code içinden IoT Hub kaynaklarını yönetmek için Azure hesabınızı ayarlarsınız.
- Azure IoT Edge uzantısını yükleyin.
- Azure IoT Hub uzantısını yükleyin.
- Uzantıları yükledikten sonra Komut Paletini Görüntüle'yi > seçerek komut paletini açın.
- Komut paletinde Azure IoT Hub: IoT Hub öğesini arayın ve seçin. Azure aboneliğinizi seçmek ve IoT Hub için istemleri izleyin.
- etkinlik çubuğundaki simgeyi seçerek veya View > Explorer öğesini seçerek Visual Studio Code gezgin bölümünü açın.
- Gezgin bölümünün en altında daraltılmış Azure IoT Hub / Cihazlar menüsünü genişletin. Komut paleti aracılığıyla seçtiğiniz IoT Hub ilişkili cihazları ve IoT Edge cihazları görürsünüz.
Dile özgü araçları yükleme
Geliştirmekte olduğunuz dile özgü araçları yükleyin:
Kapsayıcı kayıt defteri oluşturma
Bu öğreticide, modül oluşturmak ve dosyalardan kapsayıcı görüntüsü oluşturmak için Azure IoT Edge ve Azure IoT Hub uzantılarını kullanırsınız. Ardından bu görüntüyü görüntülerinizi depolayan ve yöneten bir kayıt defterine gönderirsiniz. Son olarak, görüntünüzü IoT Edge cihazınızda çalışacak şekilde kayıt defterinizden dağıtırsınız.
Önemli
Azure IoT Edge Visual Studio Code uzantısı maintenance modunda.
Kapsayıcı görüntülerinizi tutmak için Docker uyumlu herhangi bir kayıt defterini kullanabilirsiniz. İki popüler Docker kayıt defteri hizmeti Azure Container Registry ve Docker Hub'dır. Bu öğreticide Azure Container Registry kullanılır.
Henüz bir kapsayıcı kayıt defteriniz yoksa, Azure'de yeni bir kayıt defteri oluşturmak için şu adımları izleyin:
Azure portalında Kaynak oluştur>Containers>Container Registry öğesini seçin.
Kapsayıcı kayıt defterinizi oluşturmak için aşağıdaki gerekli değerleri sağlayın:
Alan Değer Abonelik Açılan listeden bir abonelik seçin. Kaynak grubu IoT Edge hızlı başlangıçları ve öğreticileri sırasında oluşturduğunuz tüm test kaynakları için aynı kaynak grubunu kullanın; örneğin, IoTEdgeResources. Kayıt defteri adı Benzersiz bir ad girin. Konum Size yakın bir konum seçin. SKU (Stok Kod Numarası) Temel'i seçin. Gözden geçir ve oluştur'u ve ardından Oluştur'u seçin.
Yeni kapsayıcı kayıt defterinizi açmak için Azure portalınızın giriş sayfasının Resources bölümünden seçin.
Kapsayıcı kayıt defterinizin sol bölmesinde, Ayarlar'ın altında bulunan menüden Erişim anahtarları'nı seçin.
Kapsayıcı kayıt defteriniz için Kullanıcı Adı ve Parola'yı görüntülemek üzere Yönetici kullanıcısını anahtar düğme ile açın.
Oturum açma sunucusu, Kullanıcı adı ve parola değerlerini kopyalayın ve uygun bir yere kaydedin. Kapsayıcı kayıt defterine erişim sağlamak için bu öğretici boyunca bu değerleri kullanırsınız.
Yeni modül projesi oluşturma
Azure IoT Edge uzantısı, Visual Studio Code'da desteklenen tüm IoT Edge modül dilleri için proje şablonları sunar. Bu şablonlar, IoT Edge test etmek için bir çalışma modülü dağıtmak için ihtiyacınız olan tüm dosyaları ve kodları içerir veya şablonu kendi iş mantığınızla özelleştirmeniz için bir başlangıç noktası sağlar.
Proje şablonu oluşturma
IoT Edge Geliştirme Aracı ortam değişkenleri tarafından yönetilen komutlarla Azure IoT Edge geliştirmeyi kolaylaştırır. Varsayılan modülü ve gerekli tüm yapılandırma dosyalarını içeren IoT Edge Geliştirme Kapsayıcısı ve IoT Edge çözümü iskelesini kullanarak IoT Edge geliştirmeyle çalışmaya başlamanıza yardımcı olur.
çözümünüz için istediğiniz yolda bir dizin oluşturun. Dizininize
iotedgesolutiongeçin.mkdir c:\dev\iotedgesolution cd c:\dev\iotedgesolutionÇözüm oluşturmak ve Azure IoT Hub istediğiniz geliştirme dilinde ayarlamak için
iotedgedev solution initkomutunu kullanın:
Komut iotedgedev solution init , aşağıdakiler dahil olmak üzere birkaç adımı tamamlamanızı ister:
- Azure kimlik doğrulaması
- Azure aboneliği seçme
- Kaynak grubu seçme veya oluşturma
- Azure IoT Hub seçme veya oluşturma
- Azure IoT Edge cihazı seçme veya oluşturma
Visual Studio Code ve Azure IoT Edge uzantısını kullanın. Bir çözüm oluşturarak başlayın ve ardından bu çözümdeki ilk modülü oluşturun. Her çözüm birden çok modül içerebilir.
- Komut Paleti Görüntüle'yi >seçin.
- Komut paletinde Azure IoT Edge: New IoT Edge Solution komutunu girin ve çalıştırın.
- Yeni çözümü oluşturmak istediğiniz klasöre gidin, ardından Klasör seç'i seçin.
- Çözümünüz için bir ad girin.
- Çözümdeki ilk modül olmak için tercih ettiğiniz geliştirme dili için bir modül şablonu seçin.
- Modülünüz için bir ad girin. Kapsayıcı kayıt defterinizde benzersiz bir ad seçin.
- Modülün görüntü deposunun adını girin. Visual Studio Code modül adını localhost:5000/<sizin modül adınız> olarak otomatik olarak doldurur. Bunu kendi kayıt defteri bilgilerinizle değiştirin. Test için yerel bir Docker kayıt defteri kullanıyorsanız localhost kullanın. Azure Container Registry kullanıyorsanız, kayıt defterinizin ayarlarından Login sunucusu kullanın. Oturum açma sunucusu kayıt defteri adı.azurecr.io< gibi> görünür. Dizenin yalnızca localhost:5000 bölümünü değiştirin; böylece son sonuç < görünür.
Visual Studio Code sağladığınız bilgileri alır, bir IoT Edge çözümü oluşturur ve yeni bir pencerede yükler.
Çözümü oluşturduktan sonra, bu ana dosyalar çözümde bulunur:
.vscode klasörü launch.jsonyapılandırma dosyasını içerir.
Modules klasöründe her modül için alt klasörler bulunur. Her alt klasörde module.json dosyası modüllerin nasıl derlenip dağıtılma şeklini denetler.
.env dosyasında ortam değişkenleriniz listelenir. Kapsayıcı kayıt defteri için ortam değişkeni varsayılan olarak localhost:5000'dir.
deployment.template.jsonve deployment.debug.template.json olmak üzere iki modül dağıtım dosyası, cihazınıza dağıtılacak modülleri listeler. Varsayılan olarak, liste IoT Edge sistem modüllerini (edgeAgent ve edgeHub) ve aşağıdakiler gibi örnek modülleri içerir:
- filtermodule , basit bir filtre işlevi uygulayan örnek bir modüldür.
- SimulatedTemperatureSensor modülü, test için kullanabileceğiniz verilerin simülasyonunu oluşturur. Dağıtım bildirimlerinin nasıl çalıştığı hakkında daha fazla bilgi için bkz. Modülleri dağıtmak ve yollar oluşturmak için dağıtım bildirimlerini kullanmayı öğrenin. Simülasyon sıcaklık modülünün nasıl çalıştığı hakkında daha fazla bilgi için bkz. SimulatedTemperatureSensor.csproj kaynak kodu.
Not
Tam olarak yüklenen modüller, seçtiğiniz dile bağlı olabilir.
IoT Edge çalışma zamanı sürümünü ayarlama
En son kararlı IoT Edge sistem modülü sürümü 1.5'tir. Sistem modüllerinizi sürüm 1.5 olarak ayarlayın.
Visual Studio Code'da deployment.template.json dağıtım bildirim dosyasını açın. deployment manifest hedeflenen IoT Edge cihazında yapılandırılacak modülleri açıklayan bir JSON belgesidir.
sistem çalışma zamanı modülü görüntüleri için
edgeAgentveedgeHubçalışma zamanı sürümünü değiştirin. Örneğin, IoT Edge çalışma zamanı sürüm 1.5'i kullanmak istiyorsanız dağıtım bildirim dosyasında aşağıdaki satırları değiştirin:"systemModules": { "edgeAgent": { "image": "mcr.microsoft.com/azureiotedge-agent:1.5", "edgeHub": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
kayıt defteri kimlik bilgilerinizi IoT Edge aracısına sağlayın
Ortam dosyası kapsayıcı kayıt defterinizin kimlik bilgilerini depolar ve bunları IoT Edge çalışma zamanıyla paylaşır. Çalışma zamanı, kapsayıcı görüntülerinizi IoT Edge cihaza çekmek için bu kimlik bilgilerine ihtiyaç duyar.
IoT Edge uzantısı, kapsayıcı kayıt defteri kimlik bilgilerinizi Azure’dan alarak ortam dosyasına yerleştirmeye çalışır.
Not
Ortam dosyası yalnızca modül için bir görüntü deposu sağlarsanız oluşturulur. Yerel olarak test etmek ve hatalarını ayıklamak için localhost varsayılanlarını kabul ettiyseniz, ortam değişkenlerini bildirmeniz gerekmez.
Kimlik bilgilerinizin mevcut olup olmadığını denetleyin. Yoksa, şimdi ekleyin:
Kayıt defteriniz Azure Container Registry ise, Azure Container Registry kullanıcı adı ve parola ayarlayın. Bu değerleri kapsayıcı kayıt defterinizin Settings>Access anahtarları menüsünden Azure portalında alın.
Modül çözümünüzde .env dosyasını açın.
Azure kapsayıcı kayıt defterinizden kopyaladığınız username ve password değerlerini ekleyin. Örneğin:
CONTAINER_REGISTRY_SERVER="myacr.azurecr.io" CONTAINER_REGISTRY_USERNAME="myacr" CONTAINER_REGISTRY_PASSWORD="<registry_password>"Değişikliklerinizi .env dosyasına kaydedin.
Not
Bu öğreticide geliştirme ve test senaryoları için uygun olan Azure Container Registry için yönetici kimlik bilgileri kullanılır. Üretim senaryolarına hazır olduğunuzda, hizmet sorumluları veya depo kapsamlı belirteçler gibi en az ayrıcalıklı bir kimlik doğrulama seçeneği öneririz. Daha fazla bilgi için bkz. Kapsayıcı kayıt defterinize erişimi yönetme.
Hedef mimari
Kapsayıcının oluşturulma ve çalışma şeklini etkilediğinden, her çözümle hedeflediğiniz mimariyi seçin. Varsayılan değer Linux AMD64'dür. Bu öğreticide, IoT Edge cihaz olarak bir Ubuntu sanal makinesi kullanın ve varsayılan amd64 tutun.
Çözümünüz için hedef mimariyi değiştirmeniz gerekiyorsa bu adımları izleyin.
- Komut paletini açın ve Azure IoT Edge: Edge Çözümü için Varsayılan Hedef Platformu ayarla veya pencerenin alt kısmındaki kenar çubuğundaki kısayol simgesini seçin.
- Komut paletinde, seçenekler listesinden hedef mimariyi seçin.
Hedef mimari, kapsayıcı görüntüsünü sonraki bir adımda oluşturduğunuzda ayarlanır.
Modülü özel kodla güncelleştirme
Her şablon, SimulatedTemperatureSensor modülünden simülasyon algılayıcı verilerini alan ve IoT Hub yönlendiren örnek kod içerir. Örnek modül iletileri alır ve iletir. İşlem hattı işlevi, IoT Edge'de önemli bir kavramı gösterir: modüllerin birbirleriyle nasıl iletişim kurduğu.
Her modülün kodunda birden çok giriş ve çıkış kuyruğu bildirilebilir. Cihazda çalışan IoT Edge hub'ı, iletileri bir modülün çıkışından bir veya daha fazla modülün girişine yönlendirir. Girişleri ve çıkışları bildirmeye yönelik özel kod diller arasında farklılık gösterir, ancak kavram tüm modüller için aynıdır. Modüller arasında yönlendirme hakkında daha fazla bilgi için bkz. Yolları bildirme.
Proje şablonuyla birlikte gelen örnek C# kodu, .NET için IoT Hub SDK'sından ModuleClient sınıfı kullanır.
Visual Studio Code gezgininde modules > filtermodule > ModuleBackgroundService.cs açın.
Ad alanının önüne
filtermodule, daha sonra kullanılan türler için üçusingdeyim ekleyin:using System.Collections.Generic; // For KeyValuePair<> using Microsoft.Azure.Devices.Shared; // For TwinCollection using Newtonsoft.Json; // For JsonConverttemperatureThresholddeğişkeniniModuleBackgroundServicesınıfına ekleyin. Bu değişken, verilerin IoT Hub gönderilmesi için ölçülen sıcaklığın aşması gereken değeri ayarlar.static int temperatureThreshold { get; set; } = 25;MessageBody,MachineveAmbientsınıflarını ekleyin. Bu sınıflar gelen iletilerin gövdesi için beklenen şemayı tanımlar.class MessageBody { public Machine machine {get;set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} }İşlevi
ExecuteAsyncbulun. Bu işlev, modülün ileti göndermek ve almak için yerel Azure IoT Edge çalışma zamanına bağlanmasına olanak tanıyan birModuleClientnesnesi oluşturur ve yapılandırılır. KodModuleClientoluşturulduktan sonra, kod modül ikizinin istenen niteliklerindentemperatureThresholddeğerini okur. Kod, IoT Edge hub'ındaninput1adlı bir uç nokta aracılığıyla ileti almak için bir geri çağırma kaydeder.ProcessMessageAsyncyönteminin çağrısını, uç noktanın adını güncelleyen ve giriş alındığında çağrışım yapılan yeni bir çağrıyla değiştirin. Ayrıca, istenen özelliklere güncelleştirmeler için birSetDesiredPropertyUpdateCallbackAsyncyöntem ekleyin. Bu değişikliği yapmak için yönteminin son satırınıExecuteAsyncaşağıdaki kodla değiştirin:// Register a callback for messages that are received by the module. // await _moduleClient.SetInputMessageHandlerAsync("input1", PipeMessage, cancellationToken); // Read the TemperatureThreshold value from the module twin's desired properties var moduleTwin = await _moduleClient.GetTwinAsync(); await OnDesiredPropertiesUpdate(moduleTwin.Properties.Desired, _moduleClient); // Attach a callback for updates to the module twin's desired properties. await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null); // Register a callback for messages that are received by the module. Messages received on the inputFromSensor endpoint are sent to the FilterMessages method. await _moduleClient.SetInputMessageHandlerAsync("inputFromSensor", FilterMessages, _moduleClient);OnDesiredPropertiesUpdateyöntemini sınıfınaModuleBackgroundServiceekleyin. Bu yöntem modül ikizinden istenen özelliklerle ilgili güncelleştirmeleri alır ve değişkeninitemperatureThresholdeşleşecek şekilde güncelleştirir. Tüm modüllerin, doğrudan buluttan bir modülün içinde çalışan kodu yapılandırmanıza izin veren kendi modül ikizi vardır.static Task OnDesiredPropertiesUpdate(TwinCollection desiredProperties, object userContext) { try { Console.WriteLine("Desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); if (desiredProperties["TemperatureThreshold"]!=null) temperatureThreshold = desiredProperties["TemperatureThreshold"]; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", exception); } } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", ex.Message); } return Task.CompletedTask; }FilterMessagesyöntemini ekleyin. Modül IoT Edge hub'ından bir ileti aldığında bu yöntem çağrılır. Modül ikizi aracılığıyla ayarlanan sıcaklık eşiğinin altındaki sıcaklıkları rapor eden iletileri filtreler. Ayrıca değerininMessageTypeolarak ayarlandığıAlertiletiye özelliğini ekler:async Task<MessageResponse> FilterMessages(Message message, object userContext) { var counterValue = Interlocked.Increment(ref _counter); try { ModuleClient moduleClient = (ModuleClient)userContext; var messageBytes = message.GetBytes(); var messageString = Encoding.UTF8.GetString(messageBytes); Console.WriteLine($"Received message {counterValue}: [{messageString}]"); // Get the message body. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { Console.WriteLine($"Machine temperature {messageBody.machine.temperature} " + $"exceeds threshold {temperatureThreshold}"); using (var filteredMessage = new Message(messageBytes)) { foreach (KeyValuePair<string, string> prop in message.Properties) { filteredMessage.Properties.Add(prop.Key, prop.Value); } filteredMessage.Properties.Add("MessageType", "Alert"); await moduleClient.SendEventAsync("output1", filteredMessage); } } // Indicate that the message treatment is completed. return MessageResponse.Completed; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", exception); } // Indicate that the message treatment is not completed. var moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); // Indicate that the message treatment is not completed. ModuleClient moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } }ModuleBackgroundService.cs dosyasını kaydedin.
Visual Studio Code gezgininde IoT Edge çözüm çalışma alanınızda deployment.template.json dosyasını açın.
Modülün dinlediği uç noktanın adını değiştirdiğimizden, edgeHub'ın yeni uç noktaya ileti göndermesi için dağıtım bildirimindeki yolları da güncelleştirmemiz gerekir.
routes$edgeHub modül ikizindeki bölümü bulun. Yeni rotayı güncelleyin,sensorTofiltermoduleileinput1değiştirininputFromSensor."sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"Dağıtım bildirimine filtermodule modül ikizini ekleyin.
modulesContentbölümünün en altına, $edgeHub modül ikizinden sonra aşağıdaki JSON içeriğini ekleyin:"filtermodule": { "properties.desired":{ "TemperatureThreshold":25 } }deployment.template.json dosyasını kaydedin.
Çözümünüzü oluşturun ve gönderin
Bazı önemli dağıtım kavramlarını anlamanıza yardımcı olması için modül kodunu ve dağıtım şablonunu güncelleştirmişsiniz. Artık modül kapsayıcı görüntünüzü oluşturmaya ve kapsayıcı kayıt defterinize göndermeye hazırsınız.
Visual Studio Code'da deployment.template.json dağıtım bildirim dosyasını açın.
deployment manifest hedeflenen IoT Edge cihazında yapılandırılacak modülleri açıklar. Dağıtımdan önce, Azure Container Registry kimlik bilgilerinizi ve modül görüntülerinizi uygun createOptions değerleriyle güncelleştirmeniz gerekir.
createOptions değerleri hakkında daha fazla bilgi için bkz. IoT Edge modülleri için kapsayıcı oluşturma seçeneklerini yapılandırma.
Modül görüntünüzü depolamak için bir Azure Container Registry kullanıyorsanız kimlik bilgilerinizi modulesContent > edgeAgent > settings > registryCredentials içindeki bölümüne ekleyin. Kendi kayıt defteri adınızı "myacr" yerine koyun ve parolanızı ve oturum açma sunucusu adresinizi belirtin. Örneğin:
"registryCredentials": {
"myacr": {
"username": "myacr",
"password": "<your_acr_password>",
"address": "myacr.azurecr.io"
}
}
Listelenen her sistemin (createOptions ve *edgeAgent) ve özel modülün (filtermodule ve tempSensor) değerine aşağıdaki dizelenmiş içeriği ekleyin veya değiştirin. Gerekirse değerleri değiştirin:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
Örneğin, yapılandırma şuna filtermodule benzer olmalıdır:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
Derleme modülü Docker görüntüsü
Terminal > Yeni Terminal'i seçerek tümleşik Visual Studio Code terminali açın.
dotnet publish Linux ve amd64 mimarisi için kapsayıcı görüntüsünü derlemek için komutunu kullanın. Dizini projenizdeki filtermodule diziniyle dotnet publish değiştirin ve komutunu çalıştırın.
dotnet publish --os linux --arch x64 /t:PublishContainer
Şu anda iotedgedev araç şablonu, Mayıs 2024'te destek sonuna ulaşmış .NET 7.0'ı hedeflemektedir.
filtermodule.csproj dosyasını düzenleyip TargetFramework ve PackageReference değerlerini değiştirerek projeyi .NET 8.0'ı (LTS, Kasım 2026'ya kadar desteklenir) hedef olarak güncelleştirin.
filtermodule.csproj dosyanız şu şekilde görünmelidir:
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.42.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
</Project>
Docker görüntüsünü kapsayıcı kayıt defteri bilgileriniz, sürümünüz ve mimarinizle etiketleyin.
myacr değerini kendi kayıt defteri adınızla değiştirin.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.1-amd64
Gönderme modülü Docker görüntüsü
Kapsayıcı görüntünüzü kayıt defterindeki depolama alanına gönderebilmesi için docker'a kapsayıcı kayıt defteri kimlik bilgilerinizi sağlayın.
Azure Container Registry (ACR) kimlik bilgileriyle Docker'da oturum açın:
docker login -u <ACR username> -p <ACR password> <ACR login server>kullanılmasını
--password-stdinöneren bir güvenlik uyarısı alabilirsiniz. Bu, üretim senaryoları için önerilen en iyi yöntem olsa da, bu öğreticinin kapsamı dışındadır. Üretim ortamındaki kapsayıcı kayıt defterine kimlik doğrulaması için yönetici kimlik bilgileri yerine hizmet sorumlusu veya depo bazlı belirteçler kullanın. Daha fazla bilgi için bkz. Kapsayıcı kayıt defterinize erişimi yönetme ve docker oturum açma başvurusu.Azure Container Registry için oturum açın. Azure CLI'yi kullanmak için
azkomutunu yüklemelisiniz. Bu komut , Ayarlar > Erişim anahtarları'ndaki kapsayıcı kayıt defterinizde bulunan kullanıcı adınızı ve parolanızı ister:az acr login -n <ACR registry name>İpucu
Bu öğreticinin herhangi bir noktasında oturumunuz kapandıysa, devam etmek için Docker ve Azure Container Registry oturum açma adımlarını yineleyin.
Modül görüntünüzü yerel kayıt defterine veya kapsayıcı kayıt defterine gönderin:
docker push <ImageName>Örneğin:
# Push the Docker image to the local registry docker push localhost:5000/filtermodule:0.0.1-amd64 # Or push the Docker image to an Azure Container Registry. Replace myacr with your Azure Container Registry name. az acr login --name myacr docker push myacr.azurecr.io/filtermodule:0.0.1-amd64
Dağıtım şablonunu güncelleştirme
Dağıtım şablonunu deployment.template.json kapsayıcı kayıt defteri görüntü konumuyla güncelleştirin. Örneğin, Azure Container Registry myacr.azurecr.io kullanıyorsanız ve görüntünüz filtermodule:0.0.1-amd64 ise, filtermodule yapılandırmasını şu şekilde güncelleştirin:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
}
Visual Studio Code gezgininde deployment.template.json dosyasına sağ tıklayın ve IoT Edge Çözümünü Derle ve Gönder'i seçin.
Derleme ve gönderme komutu üç işlem başlatır. İlk olarak, çözümde, dağıtım şablonundaki ve diğer çözüm dosyalarındaki bilgilerle oluşturulmuş tam dağıtım bildirimini tutan yapılandırma adlı yeni bir klasör oluşturur. İkincisi, hedef mimariniz için uygun docker dosyasını temel alarak kapsayıcı görüntüsünü derlemek için docker build çalıştırır. Ardından, docker push çalıştırarak görüntü deposunu kapsayıcı kayıt defterinize itersiniz.
Bu işlem ilk kez birkaç dakika sürebilir, ancak komutları bir sonraki çalıştırmanızda daha hızlıdır.
İsteğe bağlı: Modülü ve görüntüyü güncelleştirme
Modül kodunuzda değişiklik yaparsanız, modül görüntüsünü yeniden oluşturup kapsayıcı kayıt defterinize göndermeniz gerekir. Derleme ve kapsayıcı görüntüsünü güncelleştirmek için bu bölümdeki adımları kullanın. Modül kodunuzda değişiklik yapmadıysanız bu bölümü atlayabilirsiniz.
yeni oluşturulan yapılandırma klasöründe deployment.amd64.json dosyasını açın. Dosya adı hedef mimariyi yansıtır, bu nedenle farklı bir mimari seçtiyseniz farklı olur.
Yer tutucuları olan iki parametrenin artık uygun değerlerini içerdiğine dikkat edin.
registryCredentials bölümünde, kayıt defteri kullanıcı adınız ve parolanız, .env dosyasından çekilmiştir.
filtermodule, module.json dosyasındaki ad, sürüm ve mimari etiketine sahip tam görüntü deposuna sahiptir.
filtermodule klasöründe module.json dosyasını açın.
Modül görüntüsünün sürüm numarasını değiştirin. Örneğin, modül kodunda küçük bir düzeltme yapmış gibi düzeltme eki sürüm numarasını
"version": "0.0.2"olarak artırabilirsiniz.İpucu
Modül sürümleri sürüm denetimini etkinleştirir ve güncelleştirmeleri üretime dağıtmadan önce küçük bir cihaz kümesinde değişiklikleri test etmenizi sağlar. Derleme ve gönderme işlemlerinden önce modül sürümünü yükseltmezseniz, kapsayıcı kayıt defterinizdeki depoya yazılır.
Değişikliklerinizi module.json dosyasına kaydedin.
Güncelleştirilmiş görüntüyü 0.0.2 sürüm etiketiyle derleyin ve gönderebilirsiniz. Örneğin, yerel kayıt defteri veya Azure kapsayıcı kayıt defteri için görüntüyü derleyip göndermek için aşağıdaki komutları kullanın:
# Build the container image for Linux and amd64 architecture.
dotnet publish --os linux --arch x64
# For local registry:
# Tag the image with version 0.0.2, x64 architecture, and the local registry.
docker tag filtermodule localhost:5000/filtermodule:0.0.2-amd64
# For Azure Container Registry:
# Tag the image with version 0.0.2, x64 architecture, and your container registry information. Replace **myacr** with your own registry name.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.2-amd64
deployment.template.json dosyasına bir kez daha sağ tıklayın ve "IoT Edge Çözümünü Oluştur ve Gönder"i seçin.
deployment.amd64.json dosyasını yeniden açın. Derleme ve gönderme komutunu yeniden çalıştırdığınızda derleme sisteminin yeni bir dosya oluşturmadığı dikkat edin. Bunun yerine, aynı dosya değişiklikleri yansıtacak şekilde güncelleştirilir. Filtermodule görüntüsü artık kapsayıcının 0.0.2 sürümünü gösterir.
Derleme ve gönderme komutunun ne yaptığını daha fazla doğrulamak için Azure portalına gidin ve kapsayıcı kayıt defterinize gidin. Kapsayıcı kayıt defterinizde Depolar'ı ve ardından filtermodule öğesini seçin. Görüntünün her iki sürümünün de kayıt defterine gönderildiğini doğrulayın.
Sorun giderme
Modül görüntünüzü oluştururken ve gönderdiğinizde hatalarla karşılaşırsanız, bunun genellikle geliştirme makinenizdeki Docker yapılandırmasıyla ilgili olması gerekir. Yapılandırmanızı gözden geçirmek için aşağıdaki denetimleri kullanın:
- Kapsayıcı kayıt defterinizden kopyaladığınız kimlik bilgilerini kullanarak komutu çalıştırdınız
docker loginmı? Bu kimlik bilgileri, Azure oturum açmak için kullanılanlardan farklıdır. - Konteyner deponuz doğru mu? Doğru kapsayıcı kayıt defteri adınız ve doğru modül adınız var mı? Denetlemek için filtermodule klasöründekimodule.json dosyasını açın. Depo değeri, registry name.azurecr.io/filtermodule< ile benzer> olmalıdır.
- Modülünüz için filtermodule'den farklı bir ad kullandıysanız bu ad çözüm genelinde tutarlı mı?
- Makineniz, oluşturduğunuz kapsayıcılarla aynı türde mi çalışıyor? Bu öğretici Linux IoT Edge cihazlar içindir, bu nedenle Visual Studio Code yan çubukta amd64 veya arm32v7 demesi ve Docker Desktop'ın Linux kapsayıcıları çalıştırıyor olması gerekir.
Modüller cihaza dağıtılır
Kapsayıcı kayıt defterinizde depolanan yerleşik kapsayıcı görüntüleri olduğunu doğruladınız, bu nedenle bunları bir cihaza dağıtmanın zamanı geldi. IoT Edge cihazınızın çalışır durumda olduğundan emin olun.
modülleri Azure IoT Hub dağıtmak için IoT Edge Azure CLI set-modules komutunu kullanın. Örneğin, deployment.template.json dosyasında tanımlanan modülleri IoT Hub my-iot-hub IoT Edge cihazı my-device dağıtmak için aşağıdaki komutu kullanın. hub-name, device-id ve login IoT Hub connection string değerlerini kendi değerlerinizle değiştirin.
az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
İpucu
Azure portalında, paylaşılan erişim anahtarı dahil olmak üzere IoT Hub bağlantı dizisini bulun. IoT Hub gidin ve Güvenlik ayarları > Paylaşılan erişim ilkeleri > iothubowner öğesini seçin.
Visual Studio Code gezgininde, Azure IoT Hub bölümünün altında Devices genişleterek IoT cihazları listenizi görün.
Dağıtmak istediğiniz IoT Edge cihaza sağ tıklayın, ardından Tek Cihaz için Dağıtım Oluştur öğesini seçin.
Dosya gezgininde yapılandırma klasörüne gidin ve deployment.amd64.json dosyasını seçin.
kapsayıcı kayıt defteri kimlik bilgilerine veya modül görüntüsü değerlerine sahip olmayan deployment.template.json dosyasını kullanmayın. Bir Linux ARM32 cihazını hedeflerseniz dağıtım bildiriminin adı deployment.arm32v7.jsonolur.
Dağıtılan ve çalışan modüllerin listesini görmek için cihazınızın altında Modüller'i genişletin. Yenile düğmesini seçin. Cihazınızda yeni tempSensor ve filtermodule modüllerinin çalıştığını görmeniz gerekir.
Modüllerin başlatılması birkaç dakika sürebilir. IoT Edge çalışma zamanı yeni dağıtım bildirimini alır, modül imajlarını kapsayıcı çalışma zamanından indirir ve ardından her yeni modülü başlatır.
Cihazdan iletileri görüntüleme
Örnek modül kodu, iletileri giriş kuyruğundan alır ve çıkış kuyruğu üzerinden gönderir. Dağıtım bildirimi, tempSensorfiltermodule adresine ileti gönderen yolları ayarlar ve ardından filtermodule'den iletileri IoT Hub iletir. Azure IoT Edge ve Azure IoT Hub uzantıları, cihazınızdan IoT Hub ulaşan iletileri görmenize olanak sağlar.
Visual Studio Code gezgininde, izlemek istediğiniz IoT Edge cihazı seçin ve ardından Yerleşik olay uç noktasını izlemeye başlayın öğesini seçin.
İletilerin IoT Hub ulaştığını görmek için Visual Studio Code çıkış penceresini izleyin.
Değişiklikleri cihazda görüntüleme
Cihazınızda neler olduğunu görmek için bu bölümdeki komutları kullanarak cihazınızda çalışan IoT Edge çalışma zamanını ve modülleri inceleyin.
Bu komutlar geliştirme makinenize değil IoT Edge cihazınıza yöneliktir. IoT Edge cihazınız için bir sanal makine kullanıyorsanız şimdi bu makineye bağlanın. Azure sanal makinenin genel bakış sayfasına gidin ve güvenli kabuk bağlantısına erişmek için Connect öğesini seçin.
Cihazınıza dağıtılan tüm modülleri görüntüleyin ve durumlarını denetleyin:
iotedge listDört modül görürsünüz: iki IoT Edge çalışma zamanı modülü, tempSensor ve filtermodule. Dördü de faaliyette olarak listelenmelidir.
Belirli bir modülün günlüklerini inceleyin:
iotedge logs <module name>Modül adları büyük/küçük harfe duyarlıdır.
tempSensor ve filtermodule günlükleri, işledikleri iletileri gösterir. edgeAgent modülü diğer modülleri başlattığından günlüklerinde dağıtım bildirimi hakkında bilgi bulunur. Modül listelenmiyorsa veya çalışmıyorsa edgeAgent günlükleri'ne hata olup olmadığını denetleyin. edgeHub modülü modüller ve IoT Hub arasındaki iletişimi yönetir. Modüller çalışıyor ancak iletiler IoT Hub ulaşmıyorsa edgeHub günlüklerinde hata olup olmadığını denetleyin.
Kaynakları temizleme
Bir sonraki önerilen makaleye devam etmek istiyorsanız, oluşturduğunuz kaynakları ve yapılandırmaları koruyun ve yeniden kullanın. Ayrıca test cihazıyla aynı IoT Edge cihazı kullanmaya devam edebilirsiniz. Aksi takdirde, ücretlerden kaçınmak için bu makalede kullandığınız yerel yapılandırmayı ve Azure kaynaklarını silin.
Azure kaynaklarını silme
Azure kaynakları ve kaynak gruplarını silme işlemini geri alamazsınız. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. IoT Hub tutmak istediğiniz kaynakları içeren mevcut bir kaynak grubunda oluşturduysanız, kaynak grubunu değil yalnızca IoT Hub kaynağı silin.
Kaynakları silmek için:
- Azure portalında oturum açın ve ardından Kaynak grupları'i seçin.
- IoT Edge test kaynaklarınızı içeren kaynak grubunun adını seçin.
- Kaynak grubunuzun içerdiği kaynakların listesini gözden geçirin. Tümünü silmek isterseniz Kaynak grubunu sil'i seçebilirsiniz. Yalnızca bazılarını silmek istiyorsanız, tek tek silmek için her kaynağı seçin.
Sonraki adımlar
Bu öğreticide, geliştirme makinenizde Visual Studio Code ayarlar ve IoT Edge cihazınız tarafından oluşturulan ham verileri filtreleyen kodla ilk IoT Edge modülünüzü dağıtırsınız.
Sonraki öğreticilere geçin ve Azure IoT Edge'in Azure bulut hizmetlerini uçta verileri işlemek ve analiz etmek için nasıl dağıtmanıza olanak tanıdığını öğrenin.