テレメトリ、プロパティ、コマンドのペイロード

デバイス モデルでは、次のものが定義されます。

  • デバイスがサービスに送信するテレメトリ。
  • デバイスがサービスと同期するプロパティ。
  • サービスがデバイスで呼び出すコマンド。

ヒント

Azure IoT Central は、プラグ アンド プレイ規則に従うサービスです。 IoT Central では、デバイス モデルはデバイス テンプレートの 一部です。 現在、IoT Central では、IoT Central 拡張機能を備えた DTDL v2 がサポートされています。 IoT Central アプリケーションは、UTF-8 でエンコードされた JSON データを受信することを想定しています。

この記事では、DTDL デバイス モデルで定義されているテレメトリ、プロパティ、コマンドに対してデバイスが送受信する JSON ペイロードについて説明します。

この記事では、使用可能なすべての種類のテレメトリ、プロパティ、およびコマンド ペイロードについて説明しているわけではありませんが、例ではキーの種類を示しています。

各例は、デバイスが IoT Central などのプラグ アンド プレイ対応サービスと対話する方法を示すために、JSON ペイロードの種類と例を定義するデバイス モデルのスニペットを示しています。

この記事の JSON スニペットの例では、Digital Twin Definition Language (DTDL) V2 を使用 します。 IoT Central で使用される DTDL 拡張機能もあります

使用されているこれらのペイロードの一部を示すサンプル デバイス コードについては、「Linux または Windows で実行されているサンプル IoT プラグ アンド プレイ デバイス アプリケーションを IoT Hub に接続する」チュートリアルまたは「クライアント アプリケーションを作成して Azure IoT Central アプリケーションに接続する」チュートリアルを参照してください。

生データを表示する

IoT Central を使用している場合は、デバイスがアプリケーションに送信する生データを表示できます。 この表示は、デバイスから送信されるペイロードに関する問題のトラブルシューティングに役立ちます。 デバイスが送信中の生データを表示するには、次の手順に従います。

  1. [デバイス] ページの目的のデバイスに移動します。

  2. [生データ] タブを選択します。

    Screenshot that shows the raw data view.

    このビューでは、表示する列を選択したり、確認対象の時間の範囲を設定したりできます。 [Unmodeled data]\(モデル化されていないデータ\) 列には、デバイス テンプレート内のプロパティまたはテレメトリ定義と一致しないデバイス データが表示されます。

トラブルシューティングのヒントの詳細については、「デバイスからのデータが Azure IoT Central に表示されない理由のトラブルシューティング」を参照してください

テレメトリ

DTDL テレメトリの名前付け規則について詳しくは、「DTDL > テレメトリ」を参照してください。 テレメトリ名の先頭で、_ 文字は使用できません。

次の名前でテレメトリの種類を作成しないでください。 IoT Central では、これらの予約済みの名前が内部で使用されます。 これらの名前を使用しようとすると、IoT Central はデータを無視します。

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

コンポーネント内のテレメトリ

テレメトリがコンポーネントで定義されている場合は、$.sub というカスタム メッセージ プロパティを、デバイス モデルで定義されているコンポーネントの名前で追加します。 詳細については、「チュートリアル: IoT プラグ アンド プレイ複数のコンポーネント デバイス アプリケーションを接続する」を参照してください。 このチュートリアルでは、さまざまなプログラミング言語を使用してコンポーネントからテレメトリを送信する方法について説明します。

重要

IoT Edge モジュールでホストされているコンポーネントのテレメトリを正しく表示するには、IoT Edgeバージョン1.2.4以降を使用します。 以前のバージョンを使用している場合、IoT Edge モジュール内のコンポーネントのテレメトリは _unmodeleddata として表示されます。

継承されたインターフェイスのテレメトリ

テレメトリが継承インターフェイスで定義されている場合、デバイスはルート インターフェイスで定義されているかのようにテレメトリを送信します。 次のデバイス モデルが考えられます。

[
    {
        "@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"
    }
]

デバイスは、次のペイロードを使用してメーター電圧テレメトリを送信します。 デバイスには、ペイロードにインターフェイス名が含まれていません。

{
    "MeterVoltage": 5.07
}

プリミティブ型

このセクションでは、デバイスがストリーミングできるプリミティブ テレメトリの種類の例を示します。

デバイス モデルの次のスニペットは、boolean 型のテレメトリの定義を示しています。

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

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。

{ "BooleanTelemetry": true }

デバイス モデルの次のスニペットは、string 型のテレメトリの定義を示しています。

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

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。

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

デバイス モデルの次のスニペットは、integer 型のテレメトリの定義を示しています。

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

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。

{ "IntegerTelemetry": 23 }

デバイス モデルの次のスニペットは、double 型のテレメトリの定義を示しています。

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

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。

{ "DoubleTelemetry": 56.78 }

デバイス モデルの次のスニペットは、dateTime 型のテレメトリの定義を示しています。

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

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。DateTime の型は、ISO 8061 形式にする必要があります。

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

デバイス モデルの次のスニペットは、duration 型のテレメトリの定義を示しています。

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

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。期間は ISO 8601 形式にする必要があります。

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

複合型

このセクションでは、デバイスがストリーミングできる複雑なテレメトリの種類の例を示します。

デバイス モデルの次のスニペットは、Enum 型のテレメトリの定義を示しています。

{
  "@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"
      }
    ]
  }
}

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。 指定できる値は、IoT Central では Item1Item2Item3 として表示される 012 です。

{ "EnumTelemetry": 1 }

デバイス モデルの次のスニペットは、Object 型のテレメトリの定義を示しています。 このオブジェクトには、dateTime 型、integer 型、Enum 型である 3 つのフィールドがあります。

{
  "@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"
            }
          ]
        }
      }
    ]
  }
}

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。 DateTime 型は、ISO 8061 に準拠している必要があります。 Property3 に使用できる値は 01 で、IoT Central では Item1Item2Item3 として表示されます。

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

デバイス モデルの次のスニペットは、vector 型のテレメトリの定義を示しています。

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

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。

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

デバイス モデルの次のスニペットは、geopoint 型のテレメトリの定義を示しています。

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

Note

geopoint スキーマの種類は、DTDL に対する IoT Central 拡張機能の一部です。 IoT Central では、現在、下位互換性のために geopoint スキーマ型と location セマンティック型がサポートされています。

デバイス クライアントは、次の例のようなテレメトリを JSON として送信する必要があります。 IoT Central では、値は地図上のピンとして表示されます。

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

イベント型と状態型

このセクションでは、デバイスが IoT Central アプリケーションに送信する、テレメトリのイベントおよび状態の例を示します。

Note

イベントと状態のスキーマの種類は、DTDL の IoT Central 拡張機能の一部です。

デバイス モデルの次のスニペットは、integer 型のイベントの定義を示しています。

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

デバイス クライアントは、次の例のようなイベント データを JSON として送信する必要があります。

{ "IntegerEvent": 74 }

デバイス モデルの次のスニペットは、integer 型の状態の定義を示しています。

{
  "@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"
      }
    ]
  }
}

デバイス クライアントは、次の例のような状態を JSON として送信する必要があります。 状態の使用できる整数値は、12、または 3 です。

{ "IntegerState": 2 }

プロパティ

DTDL プロパティの名前付け規則について詳しくは、「DTDL > プロパティ」を参照してください。 プロパティ名の先頭で、_ 文字は使用できません。

コンポーネント内のプロパティ

コンポーネントでプロパティが定義されている場合は、コンポーネント名でプロパティをラップします。 次の例では thermostat2 コンポーネント内で maxTempSinceLastReboot を設定します。 このマーカー __t は、このセクションがコンポーネントを定義していることを示します。

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

詳細については、「チュートリアル: クライアント アプリケーションを作成して Azure IoT Central アプリケーションに接続する」を参照してください。

プリミティブ型

このセクションでは、デバイスがサービスに送信するプリミティブ プロパティ型の例を示します。

デバイス モデルの次のスニペットは、boolean 型のプロパティの定義を示しています。

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

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。

{ "BooleanProperty": false }

デバイス モデルの次のスニペットは、long 型のプロパティの定義を示しています。

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

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。

{ "LongProperty": 439 }

デバイス モデルの次のスニペットは、date 型のプロパティの定義を示しています。

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

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。 Date 型は、ISO 8061 に準拠している必要があります。

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

デバイス モデルの次のスニペットは、duration 型のプロパティの定義を示しています。

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

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。期間は、ISO 8601 の期間に準拠している必要があります。

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

デバイス モデルの次のスニペットは、float 型のプロパティの定義を示しています。

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

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。

{ "FloatProperty": 1.9 }

デバイス モデルの次のスニペットは、string 型のプロパティの定義を示しています。

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

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。

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

複合型

このセクションでは、デバイスがサービスに送信する複合プロパティ型の例を示します。

デバイス モデルの次のスニペットは、Enum 型のプロパティの定義を示しています。

{
  "@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"
      }
    ]
  }
}

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。 指定できる値は、IoT Central では Item1Item2Item3 として表示される 01 です。

{ "EnumProperty": 1 }

デバイス モデルの次のスニペットは、Object 型のプロパティの定義を示しています。 このオブジェクトには、string 型と integer 型である 2 つのフィールドがあります。

{
  "@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"
      }
    ]
  }
}

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。

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

デバイス モデルの次のスニペットは、vector 型のプロパティの定義を示しています。

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

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。

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

デバイス モデルの次のスニペットは、geopoint 型のプロパティの定義を示しています。

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

Note

geopoint スキーマの種類は、DTDL に対する IoT Central 拡張機能の一部です。 IoT Central では、現在、下位互換性のために geopoint スキーマ型と location セマンティック型がサポートされています。

デバイス クライアントは、次の例のような JSON ペイロードを、デバイス ツインの reported プロパティとして送信する必要があります。

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

書き込み可能なプロパティ型

このセクションでは、デバイスがサービスから受け取る書き込み可能なプロパティ型の例を示します。

書き込み可能なプロパティがコンポーネント内で定義されている場合は、目的のプロパティ メッセージにコンポーネント名が含まれています。 次の例は、thermostat2 コンポーネントの targetTemperature を更新するようにデバイスに要求するメッセージを示しています。 このマーカー __t は、このセクションがコンポーネントを定義していることを示します。

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

詳細については、「複数のコンポーネント デバイス アプリケーションIoT プラグ アンド プレイ接続する」を参照してください

デバイスまたはモジュールでは、reported プロパティを送信することで、プロパティを受け取ったことを確認する必要があります。 報告されたプロパティには次のものが含まれます。

  • value - プロパティの実際の値 (通常は受信した値。ただし、デバイスは別の値を報告するように決定できます)。
  • ac - HTTP 状態コードを使用する受信確認コード。
  • av - 目的のプロパティの $version を参照する確認バージョン。 この値は、必要なプロパティの JSON ペイロードで見つけることができます。
  • ad - 省略可能な受信確認の説明。

これらのフィールドの詳細については、「受信確認応答IoT プラグ アンド プレイ規則>」を参照してください

デバイス モデルの次のスニペットは、書き込み可能な string プロパティ型の定義を示しています。

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

デバイスは、サービスから次のペイロードを受け取ります。

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

デバイスは、更新を処理した後、次の JSON ペイロードをサービスに送信する必要があります。 このメッセージには、サービスから受信した元の更新プログラムのバージョン番号が含まれます。

ヒント

サービスが IoT Central の場合、このメッセージを受信すると、プロパティは UI で同期済みとしてマークされます。

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

デバイス モデルの次のスニペットは、書き込み可能な Enum プロパティ型の定義を示しています。

{
  "@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"
      }
    ]
  }
}

デバイスは、サービスから次のペイロードを受け取ります。

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

デバイスは、更新を処理した後、次の JSON ペイロードをサービスに送信する必要があります。 このメッセージには、サービスから受信した元の更新プログラムのバージョン番号が含まれます。

ヒント

サービスが IoT Central の場合、このメッセージを受信すると、プロパティは UI で同期済みとしてマークされます。

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

コマンド

DTDL コマンドの名前付け規則について詳しくは、「DTDL > コマンド」を参照してください。 コマンド名の先頭で、_ 文字は使用できません。

コマンドがコンポーネント内で定義されている場合、デバイスが受信するコマンドの名前には、コンポーネント名が含まれています。 たとえば、コマンドの名前が getMaxMinReport で、コンポーネントの名前が thermostat2 の場合、デバイスは thermostat2*getMaxMinReport というコマンドを実行するための要求を受け取ります。

デバイス モデルの次のスニペットは、パラメーターがなく、デバイスが何かを返すことを想定していないコマンドの定義を示しています。

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

デバイスは要求で空のペイロードを受信します。そして応答では、成功を示すために 200 HTTP 応答コードを使用して空のペイロードを返す必要があります。

デバイス モデルの次のスニペットは、整数型のパラメーターが 1 つあり、デバイスが整数値を返すことを想定しているコマンドの定義を示しています。

{
  "@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"
}

デバイスは、要求ペイロードとして整数値を受け取ります。 デバイスは、成功を示すために、200 HTTP 応答コードを使用して応答ペイロードとして整数値を返す必要があります。

デバイス モデルの次のスニペットは、オブジェクト パラメーターが 1 つあり、デバイスがオブジェクトを返すことを想定しているコマンドの定義を示しています。 この例では、どちらのオブジェクトにも整数フィールドと文字列フィールドがあります。

{
  "@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"
}

次のスニペットは、デバイスに送信される要求ペイロードの例を示しています。

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

次のスニペットは、デバイスから送信される応答ペイロードの例を示しています。 200 HTTP 応答コードを使用して成功を示します。

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

ヒント

IoT Central には、実行時間の長いコマンドオフライン コマンドを実装するための独自の規則があります。

次のステップ

デバイス ペイロードについて学習したので、推奨される次の手順は、デバイス開発者ガイド読むことをお勧めします。