Öğretici: Bir arka uç hizmetinden cihazlarınızı yapılandırmakTutorial: Configure your devices from a back-end service

Cihazlarınızdan telemetri almanın yanı sıra cihazlarınızı arka uç hizmetinizden yapılandırmak isteyebilirsiniz.As well as receiving telemetry from your devices, you may need to configure your devices from your back-end service. Cihazlarınıza bir istenen yapılandırma gönderdiğinizde bu cihazlardan durum ve uyumluluk güncelleştirmeleri almak da isteyebilirsiniz.When you send a desired configuration to your devices, you may also want to receive status and compliance updates from those devices. Örneğin, bir cihaz için hedef çalışma sıcaklığı aralığı ayarlayabilir veya cihazlarınızdan üretici yazılımı sürüm bilgileri toplayabilirsiniz.For example, you might set a target operational temperature range for a device or collect firmware version information from your devices.

Bir cihaz ile IoT hub arasında durum bilgilerini eşitlemek için cihaz ikizlerini kullanırsınız.To synchronize state information between a device and an IoT hub, you use device twins. Cihaz ikizi, belirli bir cihazla ilişkili olan ve IoT Hub tarafından bunları sorgulayabileceğiniz bulutta depolanan bir JSON belgesidir.A device twin is a JSON document, associated with a specific device, and stored by IoT Hub in the cloud where you can query them. Bir cihaz ikizi istenen özellikleri, bildirilen özellikleri ve etiketleri içerir.A device twin contains desired properties, reported properties, and tags. İstenen özellikler arka uç uygulaması tarafından ayarlanır ve bir cihaz tarafından okunur.A desired property is set by a back-end application and read by a device. Bildirilen özellikler bir cihaz tarafından ayarlanır ve bir arka uç uygulaması tarafından okunur.A reported property is set by a device and read by a back-end application. Etiketler bir arka uç uygulaması tarafından oluşturulur ve asla bir cihaza gönderilmez.A tag is set by a back-end application and is never sent to a device. Cihazlarınızı düzenlemek için etiketleri kullanırsınız.You use tags to organize your devices. Bu öğreticide istenen ve bildirilen özellikleri kullanarak durum bilgilerini nasıl eşitleyebileceğiniz gösterilmiştir:This tutorial shows you how to use desired and reported properties to synchronize state information:

İkiz özeti

Bu öğreticide, aşağıdaki görevleri gerçekleştireceksiniz:In this tutorial, you perform the following tasks:

  • Bir IoT hub oluşturun ve kimlik kayıt defterine bir test cihazı ekleyin.Create an IoT hub and add a test device to the identity registry.
  • Durum bilgilerini simülasyon cihazınıza göndermek için istenen özellikleri kullanın.Use desired properties to send state information to your simulated device.
  • Simülasyon cihazınızdan toplanan durum bilgilerini almak için bildirilen özellikleri kullanın.Use reported properties to receive state information from your simulated device.

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 başlatın.Launch 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 içermesi gerekir.To complete this tutorial, your Azure subscription must contain 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 ayarlanmış bir IOT hub'ı zaten sahip değilseniz, birini aşağıdaki CLI betiği ile ayarlayabilirsiniz.If you don't already have an IoT hub set up in your subscription, you can set one up with the 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ç örneğinde 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 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 MyTwinDevice adlı bir simülasyon cihazı kullanılır.This tutorial uses a simulated device called MyTwinDevice. Aşağıdaki betik bu cihazı kimlik kayıt defterinize ekler ve bunun bağlantı dizesini alır:The following script adds this device to your identity registry 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 MyTwinDevice --hub-name $hubname --resource-group tutorial-iot-hub-rg

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

Durum bilgilerini göndermeSend state information

Bir arka uç uygulamasından bir cihaza durum bilgilerini göndermek için istenen özellikleri kullanırsınız.You use desired properties to send state information from a back-end application to a device. Bu bölümde şunları nasıl yapabileceğinizi öğrenirsiniz:In this section, you see how to:

  • Bir cihazda istenen özellikleri alma ve işleme.Receive and process desired properties on a device.
  • İstenen özellikleri bir arka uç uygulamasından gönderme.Send desired properties from a back-end application.

İstenen özellikleri alan simülasyon cihazı örnek kodunu görüntülemek için indirdiğiniz örnek Node.js projesinde iot-hub/Tutorials/DeviceTwins klasörüne gidin.To view the simulated device sample code that receives desired properties, navigate to the iot-hub/Tutorials/DeviceTwins 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.

Arka uç uygulamasından gönderilen istenen özellik değişikliklerine yanıt veren simülasyon cihazında çalışan kod aşağıdaki bölümlerde açıklanmıştır:The following sections describe the code that runs on the simulated device that responds to desired property changes sent from the back end application:

Cihaz ikizi nesnesini almaRetrieve the device twin object

Aşağıdaki kod bir cihaz bağlantı dizesi kullanarak IoT hub’ınıza bağlanır:The following code connects to your IoT hub using a device connection string:

// Get the device connection string from a command line argument
var connectionString = process.argv[2];

Aşağıdaki kod istemci nesnesinden bir ikiz alır:The following code gets a twin from the client object:

// Get the device twin
client.getTwin(function(err, twin) {
  if (err) {
    console.error(chalk.red('Could not get device twin'));
  } else {
    console.log(chalk.green('Device twin created'));

Örnek istenen özelliklerSample desired properties

İstenen özelliklerinizi uygulamanız için uygun olacak şekilde dilediğiniz gibi yapılandırabilirsiniz.You can structure your desired properties in any way that's convenient to your application. Bu örnekte fanOn adlı bir üst düzey özellik kullanılır ve geriye kalan özellikler ayrı components (bileşenler) olarak gruplandırılır.This example uses one top-level property called fanOn and groups the remaining properties into separate components. Aşağıdaki JSON parçacığında bu öğretici için kullanılan istenen özelliklerin yapısı gösterilmiştir:The following JSON snippet shows the structure of the desired properties this tutorial uses:

{
  "fanOn": "true",
  "components": {
    "system": {
      "id": "17",
      "units": "farenheit",
      "firmwareVersion": "9.75"
    },
    "wifi" : { 
      "channel" : "6",
      "ssid": "my_network"
    },
    "climate" : {
      "minTemperature": "68",
      "maxTemperature": "76"
    }
  }
}

İşleyiciler oluşturmaCreate handlers

İstenen özellik güncelleştirmeleri için JSON hiyerarşisinin farklı düzeylerindeki güncelleştirmelere yanıt veren işleyiciler oluşturabilirsiniz.You can create handlers for desired property updates that respond to updates at different levels in the JSON hierarchy. Örneğin, bu işleyici bir arka uç uygulamasından cihaza gönderilen tüm özellik değişikliklerini algılar.For example, this handler sees all desired property changes sent to the device from a back-end application. Delta değişkeni, çözüm arka ucundan gönderilen istenen özellikleri içerir:The delta variable contains the desired properties sent from the solution back end:

// Handle all desired property updates
twin.on('properties.desired', function(delta) {
    console.log(chalk.yellow('\nNew desired properties received in patch:'));

Aşağıdaki işleyici yalnızca fanOn istenen özelliğinde yapılan değişikliklere tepki verir:The following handler only reacts to changes made to the fanOn desired property:

// Handle changes to the fanOn desired property
twin.on('properties.desired.fanOn', function(fanOn) {
    console.log(chalk.green('\nSetting fan state to ' + fanOn));

    // Update the reported property after processing the desired property
    reportedPropertiesPatch.fanOn = fanOn ? fanOn : '{unknown}';
});

Birden çok özelliğe yönelik işleyicilerHandlers for multiple properties

Daha önce gösterilen örnek istenen özellikler JSON öğesinde components altındaki climate düğümü minTemperature ve maxTemperature şeklinde iki özellik içerir.In the example desired properties JSON shown previously, the climate node under components contains two properties, minTemperature and maxTemperature.

Bir cihazın yerel ikiz nesnesi istenen ve bildirilen özelliklerin eksiksiz bir kümesini depolar.A device's local twin object stores a complete set of desired and reported properties. Arka uçtan gönderilen delta, istenen özelliklerin yalnızca bir alt kümesini güncelleştirebilir.The delta sent from the back end might update just a subset of desired properties. Aşağıdaki kod parçacığında, simülasyon cihazı minTemperature ve maxTemperature özelliklerinden yalnızca biri için güncelleştirme alırsa cihazı yapılandırmak üzere diğer değer için yerel ikizdeki değeri kullanır:In the following code snippet, if the simulated device receives an update to just one of minTemperature and maxTemperature, it uses the value in the local twin for the other value to configure the device:

// Handle desired properties updates to the climate component
twin.on('properties.desired.components.climate', function(delta) {
    if (delta.minTemperature || delta.maxTemperature) {
      console.log(chalk.green('\nUpdating desired tempertures in climate component:'));
      console.log('Configuring minimum temperature: ' + twin.properties.desired.components.climate.minTemperature);
      console.log('Configuring maximum temperture: ' + twin.properties.desired.components.climate.maxTemperature);

      // Update the reported properties and send them to the hub
      reportedPropertiesPatch.minTemperature = twin.properties.desired.components.climate.minTemperature;
      reportedPropertiesPatch.maxTemperature = twin.properties.desired.components.climate.maxTemperature;
      sendReportedProperties();
    }
});

Yerel ikiz nesnesi istenen ve bildirilen özellikleri eksiksiz bir kümesini depolar.The local twin object stores a complete set of desired and reported properties. Arka uçtan gönderilen delta, istenen özelliklerin yalnızca bir alt kümesini güncelleştirebilir.The delta sent from the back end might update just a subset of desired properties.

Ekleme, güncelleştirme ve silme işlemlerini işlemeHandle insert, update, and delete operations

Arka uçtan gönderilen istenen özellikler belirli bir istenen özellik üzerinde hangi işlemin gerçekleştirildiğini göstermez.The desired properties sent from the back end don't indicate what operation is being performed on a particular desired property. Kodunuzun işlemi yerel olarak depolanan güncel istenen özellikler kümesinden ve hub’dan gönderilen değişikliklerden çıkarsaması gerekir.Your code needs to infer the operation from the current set of desired properties stored locally and the changes sent from the hub.

Aşağıdaki kod parçacığında, simülasyon cihazının istenen özelliklerde components listesindeki ekleme, güncelleştirme ve silme işlemlerini nasıl işlediği gösterilmiştir.The following snippet shows how the simulated device handles insert, update, and delete operations on the list of components in the desired properties. Bir bileşenin silinmesi gerektiğini belirtmek için nasıl null değerlerini kullanabileceğinizi görebilirsiniz:You can see how to use null values to indicate that a component should be deleted:

// Keep track of all the components the device knows about
var componentList = {};

// Use this componentList list and compare it to the delta to infer
// if anything was added, deleted, or updated.
twin.on('properties.desired.components', function(delta) {
  if (delta === null) {
    componentList = {};
  }
  else {
    Object.keys(delta).forEach(function(key) {

      if (delta[key] === null && componentList[key]) {
        // The delta contains a null value, and the
        // device has a record of this component.
        // Must be a delete operation.
        console.log(chalk.green('\nDeleting component ' + key));
        delete componentList[key];

      } else if (delta[key]) {
        if (componentList[key]) {
          // The delta contains a component, and the
          // device has a record of it.
          // Must be an update operation.
          console.log(chalk.green('\nUpdating component ' + key + ':'));
          console.log(JSON.stringify(delta[key]));
          // Store the complete object instead of just the delta
          componentList[key] = twin.properties.desired.components[key];

        } else {
          // The delta contains a component, and the
          // device has no record of it.
          // Must be an add operation.
          console.log(chalk.green('\nAdding component ' + key + ':'));
          console.log(JSON.stringify(delta[key]));
          // Store the complete object instead of just the delta
          componentList[key] = twin.properties.desired.components[key];
        }
      }
    });
  }
});

Arka uçtan bir cihaza istenen özellikler göndermeSend desired properties to a device from the back end

Bir cihazın istenen özellik güncelleştirmelerini almak için nasıl işleyici uyguladığını gördünüz.You've seen how a device implements handlers for receiving desired property updates. Bu bölümde, bir arka uç uygulamasından bir cihaza nasıl istenen özellik değişiklikleri gönderilebileceği gösterilmiştir.This section shows you how to send desired property changes to a device from a back-end application.

İstenen özellikleri alan simülasyon cihazı örnek kodunu görüntülemek için indirdiğiniz örnek Node.js projesinde iot-hub/Tutorials/DeviceTwins klasörüne gidin.To view the simulated device sample code that receives desired properties, navigate to the iot-hub/Tutorials/DeviceTwins 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.

Aşağıdaki kod parçacığında cihaz kimliği kayıt defterine bağlanıp belirli bir cihazın ikizine nasıl erişilebileceği gösterilmiştir:The following code snippet shows how to connect to the device identity registry and access the twin for a specific device:

// Create a device identity registry object
var registry = Registry.fromConnectionString(connectionString);

// Get the device twin and send desired property update patches at intervals.
// Print the reported properties after some of the desired property updates.
registry.getTwin(deviceId, async (err, twin) => {
  if (err) {
    console.error(err.message);
  } else {
    console.log('Got device twin');

Aşağıdaki kod parçacığında arka uç uygulamasının cihaza gönderdiği farklı istenen özellik patches (düzeltme ekleri) gösterilmiştir:The following snippet shows different desired property patches the back end application sends to the device:

// Turn the fan on
var twinPatchFanOn = {
  properties: {
    desired: {
      patchId: "Switch fan on",
      fanOn: "false",
    }
  }
};

// Set the maximum temperature for the climate component
var twinPatchSetMaxTemperature = {
  properties: {
    desired: {
      patchId: "Set maximum temperature",
      components: {
        climate: {
          maxTemperature: "92"
        }
      }
    }
  }
};

// Add a new component
var twinPatchAddWifiComponent = {
  properties: {
    desired: {
      patchId: "Add WiFi component",
      components: {
        wifi: { 
          channel: "6",
          ssid: "my_network"
        }
      }
    }
  }
};

// Update the WiFi component
var twinPatchUpdateWifiComponent = {
  properties: {
    desired: {
      patchId: "Update WiFi component",
      components: {
        wifi: { 
          channel: "13",
          ssid: "my_other_network"
        }
      }
    }
  }
};

// Delete the WiFi component
var twinPatchDeleteWifiComponent = {
  properties: {
    desired: {
      patchId: "Delete WiFi component",
      components: {
        wifi: null
      }
    }
  }
};

Aşağıdaki kod parçacığında arka uç uygulamasının bir cihaza nasıl istenen özellik güncelleştirmesi gönderdiği gösterilmiştir:The following snippet shows how the back-end application sends a desired property update to a device:

// Send a desired property update patch
async function sendDesiredProperties(twin, patch) {
  twin.update(patch, (err, twin) => {
    if (err) {
      console.error(err.message);
    } else {
      console.log(chalk.green(`\nSent ${twin.properties.desired.patchId} patch:`));
      console.log(JSON.stringify(patch, null, 2));
    }
  });
}

Uygulamaları çalıştırmaRun the applications

Bu bölümde, bir arka uç uygulamasının bir simülasyon cihazı uygulamasına istenen özellik güncelleştirmeleri gönderişini izlemek için iki örnek uygulama çalıştırırsınız.In this section, you run two sample applications to observe as a back-end application sends desired property updates to a simulated device application.

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/DeviceTwins klasörüne gidin.To run the simulated device application, open a shell or command prompt window and navigate to the iot-hub/Tutorials/DeviceTwins 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/DeviceTwins klasörüne gidin.Then navigate to the iot-hub/Tutorials/DeviceTwins 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ış gösterilmiş ve uygulamanın maxTemperature istenen özelliğine yönelik bir güncelleştirmeyi nasıl işlediği vurgulanmıştır.The following screenshot shows the output from the simulated device application and highlights how it handles an update to the maxTemperature desired property. Her iki üst düzey işleyicinin ve iklim bileşeni işleyicilerinin nasıl çalıştığını görebilirsiniz:You can see how both the top-level handler and the climate component handlers run:

Sanal cihaz

Aşağıdaki ekran görüntüsünde arka uç uygulamasından alınan çıkış gösterilmiş ve uygulamanın maxTemperature istenen özelliğine yönelik bir güncelleştirmeyi nasıl gönderdiği vurgulanmıştır:The following screenshot shows the output from the back-end application and highlights how it sends an update to the maxTemperature desired property:

Arka uç uygulaması

Durum bilgilerini almaReceive state information

Arka uç uygulamanız durum bilgilerini bir cihazdan bildirilen özellikler olarak alır.Your back-end application receives state information from a device as reported properties. Bir cihaz, bildirilen özellikleri ayarlar ve hub’ınıza gönderir.A device sets the reported properties, and sends them to your hub. Bir arka uç uygulaması, hub'ınızda depolanan cihaz ikizinden bildirilen özelliklerin geçerli değerlerini okuyabilir.A back-end application can read the current values of the reported properties from the device twin stored in your hub.

Bir cihazdan bildirilen özellikler göndermeSend reported properties from a device

Bildirilen özellik değerlerine düzeltme eki olarak güncelleştirmeler gönderebilirsiniz.You can send updates to reported property values as a patch. Aşağıdaki kod parçacığında simülasyon cihazının gönderdiği düzeltme eki için bir şablon gösterilmiştir.The following snippet shows a template for the patch the simulated device sends. Simülasyon cihazı hub’a göndermeden önce düzeltme ekinin alanlarını güncelleştirir:The simulated device updates the fields in the patch before sending it to the hub:

// Create a patch to send to the hub
var reportedPropertiesPatch = {
  firmwareVersion:'1.2.1',
  lastPatchReceivedId: '',
  fanOn:'',
  minTemperature:'',
  maxTemperature:''
};

Simülasyon cihazı bildirilen özellikleri içeren düzeltme ekini hub’a göndermek için aşağıdaki işlevi kullanır:The simulated device uses the following function to send the patch that contains the reported properties to the hub:

// Send the reported properties patch to the hub
function sendReportedProperties() {
  twin.properties.reported.update(reportedPropertiesPatch, function(err) {
    if (err) throw err;
    console.log(chalk.blue('\nTwin state reported'));
    console.log(JSON.stringify(reportedPropertiesPatch, null, 2));
  });
}

Bildirilen özellikleri işlemeProcess reported properties

Bir arka uç uygulaması cihaz ikizi aracılığıyla bir cihazın geçerli bildirilen özellik değerlerine erişir.A back-end application accesses the current reported property values for a device through the device twin. Aşağıdaki kod parçacığında arka uç uygulamasının sanal cihaz için bildirilen özellik değerlerini nasıl okuduğu gösterilmiştir:The following snippet shows you how the back-end application reads the reported property values for the simulated device:

// Display the reported properties from the device
function printReportedProperties(twin) {
  console.log("Last received patch: " + twin.properties.reported.lastPatchReceivedId);
  console.log("Firmware version: " + twin.properties.reported.firmwareVersion);
  console.log("Fan status: " + twin.properties.reported.fanOn);
  console.log("Min temperature set: " + twin.properties.reported.minTemperature);
  console.log("Max temperature set: " + twin.properties.reported.maxTemperature);
}

Uygulamaları çalıştırmaRun the applications

Bu bölümde, bir simülasyon cihazı uygulamasının bir arka uç uygulamasına bildirilen özellik güncelleştirmeleri gönderişini izlemek için iki örnek uygulama çalıştırırsınız.In this section, you run two sample applications to observe as a simulated device application sends reported property updates to a back-end application.

İstenen özelliklerin bir cihaza nasıl gönderildiğini görmek için çalıştırdığınız iki örnek uygulamayı çalıştırırsınız.You run the same two sample applications that you ran to see how desired properties are sent to a 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/DeviceTwins klasörüne gidin.To run the simulated device application, open a shell or command prompt window and navigate to the iot-hub/Tutorials/DeviceTwins 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/DeviceTwins klasörüne gidin.Then navigate to the iot-hub/Tutorials/DeviceTwins 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ış gösterilmiş ve uygulamanın hub’ınıza nasıl bir bildirilen özellik güncelleştirmesi gönderdiği vurgulanmıştır:The following screenshot shows the output from the simulated device application and highlights how it sends a reported property update to your hub:

Sanal cihaz

Aşağıdaki ekran görüntüsünde, arka uç uygulaması çıktısını gösterir ve nasıl alır ve bir CİHAZDAN bir bildirilen özellik güncelleştirme işler vurgular:The following screenshot shows the output from the back-end application and highlights how it receives and processes a reported property update from a device:

Arka uç uygulaması

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, cihazınız ile IoT hub’ınız arasında durum bilgilerini nasıl eşitleyebileceğinizi öğrendiniz.In this tutorial, you learned how to synchronize state information between your devices and your IoT hub. Cihaz ikizlerini kullanarak üretici yazılımı güncelleştirme işlemi uygulamayı öğrenmek için bir sonraki öğreticiye geçin.Advance to the next tutorial to learn how to use device twins to implement a firmware update process.