Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Zařízení IoT Plug and Play implementuje model popsaný schématem DTDL (Digital Twins Definition Language). Model popisuje sadu komponent, vlastností, příkazů a zpráv telemetrie, které může mít konkrétní zařízení.
Poznámka:
DTDL není exkluzivní pro IoT Plug and Play. Jiné služby IoT, jako je Azure Digital Twins, ji používají k reprezentaci celých prostředí, jako jsou budovy a energetické sítě.
Sady SDK služby Azure IoT zahrnují rozhraní API, která umožňují službě pracovat s digitálním dvojčetem zařízení. Služba může například číst vlastnosti zařízení z digitálního dvojčete nebo pomocí digitálního dvojčete volat příkaz na zařízení. Další informace najdete v příkladech digitálních dvojčat služby IoT Hub.
Příklad zařízení IoT Plug and Play v tomto článku implementuje model regulátoru teploty , který obsahuje součásti termostatu .
Dvojčata zařízení a digitální dvojčata
Kromě digitálního dvojčete udržuje Azure IoT Hub také dvojče zařízení pro každé připojené zařízení. Dvojče zařízení se podobá digitálnímu dvojčeti v tom, že představuje vlastnosti zařízení. IoT Hub inicializuje digitální dvojče a dvojče zařízení při prvotním zprovoznění zařízení IoT Plug and Play. Sady SDK služby Azure IoT zahrnují rozhraní API pro interakci s dvojčaty zařízení.
Dvojčata zařízení jsou dokumenty JSON s uloženými informacemi o stavu zařízení, včetně metadat, konfigurací a podmínek. Další informace najdete v příkladech klienta služby IoT Hub. Zařízení i tvůrci řešení mohou k implementaci zařízení a řešení pomocí konvencí IoT Plug and Play používat stejnou sadu rozhraní API pro dvojčata zařízení a SDK. Ve dvojčeti zařízení se stav zapisovatelné vlastnosti rozdělí mezi požadované vlastnosti a ohlášené vlastnosti. Všechny vlastnosti jen pro čtení jsou k dispozici v části ohlášených vlastností.
Rozhraní API digitálního dvojčete pracují s konstrukcemi DTDL vysoké úrovně, jako jsou komponenty, vlastnosti a příkazy, a usnadňují tvůrcům řešení vytváření řešení IoT Plug and Play. V digitálním dvojčeti je jednotné zobrazení aktuálního a požadovaného stavu majetku. Stav synchronizace pro danou vlastnost je uložen v odpovídající části výchozí komponenty $metadata .
Příklad JSON dvojčete zařízení
Následující fragment kódu ukazuje dvojče zařízení IoT Plug and Play formátované jako objekt JSON:
{
"deviceId": "sample-device",
"modelId": "dtmi:com:example:TemperatureController;1",
"version": 15,
"properties": {
"desired": {
"thermostat1": {
"__t": "c",
"targetTemperature": 21.8
},
"$metadata": {...},
"$version": 4
},
"reported": {
"serialNumber": "alwinexlepaho8329",
"thermostat1": {
"maxTempSinceLastReboot": 25.3,
"__t": "c",
"targetTemperature": {
"value": 21.8,
"ac": 200,
"ad": "Successfully executed patch",
}
},
"$metadata": {...},
"$version": 11
}
}
}
Příklad digitálního dvojčete
Následující fragment kódu ukazuje digitální dvojče naformátované jako objekt JSON:
{
"$dtId": "sample-device",
"serialNumber": "alwinexlepaho8329",
"thermostat1": {
"maxTempSinceLastReboot": 25.3,
"targetTemperature": 21.8,
"$metadata": {
"targetTemperature": {
"desiredValue": 21.8,
"desiredVersion": 4,
"ackVersion": 4,
"ackCode": 200,
"ackDescription": "Successfully executed patch",
"lastUpdateTime": "2020-07-17T06:11:04.9309159Z"
},
"maxTempSinceLastReboot": {
"lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
}
}
},
"$metadata": {
"$model": "dtmi:com:example:TemperatureController;1",
"serialNumber": {
"lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
}
}
}
Následující tabulka popisuje pole v objektu JSON digitálního dvojčete:
| Název pole | Popis |
|---|---|
$dtId |
Řetězec poskytnutý uživatelem představující ID digitálního dvojčete zařízení. |
{propertyName} |
Hodnota vlastnosti ve formátu JSON. |
$metadata.$model |
[Volitelné] ID rozhraní modelu, které charakterizuje toto digitální dvojče. |
$metadata.{propertyName}.desiredValue |
[Pouze pro zapisovatelné vlastnosti] Požadovaná hodnota zadané vlastnosti. |
$metadata.{propertyName}.desiredVersion |
[Pouze pro zapisovatelné vlastnosti] Verze požadované hodnoty spravované službou IoT Hub. |
$metadata.{propertyName}.ackVersion |
[Povinné, pouze pro zapisovatelné vlastnosti] Verze potvrzená zařízením, která implementuje digitální dvojče, musí být větší nebo rovna požadované verzi. |
$metadata.{propertyName}.ackCode |
[Povinné, pouze pro zapisovatelné vlastnosti] Kód ack vrácený aplikací zařízení, která implementuje digitální dvojče. |
$metadata.{propertyName}.ackDescription |
[Volitelné, pouze pro zapisovatelné vlastnosti] Popis ack, který vrací aplikace zařízení, jež implementuje digitální dvojče. |
$metadata.{propertyName}.lastUpdateTime |
IoT Hub udržuje časové razítko poslední aktualizace vlastnosti zařízením. Časová razítka jsou v UTC a kódovaná ve formátu ISO8601 RRRR-MM-DDTHH:MM:SS.mmmZ. |
{componentName} |
Objekt JSON obsahující hodnoty vlastností a metadat komponenty. |
{componentName}.{propertyName} |
Hodnota vlastnosti komponenty ve formátu JSON. |
{componentName}.$metadata |
Informace o metadatech komponenty. |
Vlastnosti
Vlastnosti jsou datová pole, která představují stav entity stejně jako vlastnosti v mnoha objektově orientovaných programovacích jazycích.
Vlastnost pouze pro čtení
Schéma DTDL:
{
"@type": "Property",
"name": "serialNumber",
"displayName": "Serial Number",
"description": "Serial number of the device.",
"schema": "string"
}
V tomto příkladu je alwinexlepaho8329 aktuální hodnota vlastnosti serialNumber, která je stavěná pouze ke čtení a je hlášena zařízením.
Následující fragmenty kódu ukazují souběžnou reprezentaci serialNumber JSON vlastnosti:
Dvojče zařízení
"properties": {
"reported": {
"serialNumber": "alwinexlepaho8329"
}
}
Digitální dvojče
"serialNumber": "alwinexlepaho8329"
Zapisovatelná vlastnost
Následující příklady ukazují zapisovatelnou vlastnost ve výchozí komponentě.
DTDL:
{
"@type": "Property",
"name": "fanSpeed",
"displayName": "Fan Speed",
"writable": true,
"schema": "double"
}
Dvojče zařízení
{
"properties": {
"desired": {
"fanSpeed": 2.0,
},
"reported": {
"fanSpeed": {
"value": 3.0,
"ac": 200,
"av": 1,
"ad": "Successfully executed patch version 1"
}
}
},
}
Digitální dvojče
{
"fanSpeed": 3.0,
"$metadata": {
"fanSpeed": {
"desiredValue": 2.0,
"desiredVersion": 2,
"ackVersion": 1,
"ackCode": 200,
"ackDescription": "Successfully executed patch version 1",
"lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
}
}
}
V tomto příkladu 3.0 je aktuální hodnota fanSpeed vlastnosti hlášené zařízením.
2.0 je požadovaná hodnota nastavená řešením. Požadovaný stav hodnoty a synchronizace vlastnosti kořenové úrovně je nastaven v kořenové úrovni $metadata digitálního dvojčete. Když je zařízení online, může tuto aktualizaci použít a ohlásit zpět aktualizovanou hodnotu.
Součásti
Komponenty umožňují sestavit rozhraní modelu jako sestavení jiných rozhraní. Například termostat rozhraní lze začlenit jako součásti thermostat1 a thermostat2 do modelu teplotního kontroleru .
Ve dvojčeti { "__t": "c"} zařízení značka identifikuje komponentu. V digitálním dvojčeti označuje přítomnost $metadata komponenty.
V tomto příkladu thermostat1 je komponenta se dvěma vlastnostmi:
-
maxTempSinceLastRebootje vlastnost určená jen pro čtení. -
targetTemperatureje zapisovatelná vlastnost, kterou zařízení úspěšně synchronizovalo. Požadovaná hodnota a stav synchronizace těchto vlastností jsou v komponentě$metadata.
Následující fragmenty kódu ukazují souběžnou reprezentaci thermostat1 JSON komponenty:
Dvojče zařízení
"properties": {
"desired": {
"thermostat1": {
"__t": "c",
"targetTemperature": 21.8
},
"$metadata": {
},
"$version": 4
},
"reported": {
"thermostat1": {
"maxTempSinceLastReboot": 25.3,
"__t": "c",
"targetTemperature": {
"value": 21.8,
"ac": 200,
"ad": "Successfully executed patch",
"av": 4
}
},
"$metadata": {
},
"$version": 11
}
}
Digitální dvojče
"thermostat1": {
"maxTempSinceLastReboot": 25.3,
"targetTemperature": 21.8,
"$metadata": {
"targetTemperature": {
"desiredValue": 21.8,
"desiredVersion": 4,
"ackVersion": 4,
"ackCode": 200,
"ackDescription": "Successfully executed patch",
"lastUpdateTime": "2020-07-17T06:11:04.9309159Z"
},
"maxTempSinceLastReboot": {
"lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
}
}
}
Rozhraní API digitálního dvojčete
Rozhraní API digitálního dvojčete zahrnují operace Get Digital Twin, Update Digital Twin, Invoke Component Command a Invoke Command pro správu digitálního dvojčete. Rozhraní REST API můžete používat přímo nebo prostřednictvím jedné ze sad SDK služby.
Události změn u digitálních dvojčat
Když jsou aktivovány události změn pro digitální dvojče, událost se spustí pokaždé, když se změní aktuální nebo požadovaná hodnota komponenty či vlastnosti. Události změn digitálního dvojčete se generují ve formátu JSON Patch. Odpovídající události se generují ve formátu dvojčete zařízení, pokud jsou povoleny události změny dvojčete.
Jak povolit směrování pro události zařízení a digitálního dvojčete se dozvíte v tématu Použití směrování zpráv služby IoT Hub k odesílání zpráv ze zařízení do cloudu do různých koncových bodů. Informace o formátu zprávy najdete v tématu Vytváření a čtení zpráv ioT Hubu.
Například následující událost změny digitálního dvojčete se aktivuje, když řešení nastaví targetTemperature hodnotu:
iothub-connection-device-id:sample-device
iothub-enqueuedtime:7/17/2020 6:11:04 AM
iothub-message-source:digitalTwinChangeEvents
correlation-id:275d463fa034
content-type:application/json-patch+json
content-encoding:utf-8
[
{
"op": "add",
"path": "/thermostat1/$metadata/targetTemperature",
"value": {
"desiredValue": 21.8,
"desiredVersion": 4
}
}
]
Následující událost změny digitálního dvojčete se aktivuje, když zařízení hlásí, že byla použita předchozí požadovaná změna:
iothub-connection-device-id:sample-device
iothub-enqueuedtime:7/17/2020 6:11:05 AM
iothub-message-source:digitalTwinChangeEvents
correlation-id:275d464a2c80
content-type:application/json-patch+json
content-encoding:utf-8
[
{
"op": "add",
"path": "/thermostat1/$metadata/targetTemperature/ackCode",
"value": 200
},
{
"op": "add",
"path": "/thermostat1/$metadata/targetTemperature/ackDescription",
"value": "Successfully executed patch"
},
{
"op": "add",
"path": "/thermostat1/$metadata/targetTemperature/ackVersion",
"value": 4
},
{
"op": "add",
"path": "/thermostat1/$metadata/targetTemperature/lastUpdateTime",
"value": "2020-07-17T06:11:04.9309159Z"
},
{
"op": "add",
"path": "/thermostat1/targetTemperature",
"value": 21.8
}
]
Poznámka:
Zprávy s oznámením o změně dvojčete se zdvojnásobí, pokud jsou zapnuty jak na zařízení, tak i v systému oznámení o změně digitálního dvojčete.