Tutorial: Menyediakan bangunan Anda dan memantau kondisi kerja dengan Pratinjau Azure Digital Twins

Penting

Versi baru layanan Azure Digital Twins telah dirilis. Mengingat kemampuan layanan baru yang diperluas, layanan Azure Digital Twins asli (dijelaskan dalam set dokumentasi ini) telah dihentikan.

Untuk melihat dokumentasi layanan baru, kunjungi Dokumentasi Azure Digital Twins aktif.

Tutorial ini menunjukkan cara menggunakan Pratinjau Azure Digital Twins untuk memantau ruang Anda untuk kondisi suhu dan tingkat kenyamanan yang diinginkan. Setelah mengonfigurasi pembuatan sampel, Anda dapat memprovisikan bangunan dan menjalankan fungsi kustom pada data sensor Anda dengan menggunakan langkah-langkah dalam tutorial ini.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Tentukan kondisi yang akan dipantau.
  • Membuat fungsi yang ditentukan pengguna (UDF).
  • Mensimulasikan data sensor.
  • Mendapatkan hasil fungsi yang ditentukan pengguna.

Prasyarat

Tutorial ini mengasumsikan bahwa Anda telah menyelesaikan penyiapan Azure Digital Twins Anda. Sebelum melanjutkan, pastikan Anda memiliki:

Tip

Gunakan nama instans Digital Twins yang unik jika Anda menyediakan instans baru.

Tentukan kondisi untuk dipantau

Anda dapat menentukan serangkaian kondisi tertentu untuk dipantau dalam data perangkat atau sensor, yang disebut pencocokan. Anda kemudian dapat menentukan fungsi yang disebut fungsi yang ditentukan pengguna. Fungsi yang ditentukan pengguna menjalankan logika kustom pada data yang berasal dari ruang dan perangkat Anda, ketika kondisi yang ditentukan oleh pencocokan terjadi. Untuk informasi selengkapnya, baca Pemrosesan data dan fungsi yang ditentukan pengguna.

Dari proyek sampel occupancy-quickstart, buka file src\actions\provisionSample.yaml di Visual Studio Code. Perhatikan bagian yang dimulai dengan pencocokan jenis. Setiap entri di bawah jenis ini membuat pencocok dengan Nama yang ditentukan. Pencocok akan memantau sensor jenis dataTypeValue. Perhatikan bagaimana hubungannya dengan ruang bernama Ruang Fokus A1, yang memiliki simpul perangkat yang berisi beberapa sensor. Untuk menyediakan pencocokan yang akan melacak salah satu sensor ini, pastikan dataTypeValue-nya cocok dengan dataType sensor.

Tambahkan pencocokan berikut di bawah pencocokan yang ada. Pastikan kunci diratakan dan spasi tidak digantikan oleh tab. Baris ini juga ada dalam file provisionSample.yaml sebagai baris yang dikomentari. Anda dapat membatalkan komentar dengan menghapus # karakter di depan setiap baris.

      - name: Matcher Temperature
        dataTypeValue: Temperature

Pencocok ini akan melacak SAMPLE_SENSOR_TEMPERATURE sensor yang Anda tambahkan di tutorial pertama.

Membuat fungsi yang ditentukan pengguna

Anda dapat menggunakan fungsi yang ditentukan pengguna untuk menyesuaikan pemrosesan data sensor Anda. Mereka adalah kode JavaScript kustom yang dapat berjalan dalam instans Azure Digital Twins Anda, saat kondisi tertentu seperti yang dijelaskan oleh pencocokan terjadi. Anda dapat membuat pencocokan dan fungsi yang ditentukan pengguna untuk setiap sensor yang ingin Anda pantau. Untuk informasi selengkapnya, baca Pemrosesan data dan fungsi yang ditentukan pengguna.

Dalam contoh file provisionSample.yaml , cari bagian yang dimulai dengan jenis userdefinedfunctions. Bagian ini menyediakan fungsi yang ditentukan pengguna dengan Nama tertentu. UDF ini bertindak pada daftar pencocokan di bawah matcherNames. Perhatikan bagaimana Anda dapat menyediakan file JavaScript Anda sendiri untuk UDF sebagai skrip.

Perhatikan juga bagian bernama roleassignments. Ini menetapkan peran Administrator Ruang ke fungsi yang ditentukan pengguna. Peran ini memungkinkannya untuk mengakses peristiwa yang berasal dari salah satu ruang yang disediakan.

  1. Konfigurasikan UDF untuk menyertakan pencocok suhu dengan menambahkan atau membatalkan komentar baris berikut dalam matcherNames simpul file provisionSample.yaml :

            - Matcher Temperature
    
  2. Buka src\actions\userDefinedFunctions\availability.js file di editor Anda. Ini adalah file yang dirujuk dalam elemen skripprovisionSample.yaml. Fungsi yang ditentukan pengguna dalam file ini mencari kondisi ketika tidak ada gerakan yang terdeteksi di ruangan dan tingkat karbon dioksida di bawah 1.000 ppm.

    Ubah file JavaScript untuk memantau suhu dan kondisi lainnya. Tambahkan baris kode berikut untuk mencari kondisi ketika tidak ada gerakan yang terdeteksi di ruangan, tingkat karbon dioksida di bawah 1.000 ppm, dan suhu di bawah 78 derajat Fahrenheit.

    Catatan

    Bagian ini memodifikasi filesrc\actions\userDefinedFunctions\availability.js sehingga Anda dapat mempelajari secara rinci salah satu cara untuk menulis fungsi yang ditentukan pengguna. Namun, Anda dapat memilih untuk langsung menggunakan file src\actions\userDefinedFunctions\availabilityForTutorial.js dalam penyiapan Anda. File ini memiliki semua perubahan yang diperlukan untuk tutorial ini. Jika Anda menggunakan file ini sebagai gantinya, pastikan untuk menggunakan nama file yang benar untuk kunci skrip di src\actions\provisionSample.yaml.

    a. Di bagian atas file, tambahkan baris berikut untuk suhu di bawah komentar // Add your sensor type here:

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

    b. Tambahkan baris berikut setelah pernyataan yang menentukan var motionSensor, di bawah komentar // Add your sensor variable here:

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

    c. Tambahkan baris berikut setelah pernyataan yang menentukan var carbonDioxideValue, di bawah komentar // Add your sensor latest value here:

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

    d. Hapus baris kode berikut dari bawah komentar // 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;
       }
    

    Ganti dengan baris berikut:

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

    e. Hapus baris kode berikut dari bawah komentar // 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";
    

    Ganti dengan baris berikut:

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

    f. Hapus blok kode if-else berikut setelah komentar // 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));
        }
    

    Dan ganti dengan blok if-else berikut:

        // 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);
        }
    

    UDF yang dimodifikasi akan mencari kondisi di mana ruangan tersedia dan memiliki karbon dioksida dan suhu dalam batas yang dapat ditoleransi. Ini akan menghasilkan pemberitahuan dengan pernyataan parentSpace.Notify(JSON.stringify(alert)); ketika kondisi ini terpenuhi. Ini akan menetapkan nilai ruang yang dipantau terlepas dari apakah kondisi terpenuhi, dengan pesan yang sesuai.

    g. Simpan file.

  3. Buka jendela perintah, dan buka folder occupancy-quickstart\src. Jalankan perintah berikut untuk memprovisikan grafik kecerdasan spasial dan fungsi yang ditentukan pengguna:

    dotnet run ProvisionSample
    

    Penting

    Untuk mencegah akses tidak sah ke DIGITAL Twins Management API Anda, aplikasi occupancy-quickstart mengharuskan Anda untuk masuk dengan kredensial akun Azure Anda. Ini menyimpan kredensial Anda untuk jangka waktu singkat, jadi Anda mungkin tidak perlu masuk setiap kali Anda menjalankannya. Pertama kali program ini berjalan, dan ketika kredensial tersimpan Anda kedaluwarsa setelah itu, aplikasi mengarahkan Anda ke halaman masuk dan memberikan kode khusus sesi untuk dimasukkan di halaman tersebut. Ikuti perintah untuk masuk dengan akun Azure Anda.

  4. Setelah akun Anda diautentikasi, aplikasi mulai membuat contoh grafik spasial seperti yang dikonfigurasi dalam provisionSample.yaml. Tunggu hingga provisi selesai. Ini akan memakan waktu beberapa menit. Setelah itu, amati pesan di jendela perintah dan perhatikan bagaimana grafik spasial Anda dibuat. Perhatikan bagaimana aplikasi membuat hub IoT di simpul akar atau Venue.

  5. Dari output di jendela perintah, salin nilai ConnectionString, di bawah bagian Devices , ke clipboard Anda. Anda akan memerlukan nilai ini untuk mensimulasikan koneksi perangkat di bagian berikutnya.

    Sampel provisi

Tip

Jika Anda mendapatkan pesan kesalahan yang mirip dengan "Operasi I/O telah dibatalkan karena keluarnya utas atau permintaan aplikasi" di tengah provisi, coba jalankan perintah lagi. Ini mungkin terjadi jika klien HTTP kehabisan waktu dari masalah jaringan.

Mensimulasikan data sensor

Di bagian ini, Anda akan menggunakan proyek bernama konektivitas perangkat dalam sampel. Anda akan mensimulasikan data sensor untuk mendeteksi gerakan, suhu, dan karbon dioksida. Proyek ini menghasilkan nilai acak untuk sensor, dan mengirimkannya ke hub IoT dengan menggunakan string koneksi perangkat.

  1. Di jendela perintah terpisah, buka sampel Azure Digital Twins lalu ke folder konektivitas perangkat .

  2. Jalankan perintah ini untuk memastikan dependensi untuk proyek sudah benar:

    dotnet restore
    
  3. Buka file appsettings.json di editor Anda, dan edit nilai berikut:

    a. DeviceConnectionString: Tetapkan nilai ConnectionString di jendela output dari bagian sebelumnya. Salin string ini sepenuhnya, dalam tanda kutip, sehingga simulator dapat terhubung dengan benar dengan hub IoT.

    b. HardwareId dalam array Sensor : Karena Anda mensimulasikan peristiwa dari sensor yang disediakan untuk instans Azure Digital Twins Anda, ID perangkat keras dan nama sensor dalam file ini harus cocok sensors dengan simpul file provisionSample.yaml .

    Tambahkan entri baru untuk sensor suhu. Simpul Sensor di appsettings.json akan terlihat seperti berikut:

    "Sensors": [{
      "DataType": "Motion",
      "HardwareId": "SAMPLE_SENSOR_MOTION"
    },{
      "DataType": "CarbonDioxide",
      "HardwareId": "SAMPLE_SENSOR_CARBONDIOXIDE"
    },{
      "DataType": "Temperature",
      "HardwareId": "SAMPLE_SENSOR_TEMPERATURE"
    }]
    
  4. Jalankan perintah ini untuk mulai mensimulasikan peristiwa perangkat untuk suhu, gerakan, dan karbon dioksida:

    dotnet run
    

    Catatan

    Karena sampel simulasi tidak secara langsung berkomunikasi dengan instans Digital Twins Anda, sampel tersebut tidak mengharuskan Anda untuk mengautentikasi.

Mendapatkan hasil dari fungsi yang ditentukan pengguna

Fungsi yang ditentukan pengguna berjalan setiap kali instans Anda menerima data perangkat dan sensor. Bagian ini meminta instans Azure Digital Twins Anda untuk mendapatkan hasil fungsi yang ditentukan pengguna. Anda akan diberi tahu dalam waktu dekat secara real time, ketika ruangan tersedia, bahwa udara segar dan suhunya tepat.

  1. Buka jendela perintah yang Anda gunakan untuk menyediakan sampel, atau jendela perintah baru, dan buka folder occupancy-quickstart\src sampel lagi.

  2. Jalankan perintah berikut dan masuk saat diminta:

    dotnet run GetAvailableAndFreshSpaces
    

Jendela output menunjukkan bagaimana fungsi yang ditentukan pengguna berjalan dan mencegat peristiwa dari simulasi perangkat.

Output untuk UDF

Jika kondisi yang dipantau terpenuhi, fungsi yang ditentukan pengguna menetapkan nilai ruang dengan pesan yang relevan, seperti yang kita lihat sebelumnya. Fungsi GetAvailableAndFreshSpaces mencetak pesan di konsol.

Membersihkan sumber daya

Jika Anda ingin berhenti menjelajahi Azure Digital Twins pada saat ini, jangan ragu untuk menghapus sumber daya yang dibuat dalam tutorial ini:

  1. Dari menu sebelah kiri di portal Azure, pilih Semua sumber daya, pilih grup sumber daya Digital Twins Anda, dan pilih Hapus.

    Tip

    Jika Anda mengalami masalah saat menghapus instans Digital Twins, pembaruan layanan telah diluncurkan dengan perbaikan. Silakan coba lagi menghapus instans Anda.

  2. Jika perlu, hapus aplikasi sampel di komputer kerja Anda.

Langkah berikutnya

Sekarang setelah Anda menyediakan ruang dan membuat kerangka kerja untuk memicu pemberitahuan kustom, Anda dapat membuka salah satu tutorial berikut: