Eğitim
Modül
Azure Digital Twins'i IoT cihaz verileriyle eşitleme - Training
Sanal bir IoT cihazından Azure Digital Twins'e veri akışını ayarlayın.
Bu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Cihaz ikizleri meta veriler, yapılandırmalar ve koşullar dahil olmak üzere cihaz durumu bilgilerini depolayan JSON belgeleridir. Azure IoT Hub, IoT Hub'a bağladığınız her cihaz için bir cihaz çifti tutar.
Not
Bu makalede açıklanan özellikler yalnızca IoT Hub'ın standart katmanında kullanılabilir. Temel ve standart/ücretsiz IoT Hub katmanları hakkında daha fazla bilgi için bkz. Çözümünüz için doğru IoT Hub katmanını seçme.
Bu makalede şunlar açıklanmaktadır:
Cihaz ikizlerini kullanarak:
Cihaza özgü meta verileri bulutta depolayın. Örneğin, bir satış makinesinin konumu.
Cihaz uygulamanızdan kullanılabilir özellikler ve koşullar gibi geçerli durum bilgilerini bildirin. Örneğin, bir cihazın hücresel veya WiFi üzerinden IoT hub'ınıza bağlı olup olmadığı.
Cihaz uygulaması ve arka uç uygulamaları arasında uzun süre çalışan iş akışlarının durumunu eşitleyin. Örneğin, bir arka uç uygulaması yüklenecek yeni üretici yazılımı sürümünü belirttiğinde ve cihaz uygulaması güncelleştirme işleminin çeşitli aşamalarını raporladığında.
Cihaz meta verilerinizi, yapılandırmanızı veya durumunuzu sorgular.
Bildirilen özellikleri, cihazdan buluta iletileri veya dosya yüklemeyi kullanma hakkında daha fazla bilgi için bkz . Cihazdan buluta iletişim kılavuzu.
İstenen özellikleri, doğrudan yöntemleri veya buluttan cihaza iletileri kullanma hakkında daha fazla bilgi için bkz . Buluttan cihaza iletişim kılavuzu.
Cihaz ikizlerinin Azure IoT Tak Çalıştır cihazı tarafından kullanılan cihaz modeliyle ilişkisini öğrenmek için bkz. Dijital ikizleri IoT Tak Çalıştır anlama.
Cihaz ikizleri, cihazla ilgili şu bilgileri depolar:
Cihaz uygulamaları ve arka uç uygulamaları, cihaz koşullarını ve yapılandırmasını eşitlemek için kullanabilir.
Çözüm arka ucu, uzun süre çalışan işlemleri sorgulamak ve hedeflemek için kullanabilir.
Bir cihaz ikizinin yaşam döngüsü ilgili cihaz kimliğine bağlıdır. IoT Hub'da bir cihaz kimliği oluşturulduğunda veya silindiğinde cihaz ikizleri örtük olarak oluşturulur ve silinir.
Cihaz ikizi, şunları içeren bir JSON belgesidir:
Etiketler' e tıklayın. JSON belgesinin arka uç uygulamalarının okuyabileceği ve yazabileceği bir bölüm. Etiketler cihaz uygulamaları tarafından görülemez.
İstenen özellikler. Cihaz yapılandırmasını veya koşullarını eşitlemek için bildirilen özelliklerle birlikte kullanılır. Arka uç uygulamaları istenen özellikleri ayarlayabilir ve cihaz uygulaması bunları okuyabilir. Cihaz uygulaması, istenen özelliklerdeki değişikliklerin bildirimlerini de alabilir.
Bildirilen özellikler. Cihaz yapılandırmasını veya koşullarını eşitlemek için istenen özelliklerle birlikte kullanılır. Cihaz uygulaması bildirilen özellikleri ayarlayabilir ve arka uç uygulamaları bunları okuyabilir ve sorgulayabilir.
Cihaz kimliği özellikleri. Cihaz ikizi JSON belgesinin kökü, kimlik kayıt defterinde depolanan ilgili cihaz kimliğinden salt okunur özellikleri içerir. connectionStateUpdatedTime
ve generationId
özellikleri dahil değildir.
Aşağıdaki örnekte bir cihaz ikizi JSON belgesi gösterilmektedir:
{
"deviceId": "devA",
"etag": "AAAAAAAAAAc=",
"status": "enabled",
"statusReason": "provisioned",
"statusUpdateTime": "0001-01-01T00:00:00",
"connectionState": "connected",
"lastActivityTime": "2015-02-30T16:24:48.789Z",
"cloudToDeviceMessageCount": 0,
"authenticationType": "sas",
"x509Thumbprint": {
"primaryThumbprint": null,
"secondaryThumbprint": null
},
"version": 2,
"tags": {
"deploymentLocation": {
"building": "43",
"floor": "1"
}
},
"properties": {
"desired": {
"telemetryConfig": {
"sendFrequency": "5m"
},
"$metadata" : {...},
"$version": 1
},
"reported": {
"telemetryConfig": {
"sendFrequency": "5m",
"status": "success"
},
"batteryLevel": 55,
"$metadata" : {...},
"$version": 4
}
}
}
Kök nesne, cihaz kimliği özelliklerini ve ve hem hem de reported
desired
özellikleri için tags
kapsayıcı nesnelerini içerir. Kapsayıcı, properties
Cihaz ikizi meta verileri ve $version
İyimser eşzamanlılık bölümlerinde açıklanan bazı salt okunur öğeleri ($metadata
ve ) içerir.
Önceki örnekte cihaz ikizi bildirilen bir batteryLevel
özellik içeriyor. Bu özellik, son bildirilen pil düzeyine göre cihazları sorgulamayı ve cihazlarda çalıştırmayı mümkün kılar. Diğer örnekler arasında cihaz uygulaması raporlama cihazı özellikleri veya bağlantı seçenekleri yer alır.
Not
Bildirilen özellikler, bir özelliğin bilinen son değeriyle ilgilendiğiniz senaryoları basitleştirir. Cihaz telemetrisini zaman serisi gibi zaman damgalı olaylar dizisi biçiminde işlemek istiyorsanız cihazdan buluta iletileri kullanın.
Önceki örnekte, istenen ve bildirilen cihaz ikizi özellikleri, telemetryConfig
çözüm arka ucu ve cihaz uygulaması tarafından bu cihazın telemetri yapılandırmasını eşitlemek için kullanılır. Örneğin:
Arka uç uygulaması istenen özelliği istenen yapılandırma değeriyle ayarlar. Belgenin istenen özellik kümesine sahip bölümü aşağıdadır:
"desired": {
"telemetryConfig": {
"sendFrequency": "5m"
},
...
},
Cihaz bağlıysa cihaz uygulamasına değişiklik anında bildirilir. Cihaz bağlı değilse, cihaz uygulaması bağlandığında cihaz yeniden bağlanma akışını izler. Ardından cihaz uygulaması güncelleştirilmiş yapılandırmayı (veya özelliğini kullanan bir hata koşulu) status
bildirir. Bildirilen özelliklerin bölümü aşağıdadır:
"reported": {
"telemetryConfig": {
"sendFrequency": "5m",
"status": "success"
}
...
}
Arka uç uygulaması, cihaz ikizlerini sorgulayarak birçok cihazda yapılandırma işleminin sonuçlarını izler.
Not
Önceki kod parçacıkları, bir cihaz yapılandırmasını ve durumunu kodlamanın bir yolu olan okunabilirlik için iyileştirilmiş örneklerdir. IoT Hub, cihaz ikizlerinde istenen ve bildirilen cihaz ikizi özellikleri için belirli bir şema uygulamaz.
Önemli
IoT Tak Çalıştır, değişiklikleri istenen ve bildirilen özelliklerle eşitlemek için birkaç ek özellik kullanan bir şema tanımlar. Çözümünüz IoT Tak Çalıştır kullanıyorsa, ikiz özelliklerini güncelleştirirken Tak ve Kullan kurallarını izlemeniz gerekir. Daha fazla bilgi ve örnek için bkz. IoT Tak Çalıştır yazılabilir özellikler.
Bellenim güncelleştirmeleri gibi uzun süre çalışan işlemleri eşitlemek için ikizleri kullanabilirsiniz. Uzun süre çalışan bir işlemi cihazlar arasında eşitlemek ve izlemek için özellikleri kullanma hakkında daha fazla bilgi için bkz . Cihazları yapılandırmak için istenen özellikleri kullanma.
Çözüm arka ucu, HTTPS aracılığıyla kullanıma sunulan aşağıdaki atomik işlemleri kullanarak cihaz ikizinde çalışır:
Kimlikle cihaz ikizlerini alma. Bu işlem, etiketler ve istenen ve bildirilen sistem özellikleri de dahil olmak üzere cihaz ikizi belgesini döndürür.
Cihaz ikizlerini kısmen güncelleştirin. Bu işlem bir cihaz ikizindeki etiketleri veya istenen özellikleri kısmen güncelleştirir. Kısmi güncelleştirme, herhangi bir özelliği ekleyen veya güncelleştiren bir JSON belgesi olarak ifade edilir. olarak ayarlanan null
özellikler kaldırılır. Aşağıdaki örnek, değeri {"newProperty": "newValue"}
ile yeni bir istenen özellik oluşturur, ile "otherNewValue"
mevcut değerinin existingProperty
üzerine yazar ve öğesini kaldırırotherOldProperty
. Mevcut istenen özelliklerde veya etiketlerde başka değişiklik yapılmaz:
{
"properties": {
"desired": {
"newProperty": {
"nestedProperty": "newValue"
},
"existingProperty": "otherNewValue",
"otherOldProperty": null
}
}
}
İstenen özellikleri değiştirin. Bu işlem, varolan tüm istenen özelliklerin üzerine tamamen yazar ve için properties/desired
yeni bir JSON belgesinin yerini alır.
Etiketleri değiştirin. Bu işlem tüm mevcut etiketlerin üzerine tamamen yazar ve için tags
yeni bir JSON belgesinin yerini alır.
İkiz bildirimleri alın. Bu işlem, ikiz değiştirildiğinde bunu bildirir. Cihaz ikizi değişiklik bildirimlerini almak için IoT çözümünüzün bir yol oluşturması ve Veri Kaynağını twinChangeEvents'e eşit olarak ayarlaması gerekir. Varsayılan olarak, böyle bir yol yoktur, bu nedenle ikiz bildirimleri gönderilmez. Değişiklik oranı çok yüksekse veya iç hatalar gibi diğer nedenlerle IoT Hub tüm değişiklikleri içeren tek bir bildirim gönderebilir. Bu nedenle, uygulamanızın tüm ara durumların güvenilir bir şekilde denetlenmesi ve günlüğe kaydedilmesi gerekiyorsa cihazdan buluta iletileri kullanmanız gerekir. İkiz bildirim iletisinde döndürülen özellikler ve gövde hakkında daha fazla bilgi edinmek için bkz . Telemetri dışı olay şemaları.
Yukarıdaki tüm işlemler İyimser eşzamanlılığı destekler ve IoT Hub'a erişimi denetleme bölümünde tanımlandığı gibi ServiceConnect izni gerektirir.
Bu işlemlere ek olarak, çözüm arka ucu şunları yapabilir:
SQL benzeri IoT Hub sorgu dilini kullanarak cihaz ikizlerini sorgular.
İşleri kullanarak büyük cihaz ikizleri kümelerinde işlemler gerçekleştirin.
Cihaz uygulaması aşağıdaki atomik işlemleri kullanarak cihaz ikizi üzerinde çalışır:
Cihaz ikizlerini alın. Bu işlem, bağlı durumdaki cihaz için cihaz ikizi belgesini (istenen ve bildirilen sistem özellikleri dahil) döndürür. (Etiketler cihaz uygulamalarına görünmez.)
Bildirilen özellikleri kısmen güncelleştirin. Bu işlem, o anda bağlı olan cihazın bildirilen özelliklerinin kısmi güncelleştirmesini sağlar.
İstenen özellikleri gözlemleyin. Şu anda bağlı olan cihaz, gerçekleştiğinde istenen özelliklere yapılan güncelleştirmelerin bildirilmesini seçebilir.
Yukarıdaki tüm işlemler, IoT Hub'a Erişimi Denetleme bölümünde tanımlandığı gibi DeviceConnect izni gerektirir.
Azure IoT cihaz SDK'ları, birçok dil ve platformdan önceki işlemlerin kullanımını kolaylaştırır. İstenen özellikler eşitlemesi için IoT Hub temel öğelerinin ayrıntıları hakkında daha fazla bilgi için bkz . Cihaz yeniden bağlantı akışı.
Etiketler, istenen özellikler ve bildirilen özellikler aşağıdaki kısıtlamalara sahip JSON nesneleridir:
Anahtarlar: JSON nesnelerindeki tüm anahtarlar UTF-8 kodlanmış, büyük/küçük harfe duyarlı ve en fazla 1 KB uzunluğundadır. İzin verilen karakterler UNICODE denetim karakterlerini (C0 ve C1 kesimleri) ve .
, $
ve SP'yi dışlar.
Değerler: JSON nesnelerindeki tüm değerler şu JSON türlerinde olabilir: boole, sayı, dize, nesne. Diziler de desteklenir.
Tamsayılar en düşük -4503599627370496 ve en yüksek 4503599627370495 değerine sahip olabilir.
Dize değerleri UTF-8 ile kodlanmıştır ve uzunluk üst sınırı 4 KB olabilir.
Derinlik: Etiketlerde, istenen özelliklerde ve bildirilen özelliklerde en fazla JSON nesnesi derinliği 10'dur. Örneğin, aşağıdaki nesne geçerlidir:
{
...
"tags": {
"one": {
"two": {
"three": {
"four": {
"five": {
"six": {
"seven": {
"eight": {
"nine": {
"ten": {
"property": "value"
}
}
}
}
}
}
}
}
}
}
},
...
}
IoT Hub değeri için 8 KB boyut sınırı, ve properties/reported
değerinde tags
her properties/desired
biri için 32 KB boyut sınırı uygular. Bu toplamlar ve $metadata/$lastUpdated
gibi $version
salt okunur öğelere özeldir.
İkiz boyutu aşağıdaki gibi hesaplanır:
IoT Hub, her özelliğin anahtarını ve değerini toplu olarak hesaplar ve uzunluğunu ekler.
Özellik anahtarları UTF8 ile kodlanmış dizeler olarak kabul edilir.
Basit özellik değerleri UTF8 kodlu dizeler, sayısal değerler (8 Bayt) veya Boole değerleri (4 Bayt) olarak kabul edilir.
UTF8 ile kodlanmış dizelerin boyutu, UNICODE denetim karakterleri (C0 ve C1 kesimleri) hariç tüm karakterler sayılarak hesaplanır.
Karmaşık özellik değerleri (iç içe nesneler), özellik anahtarlarının ve içerdikleri özellik değerlerinin toplam boyutuna göre hesaplanır.
IoT Hub, , properties/desired
veya properties/reported
belgelerinin boyutunu tags
sınırın üzerinde artıracak tüm işlemler hatayla reddeder.
IoT Hub, cihaz ikizi istenen ve bildirilen özelliklerdeki her JSON nesnesi için son güncelleştirmenin zaman damgasını korur. Zaman damgaları UTC biçimindedir ve ISO8601 biçiminde YYYY-MM-DDTHH:MM:SS.mmmZ
kodlanmıştır.
Örneğin:
{
...
"properties": {
"desired": {
"telemetryConfig": {
"sendFrequency": "5m"
},
"$metadata": {
"telemetryConfig": {
"sendFrequency": {
"$lastUpdated": "2016-03-30T16:24:48.789Z"
},
"$lastUpdated": "2016-03-30T16:24:48.789Z"
},
"$lastUpdated": "2016-03-30T16:24:48.789Z"
},
"$version": 23
},
"reported": {
"telemetryConfig": {
"sendFrequency": "5m",
"status": "success"
},
"batteryLevel": "55%",
"$metadata": {
"telemetryConfig": {
"sendFrequency": {
"$lastUpdated": "2016-03-31T16:35:48.789Z"
},
"status": {
"$lastUpdated": "2016-03-31T16:35:48.789Z"
},
"$lastUpdated": "2016-03-31T16:35:48.789Z"
},
"batteryLevel": {
"$lastUpdated": "2016-04-01T16:35:48.789Z"
},
"$lastUpdated": "2016-04-01T16:24:48.789Z"
},
"$version": 123
}
}
...
}
Nesne anahtarlarını kaldıran güncelleştirmeleri korumak için bu bilgiler her düzeyde tutulur (yalnızca JSON yapısının yaprakları değil).
Etiketler, istenen özellikler ve bildirilen özelliklerin tümü iyimser eşzamanlılığı destekler. İkiz özellik güncelleştirmelerinin sırasını garanti etmeniz gerekiyorsa, bir sonraki güncelleştirmeyi göndermeden önce bildirilen özellikleri geri çağırmayı bekleyerek uygulama düzeyinde eşitleme uygulamayı göz önünde bulundurun.
Cihaz ikizleri, RFC7232 göre ikizin JSON gösterimini temsil eden bir ETag özelliğine etag
sahiptir. Tutarlılığı sağlamak için çözümün arka ucundan koşullu güncelleştirme işlemlerinde özelliğini kullanabilirsiniz etag
. Bu özellik, kapsayıcıyı içeren işlemlerde tutarlılık sağlamaya yönelik tek seçenektir tags
.
İstenen cihaz ikizi ve bildirilen özellikler de artımlı olması garanti edilen bir $version
değere sahiptir. ETag'e benzer şekilde, güncelleştirmelerin tutarlılığını zorlamak için sürüm özelliğini kullanabilirsiniz. Örneğin, bildirilen bir özellik için bir cihaz uygulaması veya istenen özellik için bir arka uç uygulaması.
Bir gözlem aracısının (istenen özellikleri gözlemleyen cihaz uygulaması gibi) alma işleminin sonucu ile güncelleştirme bildirimi arasındaki yarışları uzlaştırması gerektiğinde sürümler de yararlıdır. Cihaz yeniden bağlantı akışı bölümü daha fazla bilgi sağlar.
IoT Hub bağlantısı kesilmiş cihazlar için istenen özellikleri güncelleştirme bildirimlerini korumaz. Bağlanan bir cihazın, güncelleştirme bildirimlerine abone olmak için ek olarak istenen özellikler belgesinin tamamını alması gerekir. Güncelleştirme bildirimleri ile tam alma arasında yarış olasılığı göz önünde bulundurulduğunda aşağıdaki akışın sağlanması gerekir:
Cihaz uygulaması, tam olarak alınan belgenin sürümünden küçük veya eşit olan tüm bildirimleri $version
yoksayabilir. IoT Hub sürümlerin her zaman arttığını garanti ettiğinden bu yaklaşım mümkündür.
Bu makalede açıklanan kavramlardan bazılarını denemek için aşağıdaki IoT Hub makalelerine bakın:
Eğitim
Modül
Azure Digital Twins'i IoT cihaz verileriyle eşitleme - Training
Sanal bir IoT cihazından Azure Digital Twins'e veri akışını ayarlayın.
Belgeler
Azure IoT Hub modül ikizlerini anlama
Bu makalede IoT Hub ile cihazlarınız arasında durum ve yapılandırma verilerini eşitlemek için modül ikizlerinin nasıl kullanılacağı açıklanmaktadır
Azure IoT Hub'ı cihaz ikizlerini kullanmaya başlama - Azure IoT Hub
Cihaz ikizleri için cihaz ve arka uç hizmeti uygulama kodu oluşturmak için Azure IoT SDK'larını kullanma.
Öğretici - Azure IoT Hub'dan cihaz durumunu eşitleme
Öğretici - Cihaz ikizlerini kullanarak cihazlarınızı buluttan yapılandırmayı ve cihazlarınızdan durum ve uyumluluk verilerini almayı öğrenin.