Öğretici: Azure Digital Twins Önizlemesi ile derlemenizi sağlama ve çalışma koşullarını izleme
Önemli
Azure Digital Twins hizmetinin yeni bir sürümü yayınlandı. Yeni hizmetin genişletilmiş özellikleri ışığında özgün Azure Digital Twins hizmeti (bu belge kümesinde açıklanmıştır) kullanımdan kaldırılmıştır.
Yeni hizmetin belgelerini görüntülemek için etkin Azure Digital Twins Belgeleri'ni ziyaret edin.
Bu öğreticide, alanlarınızda istenen sıcaklık koşullarını ve konfor düzeyini izlemek için Azure Digital Twins Önizlemesi'nin nasıl kullanılacağı gösterilmektedir. Örnek binanızı yapılandırdıktan sonra, bu öğreticideki adımları kullanarak binanızı sağlayabilir ve algılayıcı verilerinizde özel işlevler çalıştırabilirsiniz.
Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:
- İzlenecek koşulları tanımlayın.
- Kullanıcı tanımlı bir işlev (UDF) oluşturun.
- Algılayıcı verilerinin simülasyonunu oluşturma.
- Kullanıcı tanımlı bir işlevin sonuçlarını alma.
Önkoşullar
Bu öğreticide , Azure Digital Twins kurulumunuzu tamamladığınız varsayılır. Devam etmeden önce aşağıdakilere sahip olduğunuzdan emin olun:
- Bir Azure hesabı.
- Çalışan bir Digital Twins örneği.
- Çalışma makinenize indirilmiş ve ayıklanmış Digital Twins C# örnekleri.
- Örneği derlemek ve çalıştırmak için geliştirme makinenizde .NET Core SDK sürüm 2.1.403 veya üzeri. Doğru sürümün yüklü olduğunu doğrulamak için komutunu çalıştırın
dotnet --version
. - Örnek kodu incelemek için Visual Studio Code.
İpucu
Yeni bir örnek hazırlarsanız benzersiz bir Digital Twins örneği adı kullanın.
İzleme koşullarını tanımlama
Cihaz veya algılayıcı verilerinde izlemek için eşleştirici olarak adlandırılan belirli koşullar kümesini tanımlayabilirsiniz. Ardından kullanıcı tanımlı işlevler olarak adlandırılan işlevler tanımlayabilirsiniz. Kullanıcı tanımlı işlevler, eşleştiriciler tarafından belirtilen koşullar oluştuğunda alanlarınızdan ve cihazlarınızdan gelen veriler üzerinde özel mantık yürütür. Daha fazla bilgi için bkz. Veri işleme ve kullanıcı tanımlı işlevler.
occupancy-quickstart örnek projesinin src\actions\provisionSample.yaml adlı dosyasını Visual Studio Code'da açın. matchers türü ile başlayan bölümü bulun. Bu türün altındaki her girdi, belirtilen Ada sahip bir eşleştirici oluşturur. Eşleştirici dataTypeValue türünde bir algılayıcıyı izler. Bunun, birkaç algılayıcı içeren bir cihaz düğümüne sahip Olan Odak Odası A1 adlı alanla nasıl ilişkili olduğuna dikkat edin. Bu algılayıcılardan birini izleyecek bir eşleştirici sağlamak için dataTypeValue değerinin algılayıcının dataType değeriyle eşleştiğinden emin olun.
Mevcut eşleştiricilerin altına aşağıdaki eşleştiriciyi ekleyin. Tuşların hizalandığından ve boşlukların sekmelerle değiştirilmediğinden emin olun. Bu satırlar provisionSample.yaml dosyasında açıklama satırı olarak da bulunur. Her satırın #
önündeki karakteri kaldırarak bunların açıklamasını kaldırabilirsiniz.
- name: Matcher Temperature
dataTypeValue: Temperature
Bu eşleştirici, ilk öğreticideSAMPLE_SENSOR_TEMPERATURE
eklediğiniz algılayıcıyı izler.
Kullanıcı tanımlı işlev oluşturma
Algılayıcı verilerinizin işlenmesini özelleştirmek için kullanıcı tanımlı işlevleri kullanabilirsiniz. Bunlar, eşleştiriciler tarafından açıklandığı gibi belirli koşullar oluştuğunda Azure Digital Twins örneğinizde çalışabilen özel JavaScript kodulardır. İzlemek istediğiniz her sensör için farklı eşleştiriciler ve kullanıcı tanımlı işlevler oluşturabilirsiniz. Daha fazla bilgi için bkz. Veri işleme ve kullanıcı tanımlı işlevler.
Örnek provisionSample.yaml dosyasında userdefinedfunctions türüyle başlayan bir bölüm bulun. Bu bölüm, belirli bir Name ile kullanıcı tanımlı bir işlev sağlar. Bu UDF, matcherNames altındaki eşleştiriciler listesinde hareket eder. UDF için kendi JavaScript dosyanızı script bölümünde sağlayabilirsiniz.
Ayrıca roleassignments adlı bölüme de dikkat edin. Kullanıcı tanımlı işleve Alan Yöneticisi rolünü atar. Bu rol, sağlanan alanlardan herhangi birinden gelen olaylara erişmesini sağlar.
provisionSample.yaml adlı dosyanın
matcherNames
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:- Matcher Temperature
src\actions\userDefinedFunctions\availability.js dosyasını düzenleyicinizde açın. Bu, provisionSample.yamldosyasının betik öğesinde başvuruda bulunılan dosyadır. Bu dosyadaki kullanıcı tanımlı işlev, odada hareket algılanmadığında ve karbondioksit düzeyleri 1.000 ppm'nin altında olduğunda koşulları arar.
JavaScript dosyasını sıcaklığı ve diğer koşulları izlemek için değiştirin. Odada hareket algılanmamış, karbondioksit düzeyleri 1.000 ppm'nin altında ve sıcaklık 78 Fahrenheit derecenin altında olduğunda koşulları aramak için aşağıdaki kod satırlarını ekleyin.
Not
Bu bölüm dosya src\actions\userDefinedFunctions\availability.js değiştirir, böylece kullanıcı tanımlı işlev yazmanın tek bir yolunu ayrıntılı olarak öğrenebilirsiniz. Ancak, kurulumunuzda dosya src\actions\userDefinedFunctions\availabilityForTutorial.js doğrudan kullanmayı seçebilirsiniz. Bu dosya, öğretici için gerekli olan tüm değişikliklere sahiptir. Bunun yerine bu dosyayı kullanıyorsanız, src\actions\provisionSample.yamldosyasındaki betik anahtarı için doğru dosya adını kullandığınızdan emin olun.
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:var temperatureType = "Temperature"; var temperatureThreshold = 78;
b. öğesini tanımlayan
var motionSensor
deyiminden sonra aşağıdaki satırları açıklamasının// Add your sensor variable here
altına ekleyin:var temperatureSensor = otherSensors.find(function(element) { return element.DataType === temperatureType; });
c. öğesini tanımlayan
var carbonDioxideValue
deyiminden sonra aşağıdaki satırı açıklamasının// Add your sensor latest value here
altına ekleyin:var temperatureValue = getFloatValue(temperatureSensor.Value().Value);
d. Şu kod satırlarını
// Modify this line to monitor your sensor value
açıklamasının altından kaldırın: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:
if(carbonDioxideValue === null || motionValue === null || temperatureValue === null){ sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide, motion, or temperature are null, returning"); return; }
e. Şu kod satırlarını
// Modify these lines as per your sensor
açıklamasının altından kaldırın: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:
var alert = "Room with fresh air and comfortable temperature is available."; var noAlert = "Either room is occupied, or working conditions are not right.";
f. Şu if-else kod bloğunu
// Modify this code block for your sensor
açıklamasının altından kaldırın:// 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:
// 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. Bu koşul yerine getirildiğinde
parentSpace.Notify(JSON.stringify(alert));
deyimiyle bir bildirim oluşturur. Sağlanan koşuldan bağımsız olarak izlenen alanın değerini ayarlayacak ve aşağıdaki iletiyi görüntüleyecektir.g. Dosyayı kaydedin.
Bir komut penceresi açın ve occupancy-quickstart\src klasörüne gidin. Uzamsal zeka grafınızı ve kullanıcı tanımlı işlevinizi sağlamak için aşağıdaki komutu çalıştırın:
dotnet run ProvisionSample
Önemli
Digital Twins Yönetim API'nize yetkisiz erişimi önlemek için , occupancy-quickstart uygulaması Azure hesabı kimlik bilgilerinizle oturum açmanızı gerektirir. Kimlik bilgilerinizi kısa bir süre için kaydeder, bu nedenle her çalıştırdığınızda oturum açmanız gerekmeyebilir. Bu program ilk kez çalıştırıldığında ve bundan sonra kaydedilen kimlik bilgilerinizin süresi dolduğunda, uygulama sizi bir oturum açma sayfasına yönlendirir ve bu sayfaya girmeniz için oturuma özgü bir kod verir. Azure hesabınızda oturum açmak için yönergeleri izleyin.
Hesabınızın kimliği doğrulandıktan sonra uygulama provisionSample.yaml dosyasında yapılandırılan örnek bir uzamsal graf oluşturmaya başlar. Sağlama bitene kadar bekleyin. Birkaç dakika sürer. Bundan sonra komut penceresindeki iletileri gözlemleyin ve uzamsal grafınızın nasıl oluşturulduğuna dikkat edin. Uygulamanın kök düğümde veya üzerinde bir IoT hub'ı oluşturduğuna
Venue
dikkat edin.Komut penceresindeki çıktıdan, bölümün altındaki
Devices
değeriniConnectionString
panonuza kopyalayın. Sonraki bölümde cihaz bağlantısının benzetimini yapmak için bu değere ihtiyacınız olacak.
İpucu
Sağlamanın ortasında "İş parçacığı çıkışı veya uygulama isteği nedeniyle G/Ç işlemi durduruldu" gibi bir hata iletisi alırsanız, komutu yeniden çalıştırmayı deneyin. HTTP istemcisi bir ağ sorunundan zaman aşımına uğradıysa bu durum oluşabilir.
Sensör verilerinin simülasyonunu yapma
Bu bölümde örnekte device-connectivity adlı projeyi kullanacaksınız. Hareket, sıcaklık ve karbondioksit algılamak için sensör verilerinin simülasyonunu yapacaksınız. Bu proje, sensörler için rastgele değerler oluşturur ve bunları cihaz bağlantı dizesini kullanarak IoT hub'a gönderir.
Ayrı bir komut penceresinde Azure Digital Twins örneğine ve ardından cihaz bağlantısı klasörüne gidin.
Projenizin bağımlılıklarının doğru olduğundan emin olmak için şu komutu çalıştırın:
dotnet restore
appsettings.json dosyasını düzenleyicinizde açın ve aşağıdaki değerleri düzenleyin:
a. DeviceConnectionString: Bir önceki bölümde çıktı penceresinde görünen
ConnectionString
değerini atayın. Simülatörün IoT hub'ına düzgün şekilde bağlanabilmesi için bu dizeyi tırnak içinde tamamen kopyalayın.b. Algılayıcılar dizisi içindeki HardwareId: Azure Digital Twins örneğiniz için sağlanan algılayıcılardan olayları benzettiğinizden, donanım kimliği ve bu dosyadaki algılayıcıların adları provisionSample.yaml dosyasının düğümüyle eşleşmelidir
sensors
.Sıcaklık sensörü için yeni bir giriş ekleyin. appsettings.json dosyasındaki Sensors düğümü aşağıdaki gibi görünmelidir:
"Sensors": [{ "DataType": "Motion", "HardwareId": "SAMPLE_SENSOR_MOTION" },{ "DataType": "CarbonDioxide", "HardwareId": "SAMPLE_SENSOR_CARBONDIOXIDE" },{ "DataType": "Temperature", "HardwareId": "SAMPLE_SENSOR_TEMPERATURE" }]
Sıcaklık, hareket ve karbondioksit için cihaz olayı simülasyonunu başlatmak üzere şu komutu çalıştırın:
dotnet run
Not
Simülasyon örneği Digital Twins örneğiniz ile doğrudan iletişim kurmadığından kimlik doğrulaması yapmanız gerekmez.
Kullanıcı tanımlı işlevin sonuçlarını alma
Örneğiniz cihaz ve sensör verilerini her aldığında kullanıcı tanımlı işlev çalışır. Bu bölüm, kullanıcı tanımlı işlevin sonuçlarını almak için Azure Digital Twins örneğinizi sorgular. Bir oda kullanılabilir olduğunda, havanın temiz ve sıcaklığın doğru olduğu neredeyse gerçek zamanlı olarak size bildirilir.
Örneği sağlamak için kullandığınız komut penceresini veya yeni bir komut penceresini açın ve örneğin occupancy-quickstart\src klasörüne yeniden gidin.
Aşağıdaki komutu çalıştırın ve istendiğinde oturum açın:
dotnet run GetAvailableAndFreshSpaces
Çıkış penceresi, kullanıcı tanımlı işlevin nasıl çalıştığını ve cihaz benzetiminden gelen olayları nasıl kestiğini gösterir.
İzlenen koşul karşılanırsa, kullanıcı tanımlı işlev daha önce gördüğümüz gibi ilgili iletiyle birlikte alanın değerini ayarlar. İşlev, GetAvailableAndFreshSpaces
konsoldaki iletiyi yazdırır.
Kaynakları temizleme
Bu noktada Azure Digital Twins'i keşfetmeyi durdurmak istiyorsanız, bu öğreticide oluşturulan kaynakları silebilirsiniz:
Azure portal soldaki menüden Tüm kaynaklar'ı seçin, Digital Twins kaynak grubunuzu seçin ve Sil'i seçin.
İpucu
Digital Twins örneğinizi silerken sorun yaşadıysanız düzeltme ile birlikte bir hizmet güncelleştirmesi kullanıma sunuldu. Lütfen örneğinizi silmeyi yeniden deneyin.
Gerekirse, iş makinenizdeki örnek uygulamaları silin.
Sonraki adımlar
Artık alanlarınızı sağladığınıza ve özel bildirimleri tetikleyen bir çerçeve oluşturduğunuza göre, aşağıdaki öğreticilerden herhangi birini kullanabilirsiniz: