Principy digitálních dvojčat IoT Plug and Play

Zařízení technologie Plug and Play IoT 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 technologie 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á službě umožňují interakci digitálního dvojčete 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 technologie 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 prvním zřízení technologie Plug and Play zařízení IoT. 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í můžou k implementaci zařízení a řešení pomocí konvencí ioT technologie Plug and Play používat stejnou sadu rozhraní API dvojčat zařízení i sad SDK. Ve dvojčeti zařízení se stav zapisovatelné vlastnosti rozdělí mezi požadované vlastnosti a oddíly ohlášených vlastností . 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 technologie Plug and Play. V digitálním dvojčeti je jednotné zobrazení aktuálního a požadovaného stavu vlastnosti. 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 technologie 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í implementuje digitální dvojče.
$metadata.{propertyName}.ackDescription [Volitelné, pouze pro zapisovatelné vlastnosti] Popis ack vrácený aplikací zařízení 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 jen pro čtení

Schéma DTDL:

{
    "@type": "Property",
    "name": "serialNumber",
    "displayName": "Serial Number",
    "description": "Serial number of the device.",
    "schema": "string"
}

V tomto příkladu alwinexlepaho8329 je aktuální hodnota serialNumber vlastnosti jen pro čtení hlášené 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.

Komponenty

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 zařízení je komponenta identifikována značkou { "__t": "c"} . V digitálním dvojčeti označuje přítomnost $metadata komponenty.

V tomto příkladu thermostat1 je komponenta se dvěma vlastnostmi:

  • maxTempSinceLastReboot je vlastnost určená jen pro čtení.
  • targetTemperature je 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, které spravují digitální dvojče. Rozhraní REST API můžete používat přímo nebo prostřednictvím jedné ze sad SDK služby.

Události změn digitálního dvojčete

Pokud jsou povolené události změn digitálního dvojčete, při každé změně aktuální nebo požadované hodnoty nějaké komponenty nebo vlastnosti se aktivuje událost. Události změn digitálního dvojčete se generují ve formátu opravy JSON. Odpovídající události se generují ve formátu dvojčete zařízení, pokud jsou povolené události změny dvojčete.

Informace o povolení směrování pro události zařízení a 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ů. 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 při targetTemperature nastavení řešením:

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 výše 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 po zapnutí v oznámení o změně digitálního dvojčete zdvojnásobí.

Další kroky

Teď, když jste se seznámili s digitálními dvojčaty, najdete tady několik dalších zdrojů informací: