Öğretici: Cihaz üretici yazılımı güncelleştirme işlemini uygulayınTutorial: Implement a device firmware update process

IoT hub'ınıza bağlı cihazların üretici yazılımını güncelleştirmeniz gerekebilir.You may need to update the firmware on the devices connected to your IoT hub. Örneğin üretici yazılımına yeni özellik eklemek veya güvenlik yaması uygulamak isteyebilirsiniz.For example, you might want to add new features to the firmware or apply security patches. Birçok IoT senaryosunda fiziksel cihazlarınızı ziyaret edip cihaz yazılımı güncelleştirmelerini el ile uygulamak zordur.In many IoT scenarios, it's impractical to physically visit and then manually apply firmware updates to your devices. Bu öğreticide hub'ınıza bağlı bir arka uç uygulaması üzerinden cihaz yazılımı güncelleştirme işlemini uzaktan başlatma ve izleme adımları anlatılmaktadır.This tutorial shows how you can start and monitor the firmware update process remotely through a back-end application connected to your hub.

Cihaz yazılımı güncelleştirme işlemini oluşturmak ve izlemek için bu öğreticideki arka uç uygulamasında IoT hub'ınızda bir yapılandırma oluşturulur.To create and monitor the firmware update process, the back-end application in this tutorial creates a configuration in your IoT hub. IoT Hub otomatik cihaz yönetimi bu yapılandırmayı kullanarak tüm soğutucu cihazlarınızdaki cihaz ikizi istenen özellikler kümesini güncelleştirir.IoT Hub automatic device management uses this configuration to update a set of device twin desired properties on all your chiller devices. İstenen özellikler, gerekli olan cihaz yazılımı güncelleştirmesinin ayrıntılarını belirtir.The desired properties specify the details of the firmware update that's required. Soğutucu cihazlar yazılım güncelleştirme işlemini çalıştırırken cihaz ikizi bildirilen özelliklerini kullanarak durumlarını arka uç uygulamasına bildirir.While the chiller devices are running the firmware update process, they report their status to the back-end application using device twin reported properties. Arka uç uygulaması bu yapılandırmayı kullanarak cihazdan gönderilen bildirilen özellikleri izleyebilir ve cihaz yazılımı güncelleştirme işlemini tamamlanıncaya kadar izleyebilir:The back-end application can use the configuration to monitor the reported properties sent from the device and track the firmware update process to completion:

Cihaz yazılımı güncelleştirme işlemi

Bu öğreticide, aşağıdaki görevleri tamamlayacaksınız:In this tutorial, you complete the following tasks:

  • Bir IoT hub oluşturun ve cihaz kimlik kayıt defterine bir test cihazı ekleyin.Create an IoT hub and add a test device to the device identity registry.
  • Cihaz yazılımı güncelleştirmesini tanımlamak için bir yapılandırma oluşturun.Create a configuration to define the firmware update.
  • Bir cihazdaki cihaz yazılımı güncelleştirme işleminin simülasyonunu yapın.Simulate the firmware update process on a device.
  • Cihaz yazılımı güncelleştirmesi devam ederken cihazdan durum güncelleştirmelerini alın.Receive status updates from the device as the firmware update progresses.

Azure Cloud Shell kullanmaUse Azure Cloud Shell

Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı Azure Cloud Shell.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell, ya da bash PowerShell Azure hizmetleriyle çalışmak için kullanmanıza olanak sağlar.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Bu makaledeki kodu, yerel ortamınıza herhangi bir şey yüklemeye gerek kalmadan çalıştırmak için Cloud Shell önceden yüklenmiş komutları kullanabilirsiniz.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell başlatmak için:To launch Azure Cloud Shell:

SeçenekOption Örnek/bağlantıExample/Link
Kod bloğunun sağ üst köşesindeki Deneyin’i seçin.Select Try It in the upper-right corner of a code block. Dene ' nin seçilmesi, kodu Cloud Shell otomatik olarak kopyalamaz.Selecting Try It doesn't automatically copy the code to Cloud Shell. Azure Cloud Shell için deneme örneği
Tarayıcınızda Cloud Shell açmak için Başlat Cloud Shell düğmesine gidin veyaseçin. https://shell.azure.comGo to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Cloud Shell yeni bir pencerede BaşlatLaunch Cloud Shell in a new window
Azure Portalsağ üstteki menü çubuğunda Cloud Shell düğmesini seçin.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Azure portaldaki Cloud Shell düğmesi

Bu makaledeki kodu Azure Cloud Shell çalıştırmak için:To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell'i açın.Open Cloud Shell.
  2. Kodu kopyalamak için bir kod bloğunda Kopyala düğmesini seçin.Select the Copy button on a code block to copy the code.
  3. Kodu Windows ve Linux 'ta CTRL+SHIFT+v veya MacOS 'ta cmd+Shift+v ile Cloud Shell oturumuna yapıştırın.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Kodu çalıştırmak için ENTER tuşuna basın.Press Enter to run the code.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.If you don’t have an Azure subscription, create a free account before you begin.

ÖnkoşullarPrerequisites

Bu hızlı başlangıçta çalıştırdığınız iki örnek uygulama, Node.js kullanılarak yazılır.The two sample applications you run in this quickstart are written using Node.js. Geliştirme makinenize Node.js v10.x.x veya sonraki bir sürümü gerekir.You need Node.js v10.x.x or later on your development machine.

nodejs.org adresinden birden fazla platform için Node.js’yi indirebilirsiniz.You can download Node.js for multiple platforms from nodejs.org.

Aşağıdaki komutu kullanarak geliştirme makinenizde geçerli Node.js sürümünü doğrulayabilirsiniz:You can verify the current version of Node.js on your development machine using the following command:

node --version

https://github.com/Azure-Samples/azure-iot-samples-node/archive/master.zip adresinden örnek Node.js projesini indirin ve ZIP arşivini ayıklayın.Download the sample Node.js project from https://github.com/Azure-Samples/azure-iot-samples-node/archive/master.zip and extract the ZIP archive.

Azure kaynakları ayarlamaSet up Azure resources

Bu öğreticiyi tamamlayabilmeniz için Azure aboneliğinizin cihaz kimliği kayıt defterine cihaz eklenmiş bir IOT hub olması gerekir.To complete this tutorial, your Azure subscription must have an IoT hub with a device added to the device identity registry. Cihaz kimliği kayıt defterindeki giriş, bu öğreticide çalıştırdığınız simülasyon cihazının hub’ınıza bağlanmasına imkan tanır.The entry in the device identity registry enables the simulated device you run in this tutorial to connect to your hub.

Aboneliğinizde zaten ayarlanmış bir IoT hub yoksa aşağıdaki CLI betiğiyle bir IoT hub ayarlayabilirsiniz.If you don't already have an IoT hub set up in your subscription, you can set one up with following CLI script. Bu betikte IoT hub için tutorial-iot-hub adı kullanılır ve betiği çalıştırırken bu adı kendi benzersiz adınızla değiştirmeniz gerekir.This script uses the name tutorial-iot-hub for the IoT hub, you should replace this name with your own unique name when you run it. Betik, kaynak grubunu ve hub’ı Orta ABD bölgesinde oluşturur ve bunu size daha yakın bir konum olacak şekilde değiştirebilirsiniz.The script creates the resource group and hub in the Central US region, which you can change to a region closer to you. Betik, IoT hub hizmetinizin arka uç örnek uygulamasında IoT hub’ınıza bağlanmak için kullanacağınız bağlantı dizesini döndürür:The script retrieves your IoT hub service connection string, which you use in the back-end sample application to connect to your IoT hub:

hubname=tutorial-iot-hub
location=centralus

# Install the IoT extension if it's not already installed
az extension add --name azure-cli-iot-ext

# Create a resource group
az group create --name tutorial-iot-hub-rg --location $location

# Create your free-tier IoT Hub. You can only have one free IoT Hub per subscription
az iot hub create --name $hubname --location $location --resource-group tutorial-iot-hub-rg --sku F1

# Make a note of the service connection string, you need it later
az iot hub show-connection-string --name $hubname -policy-name service -o table

Bu öğreticide MyFirmwareUpdateDevice adlı bir simülasyon cihazı kullanılır.This tutorial uses a simulated device called MyFirmwareUpdateDevice. Aşağıdaki betik bu cihazı cihaz kimliği kayıt defterinize ekler, bir etiket değeri belirler ve bunun bağlantı dizesini alır:The following script adds this device to your device identity registry, sets a tag value, and retrieves its connection string:

# Set the name of your IoT hub
hubname=tutorial-iot-hub

# Create the device in the identity registry
az iot hub device-identity create --device-id MyFirmwareUpdateDevice --hub-name $hubname --resource-group tutorial-iot-hub-rg

# Add a device type tag
az iot hub device-twin update --device-id MyFirmwareUpdateDevice --hub-name $hubname --set tags='{"devicetype":"chiller"}'

# Retrieve the device connection string, you need this later
az iot hub device-identity show-connection-string --device-id MyFirmwareUpdateDevice --hub-name $hubname --resource-group tutorial-iot-hub-rg -o table

İpucu

Bu komutları bir Windows komut isteminde veya Powershell isteminde çalıştırıyorsanız, JSON dizelerini alıntı yapma hakkında bilgi için azure-iot-cli-extension tips sayfasına bakın.If you run these commands at a Windows command prompt or Powershell prompt, see the azure-iot-cli-extension tips page for information about how to quote JSON strings.

Cihaz yazılımı güncelleştirmesini başlatmaStart the firmware update

devicetype etiketine sahip tüm soğutucularda cihaz yazılımı güncelleştirme işlemini başlatmak için arka uç uygulamasında bir otomatik cihaz yönetimi yapılandırması oluşturursunuz.You create an automatic device management configuration in the back-end application to begin the firmware update process on all devices tagged with a devicetype of chiller. Bu bölümde şunları nasıl yapabileceğinizi öğrenirsiniz:In this section, you see how to:

  • Arka uç uygulamasından yapılandırma oluşturma.Create a configuration from a back-end application.
  • İşi tamamlanana kadar izleme.Monitor the job to completion.

Cihaz yazılımı yükseltme işlemini arka uç uygulamasından başlatmak için istenen özellikleri kullanmaUse desired properties to start the firmware upgrade from the back-end application

Yapılandırmayı oluşturan arka uç uygulama kodunu görüntülemek için indirdiğiniz örnek Node.js projesindeki iot-hub/Tutorials/FirmwareUpdate klasörüne gidin.To view the back-end application code that creates the configuration, navigate to the iot-hub/Tutorials/FirmwareUpdate folder in the sample Node.js project you downloaded. Sonra ServiceClient.js dosyasını bir metin düzenleyicide açın.Then open the ServiceClient.js file in a text editor.

Arka uç uygulaması şu yapılandırmayı oluşturur:The back-end application creates the following configuration:

var firmwareConfig = {
  id: sampleConfigId,
  content: {
    deviceContent: {
      'properties.desired.firmware': {
        fwVersion: fwVersion,
        fwPackageURI: fwPackageURI,
        fwPackageCheckValue: fwPackageCheckValue
      }
    }
  },

  // Maximum of 5 metrics per configuration
  metrics: {
    queries: {
      current: 'SELECT deviceId FROM devices WHERE configurations.[[firmware285]].status=\'Applied\' AND properties.reported.firmware.fwUpdateStatus=\'current\'',
      applying: 'SELECT deviceId FROM devices WHERE configurations.[[firmware285]].status=\'Applied\' AND ( properties.reported.firmware.fwUpdateStatus=\'downloading\' OR properties.reported.firmware.fwUpdateStatus=\'verifying\' OR properties.reported.firmware.fwUpdateStatus=\'applying\')',
      rebooting: 'SELECT deviceId FROM devices WHERE configurations.[[firmware285]].status=\'Applied\' AND properties.reported.firmware.fwUpdateStatus=\'rebooting\'',
      error: 'SELECT deviceId FROM devices WHERE configurations.[[firmware285]].status=\'Applied\' AND properties.reported.firmware.fwUpdateStatus=\'error\'',
      rolledback: 'SELECT deviceId FROM devices WHERE configurations.[[firmware285]].status=\'Applied\' AND properties.reported.firmware.fwUpdateStatus=\'rolledback\''
    }
  },

  // Specify the devices the firmware update applies to
  targetCondition: 'tags.devicetype = \'chiller\'',
  priority: 20
};

Yapılandırma şu bölümlerden oluşur:The configuration includes the following sections:

  • content, seçilen cihazlara gönderilen cihaz yazılımının istenen özelliklerini belirtir.content specifies the firmware desired properties sent to the selected devices.
  • metrics, cihaz yazılımı güncelleştirmesinin durumunu bildiren sorguları belirtir.metrics specifies the queries to run that report the status of the firmware update.
  • targetCondition, cihaz yazılımı güncelleştirmesini alacak cihazları seçer.targetCondition selects the devices to receive the firmware update.
  • priorty, bu yapılandırmanın diğer yapılandırmalara göre önceliğini belirler.priorty sets the relative priority of this configuration to other configurations.

Arka uç uygulaması, istenen özellikleri ayarlayacak yapılandırmayı oluşturmak için aşağıdaki kodu kullanır:The back-end application uses the following code to create the configuration to set the desired properties:

var createConfiguration = function(done) {
  console.log();
  console.log('Add new configuration with id ' + firmwareConfig.id + ' and priority ' + firmwareConfig.priority);

  registry.addConfiguration(firmwareConfig, function(err) {
    if (err) {
      console.log('Add configuration failed: ' + err);
      done();
    } else {
      console.log('Add configuration succeeded');
      done();
    }
  });
};

Uygulama, yapılandırmayı oluşturduktan sonra cihaz yazılımı güncelleştirmesini izler:After it creates the configuration, the application monitors the firmware update:

var monitorConfiguration = function(done) {
  console.log('Monitor metrics for configuration: ' + sampleConfigId);
  setInterval(function(){
    registry.getConfiguration(sampleConfigId, function(err, config) {
      if (err) {
        console.log('getConfiguration failed: ' + err);
      } else {
        console.log('System metrics:');
        console.log(JSON.stringify(config.systemMetrics.results, null, '  '));
        console.log('Custom metrics:');
        console.log(JSON.stringify(config.metrics.results, null, '  '));
      }
    });
  }, 20000);
  done();
};

Yapılandırma raporu iki ölçüm türü bildirir:A configuration reports two types of metrics:

  • Hedeflenen cihaz sayısını ve güncelleştirmenin uygulandığı cihaz sayısını bildiren sistem ölçümleri.System metrics that report how many devices are targeted and how many devices have the update applied.
  • Yapılandırmaya eklediğiniz sorgular tarafından oluşturulan özel ölçümler.Custom metrics generated by the queries you add to the configuration. Bu öğreticide sorgular, güncelleştirme işleminin her aşamasındaki cihaz sayısını bildirmektedir.In this tutorial, the queries report how many devices are at each stage of the update process.

Cihazda, cihaz yazılımı yükseltme isteğine yanıt vermeRespond to the firmware upgrade request on the device

Arka uç uygulaması tarafından gönderilen cihaz yazılımı istenen özelliklerini işleyen cihaz kodu simülasyonunu görüntülemek için indirdiğiniz örnek Node.js projesindeki iot-hub/Tutorials/FirmwareUpdate klasörüne gidin.To view the simulated device code that handles the firmware desired properties sent from the back-end application, navigate to the iot-hub/Tutorials/FirmwareUpdate folder in the sample Node.js project you downloaded. Sonra SimulatedDevice.js dosyasını bir metin düzenleyicide açın.Then open the SimulatedDevice.js file in a text editor.

Cihaz simülasyon uygulaması, cihaz ikizindeki properties.desired.firmware istenen özellik güncelleştirmeleri için bir işleyici oluşturur.The simulated device application creates a handler for updates to the properties.desired.firmware desired properties in the device twin. İşleyicide, güncelleştirme işlemini başlatmadan önce istenen özellikler üzerinde bazı temel denetimler gerçekleştirir:In the handler, it carries out some basic checks on the desired properties before launching the update process:

// Handle firmware desired property updates - this triggers the firmware update flow
twin.on('properties.desired.firmware', function(fwUpdateDesiredProperties) {
  console.log(chalk.green('\nCurrent firmware version: ' + twin.properties.reported.firmware.currentFwVersion));
  console.log(chalk.green('Starting firmware update flow using this data:'));
  console.log(JSON.stringify(fwUpdateDesiredProperties, null, 2));
  desiredFirmwareProperties = twin.properties.desired.firmware;

  if (fwUpdateDesiredProperties.fwVersion == twin.properties.reported.firmware.currentFwVersion) {
    sendStatusUpdate('current', 'Firmware already up to date', function (err) {
      if (err) {
        console.error(chalk.red('Error occured sending status update : ' + err.message));
      }
      return;
    });
  }
  if (fwUpdateInProgress) {
    sendStatusUpdate('current', 'Firmware update already running', function (err) {
      if (err) {
        console.error(chalk.red('Error occured sending status update : ' + err.message));
      }
      return;
    });
  }
  if (!fwUpdateDesiredProperties.fwPackageURI.startsWith('https')) {
    sendStatusUpdate('error', 'Insecure package URI', function (err) {
      if (err) {
        console.error(chalk.red('Error occured sending status update : ' + err.message));
      }
      return;
    });
  }

  fwUpdateInProgress = true;

  sendStartingUpdate(fwUpdateDesiredProperties.fwVersion, function (err) {
    if (err) {
      console.error(chalk.red('Error occured sending starting update : ' + err.message));
    }
    return;
  });
  initiateFirmwareUpdateFlow(function(err, result) {
    fwUpdateInProgress = false;
    if (!err) {
      console.log(chalk.green('Completed firmwareUpdate flow. New version: ' + result));
      sendFinishedUpdate(result, function (err) {
        if (err) {
          console.error(chalk.red('Error occured sending finished update : ' + err.message));
        }
        return;
      });
    }
  }, twin.properties.reported.firmware.currentFwVersion);
});

Cihaz yazılımını güncelleştirmeUpdate the firmware

initiateFirmwareUpdateFlow işlevi, güncelleştirmeyi çalıştırır.The initiateFirmwareUpdateFlow function runs the update. Bu işlev, güncelleştirme işleminin aşamalarını sırasıyla çalıştırmak için waterfall işlevini kullanır.This function uses the waterfall function to run the phases of the update process in sequence. Bu örnekte cihaz yazılımı güncelleştirme işlemi dört aşamalıdır.In this example, the firmware update has four phases. Birinci aşama görüntüyü indirir, ikinci aşama sağlama toplamı kullanarak görüntüyü doğrular, üçüncü aşama görüntüyü uygular ve son aşama cihazı yeniden başlatır:The first phase downloads the image, the second phase verifies the image using a checksum, the third phase applies the image, and the last phase reboots the device:

// Implementation of firmwareUpdate flow
function initiateFirmwareUpdateFlow(callback, currentVersion) {

  async.waterfall([
    downloadImage,
    verifyImage,
    applyImage,
    reboot
  ], function(err, result) {
    if (err) {
      console.error(chalk.red('Error occured firmwareUpdate flow : ' + err.message));
      sendStatusUpdate('error', err.message, function (err) {
        if (err) {
          console.error(chalk.red('Error occured sending status update : ' + err.message));
        }
      });
      setTimeout(function() {
        console.log('Simulate rolling back update due to error');
        sendStatusUpdate('rolledback', 'Rolled back to: ' + currentVersion, function (err) {
          if (err) {
            console.error(chalk.red('Error occured sending status update : ' + err.message));
          }
        });
        callback(err, result);
      }, 5000);
    } else {
      callback(null, result);
    }
  });
}

Güncelleştirme işlemi sırasında simülasyon cihazı bildirilen özellikleri kullanarak ilerleme durumunu belirtir:During the update process, the simulated device reports on progress using reported properties:

// Firmware update patch
//  currentFwVersion: The firmware version currently running on the device.
//  pendingFwVersion: The next version to update to, should match what's
//                    specified in the desired properties. Blank if there
//                    is no pending update (fwUpdateStatus is 'current').
//  fwUpdateStatus:   Defines the progress of the update so that it can be
//                    categorized from a summary view. One of:
//     - current:     There is no pending firmware update. currentFwVersion should
//                    match fwVersion from desired properties.
//     - downloading: Firmware update image is downloading.
//     - verifying:   Verifying image file checksum and any other validations.
//     - applying:    Update to the new image file is in progress.
//     - rebooting:   Device is rebooting as part of update process.
//     - error:       An error occurred during the update process. Additional details
//                    should be specified in fwUpdateSubstatus.
//     - rolledback:  Update rolled back to the previous version due to an error.
//  fwUpdateSubstatus: Any additional detail for the fwUpdateStatus . May include
//                     reasons for error or rollback states, or download %.
//
// var twinPatchFirmwareUpdate = {
//   firmware: {
//     currentFwVersion: '1.0.0',
//     pendingFwVersion: '',
//     fwUpdateStatus: 'current',
//     fwUpdateSubstatus: '',
//     lastFwUpdateStartTime: '',
//     lastFwUpdateEndTime: ''
//   }
// };

Aşağıdaki kod parçacığı, indirme aşamasının uygulamasını gösterir.The following snippet shows the implementation of the download phase. İndirme aşamasında simülasyon cihazı durum bilgilerini arka uç uygulamasına göndermek için bildirilen özellikleri kullanır:During the download phase, the simulated device uses reported properties to send status information to the back-end application:

// Simulate downloading an image
function downloadImage(callback) {
  console.log('Simulating image download from: ' + desiredFirmwareProperties.fwPackageURI);

  async.waterfall([
    function(callback) {
      sendStatusUpdate('downloading', 'Start downloading', function (err) {
        if (err) {
          console.error(chalk.red('Error occured sending status update : ' + err.message));
        }
      });
      callback(null);
    },
    function(callback) {
      // Simulate a delay downloading the image.
      setTimeout(function() {
        // Simulate some firmware image data
        var imageData = '[Fake firmware image data]';
        callback(null, imageData); 
      }, 30000);
    },
    function(imageData, callback) {
      console.log('Downloaded image data: ' + imageData);
      sendStatusUpdate('downloading', 'Finished downloading', function (err) {
        if (err) {
          console.error(chalk.red('Error occured sending status update : ' + err.message));
        }
      });
      callback(null, imageData);
    }
  ], function (err, result) {
    callback(err, result);
  });
}

Örneği çalıştırmaRun the sample

Bu bölümde arka uç uygulamasının simülasyon cihazındaki cihaz yazılımı güncelleştirme işlemini yönetme amacıyla yapılandırmayı oluşturmasını gözlemlemek için iki örnek uygulama çalıştıracaksınız.In this section, you run two sample applications to observe as a back-end application creates the configuration to manage the firmware update process on the simulated device.

Simülasyon cihazını ve arka uç uygulamalarını çalıştırmak için cihaz ve hizmet bağlantı dizelerine sahip olmanız gerekir.To run the simulated device and back-end applications, you need the device and service connection strings. Bu öğreticinin başlangıcında kaynakları oluştururken bağlantı dizelerini not almıştınız.You made a note of the connection strings when you created the resources at the start of this tutorial.

Simülasyon cihazı uygulamasını çalıştırmak için bir kabuk veya komut istemi penceresi açın ve indirdiğiniz Node.js projesinin iot-hub/Tutorials/FirmwareUpdate klasörüne gidin.To run the simulated device application, open a shell or command prompt window and navigate to the iot-hub/Tutorials/FirmwareUpdate folder in the Node.js project you downloaded. Sonra aşağıdaki komutları çalıştırın:Then run the following commands:

npm install
node SimulatedDevice.js "{your device connection string}"

Arka uç uygulamasını çalıştırmak için başka bir kabuk veya komut istemi penceresi açın.To run the back-end application, open another shell or command prompt window. Sonra indirdiğiniz Node.js projesindeki iot-hub/Tutorials/FirmwareUpdate klasörüne gidin.Then navigate to the iot-hub/Tutorials/FirmwareUpdate folder in the Node.js project you downloaded. Sonra aşağıdaki komutları çalıştırın:Then run the following commands:

npm install
node ServiceClient.js "{your service connection string}"

Aşağıdaki ekran görüntüsünde simülasyon cihazı uygulamasından alınan çıkış ve arka uç uygulamasının cihaz yazılımı istenen özellik güncelleştirmesine verdiği yanıt gösterilmiştir:The following screenshot shows the output from the simulated device application and shows how it responds to the firmware desired properties update from the back-end application:

Sanal cihaz

Aşağıdaki ekran görüntüsünde arka uç uygulamasından alınan çıkış gösterilmiş ve uygulamanın cihaz yazılımının istenen özelliklerini güncelleştirmek için yapılandırmayı nasıl oluşturduğu vurgulanmıştır:The following screenshot shows the output from the back-end application and highlights how it creates the configuration to update the firmware desired properties:

Arka uç uygulaması

Aşağıdaki ekran görüntüsünde arka uç uygulamasından alınan çıkış gösterilmiş ve uygulamanın simülasyon cihazından cihaz yazılımı güncelleştirme ölçümlerini nasıl izlediği vurgulanmıştır:The following screenshot shows the output from the back-end application and highlights how it monitors the firmware update metrics from the simulated device:

Arka uç uygulaması

Oluşturma sırasında otomatik cihaz yapılandırmaları çalıştırır ve ardından her beş dakikada güncelleştirme her durumu görebilirsiniz değil çünkü arka uç uygulaması için gönderilir.Because automatic device configurations run at creation time and then every five minutes, you may not see every status update sent to the back-end application. Ölçümleri portalda görüntülemek için IoT Hub'ınızın Automatic device management -> IoT device configuration (Otomatik cihaz yönetimi -> IoT cihazı yapılandırması) bölümüne gidin:You can also view the metrics in the portal in the Automatic device management -> IoT device configuration section of your IoT hub:

Yapılandırmayı portalda görüntüleme

Kaynakları temizlemeClean up resources

Sonraki öğreticiyi tamamlamayı planlıyorsanız, kaynak grubunu ve IoT hub’ı değiştirmeden bırakın ve sonra bunları yeniden kullanın.If you plan to complete the next tutorial, leave the resource group and IoT hub and reuse them later.

Artık gerekli değilse portaldan IoT hub’ı ve kaynak grubunu silin.If you don't need the IoT hub any longer, delete it and the resource group in the portal. Bunu yapmak için, IoT hub’ınızı içeren tutorial-iot-hub-rg kaynak grubunu seçin ve Sil’e tıklayın.To do so, select the tutorial-iot-hub-rg resource group that contains your IoT hub and click Delete.

Alternatif olarak, CLI kullanın:Alternatively, use the CLI:

# Delete your resource group and its contents
az group delete --name tutorial-iot-hub-rg

Sonraki adımlarNext steps

Bu öğreticide bağlı cihazlarınıza, cihaz yazılımı güncelleştirme işlemi uygulamayı öğrendiniz.In this tutorial, you learned how to implement a firmware update process for your connected devices. Cihaz bağlantısını test etmek için Azure IOT hub'ı portal araçları ve Azure CLI komutlarını kullanma hakkında bilgi edinmek için sonraki öğreticiye ilerleyin.Advance to the next tutorial to learn how to use Azure IoT Hub portal tools and Azure CLI commands to test device connectivity.