シナリオ: HTTPを使用したデフォルト形式での構造化データの送信
このシナリオは、構造化データをデフォルト・フォーマットでInternet of Things (IoT)プラットフォームに送信するIoTデバイスに使用します。
このシナリオは、IoTプラットフォームで想定される形式でデータを送信するようにプログラムできるデバイスに適用されます。このシナリオでは、デジタル・ツイン・モデル、デジタル・ツイン・アダプタ、デジタル・ツイン・インスタンスを作成し、IoTプラットフォームで定義された形式でテレメトリ・データを送信するように物理デバイスを構成する必要があります。
管理者は、テナンシおよび使用するコンパートメントにポリシーを追加する必要があります。ポリシーの例および前提条件については、Internet of Things (IoT)プラットフォームのポリシー詳細およびIoTの前提条件を参照してください。
タスク
ステップ1: IoTドメイン・グループおよびIoTドメインの作成
既存のIoTドメイン・グループおよびIoTドメインを使用するか、IoTドメイン・グループを作成して、このシナリオに使用するIoTドメインを作成します。
作業するIoTドメイン・グループおよびIoTドメインがある場合は、次のステップに従って、構造化データをデバイスからデフォルト形式で受信するようにデジタル・ツイン・リソースを設定します。すべてのIoTリソースは同じリージョンに存在する必要があります。
ステップ2: デジタル・ツイン・モデルの作成
CLIの使用
- コード・スニペットを
digital-twin-model.jsonファイルとして保存します。デジタル・ツイン・モデルを作成する場合は、次のステップでこのファイルを参照します。ファイルの参照の詳細は、複合入力へのJSONファイルの使用を参照してください。このファイルを作成するには、デジタル・ツイン定義言語(DTDL)を使用して、デジタル・ツイン・モデルのセマンティクスを定義します。デジタル・ツイン・モデルは、デジタル・ツイン・モデル識別子(DTMI)を一意の識別子として使用します。
たとえば:
{ "@context": [ "dtmi:dtdl:context;3", "dtmi:dtdl:extension:historization;1", "dtmi:dtdl:extension:quantitativeTypes;1", "dtmi:com:oracle:dtdl:extension:validation;1" ], "@id": "dtmi:com:oracle:example:hvac;1", "@type": "Interface", "displayName": "HVAC", "description": "A digital twin model for HVAC", "contents": [ { "@type": [ "Telemetry", "Temperature" ], "name": "temperature", "schema": "integer", "unit": "degreeFahrenheit" }, { "@type": [ "Telemetry", "Historized", "Validated" ], "name": "humidity", "schema": "integer", "minimum": 0, "maximum": 100 }, { "@type": [ "Property", "Historized" ], "name": "location", "schema": "point", "writable": false }, { "@type": [ "Property", "Validated" ], "name": "serialNumber", "schema": "string", "pattern": "^([0-9]){2}([0-9]){5}([0-9]){6}$" } ] }前述のコード・スニペットは、HVAC DTDLモデル・インタフェースと、次のことを説明する特定のコンテキストおよび拡張機能を示しています。
-
dtmi:dtdl:context;3は、このモデルがDTDLバージョン3を使用していることを示します。 dtmi:dtdl:extension:historization;1: このモデルが履歴データを使用し、プロパティおよび遠隔測定データの経時的な変化を追跡することを示します。dtmi:dtdl:extension:quantitativeTypes;1: このモデルが高度な量的型を使用していることを示します。dtmi:com:oracle:dtdl:extension:validation;1: このモデルがデータ検証を使用することを示します。dtmi:com:oracle:example:hvac;1は、HVACユニットの一意の識別子です。"@type": "Interface": このモデルが単一のインタフェースを使用することを示します。contents: このHVACユニットのテレメトリおよびプロパティを示します。- このアレイは、時間の経過とともに送信される時系列温度遠隔測定データを示します。Integerはデータ型で、華氏度で測定されます。
{ "@type": ["Telemetry", "Temperature"], "name": "temperature", "schema": "integer", "unit": "degreeFahrenheit" } - このアレイは、履歴化された湿度遠隔測定データを説明し、最小値と最大値の範囲を検証および強制します。
{ "@type": [ "Telemetry", "Historized", "Validated" ], "name": "humidity", "schema": "integer", "minimum": 0, "maximum": 100 } - この配列は、時間の経過とともに静的またはゆっくりと変化する位置プロパティを示し、データを履歴化します。スキーマ・タイプ・ポイントは地理的な場所を示します。
writableプロパティはfalseで、このリリースではサポートされていません。{ "@type": [ "Property", "Historized" ], "name": "location", "schema": "point", "writable": false } - このアレイは、HVACユニットのシリアル番号プロパティーについて説明します。シリアル番号値が定義されたパターンと一致しない場合、システムはシリアル番号を拒否します。
{ "@type": [ "Property", "Validated" ], "name": "serialNumber", "schema": "string", "pattern": "^([0-9]){2}([0-9]){5}([0-9]){6}$" }
-
oci iot digital-twin-model createコマンドを必須パラメータとともに使用して、デジタル・ツイン・モデルを作成します。<iot-domain-OCID>を、使用するIoTドメインのOCIDに置き換えます。digital-twin-model.jsonファイルを参照するには、次のように指定します。oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.jsonこのレスポンス例では、<iot-digital-twin-model-OCID>と、関連するIoTドメイン、HVACユニットのDTMI URIが含まれ、それがアクティブであることを示しています。{ "data": { "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-08-05T17:43:00.438Z" } }, "description": "Digital-twin-model-for-HVAC", "display-name": "HVAC", "freeform-tags": {}, "id": "<iot-digital-twin-model-OCID>", "iot-domain-id": "<iot-domain-OCID>", "lifecycle-state": "ACTIVE", "spec-uri": "dtmi:com:oracle:example:hvac;1", "system-tags": {}, "time-created": "2025-09-10T17:43:00.508000+00:00", "time-updated": "2025-09-10T17:43:00.508000+00:00" }, "etag": "<unique-id>" }
ステップ3: デジタル・ツイン・アダプタの作成
デジタル・ツイン・アダプタを作成する場合、inbound-envelopeまたはinbound-routesオプションを指定せずに、システムにデフォルトのペイロードおよびマッピングを強制的に作成できます。その結果、応答にはデバイスのペイロードが含まれます。
エンベロープ・マッピングが指定されておらず、timeObservedが含まれている場合は、receivedTimeがtimeObserved値として使用されます。
CLIの使用
oci iot digital-twin-adapter createコマンドを使用して、デジタル・ツイン・アダプタを作成します。<iot-domain-OCID>をIoTドメインOCIDに置き換えます。デジタル・ツイン・モデルを関連付けるには、DTMI URIパラメータ--digital-twin-model-spec-uriまたはデジタル・ツインOCID --digital-twin-model-idパラメータのいずれかを使用して、デジタル・ツイン・モデルをこのデジタル・ツイン・アダプタに関連付けます。
この例では、--digital-twin-model-spec-uriパラメータを指定してコマンドを使用します。dtmi:com:oracle:example:hvac;1を、このデジタル・ツイン・アダプタに関連付けるデジタル・ツイン・モデルのDTMI URIに置き換えます。
oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-spec-uri "dtmi:com:oracle:example:hvac;1"または、この例では、--digital-twin-model-idパラメータを指定してコマンドを使用します。<digital-twin-model-OCID>を、このデジタル・ツイン・アダプタに関連付けるデジタル・ツイン・モデルのデジタル・ツインOCIDに置き換えます。oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-id <digital-twin-model-OCID>{
"data": {
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user",
"CreatedOn": "2025-09-10T17:45:41.318Z"
}
},
"description": null,
"digital-twin-model-id": "<digital-twin-model-OCID>",
"digital-twin-model-spec-uri": "dtmi:com:oracle:example:hvac;1",
"display-name": "<your-digital-twin-adapter-name>",
"freeform-tags": {},
"id": "<digital-twin-adapter-OCID>",
"inbound-envelope": {
"envelope-mapping": {
"time-observed": "$.time"
},
"reference-endpoint": "/",
"reference-payload": {
"data": {
"humidity": 0,
"location": {
"coordinates": [0.0, 0.0],
"type": "Point"
},
"temperature": 0,
"time": "2025-09-10T17:45:41.387069258Z"
},
"data-format": "JSON"
}
},
"inbound-routes": [
{
"condition": "*",
"description": "Default condition",
"payload-mapping": {
"$.humidity": "$.humidity",
"$.location": "$.location",
"$.temperature": "$.temperature"
},
"reference-payload": null
}
],
"iot-domain-id": "<iot-domain-OCID>",
"lifecycle-state": "ACTIVE",
"system-tags": {},
"time-created": "2025-09-10T17:45:41.389000+00:00",
"time-updated": "2025-09-10T17:45:41.389000+00:00"
},
"etag": "<unique-id>"
}ステップ4: デジタル・ツイン・アダプタを使用したデジタル・ツイン・インスタンスの作成
CLIの使用
構造化データのデジタル・ツイン・インスタンスを作成するには、oci iot digital-twin-instance createおよび<iot-domain-OCID>、<vault-secret-OCID>および<digital-twin--adapter-OCID>の必須パラメータを使用します。
<iot-domain-OCID>を、更新するIoTドメインのOCIDに置き換えます。オプションで、表示パラメータを含め、<display-name>をデジタル・ツイン・インスタンスのわかりやすい名前に置き換えることができます。
<digital-twin--adapter-OCID>を、前のステップで作成したデジタル・ツイン・アダプタOCIDに置き換えます。<vault-secret-OCID>を、他のデジタル・ツイン・リソースと同じリージョンにあるシークレットに置き換えます。Oracleでは、デジタル・ツイン・インスタンスごとに一意のシークレットを使用することをお薦めします。詳細は、シークレットの作成に関する項を参照してください。
oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --display-name <display_name> --auth-id <vault-secret-OCID> --digital-twin-adapter-id <digital-twin-adapter-OCID>このレスポンス例は、デジタル・ツイン・モデルのデジタル・ツイン・モデル、アダプタ、インスタンスOCIDsおよびデジタル・ツイン・インスタンスの外部キーIDを示しています。{
"data": {
"auth-id": "<vault-secret-OCID>",
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-09-11T06:12:43.393Z"
}
},
"description": null,
"digital-twin-adapter-id": "<iot-digital-twin-adapter-OCID>",
"digital-twin-model-id": "<iot-digital-twin-model-OCID>",
"digital-twin-model-spec-uri": "dtmi:com:oracle:example:hvac;1",
"display-name": "your display name",
"external-key": "<unique-id>",
"freeform-tags": {},
"id": "<iot-digital-twin-instance-OCID>",
"iot-domain-id": "<iot-domain-OCID>",
"lifecycle-state": "ACTIVE",
"system-tags": {},
"time-created": "2025-09-11T06:12:44.178000+00:00",
"time-updated": "2025-09-11T06:12:44.178000+00:00"
},
"etag": "<unique-id>"
}
ステップ5: Telemetryデータの送信
この例では、HTTPを使用してデータをポストします。かわりに、MQTTおよびMQTTをWebSockets上で使用できます。具体的な例は、シナリオを参照してください。
HTTP POST data
curl -i -X POST -u '<digital-twin-external-key>:<vault-secret>' -H "Content-Type:application/json" 'https://<domain-short-id-from-device-host>.device.iot.<region>.oci.oraclecloud.com/telemetry' -d '{
"temperature": 72,
"humidity": 60,
"location": {
"type": "point",
"coordinates": [40.759010, -73.984474]
},
"serialNumber": "5099627036043"
}'ステップ6: テレメトリ・データの表示
IoTデータを表示する場所に応じて、各システムでは、IoTデータを接続して表示するための特定の構成が必要です。
IoTデータAPIを使用したデータの表示
raw、rejectedまたはhistorizedデータがあります。詳細は、Internet of Things (IoT)データAPIのドキュメントを参照してください。
このリクエスト例は、ドメイン・グループ・データ・ホストからrawテレメトリ・データを取得する方法を示しています。curl -H "Authorization: Bearer <token>" \
-X GET "https://<domain-group-short-id>.data.iot.<region>.oci.oraclecloud.com/ords/<domain-short-id>/20250531/rawData?q={\"$and\":[{\"digital_twin_instance_id\":\"<iot-digital-twin-OCID>\"}]}"この例では、HTTPを使用します。または、MQTTおよびMQTTをWebSockets上で使用できます。具体的な例は、シナリオを参照してください。
SQL文を使用したAPEXまたはデータベースでのデータの表示
このSQL文を使用して、rejectedテレメトリ・データを表示します。<domain-short-id-from-device-host>をデバイス・ホストからのドメイン短縮IDに置き換え、<digital-twin-OCID>を、拒否されたデータを表示するデジタル・ツインのOCIDに置き換えます:
select * from <domain-short-id-from-device-host>__IOT.REJECTED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';スキーマ名には、__IOTという2つのアンダースコアが含まれていることに注意してください。
<domain-short-id-from-device-host>をドメイン短縮IDに置き換え、<digital-twin-instance-OCID>を、拒否されたデータを表示するデジタル・ツイン・インスタンスのOCIDに置き換えます:select * from <domain-short-id-from-device-host>__IOT.DIGITAL_TWIN_HISTORIZED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';次のSQL文を使用して、rawテレメトリ・データを消費します。select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';IoTドメインの<domain-short-id-from-device-host>を取得するには、作業するIoTドメインの詳細を取得します。