Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
Dikkat
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 için doğru IoT Hub katmanını ve boyutunu seçme.
Bu makalede şunlar açıklanmaktadır:
- Cihaz ikizinin yapısı: etiketler, istenen özellikler ve bildirilen özellikler.
- Cihaz uygulamalarının ve çözüm arka ucunun cihaz ikizlerinde gerçekleştirebileceği işlemler.
Cihaz ikizlerini kullanarak şunları yapabilirsiniz:
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 ve Çalıştır cihazı tarafından kullanılan cihaz modeliyle ilişkisini öğrenmek için IoT Tak ve Çalıştır dijital ikizlerini anlama kısmına bakın.
Cihaz ikizleri
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 kullanabilirler.
Uzun süre çalışan işlemleri sorgulamak ve hedeflemek için çözüm arka uç kullanılabilir.
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 ana kısmı, kimlik kayıt defterinde depolanan ilgili cihaz kimliğinden salt okunur özellikleri içerir.
connectionStateUpdatedTime
vegenerationId
ö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, tags
ve hem reported
hem de desired
özellikleri için kapsayıcı nesneleri içerir. Kapsayıcı, properties
Cihaz ikizi meta verileri ve $metadata
İyimser eşzamanlılık$version
bazı salt okunur öğeleri ( ve ) içerir.
Bildirilen özellik örneği
Önceki örnekte, cihaz ikizi bir batteryLevel
raporlanmış ö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ğerine ilgi duyduğunuz senaryoları basitleştirir. Cihaz telemetrisini zaman serisi gibi zaman damgalı olaylar dizisi biçiminde işlemek istiyorsanız cihazdan buluta iletileri kullanın.
İstenen özellik örneği
Önceki örnekte, istenen ve bildirilen cihaz ikizi özellikleri, telemetryConfig
çözüm arka planı ve cihaz uygulaması tarafından bu cihazın telemetri ayarları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üncellenmiş yapılandırmayı veya
status
özelliğini kullanan bir hata durumunu 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.
Dikkat
Ö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 ikizleri içinde istenen ve rapor edilen özellikler 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 IoT Tak Çalıştır'da yazılabilir özellikler bölümüne bakın.
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.
Arka uç işlemleri
Çözümün arka ucu, HTTPS aracılığıyla kullanıma sunulan aşağıdaki atomik işlemleri kullanarak cihaz ikizinde çalışır.
Kimlik üzerinden cihaz ikizini al. Bu işlem, etiketler ve istenen ve bildirilen sistem özellikleri de dahil olmak üzere cihaz ikizi belgesini döndürür.
Cihaz ikizini 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"}
olan yeni bir istenen özellik oluşturur, mevcutexistingProperty
değerini"otherNewValue"
ile değiştirir veotherOldProperty
öğesini kaldırır. 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, mevcut tüm istenen özelliklerin üzerine tamamen yazar ve yeni bir JSON belgesini
properties/desired
ile değiştirir.Etiketleri değiştirin. Bu işlem, mevcut tüm etiketleri tamamen siler ve
tags
için yeni bir JSON belgesi ile değiştirir.Çift bildirimler 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 ikiz kümelerinde işlemler gerçekleştirin.
Cihaz işlemleri
Cihaz uygulaması aşağıdaki atomik işlemleri kullanarak cihaz ikizi üzerinde çalışır:
Cihaz ikizini 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 ve özellikler biçimi
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" } } } } } } } } } } }, ... }
Cihaz ikizi boyutu
IoT Hub, tags
değeri için 8 KB boyut sınırı ve properties/desired
ile properties/reported
değerlerinin her biri için 32 KB boyut sınırı uygular. Bu toplamlar, $version
ve $metadata/$lastUpdated
gibi salt okunur öğeleri içermez.
İ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, , tags
veya properties/desired
belgelerinin boyutunu properties/reported
sınırın üzerinde artıracak tüm işlemler hatayla reddeder.
Cihaz ikizi meta verileri
IoT Hub, cihaz ikizinin istenen ve bildirilen özelliklerindeki her JSON nesnesi için son güncellemenin zaman damgasını korur. Zaman damgaları UTC biçimindedir ve ISO8601.
Ö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).
İyimser eşzamanlılık
Etiketler, istenen özellikler ve bildirilen özelliklerin tümü iyimser eşzamanlılığı destekler. İkiz özellik güncellemelerinin sırasını garanti altına almanız gerekiyorsa, bildirilen özelliklerin geri çağrımını bekleyerek bir sonraki güncelleştirmeyi göndermeden önce uygulama düzeyinde senkronizasyon uygulamayı düşünebilirsiniz.
Cihaz ikizleri, RFC7232etag
ikizin JSON gösterimini temsil eden bir ETag özelliğine 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 ve bildirilen cihaz ikizi özellikleri, artımlı olduğu garanti edilen bir $version
değere de 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.
Cihaz yeniden bağlantı akışı
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 olmanın yanı sıra, istenen özellikler belgesinin tamamını da 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ı bir IoT hub'ına bağlanır.
- Cihaz uygulaması, istenen özellikler güncelleştirme bildirimlerine abonedir.
- Cihaz uygulaması istenen özellikler için belgenin tamamını alır.
Cihaz uygulaması, tam olarak alınan belgenin sürümünden küçük veya eşit olan $version
tüm bildirimleri yoksayabilir. IoT Hub sürümlerin her zaman arttığını garanti ettiğinden bu yaklaşım mümkündür.
Sonraki adımlar
Bu makalede açıklanan kavramlardan bazılarını denemek için aşağıdaki IoT Hub makalelerine bakın: