IoT çözümünde IoT Tak Çalıştır modelleri kullanma

Bu makalede, ioT çözümünde bir IoT Tak Çalıştır cihazının model kimliğini tanımlama ve ardından model tanımını alma işlemleri açıklanmaktadır.

IoT çözümünün iki geniş kategorisi vardır:

  • Amaca yönelik bir çözüm, çözüme bağlanan IoT Tak Çalıştır cihazlar için bilinen bir model kümesiyle çalışır. Çözümü geliştirirken bu modelleri kullanırsınız.

  • Model temelli çözüm, herhangi bir IoT Tak Çalıştır cihazının modeliyle çalışır. Model temelli bir çözüm oluşturmak daha karmaşıktır, ancak bunun avantajı, çözümünüzün gelecekte eklenen tüm cihazlarla birlikte çalışmasıdır. Model temelli IoT çözümü bir modeli alır ve cihazın uyguladığı telemetriyi, özellikleri ve komutları belirlemek için kullanır.

IoT çözümü olan bir IoT Tak Çalıştır modeli kullanmak için:

  1. Çözüme bağlı IoT Tak Çalıştır cihaz, modül veya IoT Edge modülü tarafından uygulanan modelin model kimliğini tanımlar.

  2. Bağlı cihazın model tanımını bir model deposundan veya özel depodan almak için model kimliğini kullanır.

Model kimliğini belirleme

IoT Tak Çalıştır bir cihaz IoT Hub'a bağlandığında, ioT Hub'a uyguladığı modelin model kimliğini kaydeder.

IoT Hub, cihaz bağlantı akışının bir parçası olarak çözüme cihaz modeli kimliğiyle bildirir.

Bir çözüm, aşağıdaki üç yöntemden birini kullanarak IoT Tak Çalıştır cihazının model kimliğini alabilir:

Cihaz İkizi API'sini alma

Çözüm, IoT Tak Çalıştır cihazın model kimliğini almak için Cihaz İkizi Al API'sini kullanabilir.

İpucu

Modüller ve IoT Edge modülleri için ModuleClient.getTwin kullanın.

Aşağıdaki cihaz ikizi yanıt parçacığında, modelId bir IoT Tak Çalıştır cihazının model kimliğini içerir:

{
    "deviceId": "sample-device",
    "etag": "AAAAAAAAAAc=",
    "deviceEtag": "NTk0ODUyODgx",
    "status": "enabled",
    "statusUpdateTime": "0001-01-01T00:00:00Z",
    "connectionState": "Disconnected",
    "lastActivityTime": "2020-07-17T06:12:26.8402249Z",
    "cloudToDeviceMessageCount": 0,
    "authenticationType": "sas",
    "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
    },
    "modelId": "dtmi:com:example:TemperatureController;1",
    "version": 15,
    "properties": {...}
    }
}

Dijital İkiz API'sini edinin

Çözüm, IoT Tak Çalıştır cihaz tarafından uygulanan modelin model kimliğini almak için Dijital İkiz Al API'sini kullanabilir.

Aşağıdaki dijital ikiz yanıt parçacığında, $metadata.$model bir IoT Tak Çalıştır cihazının model kimliğini içerir:

{
    "$dtId": "sample-device",
    "$metadata": {
        "$model": "dtmi:com:example:TemperatureController;1",
        "serialNumber": {
            "lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
        }
    }
}

Dijital ikiz değişikliği olay bildirimi

Cihaz bağlantısı, Dijital İkiz değişiklik olayı bildirimiyle sonuç alır. Bir çözümün bu olay bildirimine abone olması gerekir. Dijital ikiz olayları için yönlendirmeyi etkinleştirmeyi öğrenmek için bkz . Farklı uç noktalara cihazdan buluta ileti göndermek için IoT Hub ileti yönlendirmeyi kullanma.

Çözüm, bağlanan IoT Tak Çalıştır cihazı hakkında bilgi edinmek ve model kimliğini almak için aşağıdaki kod parçacığında gösterilen olayı kullanabilir:

iothub-connection-device-id:sample-device
iothub-enqueuedtime:7/22/2020 8:02:27 PM
iothub-message-source:digitalTwinChangeEvents
correlation-id:100f322dc2c5
content-type:application/json-patch+json
content-encoding:utf-8
[
  {
    "op": "replace",
    "path": "/$metadata/$model",
    "value": "dtmi:com:example:TemperatureController;1"
  }
]

Model tanımını alma

Çözüm, ilgili model tanımını almak için yukarıda tanımlanan model kimliğini kullanır.

Bir çözüm, aşağıdaki seçeneklerden birini kullanarak model tanımını alabilir:

Model deposu

Çözümler DTDL modellerini cihaz modeli deposundan (DMR) alabilir. DMR, Microsoft tarafından barındırılan ve seçilmiş DTDL modellerinden oluşan bir koleksiyon içeren bir genel depodur. DMR'de depolanan genel cihaz modelleri, herkesin uygulamalarına genel uç noktadan https://devicemodels.azure.comerişmesi ve tümleştirmesi için kullanılabilir.

Yeni bir cihaz bağlantısı için model kimliğini belirledikten sonra şu adımları izleyin:

  1. Model deposundaki model kimliğini kullanarak model tanımını alın. Daha fazla bilgi için bkz . Modelleri çözme.

  2. Bağlı cihazın model tanımını kullanarak cihazın özelliklerini numaralandırabilirsiniz.

  3. Cihazın numaralandırılmış özelliklerini kullanarak kullanıcıların cihazla etkileşim kurmasını sağlayabilirsiniz.

Modelleri çözme

DMR kuralları, barındırılan modellerin tüketimini basitleştirmeye yönelik diğer yapıtları içerir. Bu özellikler özel veya özel depolar için isteğe bağlıdır .

DMR'deki genel DTDL modellerine program aracılığıyla erişmek için Azure.IoT.ModelsRepository NuGet paketinde bulunan öğesini kullanabilirsinizModelsRepositoryClient. Bu istemci, varsayılan olarak devicemodels.azure.com'da kullanılabilen genel DMR'yi sorgulamak üzere yapılandırılır ve herhangi bir özel depoda yapılandırılabilir.

İstemci giriş olarak bir DTMI kabul eder ve tüm gerekli arabirimlere sahip bir sözlük döndürür:

using Azure.IoT.ModelsRepository;

var client = new ModelsRepositoryClient();
ModelResult models = client.GetModel("dtmi:com:example:TemperatureController;1");
models.Content.Keys.ToList().ForEach(k => Console.WriteLine(k));

Beklenen çıkış DTMI , bağımlılık zincirinde bulunan üç arabirimi görüntüler:

dtmi:com:example:TemperatureController;1
dtmi:com:example:Thermostat;1
dtmi:azure:DeviceManagement:DeviceInformation;1

, ModelsRepositoryClient http(ler) aracılığıyla kullanılabilen özel bir DMR'yi sorgulamak ve bayrağını kullanarak bağımlılık çözümlemesini ModelDependencyResolution belirtmek için yapılandırılabilir:

  • Devre dışı. Herhangi bir bağımlılık olmadan yalnızca belirtilen arabirimi döndürür.
  • Etkin. Bağımlılık zincirindeki tüm arabirimleri döndürür

İpucu

Özel depolar dosyayı kullanıma sunmayabilir .expanded.json . Bu dosya kullanılamadığında, istemci her bağımlılığı yerel olarak işlemek için geri dönüş yapacaktır.

Aşağıdaki örnek kodda, uç noktada kullanılamadığından formu kullanmadan GitHub API'sindeki URL'leri kullanarak raw özel bir depo temel URL'si kullanarak expanded öğesinin raw nasıl başlatılacağı ModelsRepositoryClient gösterilmektedir. AzureEventSourceListener, istemci tarafından gerçekleştirilen HTTP isteğini incelemek için başlatılır:

using AzureEventSourceListener listener = AzureEventSourceListener.CreateConsoleLogger();

var client = new ModelsRepositoryClient(
    new Uri("https://raw.githubusercontent.com/Azure/iot-plugandplay-models/main"));

ModelResult model = await client.GetModelAsync(
    "dtmi:com:example:TemperatureController;1", 
    dependencyResolution: ModelDependencyResolution.Enabled);

model.Content.Keys.ToList().ForEach(k => Console.WriteLine(k));

Azure SDK GitHub deposunda daha fazla örnek vardır: Azure.Iot.ModelsRepository/samples.

Özel depo

Çözümler bu model tanımlarını yerel bir dosya sisteminde, genel dosya deposunda depolayabilir veya özel bir uygulama kullanabilir.

Yeni bir cihaz bağlantısı için model kimliğini belirledikten sonra şu adımları izleyin:

  1. Özel deponuzdan model kimliğini kullanarak model tanımını alın.

  2. Bağlı cihazın model tanımını kullanarak cihazın özelliklerini numaralandırabilirsiniz.

  3. Cihazın numaralandırılmış özelliklerini kullanarak kullanıcıların cihazla etkileşim kurmasını sağlayabilirsiniz.

Sonraki adımlar

IoT çözümünde IoT Tak Çalıştır modelleri tümleştirmeyi öğrendiğinize göre, önerilen bazı sonraki adımlar şunlardır: