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:
Çö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.
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:
Model deposundaki model kimliğini kullanarak model tanımını alın. Daha fazla bilgi için bkz . Modelleri çözme.
Bağlı cihazın model tanımını kullanarak cihazın özelliklerini numaralandırabilirsiniz.
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 .
- Dizin. Kullanılabilir tüm DTMI'ler, bir dizi json dosyası tarafından oluşturulan bir dizin aracılığıyla kullanıma sunulur, örneğin: https://devicemodels.azure.com/index.page.2.json
- Genişletilmiş. Tüm bağımlılıkları içeren bir dosya her arabirim için kullanılabilir, örneğin: https://devicemodels.azure.com/dtmi/com/example/temperaturecontroller-1.expanded.json
- Meta veriler. Bu dosya bir deponun temel özniteliklerini kullanıma sunar ve en son yayımlanan modeller anlık görüntüsüyle düzenli aralıklarla yenilenir. Bir deponun uyguladığı model dizini veya genişletilmiş model dosyalarının kullanılabilir olup olmadığı gibi özellikler içerir. DMR meta verilerine şu konumdan erişebilirsiniz: https://devicemodels.azure.com/metadata.json
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:
Özel deponuzdan model kimliğini kullanarak model tanımını alın.
Bağlı cihazın model tanımını kullanarak cihazın özelliklerini numaralandırabilirsiniz.
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:
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin