Öğretici: Azure dijital TWINS önizlemesi ile derleme ve izleme çalışma koşullarınızı sağlamaTutorial: Provision your building and monitor working conditions with Azure Digital Twins Preview

Bu öğreticide, Azure Digital TWINS önizlemesi 'ni kullanarak istediğiniz sıcaklık koşulları ve rahatlık düzeyi için boşlukların nasıl izleneceği gösterilmektedir.This tutorial demonstrates how to use Azure Digital Twins Preview to monitor your spaces for desired temperature conditions and comfort level. Örnek yapıınızıyapılandırdıktan sonra, bu öğreticideki adımları kullanarak, oluşturma ve algılayıcı verilerinize özel işlevler çalıştırma sağlayabilirsiniz.After you configure your sample building, you can provision your building and run custom functions on your sensor data by using the steps in this tutorial.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:In this tutorial, you learn how to:

  • İzlenecek koşulları tanımlayın.Define conditions to monitor.
  • Kullanıcı tanımlı bir işlev (UDF) oluşturun.Create a user-defined function (UDF).
  • Algılayıcı verilerinin benzetimini yapın.Simulate sensor data.
  • Kullanıcı tanımlı bir işlevin sonuçlarını alın.Get results of a user-defined function.

ÖnkoşullarPrerequisites

Bu öğreticide, Azure dijital TWINS kurulumunuzu tamamladığınızvarsayılmaktadır.This tutorial assumes that you have finished your Azure Digital Twins setup. Devam etmeden önce aşağıdakilere sahip olduğunuzdan emin olun:Before proceeding, make sure that you have:

İpucu

Yeni bir örnek sağlıyorsanız benzersiz bir dijital TWINS örnek adı kullanın.Use a unique Digital Twins instance name if you're provisioning a new instance.

İzleme koşullarını tanımlamaDefine conditions to monitor

Eşlemeolarak adlandırılan cihaz veya algılayıcı verilerinde izlenecek belirli koşullar kümesini tanımlayabilirsiniz.You can define a set of specific conditions to monitor in the device or sensor data, called matchers. Ardından, Kullanıcı tanımlı işlevleradlı işlevleri tanımlayabilirsiniz.You can then define functions called user-defined functions. Kullanıcı tanımlı işlevler, boşluklarla ve cihazlarınızdan gelen veriler üzerinde özel mantık yürütür ve bu durum, Matchers tarafından belirtilen koşullardır.User-defined functions execute custom logic on data that comes from your spaces and devices, when the conditions specified by the matchers occur. Daha fazla bilgi için, veri işleme ve Kullanıcı tanımlı işlevleriokuyun.For more information, read Data processing and user-defined functions.

İs-QuickStart örnek projesinden, Visual Studio Code içinde Src\actions\provisionsample.exe adlı dosyayı açın.From the occupancy-quickstart sample project, open the file src\actions\provisionSample.yaml in Visual Studio Code. matchers türü ile başlayan bölümü bulun.Note the section that begins with the type matchers. Bu tür altındaki her giriş, belirtilen adasahip bir Eşleştiricisi oluşturur.Each entry under this type creates a matcher with the specified Name. Eşleştiricisi, datatypevaluetüründe bir algılayıcı izler.The matcher will monitor a sensor of type dataTypeValue. Birkaç algılayıcı içeren bir cihazlar düğümüne sahip olan, odak odası a1adlı alanla nasıl ilişkili olduğuna dikkat edin.Notice how it relates to the space named Focus Room A1, which has a devices node that contains a few sensors. Bu sensörlerden birini izleyecek bir eşleştirici sağlamak için, Datatypevalue değerinin algılayıcı veri türüyleeşleştiğinden emin olun.To provision a matcher that will track one of these sensors, make sure that its dataTypeValue matches the sensor's dataType.

Aşağıdaki eşleştiriciyi mevcut eşleştiriciler altına ekleyin.Add the following matcher below the existing matchers. Anahtarların hizalandığından ve boşlukların sekmeyle değiştirilmediğinden emin olun.Make sure the keys are aligned and spaces are not replaced by tabs. Bu satırlar ayrıca, Provisionsample. YAML dosyasında, açıklamalı çizgiler olarak da mevcuttur.These lines are also present in the provisionSample.yaml file as commented-out lines. Her satırın önündeki # karakterini kaldırarak bu açıklamaları özelleştirebilirsiniz.You can uncomment them by removing the # character in front of each line.

      - name: Matcher Temperature
        dataTypeValue: Temperature

Bu Eşleştiricisi , ilk öğreticideeklediğiniz SAMPLE_SENSOR_TEMPERATURE algılayıcıyı izler.This matcher will track the SAMPLE_SENSOR_TEMPERATURE sensor that you added in the first tutorial.

Kullanıcı tanımlı işlev oluşturmaCreate a user-defined function

Algılayıcı verilerinizin işlenmesini özelleştirmek için Kullanıcı tanımlı işlevleri kullanabilirsiniz.You can use user-defined functions to customize the processing of your sensor data. Bunlar, eşleştiriciler tarafından açıklanan belirli koşullar gerçekleştiğinde, Azure dijital TWINS Örneğinizde çalışabilecek özel JavaScript kodlarıdır.They're custom JavaScript code that can run within your Azure Digital Twins instance, when specific conditions as described by the matchers occur. İzlemek istediğiniz her algılayıcı için eşleştiriciler ve Kullanıcı tanımlı işlevler oluşturabilirsiniz.You can create matchers and user-defined functions for each sensor that you want to monitor. Daha fazla bilgi için, veri işleme ve Kullanıcı tanımlı işlevleriokuyun.For more information, read Data processing and user-defined functions.

Örnek provisionsample. YAML dosyasında, UserDefinedFunctionstüründe başlayan bir bölüm bulun.In the sample provisionSample.yaml file, look for a section that begins with the type userdefinedfunctions. Bu bölüm, belirli bir adasahip kullanıcı tanımlı bir işlev sağlar.This section provisions a user-defined function with a given Name. Bu UDF, Matchernamesaltındaki eşleştiriciler listesi üzerinde çalışır.This UDF acts on the list of matchers under matcherNames. UDF için kendi JavaScript dosyanızı script bölümünde sağlayabilirsiniz.Notice how you can provide your own JavaScript file for the UDF as the script.

Ayrıca roleassignments adlı bölüme de dikkat edin.Also note the section named roleassignments. Kullanıcı tanımlı işleve alan yöneticisi rolünü atar.It assigns the Space Administrator role to the user-defined function. Bu rol, sağlanan boşlukların herhangi birinden gelen olaylara erişmesine izin verir.This role allows it to access the events that come from any of the provisioned spaces.

  1. matcherNamesprovisionSample.yamladlı dosyanın düğümüne aşağıdaki satırı ekleyerek veya var olan satırın açıklamasını kaldırarak UDF'yi sıcaklık eşleştiricisini içerecek şekilde yapılandırın:Configure the UDF to include the temperature matcher by adding or uncommenting the following line in the matcherNames node of the provisionSample.yaml file:

            - Matcher Temperature
    
  2. Düzenleyicinizde Src\actions\userdefinedfunctions\kullanılabilirliği bility.exe dosyasını açın.Open the file src\actions\userDefinedFunctions\availability.js in your editor. Bu, Provisionsample. YAML komut dosyası öğesinde başvurulan dosyadır.This is the file referenced in the script element of provisionSample.yaml. Bu dosyadaki Kullanıcı tanımlı işlev, odada hiçbir hareket algılanmadığında ve karbon dioksit seviyelerinin 1.000 ppm 'dan daha düşük olduğu durumlar için arama yapar.The user-defined function in this file looks for conditions when no motion is detected in the room and carbon dioxide levels are below 1,000 ppm.

    Sıcaklık ve diğer koşulları izlemek için JavaScript dosyasını değiştirin.Modify the JavaScript file to monitor temperature and other conditions. Odada hiçbir hareket algılanmadığında koşullara bakmak için aşağıdaki kod satırlarını ekleyin; karbon dioksit seviyelerinin 1.000 ppm ve sıcaklığın 78 derece Fahrenbir süre altında olması gerekir.Add the following lines of code to look for conditions when no motion is detected in the room, carbon dioxide levels are below 1,000 ppm, and temperature is below 78 degrees Fahrenheit.

    Not

    Bu bölüm, Kullanıcı tanımlı bir işlevi yazmanın tek bir yolu hakkında bilgi edinmek için Src\actions\userdefinedfunctions\kullanılabilirliği bility.exe dosyasını değiştirir.This section modifies the file src\actions\userDefinedFunctions\availability.js so you can learn in detail one way to write a user-defined function. Ancak, src\actions\userDefinedFunctions\availabilityForTutorial.js dosyasını doğrudan kurulumda kullanmayı seçebilirsiniz.However, you can choose to directly use the file src\actions\userDefinedFunctions\availabilityForTutorial.js in your setup. Bu dosya, öğretici için gerekli olan tüm değişikliklere sahiptir.This file has all the changes required for this tutorial. Bunun yerine bu dosyayı kullanırsanız, Src\actions\provisionsample.exeyolunda betik anahtarı için doğru dosya adını kullandığınızdan emin olun.If you use this file instead, make sure to use the correct file name for the script key in src\actions\provisionSample.yaml.

    a.a. Dosyanın en üstünde, // Add your sensor type here açıklamasının altına sıcaklık için şu satırları ekleyin:At the top of the file, add the following lines for temperature below the comment // Add your sensor type here:

        var temperatureType = "Temperature";
        var temperatureThreshold = 78;
    

    b.b. var motionSensortanımlayan deyimden sonra, açıklamanın // Add your sensor variable herealtına aşağıdaki satırları ekleyin:Add the following lines after the statement that defines var motionSensor, below the comment // Add your sensor variable here:

       var temperatureSensor = otherSensors.find(function(element) {
           return element.DataType === temperatureType;
       });
    

    c.c. var carbonDioxideValuetanımlayan deyimden sonra, açıklamanın // Add your sensor latest value herealtına aşağıdaki satırı ekleyin:Add the following line after the statement that defines var carbonDioxideValue, below the comment // Add your sensor latest value here:

        var temperatureValue = getFloatValue(temperatureSensor.Value().Value);
    

    d.d. Şu kod satırlarını // Modify this line to monitor your sensor value açıklamasının altından kaldırın:Remove the following lines of code from below the comment // Modify this line to monitor your sensor value:

       if(carbonDioxideValue === null || motionValue === null) {
           sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide or motion are null, returning");
           return;
       }
    

    Bunları şu satırlarla değiştirin:Replace them with the following lines:

        if(carbonDioxideValue === null || motionValue === null || temperatureValue === null){
            sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide, motion, or temperature are null, returning");
            return;
        }
    

    e.e. Şu kod satırlarını // Modify these lines as per your sensor açıklamasının altından kaldırın:Remove the following lines of code from below the comment // Modify these lines as per your sensor:

        var availableFresh = "Room is available and air is fresh";
        var noAvailableOrFresh = "Room is not available or air quality is poor";
    

    Bunları şu satırlarla değiştirin:Replace them with the following lines:

        var alert = "Room with fresh air and comfortable temperature is available.";
        var noAlert = "Either room is occupied, or working conditions are not right.";
    

    f.f. Şu if-else kod bloğunu // Modify this code block for your sensor açıklamasının altından kaldırın:Remove the following if-else code block after the comment // Modify this code block for your sensor:

        // If carbonDioxide less than threshold and no presence in the room => log, notify and set parent space computed value
        if(carbonDioxideValue < carbonDioxideThreshold && !presence) {
            log(`${availableFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`);
            setSpaceValue(parentSpace.Id, spaceAvailFresh, availableFresh);
        }
        else {
            log(`${noAvailableOrFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`);
            setSpaceValue(parentSpace.Id, spaceAvailFresh, noAvailableOrFresh);
    
            // Set up custom notification for poor air quality
            parentSpace.Notify(JSON.stringify(noAvailableOrFresh));
        }
    

    Sonrasında şu if-else bloğuyla değiştirin:And replace it with the following if-else block:

        // If sensor values are within range and room is available
        if(carbonDioxideValue < carbonDioxideThreshold && temperatureValue < temperatureThreshold && !presence) {
            log(`${alert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`);
    
            // log, notify and set parent space computed value
            setSpaceValue(parentSpace.Id, spaceAvailFresh, alert);
    
            // Set up notification for this alert
            parentSpace.Notify(JSON.stringify(alert));
        }
        else {
            log(`${noAlert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`);
    
            // log, notify and set parent space computed value
            setSpaceValue(parentSpace.Id, spaceAvailFresh, noAlert);
        }
    

    Değiştirilen UDF, bir odanın kullanılabilir durumda olması, karbondioksit ve sıcaklık sınırlarının kabul edilen sınırlar içinde olması durumunu izler.The modified UDF will look for a condition where a room becomes available and has the carbon dioxide and temperature within tolerable limits. Bu koşul yerine getirildiğinde parentSpace.Notify(JSON.stringify(alert)); deyimiyle bir bildirim oluşturur.It will generate a notification with the statement parentSpace.Notify(JSON.stringify(alert)); when this condition is met. Sağlanan koşuldan bağımsız olarak izlenen alanın değerini ayarlayacak ve aşağıdaki iletiyi görüntüleyecektir.It will set the value of the monitored space regardless of whether the condition is met, with the corresponding message.

    g.g. Dosyayı kaydedin.Save the file.

  3. Bir komut penceresi açın ve Occupancy-quickstart\srcklasörüne gidin.Open a command window, and go to the folder occupancy-quickstart\src. Uzamsal zeka grafınızı ve Kullanıcı tanımlı işlevinizi sağlamak için aşağıdaki komutu çalıştırın:Run the following command to provision your spatial intelligence graph and user-defined function:

    dotnet run ProvisionSample
    

    Önemli

    Dijital TWINS yönetim API 'nize yetkisiz erişimi engellemek için, doluluk-hızlı başlangıç uygulaması Azure hesabı kimlik bilgilerinizle oturum açmanızı gerektirir.To prevent unauthorized access to your Digital Twins Management API, the occupancy-quickstart application requires you to sign in with your Azure account credentials. Kimlik bilgilerinizi kısa bir süre kaydeder, bu nedenle her çalıştırdığınızda oturum açmanız gerekmez.It saves your credentials for a brief period, so you might not need to sign in every time you run it. Bu program ilk kez çalıştığında ve bu tarihten sonra kaydettiğiniz kimlik bilgilerinizin süresi dolduğunda, uygulama sizi oturum açma sayfasına yönlendirir ve bu sayfaya girilecek oturuma özgü bir kod verir.The first time this program runs, and when your saved credentials expire after that, the application directs you to a sign-in page and gives a session-specific code to enter on that page. Azure hesabınızda oturum açmak için yönergeleri izleyin.Follow the prompts to sign in with your Azure account.

  4. Hesabınız doğrulandıktan sonra uygulama, provisionsample. YAMLiçinde yapılandırılmış şekilde örnek bir uzamsal grafik oluşturmaya başlar.After your account is authenticated, the application starts creating a sample spatial graph as configured in provisionSample.yaml. Sağlama bitene kadar bekleyin.Wait until the provisioning finishes. İşlem birkaç dakika sürer.It will take a few minutes. Bundan sonra, komut penceresindeki iletileri gözlemleyin ve uzamsal grafiklerinizin nasıl oluşturulduğuna dikkat edin.After that, observe the messages in the command window and notice how your spatial graph is created. Uygulamanın kök düğümde veya Venuebir IoT Hub 'ı nasıl oluşturduğunu fark edin.Notice how the application creates an IoT hub at the root node or the Venue.

  5. Komut penceresindeki çıktıdan, Devices bölümünün altındaki ConnectionStringdeğerini panonuza kopyalayın.From the output in the command window, copy the value of ConnectionString, under the Devices section, to your clipboard. Sonraki bölümde cihaz bağlantısının benzetimini yapmak için bu değere ihtiyacınız olacaktır.You'll need this value to simulate the device connection in the next section.

    sağlama örneğiProvision sample

İpucu

Hatanın ortasında "bir iş parçacığı çıkışı veya uygulama isteği nedeniyle g/ç işlemi iptal edildi" hatasıyla benzer bir hata iletisi alırsanız, komutu yeniden çalıştırmayı deneyin.If you get an error message similar to "The I/O operation has been aborted because of either a thread exit or an application request" in the middle of the provisioning, try running the command again. Bu durum, HTTP istemcisinin bir ağ sorunundan zaman aşımına uğramasından kaynaklanabilir.This might happen if the HTTP client timed out from a network issue.

Sensör verilerinin simülasyonunu yapmaSimulate sensor data

Bu bölümde, örnekte cihaz bağlantısı adlı projeyi kullanacaksınız.In this section, you'll use the project named device-connectivity in the sample. Hareket, sıcaklık ve karbon dioksit saptamak için algılayıcı verilerinin benzetimini yapabilirsiniz.You'll simulate sensor data for detecting motion, temperature, and carbon dioxide. Bu proje, sensörler için rastgele değerler oluşturur ve bunları cihaz bağlantı dizesini kullanarak IoT hub'a gönderir.This project generates random values for the sensors, and sends them to the IoT hub by using the device connection string.

  1. Ayrı bir komut penceresinde Azure dijital TWINS örneğine ve ardından cihaz bağlantısı klasörüne gidin.In a separate command window, go to the Azure Digital Twins sample and then to the device-connectivity folder.

  2. Projenizin bağımlılıklarının doğru olduğundan emin olmak için şu komutu çalıştırın:Run this command to make sure the dependencies for the project are correct:

    dotnet restore
    
  3. Düzenleyicinizde appSettings. JSON dosyasını açın ve aşağıdaki değerleri düzenleyin:Open the appsettings.json file in your editor, and edit the following values:

    a.a. DeviceConnectionString: Bir önceki bölümde çıktı penceresinde görünen ConnectionString değerini atayın.DeviceConnectionString: Assign the value of ConnectionString in the output window from the previous section. Bu dizeyi tırnak içinde tamamen kopyalayın, böylece simülatör IoT Hub ile düzgün bir şekilde bağlanabilir.Copy this string completely, within the quotes, so the simulator can connect properly with the IoT hub.

    b.b. Algılayıcılar dizisinin Içindeki HardwareID : Azure dijital TWINS Örneğinizde sağlanan sensörlerden olayları taklit ettiğiniz için, bu dosyadaki donanım kimliği ve algılayıcıların adları, provisionsample. YAML dosyasının sensors düğümüyle eşleşmelidir.HardwareId within the Sensors array: Because you're simulating events from sensors provisioned to your Azure Digital Twins instance, the hardware ID and the names of the sensors in this file should match the sensors node of the provisionSample.yaml file.

    Sıcaklık algılayıcısı için yeni bir giriş ekleyin.Add a new entry for the temperature sensor. AppSettings. JSON içindeki Algılayıcılar düğümü aşağıdaki gibi görünmelidir:The Sensors node in appsettings.json should look like the following:

    "Sensors": [{
      "DataType": "Motion",
      "HardwareId": "SAMPLE_SENSOR_MOTION"
    },{
      "DataType": "CarbonDioxide",
      "HardwareId": "SAMPLE_SENSOR_CARBONDIOXIDE"
    },{
      "DataType": "Temperature",
      "HardwareId": "SAMPLE_SENSOR_TEMPERATURE"
    }]
    
  4. Sıcaklık, hareket ve karbondioksit için cihaz olayı simülasyonunu başlatmak üzere şu komutu çalıştırın:Run this command to start simulating device events for temperature, motion, and carbon dioxide:

    dotnet run
    

    Not

    Simülasyon örneği doğrudan dijital TWINS örneğiniz ile iletişim kurmadığından, kimlik doğrulaması yapmanız gerekmez.Because the simulation sample does not directly communicate with your Digital Twins instance, it does not require you to authenticate.

Kullanıcı tanımlı işlevin sonuçlarını alGet results of the user-defined function

Örneğiniz cihaz ve sensör verilerini her aldığında kullanıcı tanımlı işlev çalışır.The user-defined function runs every time your instance receives device and sensor data. Bu bölüm, Kullanıcı tanımlı işlevin sonuçlarını almak için Azure dijital TWINS örneğinizi sorgular.This section queries your Azure Digital Twins instance to get the results of the user-defined function. Neredeyse gerçek zamanlı olarak, bir odanın yeni olduğunu ve sıcaklığın doğru olduğunu göreceksiniz.You'll see in near real time, when a room is available, that the air is fresh and temperature is right.

  1. Örneği veya yeni bir komut penceresini sağlamak için kullandığınız komut penceresini açın ve örneğin Occupancy-quickstart\src klasörüne yeniden gidin.Open the command window that you used to provision the sample, or a new command window, and go to the occupancy-quickstart\src folder of the sample again.

  2. Aşağıdaki komutu çalıştırın ve istendiğinde oturum açın:Run the following command and sign in when prompted:

    dotnet run GetAvailableAndFreshSpaces
    

Çıkış penceresi, Kullanıcı tanımlı işlevin cihaz benzetimine ait olayları nasıl yürüttüğünde gösterir.The output window shows how the user-defined function runs and intercepts events from the device simulation.

UDF için çıkışıOutput for the UDF

İzlenen koşul karşılanıyorsa, Kullanıcı tanımlı işlevi, daha öncegördüğünüz gibi ilgili iletiyle birlikte alanın değerini ayarlar.If the monitored condition is met, the user-defined function sets the value of the space with the relevant message, as we saw earlier. GetAvailableAndFreshSpaces işlevi, konsolundaki iletiyi yazdırır.The GetAvailableAndFreshSpaces function prints out the message on the console.

Kaynakları temizlemeClean up resources

Bu noktada Azure dijital İkizlerini keşfetmeye durdurmak istiyorsanız, bu öğreticide oluşturulan kaynakları silmek çekinmeyin:If you want to stop exploring Azure Digital Twins at this point, feel free to delete resources created in this tutorial:

  1. Sol menüden Azure portalındaseçin tüm kaynaklarıdijital İkizlerini kaynak grubunuzu seçin ve seçin Sil.From the left menu in the Azure portal, select All resources, select your Digital Twins resource group, and select Delete.

    İpucu

    Dijital İkizlerini örneğinizin silme sorun olduysa, bir hizmet güncelleştirmesi düzeltme alındı.If you experienced trouble deleting your Digital Twins instance, a service update has been rolled out with the fix. Örneğiniz silme yeniden deneyin.Please retry deleting your instance.

  2. Gerekirse, iş makinenizdeki örnek uygulamaları silin.If necessary, delete the sample applications on your work machine.

Sonraki adımlarNext steps

Artık alanları sağladığınıza ve özel bildirimleri tetiklemek için bir çerçeve oluşturduğunuza göre, aşağıdaki öğreticilerden birine gidebilirsiniz:Now that you have provisioned your spaces and created a framework to trigger custom notifications, you can go to either of the following tutorials: