Bagikan melalui


Menggunakan model IoT Plug and Play dalam solusi IoT

Artikel ini menjelaskan cara mengidentifikasi ID model perangkat IoT Plug and Play dalam solusi IoT lalu mengambil definisi modelnya.

Ada dua kategori solusi IoT yang luas:

  • Solusi yang dibuat khusus berfungsi dengan serangkaian model yang diketahui untuk perangkat IoT Plug and Play yang terhubung ke solusi. Anda menggunakan model ini saat mengembangkan solusi.

  • Solusi berbasis model berfungsi dengan model perangkat IoT Plug and Play apa pun. Membangun solusi berbasis model lebih kompleks, tetapi manfaatnya adalah solusi Anda berfungsi dengan perangkat apa pun yang ditambahkan di masa depan. Solusi IoT berbasis model mengambil model dan menggunakannya untuk menentukan telemetri, properti, dan perintah yang diterapkan perangkat.

Untuk menggunakan model IoT Plug and Play, solusi IoT:

  1. Mengidentifikasi ID model dari model yang diimplementasikan oleh perangkat IoT Plug and Play, modul, atau modul IoT Edge yang tesambung ke solusi.

  2. Menggunakan ID model untuk mengambil definisi model perangkat yang tersambung dari repositori model atau penyimpanan kustom.

Identifikasi ID model

Saat perangkat IoT Plug and Play tersambung ke IoT Hub, perangkat mendaftarkan ID model dari model yang diimplementasikan dengan IoT Hub.

IoT Hub memberi tahu solusi dengan ID model perangkat sebagai bagian dari alur koneksi perangkat.

Solusi bisa mendapatkan ID model perangkat IoT Plug and Play dengan menggunakan salah satu dari tiga metode berikut:

API Get Device Twin

Solusi dapat menggunakan Get Device Twin API untuk mengambil ID model perangkat IoT Plug and Play.

Tip

Untuk modul dan modul IoT Edge, gunakan ModuleClient.getTwin.

Dalam cuplikan respons device twin berikut, modelId berisi ID model perangkat IoT Plug and Play:

{
    "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": {...}
    }
}

API Get Digital Twin

Solusi dapat menggunakan Get Digital Twin API untuk mengambil ID model dari model yang diimplementasikan oleh perangkat IoT Plug and Play.

Dalam cuplikan respons digital twin berikut, $metadata.$model berisi ID model perangkat IoT Plug and Play:

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

Notifikasi kejadian perubahan digital twin

Koneksi perangkat mengakibatkan notifikasi kejadian perubahan Digital Twin. Solusi harus berlangganan notifikasi kejadian ini. Untuk mempelajari cara mengaktifkan perutean untuk kejadian digital twin, lihat Menggunakan perutean pesan IoT Hub untuk mengirim pesan perangkat ke cloud ke titik akhir yang berbeda.

Solusi dapat menggunakan kejadian yang ditunjukkan dalam cuplikan berikut guna mempelajari perangkat IoT Plug and Play yang tersambung dan mendapatkan ID modelnya:

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"
  }
]

Mengambil definisi model

Solusi menggunakan ID model yang diidentifikasi sebelumnya untuk mengambil definisi model yang sesuai.

Solusi bisa mendapatkan definisi model dengan menggunakan salah satu opsi berikut:

Repositori model

Solusi dapat mengambil model DTDL dari repositori model perangkat (DMR). DMR adalah repositori publik, yang dihosting oleh Microsoft, yang berisi kumpulan model DTDL yang dikumpulkan. Model perangkat publik yang disimpan di DMR tersedia bagi semua orang untuk dikonsumsi dan diintegrasikan dalam aplikasi mereka dari titik https://devicemodels.azure.comakhir publik .

Setelah Anda mengidentifikasi ID model untuk koneksi perangkat baru, ikuti langkah berikut:

  1. Ambil definisi model menggunakan ID model dari repositori model. Untuk informasi selengkapnya, lihat Mengatasi model.

  2. Dengan menggunakan definisi model dari perangkat yang tersambung, Anda dapat memperkirakan kemampuan perangkat.

  3. Dengan menggunakan kemampuan perangkat yang dijumlahkan, Anda dapat memungkinkan pengguna berinteraksi dengan perangkat.

Mengatasi model

Konvensi DMR mencakup artefak lain untuk menyederhanakan konsumsi model yang dihosting. Berbagai fitur ini opsional untuk repositori kustom atau privat.

Untuk mengakses model DTDL publik secara terprogram di DMR, Anda dapat menggunakan yang ModelsRepositoryClient tersedia dalam paket NuGet Azure.IoT.ModelsRepository. Klien ini dikonfigurasi secara default untuk mengkueri DMR publik yang tersedia di devicemodels.azure.com dan dapat dikonfigurasi ke repositori kustom apa pun.

Klien menerima DTMI sebagai input dan mengembalikan kamus dengan semua antarmuka yang diperlukan:

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));

Output yang diharapkan menampilkan DTMI dari tiga antarmuka yang ditemukan dalam rantai dependensi:

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

ModelsRepositoryClient dapat dikonfigurasi untuk mengkueri DMR kustom--tersedia melalui https--dan untuk menentukan resolusi dependensi dengan menggunakan ModelDependencyResolution bendera:

  • Dinonaktifkan. Mengembalikan antarmuka yang ditentukan saja, tanpa dependensi apa pun.
  • Diaktifkan. Mengembalikan semua antarmuka dalam rantai dependensi

Tip

Repositori kustom mungkin tidak mengekspos .expanded.json file. Ketika file ini tidak tersedia, klien akan mundur untuk memproses setiap dependensi secara lokal.

Kode sampel berikut menunjukkan cara menginisialisasi ModelsRepositoryClient dengan menggunakan URL dasar repositori kustom, dalam hal ini menggunakan raw URL dari GITHub API tanpa menggunakan expanded formulir karena tidak tersedia di raw titik akhir. AzureEventSourceListener diinisialisasi untuk memeriksa permintaan HTTP yang dilakukan oleh klien:

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));

Ada lebih banyak sampel yang tersedia di repositori GitHub Azure SDK: Azure.Iot.ModelsRepository/samples.

Penyimpanan kustom

Solusi dapat menyimpan definisi model ini dalam sistem file lokal, di penyimpanan file publik, atau menggunakan implementasi kustom.

Setelah Anda mengidentifikasi ID model untuk koneksi perangkat baru, ikuti langkah berikut:

  1. Ambil definisi model menggunakan ID model dari penyimpanan kustom Anda.

  2. Dengan menggunakan definisi model dari perangkat yang tersambung, Anda dapat memperkirakan kemampuan perangkat.

  3. Dengan menggunakan kemampuan perangkat yang dijumlahkan, Anda dapat memungkinkan pengguna berinteraksi dengan perangkat.

Langkah berikutnya

Sekarang setelah Anda mempelajari cara mengintegrasikan model IoT Plug and Play dalam solusi IoT, beberapa langkah berikutnya yang disarankan adalah: