İngilizce dilinde oku

Aracılığıyla paylaş


IoT Hub'da cihaz ikizlerini anlama ve kullanma

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 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:

  • 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

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.

Hangi uygulamaların hangi cihaz ikizi özellikleriyle etkileşim kurduğunu gösteren diyagram.

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.

Bildirilen özellik örneği

Ö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.

İstenen özellik örneği

Ö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:

  1. 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"
        },
        ...
    },
    
  2. 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"
        }
        ...
    }
    
  3. 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.

Arka uç işlemleri

Çö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/desiredyeni bir JSON belgesinin yerini alır.

  • Etiketleri değiştirin. Bu işlem tüm mevcut etiketlerin üzerine tamamen yazar ve için tagsyeni 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:

Cihaz işlemleri

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 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.

    Not

    İleti Yönlendirme'de kullanılan IoT Hub sorguları, anahtar adının bir parçası olarak boşluk veya aşağıdaki karakterlerden herhangi birini desteklemez: ()<>@,;:\"/?={}.

  • 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 değeri için 8 KB boyut sınırı, ve properties/reporteddeğerinde tagsher properties/desired biri için 32 KB boyut sınırı uygular. Bu toplamlar ve $metadata/$lastUpdatedgibi $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/desiredveya properties/reported belgelerinin boyutunu tagssınırın üzerinde artıracak tüm işlemler hatayla reddeder.

Cihaz ikizi meta verileri

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.mmmZkodlanmış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).

İyimser eşzamanlılık

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 etagsahiptir. 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.

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 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:

  1. Cihaz uygulaması bir IoT hub'ına bağlanır.
  2. Cihaz uygulaması, istenen özellikler güncelleştirme bildirimlerine abonedir.
  3. 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 tüm bildirimleri $version 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: