Telemetri, egenskaper och kommandonyttolaster

En enhetsmodell definierar:

  • Telemetri som en enhet skickar till en tjänst.
  • Egenskaper som en enhet synkroniserar med en tjänst.
  • Kommandon som tjänsten anropar på en enhet.

Dricks

Azure IoT Central är en tjänst som följer Plug and Play-konventionerna. I IoT Central ingår enhetsmodellen i en enhetsmall. IoT Central stöder för närvarande DTDL v2 med ett IoT Central-tillägg. Ett IoT Central-program förväntar sig att ta emot UTF-8-kodade JSON-data.

Den här artikeln beskriver JSON-nyttolaster som enheter skickar och tar emot för telemetri, egenskaper och kommandon som definierats i en DTDL-enhetsmodell.

Artikeln beskriver inte alla möjliga typer av telemetri, egenskap och kommandonyttolast, men exemplen illustrerar nyckeltyper.

Varje exempel visar ett kodfragment från enhetsmodellen som definierar typen och JSON-exempelnyttolaster för att illustrera hur enheten ska interagera med en Plug and Play-medveten tjänst, till exempel IoT Central.

I JSON-exempelfragmenten i den här artikeln används DTDL V2 (Digital Twin Definition Language). Det finns också vissa DTDL-tillägg som IoT Central använder.

Exempel på enhetskod som visar några av dessa nyttolaster som används finns i Anslut ett exempelprogram för IoT Plug and Play-enheter som körs på Linux eller Windows till IoT Hub eller självstudien Skapa och ansluta ett klientprogram till ditt Azure IoT Central-program.

Visa rådata

Om du använder IoT Central kan du visa rådata som en enhet skickar till ett program. Den här vyn är användbar för felsökning av problem med nyttolasten som skickas från en enhet. Så här visar du rådata som en enhet skickar:

  1. Gå till enheten från sidan Enheter .

  2. Välj fliken Rådata :

    Screenshot that shows the raw data view.

    I den här vyn kan du välja vilka kolumner som ska visas och ange ett tidsintervall som ska visas. Kolumnen Odefinierade data visar data från enheten som inte matchar några egenskaps- eller telemetridefinitioner i enhetsmallen.

Mer felsökningstips finns i Felsöka varför data från dina enheter inte visas i Azure IoT Central.

Telemetri

Mer information om namngivningsregler för DTDL-telemetri finns i DTDL-telemetri>. Du kan inte starta ett telemetrinamn med _ tecknet .

Skapa inte telemetrityper med följande namn. IoT Central använder dessa reserverade namn internt. Om du försöker använda dessa namn ignorerar IoT Central dina data:

  • EventEnqueuedUtcTime
  • EventProcessedUtcTime
  • PartitionId
  • EventHub
  • User
  • $metadata
  • $version

Telemetri i komponenter

Om telemetrin definieras i en komponent lägger du till en anpassad meddelandeegenskap med $.sub namnet på komponenten enligt definitionen i enhetsmodellen. Mer information finns i Självstudie: Anslut ett IoT Plug and Play-program för flera komponenter. Den här självstudien visar hur du använder olika programmeringsspråk för att skicka telemetri från en komponent.

Viktigt!

Om du vill visa telemetri från komponenter som finns i IoT Edge-moduler korrekt använder du IoT Edge version 1.2.4 eller senare. Om du använder en tidigare version visas telemetri från dina komponenter i IoT Edge-moduler som _unmodeleddata.

Telemetri i ärvda gränssnitt

Om telemetrin definieras i ett ärvt gränssnitt skickar enheten telemetrin som om den definieras i rotgränssnittet. Med följande enhetsmodell:

[
    {
        "@id": "dtmi:contoso:device;1",
        "@type": "Interface",
        "contents": [
            {
                "@type": [
                    "Property",
                    "Cloud",
                    "StringValue"
                ],
                "displayName": {
                    "en": "Device Name"
                },
                "name": "DeviceName",
                "schema": "string"
            }
        ],
        "displayName": {
            "en": "Contoso Device"
        },
        "extends": [
            "dtmi:contoso:sensor;1"
        ],
        "@context": [
            "dtmi:iotcentral:context;2",
            "dtmi:dtdl:context;2"
        ]
    },
    {
        "@context": [
            "dtmi:iotcentral:context;2",
            "dtmi:dtdl:context;2"
        ],
        "@id": "dtmi:contoso:sensor;1",
        "@type": [
            "Interface",
            "NamedInterface"
        ],
        "contents": [
            {
                "@type": [
                    "Telemetry",
                    "NumberValue"
                ],
                "displayName": {
                    "en": "Meter Voltage"
                },
                "name": "MeterVoltage",
                "schema": "double"
            }
        ],
        "displayName": {
            "en": "Contoso Sensor"
        },
        "name": "ContosoSensor"
    }
]

Enheten skickar telemetri för mätarspänning med hjälp av följande nyttolast. Enheten innehåller inte gränssnittsnamnet i nyttolasten:

{
    "MeterVoltage": 5.07
}

Primitiva typer

Det här avsnittet visar exempel på primitiva telemetrityper som en enhet kan strömma.

Följande kodfragment från en enhetsmodell visar definitionen av en boolean telemetrityp:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "BooleanTelemetry"
  },
  "name": "BooleanTelemetry",
  "schema": "boolean"
}

En enhetsklient bör skicka telemetrin som JSON som ser ut som i följande exempel:

{ "BooleanTelemetry": true }

Följande kodfragment från en enhetsmodell visar definitionen av en string telemetrityp:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "StringTelemetry"
  },
  "name": "StringTelemetry",
  "schema": "string"
}

En enhetsklient bör skicka telemetrin som JSON som ser ut som i följande exempel:

{ "StringTelemetry": "A string value - could be a URL" }

Följande kodfragment från en enhetsmodell visar definitionen av en integer telemetrityp:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "IntegerTelemetry"
  },
  "name": "IntegerTelemetry",
  "schema": "integer"
}

En enhetsklient bör skicka telemetrin som JSON som ser ut som i följande exempel:

{ "IntegerTelemetry": 23 }

Följande kodfragment från en enhetsmodell visar definitionen av en double telemetrityp:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "DoubleTelemetry"
  },
  "name": "DoubleTelemetry",
  "schema": "double"
}

En enhetsklient bör skicka telemetrin som JSON som ser ut som i följande exempel:

{ "DoubleTelemetry": 56.78 }

Följande kodfragment från en enhetsmodell visar definitionen av en dateTime telemetrityp:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "DateTimeTelemetry"
  },
  "name": "DateTimeTelemetry",
  "schema": "dateTime"
}

En enhetsklient ska skicka telemetrin som JSON som ser ut som i följande exempel – DateTime typer måste vara i ISO 8061-format:

{ "DateTimeTelemetry": "2020-08-30T19:16:13.853Z" }

Följande kodfragment från en enhetsmodell visar definitionen av en duration telemetrityp:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "DurationTelemetry"
  },
  "name": "DurationTelemetry",
  "schema": "duration"
}

En enhetsklient ska skicka telemetrin som JSON som ser ut som i följande exempel – varaktigheterna måste vara i ISO 8601-format:

{ "DurationTelemetry": "PT10H24M6.169083011336625S" }

Komplexa typer

Det här avsnittet visar exempel på komplexa telemetrityper som en enhet kan strömma.

Följande kodfragment från en enhetsmodell visar definitionen av en Enum telemetrityp:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "EnumTelemetry"
  },
  "name": "EnumTelemetry",
  "schema": {
    "@type": "Enum",
    "displayName": {
      "en": "Enum"
    },
    "valueSchema": "integer",
    "enumValues": [
      {
        "displayName": {
          "en": "Item1"
        },
        "enumValue": 0,
        "name": "Item1"
      },
      {
        "displayName": {
          "en": "Item2"
        },
        "enumValue": 1,
        "name": "Item2"
      },
      {
        "displayName": {
          "en": "Item3"
        },
        "enumValue": 2,
        "name": "Item3"
      }
    ]
  }
}

En enhetsklient bör skicka telemetrin som JSON som ser ut som i följande exempel. Möjliga värden är 0, 1och 2 som visas i IoT Central som Item1, Item2och Item3:

{ "EnumTelemetry": 1 }

Följande kodfragment från en enhetsmodell visar definitionen av en Object telemetrityp. Det här objektet har tre fält med typerna dateTime, integeroch Enum:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "ObjectTelemetry"
  },
  "name": "ObjectTelemetry",
  "schema": {
    "@type": "Object",
    "displayName": {
      "en": "Object"
    },
    "fields": [
      {
        "displayName": {
          "en": "Property1"
        },
        "name": "Property1",
        "schema": "dateTime"
      },
      {
        "displayName": {
          "en": "Property2"
        },
        "name": "Property2",
        "schema": "integer"
      },
      {
        "displayName": {
          "en": "Property3"
        },
        "name": "Property3",
        "schema": {
          "@type": "Enum",
          "displayName": {
            "en": "Enum"
          },
          "valueSchema": "integer",
          "enumValues": [
            {
              "displayName": {
                "en": "Item1"
              },
              "enumValue": 0,
              "name": "Item1"
            },
            {
              "displayName": {
                "en": "Item2"
              },
              "enumValue": 1,
              "name": "Item2"
            },
            {
              "displayName": {
                "en": "Item3"
              },
              "enumValue": 2,
              "name": "Item3"
            }
          ]
        }
      }
    ]
  }
}

En enhetsklient bör skicka telemetrin som JSON som ser ut som i följande exempel. DateTime måste vara ISO 8061-kompatibla. Möjliga värden för Property3 är 0, 1och som visas i IoT Central som Item1, Item2och Item3:

{
  "ObjectTelemetry": {
      "Property1": "2020-09-09T03:36:46.195Z",
      "Property2": 37,
      "Property3": 2
  }
}

Följande kodfragment från en enhetsmodell visar definitionen av en vector telemetrityp:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "VectorTelemetry"
  },
  "name": "VectorTelemetry",
  "schema": "vector"
}

En enhetsklient bör skicka telemetrin som JSON som ser ut som i följande exempel:

{
  "VectorTelemetry": {
    "x": 74.72395045538597,
    "y": 74.72395045538597,
    "z": 74.72395045538597
  }
}

Följande kodfragment från en enhetsmodell visar definitionen av en geopoint telemetrityp:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "GeopointTelemetry"
  },
  "name": "GeopointTelemetry",
  "schema": "geopoint"
}

Kommentar

Schematypen geopoint är en del av IoT Central-tillägget till DTDL. IoT Central stöder för närvarande geopoint-schematypen och platssemantisk typ för bakåtkompatibilitet.

En enhetsklient bör skicka telemetrin som JSON som ser ut som i följande exempel. IoT Central visar värdet som en pin-kod på en karta:

{
  "GeopointTelemetry": {
    "lat": 47.64263,
    "lon": -122.13035,
    "alt": 0
  }
}

Händelse- och tillståndstyper

Det här avsnittet visar exempel på telemetrihändelser och tillstånd som en enhet skickar till ett IoT Central-program.

Kommentar

Schematyperna händelse och tillstånd ingår i IoT Central-tillägget till DTDL.

Följande kodfragment från en enhetsmodell visar definitionen av en integer händelsetyp:

{
  "@type": [
    "Telemetry",
    "Event"
  ],
  "displayName": {
    "en": "IntegerEvent"
  },
  "name": "IntegerEvent",
  "schema": "integer"
}

En enhetsklient ska skicka händelsedata som JSON som ser ut som följande exempel:

{ "IntegerEvent": 74 }

Följande kodfragment från en enhetsmodell visar definitionen av en integer tillståndstyp:

{
  "@type": [
    "Telemetry",
    "State"
  ],
  "displayName": {
    "en": "IntegerState"
  },
  "name": "IntegerState",
  "schema": {
    "@type": "Enum",
    "valueSchema": "integer",
    "enumValues": [
      {
        "displayName": {
          "en": "Level1"
        },
        "enumValue": 1,
        "name": "Level1"
      },
      {
        "displayName": {
          "en": "Level2"
        },
        "enumValue": 2,
        "name": "Level2"
      },
      {
        "displayName": {
          "en": "Level3"
        },
        "enumValue": 3,
        "name": "Level3"
      }
    ]
  }
}

En enhetsklient ska skicka tillståndet som JSON som ser ut som i följande exempel. Möjliga heltalstillståndsvärden är 1, 2eller 3:

{ "IntegerState": 2 }

Egenskaper

Mer information om namngivningsregler för DTDL-egenskaper finns i DTDL-egenskapen>. Du kan inte starta ett egenskapsnamn med hjälp av _ tecknet.

Egenskaper i komponenter

Om egenskapen definieras i en komponent omsluter du egenskapen i komponentnamnet. I följande exempel anges maxTempSinceLastReboot i komponenten thermostat2 . Markören __t anger att det här avsnittet definierar en komponent:

{
  "thermostat2" : {  
    "__t" : "c",  
    "maxTempSinceLastReboot" : 38.7
    } 
}

Mer information finns i Självstudie: Skapa och ansluta ett klientprogram till ditt Azure IoT Central-program.

Primitiva typer

Det här avsnittet visar exempel på primitiva egenskapstyper som en enhet skickar till en tjänst.

Följande kodfragment från en enhetsmodell visar definitionen av en boolean egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "BooleanProperty"
  },
  "name": "BooleanProperty",
  "schema": "boolean",
  "writable": false
}

En enhetsklient bör skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen:

{ "BooleanProperty": false }

Följande kodfragment från en enhetsmodell visar definitionen av en long egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "LongProperty"
  },
  "name": "LongProperty",
  "schema": "long",
  "writable": false
}

En enhetsklient bör skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen:

{ "LongProperty": 439 }

Följande kodfragment från en enhetsmodell visar definitionen av en date egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "DateProperty"
  },
  "name": "DateProperty",
  "schema": "date",
  "writable": false
}

En enhetsklient bör skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen. Date måste vara ISO 8061-kompatibla:

{ "DateProperty": "2020-05-17" }

Följande kodfragment från en enhetsmodell visar definitionen av en duration egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "DurationProperty"
  },
  "name": "DurationProperty",
  "schema": "duration",
  "writable": false
}

En enhetsklient ska skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen – varaktigheten måste vara ISO 8601 Varaktighetskompatibel:

{ "DurationProperty": "PT10H24M6.169083011336625S" }

Följande kodfragment från en enhetsmodell visar definitionen av en float egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "FloatProperty"
  },
  "name": "FloatProperty",
  "schema": "float",
  "writable": false
}

En enhetsklient bör skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen:

{ "FloatProperty": 1.9 }

Följande kodfragment från en enhetsmodell visar definitionen av en string egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "StringProperty"
  },
  "name": "StringProperty",
  "schema": "string",
  "writable": false
}

En enhetsklient bör skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen:

{ "StringProperty": "A string value - could be a URL" }

Komplexa typer

Det här avsnittet visar exempel på komplexa egenskapstyper som en enhet skickar till en tjänst.

Följande kodfragment från en enhetsmodell visar definitionen av en Enum egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "EnumProperty"
  },
  "name": "EnumProperty",
  "writable": false,
  "schema": {
    "@type": "Enum",
    "displayName": {
      "en": "Enum"
    },
    "valueSchema": "integer",
    "enumValues": [
      {
        "displayName": {
          "en": "Item1"
        },
        "enumValue": 0,
        "name": "Item1"
      },
      {
        "displayName": {
          "en": "Item2"
        },
        "enumValue": 1,
        "name": "Item2"
      },
      {
        "displayName": {
          "en": "Item3"
        },
        "enumValue": 2,
        "name": "Item3"
      }
    ]
  }
}

En enhetsklient bör skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen. Möjliga värden är 0, 1och som visas i IoT Central som Item1, Item2och Item3:

{ "EnumProperty": 1 }

Följande kodfragment från en enhetsmodell visar definitionen av en Object egenskapstyp. Det här objektet har två fält med typer string och integer:

{
  "@type": "Property",
  "displayName": {
    "en": "ObjectProperty"
  },
  "name": "ObjectProperty",
  "writable": false,
  "schema": {
    "@type": "Object",
    "displayName": {
      "en": "Object"
    },
    "fields": [
      {
        "displayName": {
          "en": "Field1"
        },
        "name": "Field1",
        "schema": "integer"
      },
      {
        "displayName": {
          "en": "Field2"
        },
        "name": "Field2",
        "schema": "string"
      }
    ]
  }
}

En enhetsklient bör skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen:

{
  "ObjectProperty": {
    "Field1": 37,
    "Field2": "A string value"
  }
}

Följande kodfragment från en enhetsmodell visar definitionen av en vector egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "VectorProperty"
  },
  "name": "VectorProperty",
  "schema": "vector",
  "writable": false
}

En enhetsklient bör skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen:

{
  "VectorProperty": {
    "x": 74.72395045538597,
    "y": 74.72395045538597,
    "z": 74.72395045538597
  }
}

Följande kodfragment från en enhetsmodell visar definitionen av en geopoint egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "GeopointProperty"
  },
  "name": "GeopointProperty",
  "schema": "geopoint",
  "writable": false
}

Kommentar

Schematypen geopoint är en del av IoT Central-tillägget till DTDL. IoT Central stöder för närvarande geopoint-schematypen och platssemantisk typ för bakåtkompatibilitet.

En enhetsklient bör skicka en JSON-nyttolast som ser ut som följande exempel som en rapporterad egenskap i enhetstvillingen:

{
  "GeopointProperty": {
    "lat": 47.64263,
    "lon": -122.13035,
    "alt": 0
  }
}

Skrivbara egenskapstyper

Det här avsnittet visar exempel på skrivbara egenskapstyper som en enhet tar emot från en tjänst.

Om den skrivbara egenskapen definieras i en komponent innehåller det önskade egenskapsmeddelandet komponentnamnet. I följande exempel visas meddelandet som begär att enheten ska uppdatera targetTemperature i komponenten thermostat2 . Markören __t anger att det här avsnittet definierar en komponent:

{
  "thermostat2": {
    "targetTemperature": {
      "value": 57
    },
    "__t": "c"
  },
  "$version": 3
}

Mer information finns i Anslut ett IoT Plug and Play-program för flera komponenter.

Enheten eller modulen bör bekräfta att den tog emot egenskapen genom att skicka en rapporterad egenskap. Den rapporterade egenskapen bör innehålla:

  • value – det faktiska värdet för egenskapen (vanligtvis det mottagna värdet, men enheten kan besluta att rapportera ett annat värde).
  • ac – en bekräftelsekod som använder en HTTP-statuskod.
  • av – en bekräftelseversion som refererar till den $version önskade egenskapen. Du hittar det här värdet i den önskade egenskapenS JSON-nyttolast.
  • ad – en valfri bekräftelsebeskrivning.

Mer information om dessa fält finns i IoT Plug and Play-konventioner > Bekräftelsesvar

Följande kodfragment från en enhetsmodell visar definitionen av en skrivbar string egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "StringPropertyWritable"
  },
  "name": "StringPropertyWritable",
  "writable": true,
  "schema": "string"
}

Enheten tar emot följande nyttolast från tjänsten:

{  
  "StringPropertyWritable": "A string from IoT Central", "$version": 7
}

Enheten bör skicka följande JSON-nyttolast till tjänsten när den har bearbetat uppdateringen. Det här meddelandet innehåller versionsnumret för den ursprungliga uppdateringen som togs emot från tjänsten.

Dricks

Om tjänsten är IoT Central markerar den egenskapen som synkroniserad i användargränssnittet när den tar emot det här meddelandet:

{
  "StringPropertyWritable": {
    "value": "A string from IoT Central",
    "ac": 200,
    "ad": "completed",
    "av": 7
  }
}

Följande kodfragment från en enhetsmodell visar definitionen av en skrivbar Enum egenskapstyp:

{
  "@type": "Property",
  "displayName": {
    "en": "EnumPropertyWritable"
  },
  "name": "EnumPropertyWritable",
  "writable": true,
  "schema": {
    "@type": "Enum",
    "displayName": {
      "en": "Enum"
    },
    "valueSchema": "integer",
    "enumValues": [
      {
        "displayName": {
          "en": "Item1"
        },
        "enumValue": 0,
        "name": "Item1"
      },
      {
        "displayName": {
          "en": "Item2"
        },
        "enumValue": 1,
        "name": "Item2"
      },
      {
        "displayName": {
          "en": "Item3"
        },
        "enumValue": 2,
        "name": "Item3"
      }
    ]
  }
}

Enheten tar emot följande nyttolast från tjänsten:

{  
  "EnumPropertyWritable":  1 , "$version": 10
}

Enheten bör skicka följande JSON-nyttolast till tjänsten när den har bearbetat uppdateringen. Det här meddelandet innehåller versionsnumret för den ursprungliga uppdateringen som togs emot från tjänsten.

Dricks

Om tjänsten är IoT Central markerar den egenskapen som synkroniserad i användargränssnittet när den tar emot det här meddelandet:

{
  "EnumPropertyWritable": {
    "value": 1,
    "ac": 200,
    "ad": "completed",
    "av": 10
  }
}

Kommandon

Mer information om namngivningsregler för DTDL-kommandon finns i DTDL-kommandot>. Du kan inte starta ett kommandonamn med hjälp av _ tecknet.

Om kommandot definieras i en komponent innehåller namnet på kommandot som enheten tar emot komponentnamnet. Om kommandot till exempel anropas getMaxMinReport och komponenten heter thermostat2tar enheten emot en begäran om att köra ett kommando med namnet thermostat2*getMaxMinReport.

Följande kodfragment från en enhetsmodell visar definitionen av ett kommando som inte har några parametrar och som inte förväntar sig att enheten ska returnera något:

{
  "@type": "Command",
  "displayName": {
    "en": "CommandBasic"
  },
  "name": "CommandBasic"
}

Enheten får en tom nyttolast i begäran och bör returnera en tom nyttolast i svaret med en 200 HTTP-svarskod för att indikera att den lyckades.

Följande kodfragment från en enhetsmodell visar definitionen av ett kommando som har en heltalsparameter och som förväntar sig att enheten returnerar ett heltalsvärde:

{
  "@type": "Command",
  "request": {
    "@type": "CommandPayload",
    "displayName": {
      "en": "RequestParam"
    },
    "name": "RequestParam",
    "schema": "integer"
  },
  "response": {
    "@type": "CommandPayload",
    "displayName": {
      "en": "ResponseParam"
    },
    "name": "ResponseParam",
    "schema": "integer"
  },
  "displayName": {
    "en": "CommandSimple"
  },
  "name": "CommandSimple"
}

Enheten tar emot ett heltalsvärde som nyttolast för begäran. Enheten ska returnera ett heltalsvärde som svarsnyttolast med en 200 HTTP-svarskod för att indikera att det lyckades.

Följande kodfragment från en enhetsmodell visar definitionen av ett kommando som har en objektparameter och som förväntar sig att enheten returnerar ett objekt. I det här exemplet har båda objekten heltals- och strängfält:

{
  "@type": "Command",
  "request": {
    "@type": "CommandPayload",
    "displayName": {
      "en": "RequestParam"
    },
    "name": "RequestParam",
    "schema": {
      "@type": "Object",
      "displayName": {
        "en": "Object"
      },
      "fields": [
        {
          "displayName": {
            "en": "Field1"
          },
          "name": "Field1",
          "schema": "integer"
        },
        {
          "displayName": {
            "en": "Field2"
          },
          "name": "Field2",
          "schema": "string"
        }
      ]
    }
  },
  "response": {
    "@type": "CommandPayload",
    "displayName": {
      "en": "ResponseParam"
    },
    "name": "ResponseParam",
    "schema": {
      "@type": "Object",
      "displayName": {
        "en": "Object"
      },
      "fields": [
        {
          "displayName": {
            "en": "Field1"
          },
          "name": "Field1",
          "schema": "integer"
        },
        {
          "displayName": {
            "en": "Field2"
          },
          "name": "Field2",
          "schema": "string"
        }
      ]
    }
  },
  "displayName": {
    "en": "CommandComplex"
  },
  "name": "CommandComplex"
}

Följande kodfragment visar ett exempel på en nyttolast för begäran som skickas till enheten:

{ "Field1": 56, "Field2": "A string value" }

Följande kodfragment visar ett exempel på svarsnyttolast som skickas från enheten. Använd en 200 HTTP-svarskod för att indikera att det lyckades:

{ "Field1": 87, "Field2": "Another string value" }

Dricks

IoT Central har egna konventioner för att implementera långvariga kommandon och offlinekommandon.

Nästa steg

Nu när du har lärt dig om enhetsnyttolaster är ett föreslaget nästa steg att läsa guiden Enhetsutvecklare.