Az IoT Plug and Play digitális ikreinek ismertetése
Az IoT Plug and Play-eszközök a Digital Twins Definition Language (DTDL) sémája által leírt modellt implementálják. A modell leírja azokat az összetevőket, tulajdonságokat, parancsokat és telemetriai üzeneteket, amelyekkel egy adott eszköz rendelkezhet.
Feljegyzés
A DTDL nem kizárólagos az IoT Plug and Play szolgáltatásban. Más IoT-szolgáltatások, például az Azure Digital Twins teljes környezetek, például épületek és energiahálózatok megjelenítésére használják.
Az Azure IoT szolgáltatás SDK-jai olyan API-kat tartalmaznak, amelyek lehetővé teszik egy szolgáltatás számára az eszköz digitális ikerpéldányának használatát. Egy szolgáltatás például beolvassa az eszköz tulajdonságait a digitális ikerpéldányból, vagy a digitális ikerpéldány használatával meghívhat egy parancsot egy eszközön. További információkért lásd az IoT Hub digitális ikerpéldányainak példáit.
A cikkben szereplő IoT Plug and Play-eszköz egy hőmérséklet-vezérlő modellt implementál, amely termosztát-összetevőkkel rendelkezik.
Ikereszközök és digitális ikerpéldányok
A digitális ikerpéldány mellett az Azure IoT Hub minden csatlakoztatott eszközhöz is fenntart egy ikereszközt . Az ikereszköz hasonló a digitális ikerpéldányhoz, mivel az egy eszköz tulajdonságainak ábrázolása. Az IoT Hub inicializál egy digitális ikerpéldányt és egy ikereszközt az IoT Plug and Play-eszköz első üzembe helyezésekor. Az Azure IoT szolgáltatás SDK-jai az ikereszközökkel való interakcióhoz használható API-kat tartalmaznak.
Az ikereszközök JSON-dokumentumok, amelyek az eszközök állapotinformációit, például a metaadatokat, konfigurációkat és állapotokat tárolják. További információkért tekintse meg az IoT Hub szolgáltatás ügyfél-példáit. Az eszköz- és megoldáskészítők ugyanazt az ikereszköz API-kat és SDK-kat használhatják az eszközök és megoldások IoT Plug and Play-konvenciók használatával történő implementálásához. Az ikereszközön a írható tulajdonság állapota fel van osztva a kívánt tulajdonságok és a jelentett tulajdonságok szakaszai között. Az összes írásvédett tulajdonság elérhető a jelentett tulajdonságok szakaszban.
A digitális iker API-k olyan magas szintű DTDL-szerkezeteken működnek, mint az összetevők, tulajdonságok és parancsok, és megkönnyítik a megoldáskészítők számára az IoT Plug and Play-megoldások létrehozását. Egy digitális ikerpéldányban egységes nézet látható a tulajdonság aktuális és kívánt állapotáról. Egy adott tulajdonság szinkronizálási állapotát a megfelelő alapértelmezett összetevőszakasz $metadata
tárolja.
Példa ikereszköz JSON-ra
Az alábbi kódrészlet egy JSON-objektumként formázott IoT Plug and Play-eszközt mutat be:
{
"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élda digitális ikerpéldányra
Az alábbi kódrészlet a JSON-objektumként formázott digitális ikerpéldányt mutatja be:
{
"$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"
}
}
}
Az alábbi táblázat a digitális ikerpéldány JSON-objektumának mezőit ismerteti:
Mező neve | Leírás |
---|---|
$dtId |
Egy felhasználó által megadott sztring, amely az eszköz digitális ikereszközének azonosítóját jelöli. |
{propertyName} |
Egy tulajdonság értéke a JSON-ban. |
$metadata.$model |
[Nem kötelező] A digitális ikerpéldányt jellemző modellfelület azonosítója. |
$metadata.{propertyName}.desiredValue |
[Csak írható tulajdonságok esetén] A megadott tulajdonság kívánt értéke. |
$metadata.{propertyName}.desiredVersion |
[Csak írható tulajdonságok esetén] Az IoT Hub által fenntartott kívánt érték verziója. |
$metadata.{propertyName}.ackVersion |
[Kötelező, csak írható tulajdonságokhoz] A digitális ikerpéldányt megvalósító eszköz által elismert verziónak nagyobb vagy egyenlőnek kell lennie a kívánt verzióval. |
$metadata.{propertyName}.ackCode |
[Kötelező, csak írható tulajdonságokhoz] A ack digitális ikerpéldányt implementáló eszközalkalmazás által visszaadott kód. |
$metadata.{propertyName}.ackDescription |
[Nem kötelező, csak írható tulajdonságok esetén] A ack digitális ikerpéldányt implementáló eszközalkalmazás által visszaadott leírás. |
$metadata.{propertyName}.lastUpdateTime |
Az IoT Hub fenntartja a tulajdonság utolsó frissítésének időbélyegét az eszközön. Az időbélyegek UTC-ben vannak, és ISO8601 YYYY-MM-DDTHH:MM:SS.mmmZ formátumban vannak kódolva. |
{componentName} |
Az összetevő tulajdonságértékeit és metaadatait tartalmazó JSON-objektum. |
{componentName}.{propertyName} |
Az összetevő tulajdonságának értéke a JSON-ban. |
{componentName}.$metadata |
Az összetevő metaadatai. |
Tulajdonságok
A tulajdonságok olyan adatmezők, amelyek egy entitás állapotát képviselik, ugyanúgy, mint számos objektumorientált programozási nyelv tulajdonságai.
Írásvédett tulajdonság
DTDL-séma:
{
"@type": "Property",
"name": "serialNumber",
"displayName": "Serial Number",
"description": "Serial number of the device.",
"schema": "string"
}
Ebben a példában alwinexlepaho8329
az eszköz által jelentett írásvédett tulajdonság aktuális értéke serialNumber
.
Az alábbi kódrészletek a tulajdonság egymás melletti JSON-ábrázolását serialNumber
mutatják:
Ikereszköz
"properties": {
"reported": {
"serialNumber": "alwinexlepaho8329"
}
}
Digitális ikerpéldány
"serialNumber": "alwinexlepaho8329"
Írható tulajdonság
Az alábbi példák egy írható tulajdonságot mutatnak be az alapértelmezett összetevőben.
DTDL:
{
"@type": "Property",
"name": "fanSpeed",
"displayName": "Fan Speed",
"writable": true,
"schema": "double"
}
Ikereszköz
{
"properties": {
"desired": {
"fanSpeed": 2.0,
},
"reported": {
"fanSpeed": {
"value": 3.0,
"ac": 200,
"av": 1,
"ad": "Successfully executed patch version 1"
}
}
},
}
Digitális ikerpéldány
{
"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"
}
}
}
Ebben a példában 3.0
az eszköz által jelentett tulajdonság aktuális értéke fanSpeed
. 2.0
a megoldás által beállított kívánt érték. A gyökérszintű tulajdonság kívánt értéke és szinkronizálási állapota a digitális ikerpéldány gyökérszintén $metadata
belül van beállítva. Amikor az eszköz online állapotba kerül, alkalmazhatja ezt a frissítést, és jelentést készíthet a frissített értékről.
Összetevők
Az összetevők lehetővé teszik a modell felületének összeállítását más felületek szerelvényeként. A Termosztát interfész például összetevőkként thermostat1
és thermostat2
a Hőmérséklet-vezérlő modellmodellben is beépíthető.
Az ikereszközben a jelölő azonosítja az összetevőt { "__t": "c"}
. Egy digitális ikerpéldányban az összetevők jelenléte $metadata
jelzi.
Ebben a példában thermostat1
egy összetevő két tulajdonsággal rendelkezik:
maxTempSinceLastReboot
írásvédett tulajdonság.targetTemperature
egy írható tulajdonság, amelyet az eszköz sikeresen szinkronizált. Ezeknek a tulajdonságoknak a kívánt értéke és szinkronizálási állapota az összetevőben$metadata
található.
Az alábbi kódrészletek az összetevő egymás melletti JSON-ábrázolását thermostat1
mutatják:
Ikereszköz
"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ális ikerpéldány
"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"
}
}
}
Digitális iker API-k
A digitális ikerpéldány API-k közé tartozik a Get Digital Twin, a Digital Twin frissítése, a Komponens parancs meghívása és a Parancs meghívása művelet, amely jobban kezeli a digitális ikerpéldányt. A REST API-kat közvetlenül vagy a szolgáltatás SDK-k egyikén keresztül is használhatja.
Digitális ikermódosítási események
Ha a digitális iker módosítási eseményei engedélyezve vannak, az esemény akkor aktiválódik, amikor az összetevő vagy a tulajdonság aktuális vagy kívánt értéke megváltozik. A digitális ikerpéldány-változási események JSON Patch formátumban jönnek létre. A megfelelő események ikereszköz-formátumban jönnek létre, ha engedélyezve vannak az ikermódosítási események.
Az eszköz- és digitális ikeresemények útválasztásának engedélyezéséről az IoT Hub üzenet-útválasztásának használata az eszközről a felhőbe irányuló üzenetek különböző végpontokra való küldéséhez című témakörben olvashat. Az üzenetformátum megismeréséhez tekintse meg az IoT Hub-üzenetek létrehozását és olvasását.
Például a következő digitális ikerpéldány-változási esemény aktiválódik, amikor targetTemperature
a megoldás beállítja:
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
}
}
]
A következő digitális ikerpéldány-változási esemény akkor aktiválódik, amikor az eszköz a fenti kívánt módosítás alkalmazását jelenti:
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
}
]
Feljegyzés
Az ikerpéldány változásértesítési üzenetei az eszköz és a digitális ikerpéldány változásértesítésének bekapcsolásakor megkétszereződnek.
Következő lépések
Most, hogy megismerkedett a digitális ikerpéldányokkal, íme néhány további forrás: