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

デバイス モデルでは、以下が定義されます。

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

ヒント

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 Plug and Play のサンプル デバイス アプリケーションを IoT Hub に接続する」のチュートリアルと「クライアント アプリケーションを作成して Azure IoT Central アプリケーションに接続する」のチュートリアルを参照してください。

生データを表示する

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

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

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

    生データ ビューを示すスクリーンショット。

    このビューでは、表示する列を選択したり、確認対象の時間の範囲を設定したりできます。 [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

event および state スキーマ型は、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 には、実行時間の長いコマンドオフライン コマンドを実装するための独自の規則があります。

次のステップ

ここでは、デバイス ペイロードについて説明しました。推奨される次のステップは、デバイス開発者ガイドを読むことです。