Použití modelů technologie Plug and Play IoT v řešení IoT

Tento článek popisuje, jak v řešení IoT identifikovat ID modelu technologie Plug and Play zařízení IoT a pak načíst jeho definici modelu.

Existují dvě široké kategorie řešení IoT:

  • Účelově vytvořené řešení funguje se známou sadou modelů pro zařízení ioT technologie Plug and Play, která se k řešení připojují. Tyto modely použijete při vývoji řešení.

  • Modelem řízené řešení funguje s modelem libovolného zařízení ioT technologie Plug and Play. Vytvoření modelem řízeného řešení je složitější, ale výhodou je, že vaše řešení funguje s všechna zařízení přidaná v budoucnu. Modelem řízené řešení IoT načte model a používá ho k určení telemetrie, vlastností a příkazů, které zařízení implementuje.

Pokud chcete použít model technologie Plug and Play IoT, řešení IoT:

  1. Identifikuje ID modelu modelu implementovaného modulem IoT technologie Plug and Play zařízení, modulem nebo modulem IoT Edge připojeným k řešení.

  2. Pomocí ID modelu načte definici modelu připojeného zařízení z úložiště modelu nebo vlastního úložiště.

Identifikace ID modelu

Když se zařízení IoT technologie Plug and Play připojí ke službě IoT Hub, zaregistruje ID modelu, který implementuje ve službě IoT Hub.

IoT Hub oznámí řešení ID modelu zařízení jako součást toku připojení zařízení.

Řešení může získat ID modelu zařízení IoT technologie Plug and Play pomocí jedné z následujících tří metod:

Získání rozhraní API dvojčete zařízení

Řešení může k načtení ID modelu zařízení technologie Plug and Play zařízení použít rozhraní Get Device Twin API.

Tip

Pro moduly a moduly IoT Edge použijte ModuleClient.getTwin.

V následujícím fragmentu modelId odpovědi dvojčete zařízení obsahuje ID modelu technologie Plug and Play zařízení IoT:

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

Získání rozhraní API služby Digital Twin

Řešení může pomocí rozhraní GET Digital Twin API načíst ID modelu implementovaného zařízením IoT technologie Plug and Play.

V následujícím fragmentu $metadata.$model odpovědi digitálního dvojčete obsahuje ID modelu zařízení technologie Plug and Play IoT:

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

Oznámení události změny digitálního dvojčete

Výsledkem připojení zařízení je oznámení události změny digitálního dvojčete. Řešení se musí přihlásit k odběru tohoto oznámení události. Informace o povolení směrování pro události digitálního dvojčete najdete v tématu Použití směrování zpráv služby IoT Hub k odesílání zpráv typu zařízení-cloud do různých koncových bodů.

Řešení může použít událost zobrazenou v následujícím fragmentu kódu, abyste se dozvěděli o zařízení IoT technologie Plug and Play, které se připojuje, a získalo JEHO ID modelu:

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

Načtení definice modelu

Řešení používá k načtení odpovídající definice modelu ID modelu uvedené výše.

Řešení může získat definici modelu pomocí jedné z následujících možností:

Úložiště modelů

Řešení můžou načítat modely DTDL z úložiště modelů zařízení (DMR). DMR je veřejné úložiště hostované Microsoftem, které obsahuje kolekci kurátorovaných modelů DTDL. Veřejné modely zařízení uložené v DMR jsou k dispozici všem uživatelům, kteří můžou využívat a integrovat své aplikace z veřejného koncového bodu https://devicemodels.azure.com.

Po identifikaci ID modelu pro nové připojení zařízení postupujte takto:

  1. Načtěte definici modelu pomocí ID modelu z úložiště modelu. Další informace najdete v tématu Řešení modelů.

  2. Pomocí definice modelu připojeného zařízení můžete zobrazit výčet funkcí zařízení.

  3. Pomocí výčtových funkcí zařízení můžete uživatelům povolit interakci se zařízením.

Řešení modelů

Konvence DMR zahrnují další artefakty pro zjednodušení spotřeby hostovaných modelů. Tyto funkce jsou volitelné pro vlastní nebo privátní úložiště.

Pokud chcete prostřednictvím kódu programu přistupovat k veřejným modelům DTDL v DMR, můžete použít ModelsRepositoryClient dostupné v balíčku NuGet Azure.IoT.ModelsRepository. Tento klient je ve výchozím nastavení nakonfigurovaný tak, aby dotazoval veřejné zobrazení dynamické správy dostupné v devicemodels.azure.com a lze ho nakonfigurovat pro libovolné vlastní úložiště.

Klient přijímá DTMI jako vstup a vrací slovník se všemi požadovanými rozhraními:

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

Očekávaný výstup zobrazí DTMI tři rozhraní nalezená v řetězci závislostí:

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

ModelsRepositoryClient Dá se nakonfigurovat tak, aby dotazoval vlastní dmR dostupný prostřednictvím http(s) a pomocí příznaku ModelDependencyResolution určil rozlišení závislostí:

  • Deaktivováno. Vrátí pouze zadané rozhraní bez jakékoli závislosti.
  • Povolený Vrátí všechna rozhraní v řetězci závislostí.

Tip

Vlastní úložiště nemusí soubor vystavit .expanded.json . Pokud tento soubor není k dispozici, klient se vrátí ke zpracování jednotlivých závislostí místně.

Následující ukázkový kód ukazuje, jak inicializovat ModelsRepositoryClient pomocí vlastní základní adresy URL úložiště, v tomto případě pomocí raw adres URL z rozhraní API GitHubu bez použití expanded formuláře, protože není k dispozici v koncovém raw bodu. Inicializuje AzureEventSourceListener se ke kontrole požadavku HTTP prováděného klientem:

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

V úložišti GitHub sady Azure SDK jsou k dispozici další ukázky: Azure.Iot.ModelsRepository/samples.

Vlastní úložiště

Řešení můžou tyto definice modelu ukládat v místním systému souborů, ve veřejném úložišti souborů nebo používat vlastní implementaci.

Po identifikaci ID modelu pro nové připojení zařízení postupujte takto:

  1. Načtěte definici modelu pomocí ID modelu z vlastního úložiště.

  2. Pomocí definice modelu připojeného zařízení můžete zobrazit výčet funkcí zařízení.

  3. Pomocí výčtových funkcí zařízení můžete uživatelům povolit interakci se zařízením.

Další kroky

Teď, když jste se naučili integrovat modely IoT technologie Plug and Play do řešení IoT, najdete několik navrhovaných dalších kroků: