Konvence IoT Plug and Play
Zařízení IoT technologie Plug and Play by měla při výměně zpráv se službou IoT Hub dodržovat sadu konvencí. Zařízení technologie Plug and Play IoT používají ke komunikaci se službou IoT Hub protokol MQTT. IoT Hub také podporuje protokol AMQP, který je k dispozici v některých sadách SDK zařízení IoT.
Zařízení může obsahovat moduly nebo je implementovat v modulu IoT Edge hostovaném modulem runtime IoT Edge.
Popisujete telemetrii, vlastnosti a příkazy, které zařízení IoT technologie Plug and Play implementuje pomocí modelu DTDL (Digital Twins Definition Language). Existují dva typy modelu uvedené v tomto článku:
- Žádná komponenta – model bez komponent. Model deklaruje telemetrii, vlastnosti a příkazy jako elementy nejvyšší úrovně v části obsahu hlavního rozhraní. V nástroji Azure IoT Explorer se tento model zobrazí jako jedna výchozí komponenta.
- Více komponent – model složený ze dvou nebo více rozhraní. Hlavní rozhraní, které se zobrazuje jako výchozí komponenta s telemetrií, vlastnostmi a příkazy. Jedno nebo více rozhraní deklarovaných jako komponenty s více telemetrií, vlastnostmi a příkazy.
Další informace najdete v průvodci modelováním technologie Plug and Play IoT.
Identifikace modelu
K oznámení modelu, který implementuje, zahrnuje ioT technologie Plug and Play zařízení nebo modul ID modelu v paketu připojení MQTT přidáním model-id
do USERNAME
pole.
K identifikaci modelu, který zařízení nebo modul implementuje, může služba získat ID modelu z:
- Pole dvojčete
modelId
zařízení. - Pole digitálního dvojčete
$metadata.$model
. - Oznámení o změně digitálního dvojčete
Telemetrie
- Telemetrie odeslaná ze zařízení žádné komponenty nevyžaduje žádná další metadata. Systém přidá
dt-dataschema
vlastnost. - Telemetrie odeslaná ze zařízení pomocí komponent musí přidat název komponenty do zprávy telemetrie.
- Při použití MQTT přidejte
$.sub
vlastnost s názvem komponenty do tématu telemetrie, systém vlastnost přidádt-subject
. - Při použití AMQP přidejte
dt-subject
vlastnost s názvem komponenty jako poznámku ke zprávě.
Poznámka:
Telemetrie ze součástí vyžaduje jednu zprávu pro každou komponentu.
Další příklady telemetrie najdete v tématu Telemetrie datových > částí.
Vlastnosti jen pro čtení
Zařízení nastaví vlastnost jen pro čtení, kterou pak hlásí back-endové aplikaci.
Ukázka vlastnosti jen pro čtení součásti
Zařízení nebo modul může odeslat libovolný platný kód JSON, který se řídí pravidly DTDL.
DTDL, která definuje vlastnost v rozhraní:
{
"@context": "dtmi:dtdl:context;2",
"@id": "dtmi:example: Thermostat;1",
"@type": "Interface",
"contents": [
{
"@type": "Property",
"name": "temperature",
"schema": "double"
}
]
}
Ukázková datová část ohlášené vlastnosti:
"reported" :
{
"temperature" : 21.3
}
Ukázka vlastnosti jen pro čtení několika komponent
Zařízení nebo modul musí přidat {"__t": "c"}
značku, která označuje, že prvek odkazuje na komponentu.
DTDL, která odkazuje na komponentu:
{
"@context": "dtmi:dtdl:context;2",
"@id": "dtmi:com:example:TemperatureController;1",
"@type": "Interface",
"displayName": "Temperature Controller",
"contents": [
{
"@type" : "Component",
"schema": "dtmi:com:example:Thermostat;1",
"name": "thermostat1"
}
]
}
DTDL, který definuje komponentu:
{
"@context": "dtmi:dtdl:context;2",
"@id": "dtmi:com:example:Thermostat;1",
"@type": "Interface",
"contents": [
{
"@type": "Property",
"name": "temperature",
"schema": "double"
}
]
}
Ukázková datová část ohlášené vlastnosti:
"reported": {
"thermostat1": {
"__t": "c",
"temperature": 21.3
}
}
Další příklady vlastností jen pro čtení najdete v tématu Vlastnosti datových > částí.
Zapisovatelné vlastnosti
Back-endová aplikace nastaví zapisovatelnou vlastnost, kterou IoT Hub pak odešle do zařízení.
Zařízení nebo modul by měly potvrdit, že obdržela vlastnost odesláním ohlášené vlastnosti. Ohlášená vlastnost by měla zahrnovat:
value
– skutečná hodnota vlastnosti (obvykle přijatá hodnota, ale zařízení se může rozhodnout ohlásit jinou hodnotu).ac
– kód potvrzení, který používá stavový kód HTTP.av
– verze potvrzení, která odkazuje na$version
požadovanou vlastnost. Tuto hodnotu najdete v datové části JSON požadované vlastnosti.ad
– volitelný popis potvrzení.
Odpovědi na potvrzení
Při generování sestav zapisovatelných vlastností by zařízení mělo vytvořit zprávu potvrzení pomocí čtyř polí v předchozím seznamu, která označují skutečný stav zařízení, jak je popsáno v následující tabulce:
Status(ac) | Version(av) | Value(value) | Description(av) |
---|---|---|---|
200 | Požadovaná verze | Požadovaná hodnota | Přijatá hodnota požadované vlastnosti |
202 | Požadovaná verze | Hodnota přijatá zařízením | Požadovaná hodnota vlastnosti byla přijata, probíhá aktualizace (měla by být dokončena s hodnotou 200) |
203 | 0 | Hodnota nastavená zařízením | Vlastnost nastavená ze zařízení, která neodráží žádné požadované |
400 | Požadovaná verze | Skutečná hodnota používaná zařízením | Desired property value not accepted |
500 | Požadovaná verze | Skutečná hodnota používaná zařízením | Výjimka při použití vlastnosti |
Když se zařízení spustí, mělo by požádat o dvojče zařízení a zkontrolovat všechny aktualizace zapisovatelných vlastností. Pokud se verze zapisovatelné vlastnosti zvýšila, když bylo zařízení offline, mělo by zařízení odeslat ohlášenou odpověď na vlastnost, aby potvrdilo, že obdržela aktualizaci.
Když se zařízení poprvé spustí, může odeslat počáteční hodnotu ohlášené vlastnosti, pokud neobdrží počáteční požadovanou vlastnost ze služby IoT Hub. V tomto případě může zařízení odeslat výchozí hodnotu do av
0
a ac
do 203
. Příklad:
"reported": {
"targetTemperature": {
"value": 20.0,
"ac": 203,
"av": 0,
"ad": "initialize"
}
}
Zařízení může ohlášenou vlastnost použít k poskytnutí dalších informací do centra. Zařízení může například reagovat řadou probíhajících zpráv, jako jsou:
"reported": {
"targetTemperature": {
"value": 35.0,
"ac": 202,
"av": 3,
"ad": "In-progress - reporting current temperature"
}
}
Když zařízení dosáhne cílové teploty, odešle následující zprávu:
"reported": {
"targetTemperature": {
"value": 20.0,
"ac": 200,
"av": 4,
"ad": "Reached target temperature"
}
}
Zařízení může nahlásit chybu, například:
"reported": {
"targetTemperature": {
"value": 120.0,
"ac": 500,
"av": 3,
"ad": "Target temperature out of range. Valid range is 10 to 99."
}
}
Object type
Pokud je zapisovatelná vlastnost definována jako objekt, služba musí odeslat kompletní objekt do zařízení. Zařízení by mělo aktualizaci potvrdit odesláním dostatečných informací zpět do služby, aby bylo jasné, jak zařízení na aktualizaci fungovalo. Tato odpověď může zahrnovat:
- Celý objekt.
- Jenom pole, která zařízení aktualizovalo.
- Podmnožina polí
U velkých objektů zvažte minimalizaci velikosti objektu, který zahrnete do potvrzení.
Následující příklad ukazuje zapisovatelnou vlastnost definovanou jako se Object
čtyřmi poli:
DTDL:
{
"@type": "Property",
"name": "samplingRange",
"schema": {
"@type": "Object",
"fields": [
{
"name": "startTime",
"schema": "dateTime"
},
{
"name": "lastTime",
"schema": "dateTime"
},
{
"name": "count",
"schema": "integer"
},
{
"name": "errorCount",
"schema": "integer"
}
]
},
"displayName": "Sampling range"
"writable": true
}
Chcete-li aktualizovat tuto zapisovatelnou vlastnost, odešlete úplný objekt ze služby, který vypadá jako v následujícím příkladu:
{
"samplingRange": {
"startTime": "2021-08-17T12:53:00.000Z",
"lastTime": "2021-08-17T14:54:00.000Z",
"count": 100,
"errorCount": 5
}
}
Zařízení odpoví potvrzením, které vypadá jako v následujícím příkladu:
{
"samplingRange": {
"ac": 200,
"av": 5,
"ad": "Weighing status updated",
"value": {
"startTime": "2021-08-17T12:53:00.000Z",
"lastTime": "2021-08-17T14:54:00.000Z",
"count": 100,
"errorCount": 5
}
}
}
Ukázka vlastnosti zapisovatelné součásti
Když zařízení obdrží několik požadovaných vlastností v jedné datové části, může odeslat ohlášené odpovědi na vlastnost napříč několika datovými částmi nebo zkombinovat odpovědi do jedné datové části.
Zařízení nebo modul může odeslat libovolný platný kód JSON, který se řídí pravidly DTDL.
DTDL:
{
"@context": "dtmi:dtdl:context;2",
"@id": "dtmi:example: Thermostat;1",
"@type": "Interface",
"contents": [
{
"@type": "Property",
"name": "targetTemperature",
"schema": "double",
"writable": true
},
{
"@type": "Property",
"name": "targetHumidity",
"schema": "double",
"writable": true
}
]
}
Ukázková datová část požadované vlastnosti:
"desired" :
{
"targetTemperature" : 21.3,
"targetHumidity" : 80,
"$version" : 3
}
Ukázková hlášená vlastnost– první datová část:
"reported": {
"targetTemperature": {
"value": 21.3,
"ac": 200,
"av": 3,
"ad": "complete"
}
}
Ukázková hlášená vlastnost – druhá datová část:
"reported": {
"targetHumidity": {
"value": 80,
"ac": 200,
"av": 3,
"ad": "complete"
}
}
Poznámka:
Tyto dvě hlášené datové části vlastností můžete zkombinovat do jedné datové části.
Ukázka zapisovatelné vlastnosti s více komponentami
Zařízení nebo modul musí přidat {"__t": "c"}
značku, která označuje, že prvek odkazuje na komponentu.
Značka se odesílá pouze pro aktualizace vlastností definovaných v komponentě. Aktualizace vlastností definovaných ve výchozí komponentě nezahrnují značku, viz Ukázka žádné zapisovatelné vlastnosti komponenty.
Když zařízení obdrží více ohlášených vlastností v jedné datové části, může odeslat ohlášené odpovědi na vlastnost napříč několika datovými částmi nebo zkombinovat odpovědi do jedné datové části.
Zařízení nebo modul by měl potvrdit, že obdržel vlastnosti odesláním ohlášených vlastností:
DTDL, která odkazuje na komponentu:
{
"@context": "dtmi:dtdl:context;2",
"@id": "dtmi:com:example:TemperatureController;1",
"@type": "Interface",
"displayName": "Temperature Controller",
"contents": [
{
"@type" : "Component",
"schema": "dtmi:com:example:Thermostat;1",
"name": "thermostat1"
}
]
}
DTDL, který definuje komponentu:
{
"@context": "dtmi:dtdl:context;2",
"@id": "dtmi:com:example:Thermostat;1",
"@type": "Interface",
"contents": [
{
"@type": "Property",
"name": "targetTemperature",
"schema": "double",
"writable": true
}
]
}
Ukázková datová část požadované vlastnosti:
"desired": {
"thermostat1": {
"__t": "c",
"targetTemperature": 21.3,
"targetHumidity": 80,
"$version" : 3
}
}
Ukázková hlášená vlastnost– první datová část:
"reported": {
"thermostat1": {
"__t": "c",
"targetTemperature": {
"value": 23,
"ac": 200,
"av": 3,
"ad": "complete"
}
}
}
Ukázková hlášená vlastnost – druhá datová část:
"reported": {
"thermostat1": {
"__t": "c",
"targetHumidity": {
"value": 80,
"ac": 200,
"av": 3,
"ad": "complete"
}
}
}
Poznámka:
Tyto dvě hlášené datové části vlastností můžete zkombinovat do jedné datové části.
Další příklady zapisovatelných vlastností najdete v tématu Vlastnosti datových > částí.
Příkazy
Žádná rozhraní komponent nepoužívají název příkazu bez předpony.
V zařízení nebo modulu používá více rozhraní komponent názvy příkazů s následujícím formátem: componentName*commandName
.
Další příklady příkazů najdete v tématu Příkazy datových > částí.
Tip
IoT Central má vlastní konvence pro implementaci dlouhotrvajících příkazů a příkazů offline.
Další kroky
Teď, když jste se seznámili s konvencemi technologie Plug and Play IoT, tady jsou některé další zdroje informací: