特定の TSL モデル API リクエストおよびレスポンスで使用される ThingModelJson パラメーターは、IoT Platform が TSL モデルの機能定義を内部的に保存する方法を示すものです。この構造は TSL データ構造とは異なり、すべてのフィールドはキーのアルファベット順にソートされています。
製品およびデバイスの TSL 機能定義の制限については、「製品およびデバイスの TSL 機能定義の制限」をご参照ください。
データ構造
デフォルト TSL モジュールとカスタム TSL モジュールでは、データ構造が異なります。
- デフォルト TSL モジュール
{ "_ppk":{ "description":"test", "version":"159244410****" } "events":[], "productKey":"al12345****", "properties":[], "services":[], "functionBlocks":[{ "productKey":"al12345****", "functionBlockId":"location0", "functionBlockName":"Location module 0" }] }パラメーター タイプ 説明 productKey 文字列 TSL モデルが属するプロダクトの productKey です。 _ppk オブジェクト TSL モデルのバージョン情報です。次のフィールドが含まれます: - version:TSL モデルのバージョン番号です。このパラメーターは、公開済みの TSL モデルに対してのみ返されます。
- description:デフォルト TSL モジュールバージョンの説明です。このパラメーターは、公開済みの TSL モデルに対してのみ返されます。
properties リスト TSL モデルのプロパティのリストです。プロパティのデータ構造の詳細については、「プロパティデータ構造の仕様」をご参照ください。 各プロパティのデータ構造で extendConfig を使用して、拡張情報を定義します。詳細については、「extendConfig データ構造の仕様」をご参照ください。プロパティに拡張情報がない場合は、extendConfig を渡す必要はありません。
services リスト TSL モデルのサービスのリストです。サービスのデータ構造の詳細については、「サービスデータフォーマットの仕様」をご参照ください。 各サービスのデータ構造で extendConfig を使用して、拡張情報を定義します。詳細については、「extendConfig データ構造の仕様」をご参照ください。サービスに拡張情報がない場合は、extendConfig を渡す必要はありません。
events リスト TSL モデルのイベントのリストです。イベントのデータ構造の詳細については、「イベントデータフォーマットの仕様」をご参照ください。 各イベントのデータ構造で extendConfig を使用して、拡張情報を定義します。詳細については、「extendConfig データ構造の仕様」をご参照ください。イベントに拡張情報がない場合は、extendConfig を渡す必要はありません。
functionBlocks リスト カスタム TSL モジュールのリストです。プロダクトにカスタムモジュールがある場合にのみ含まれます。次のフィールドが含まれます: - productKey:TSL モデルが属するプロダクトの productKey です。
- functionBlockId:プロダクト内のカスタム TSL モジュールの一意の識別子です。
- functionBlockName:カスタム TSL モジュールの名前です。
- カスタム TSL モジュール
{ "productKey":"al12345****", "identifier":"location0", "name":"Location module 0", "properties":[], "services":[], "events":[], "description":"" }次の表に、カスタム TSL モジュールの基本パラメーターを示します。その他のパラメーターについては、デフォルト TSL モジュールの説明をご参照ください。
パラメーター タイプ 説明 identifier 文字列 プロダクト内のカスタム TSL モジュールの一意の識別子です。 識別子は最大 30 文字で、大文字、小文字、数字、アンダースコア (_) を使用できます。
name 文字列 カスタム TSL モジュールの名前です。 名前は 4~30 文字で、中国語文字、日本語文字、英字、数字、アンダースコア (_) を使用できます。中国語または日本語の文字は、1 文字としてカウントされます。
description 文字列 最大 100 文字のモジュールの説明です。
プロパティのデータ構造
次の表に、プロパティを定義するためのパラメーターを示します。
| パラメーター | タイプ | 必須 | 説明 |
| productKey | 文字列 | はい | TSL モデルが属するプロダクトの ProductKey。 |
| createTs | Long | いいえ | 機能の作成時刻。13 桁のタイムスタンプです。このパラメーターを指定しない場合、システムが生成します。機能は、このタイムスタンプで昇順にソートされます。 説明 既存の TSL モデルの場合、作成時刻は、TSL モデルの公開後に最初に変更された時刻です。 |
| identifier | 文字列 | はい | プロパティの一意の識別子です。長さは最大 50 文字で、英大文字、英小文字、数字、アンダースコア (_) が使用できます。 説明 識別子には、set、get、post、property、event、time、value などの予約語を使用できません。 |
| dataType | 文字列 | はい | プロパティのデータ型。 有効な値:ARRAY、STRUCT、INT、FLOAT、DOUBLE、TEXT、DATE、ENUM、BOOL。 指定する必要があるパラメーターは、データ型によって異なります。詳細については、このトピック内の各データ型のデータ仕様を参照してください。 |
| name | 文字列 | はい | プロパティの表示名です。名前の長さは最大 30 文字で、中国語、英大文字、英小文字、数字、ハイフン (-)、アンダースコア (_)、ピリオド (.) が使用できます。先頭の文字は、中国語、英字、または数字である必要があります。中国語の文字は 1 文字としてカウントされます。 |
| rwFlag | 文字列 | はい | IoT Platform におけるプロパティのアクセス権限が、読み取り専用か読み取り/書き込みかを指定します。
|
| dataSpecs | Object | はい | dataType が INT、FLOAT、DOUBLE、TEXT、DATE、または ARRAY の場合、データ仕様は dataSpecs パラメーターに格納されます。例については、この表の下にあるコードブロックを参照してください。 説明
|
| dataSpecsList | リスト | はい | dataType が ENUM、BOOL、または STRUCT の場合、データ仕様は dataSpecsList パラメーターに格納されます。例については、この表の下にあるコードブロックを参照してください。 説明
|
| required | ブール値 | はい | このプロパティが標準カテゴリにおいて必須であるかどうかを指定します。
|
| custom | ブール値 | はい | カスタム機能かどうかを指定します。
|
- dataType が INT の場合の dataSpecs の例:
{ "dataSpecs": { "custom": true, "dataType": "INT", "defaultValue": "30", "max": "1440", "min": "0", "step": "10", "unit": "min" } } - dataType が TEXT の場合の dataSpecs の例:
{ "dataSpecs": { "custom": true, "dataType": "TEXT", "id": 2412127, "length": 2048 } } - dataType が ARRAY の場合の dataSpecs の例:
{ "dataSpecs": { "childDataType": "INT", "custom": true, "dataType": "ARRAY", "size": 1 } } - dataType が ENUM の場合の dataSpecsList の例:
{ "dataSpecsList": [ { "custom": false, "dataType": "ENUM", "defaultValue": "true", "name": "Open", "value": 1 }, { "custom": false, "dataType": "ENUM", "defaultValue": "false", "name": "Close", "value": 0 } ] } - dataType が STRUCT の場合の dataSpecsList の項目の例:
{ "childDataType": "TEXT", "childName": "Card number", "dataSpecs": { "custom": true, "dataType": "TEXT", "length": 128 }, "dataType": "STRUCT", "identifier": "CardNo", "name": "NVR chip information" }
サービスデータフォーマット
以下の表は、サービスを定義するためのパラメーターを示しています。
| パラメーター | タイプ | 必須 | 説明 |
| productKey | 文字列 | はい | TSL モデルを含む製品の ProductKey です。 |
|
createTs
|
Long
|
いいえ
|
機能の作成時刻。13 桁のタイムスタンプです。このパラメーターを指定しない場合、システムが生成します。機能は、このタイムスタンプで昇順にソートされます。
説明 既存の TSL モデルの場合、作成時刻は、TSL モデルの公開後に最初に変更された時刻です。 |
| identifier | 文字列 | はい | サービスの識別子は最大 50 文字で、大文字、小文字、数字、アンダースコア (_) を使用できます。 説明 識別子として、set、get、post、property、event、time、value などの予約語は使用できません。 |
| serviceName | 文字列 | はい | サービス名は最大 30 文字で、中国語文字、大文字と小文字の英字、数字、ハイフン (-)、アンダースコア (_)、ピリオド (.) を使用できます。先頭は、中国語文字、英字、または数字である必要があります。中国語文字は 1 文字としてカウントされます。 |
| inputParams | List | いいえ | 入力パラメーターのリストです。データ構造の詳細については、入力パラメーターと出力パラメーターのデータ構造をご参照ください。 |
| outputParams | List | いいえ | 出力パラメーターのリストです。データ構造の詳細については、入力パラメーターと出力パラメーターのデータ構造をご参照ください。 |
| required | ブール値 | はい | 標準カテゴリでサービスが必須かどうかを指定します。
|
| callType | 文字列 | はい | サービスの呼び出しタイプです。
|
| custom | ブール値 | はい | カスタムサービスかどうかを指定します。
|
イベントデータフォーマット
以下の表は、イベントを定義するためのパラメーターを示しています。
| パラメーター | タイプ | 必須 | 説明 |
| productKey | 文字列 | はい | TSL モデルを含むプロダクトの ProductKey です。 |
|
createTs
|
Long
|
いいえ
|
機能の作成時刻。13 桁のタイムスタンプです。このパラメーターを指定しない場合、システムが生成します。機能は、このタイムスタンプで昇順にソートされます。
説明 既存の TSL モデルの場合、作成時刻は、TSL モデルの公開後に最初に変更された時刻です。 |
| identifier | 文字列 | はい | イベントの識別子です。最大 50 文字で、大文字、小文字、数字、アンダースコア (_) を含めることができます。 説明 識別子には、set, get, post, property, event, time, value などの予約語は指定できません。 |
| eventName | 文字列 | はい | イベント名です。最大 30 文字で、中国語文字、英字、または数字で始まる必要があります。中国語文字、大文字、小文字、数字、ハイフン (-)、アンダースコア (_)、ピリオド (.) を含めることができます。中国語文字は 1 文字としてカウントされます。 |
| eventType | 文字列 | はい | イベントタイプです。有効な値:
|
| outputdata | List | いいえ | イベントの出力パラメーターです。データ構造の詳細については、入力パラメーターと出力パラメーターのデータ構造をご参照ください。 |
| required | ブール値 | はい | 標準カテゴリで必須のイベントかどうかを指定します。有効な値:
|
| custom | ブール値 | はい | カスタムイベントかどうかを指定します。有効な値:
|
入力パラメーターと出力パラメーターの構造
次の表に、サービスまたはイベントの入力パラメーターと出力パラメーターを定義するためのフィールドを示します。
| パラメーター | データ型 | 必須 | 説明 |
| dataType | 文字列 | はい | パラメーターのデータ型です。 有効な値:ARRAY、STRUCT、INT、FLOAT、DOUBLE、TEXT、DATE、ENUM、および BOOL。 各データ型のデータ仕様については、本トピックの該当セクションをご参照ください。 |
| identifier | 文字列 | はい | パラメーターの一意の識別子です。長さは 50 文字以内で、大文字、小文字、数字、およびアンダースコア (_) を使用できます。 説明 識別子には、set、get、post、property、event、time、value などの予約語は使用できません。 |
| name | 文字列 | はい | パラメーターの表示名です。長さは 30 文字以内で、漢字、大文字、小文字、数字、ハイフン (-)、アンダースコア (_)、ピリオド (.) を使用できます。名前は漢字、英字、または数字で始まる必要があります。各漢字を 1 文字としてカウントします。 |
| direction | 文字列 | はい | パラメーターが入力パラメーターか出力パラメーターかを示します。
|
| paraOrder | 整数 | はい | 0 から始まる、パラメーターの一意なシーケンス番号です。 |
| dataSpecs | オブジェクト | いいえ | dataType が INT、FLOAT、DOUBLE、TEXT、DATE、BOOL などの単純型の場合、データ仕様は dataSpecs パラメーターに保存されます。 説明
|
| dataSpecsList | リスト | いいえ | dataType が ENUM、ARRAY、STRUCT などの複合型の場合、データ仕様は dataSpecsList パラメーターに保存されます。 説明
|
| custom | ブール値 | はい | パラメーターがカスタム TSL 機能に属するかどうかを示します。
|
INT、FLOAT、DOUBLE のデータ構造
機能またはパラメーターのデータ型が INT、FLOAT、または DOUBLE の場合、そのデータ構造には次のパラメーターが含まれます。
| パラメーター | データ型 | 必須 | 説明 |
| dataType | 文字列 | はい | データ型。有効な値: INT、FLOAT、または DOUBLE 。 |
| max | 文字列 | はい | 最大値。この値は、dataType パラメーターで指定された型である必要があります。 値は文字列として渡す必要があります。たとえば、dataType が INT の場合は、 |
| min | 文字列 | はい | 最小値。この値は、dataType パラメーターで指定された型である必要があります。 値は文字列として渡す必要があります。詳細については、max の説明をご参照ください。 |
| step | 文字列 | はい | ステップサイズ(値の増分)。この値は、dataType パラメーターで指定された型である必要があります。 値は文字列として渡す必要があります。詳細については、max の説明をご参照ください。 |
| precise | 文字列 | いいえ | 精度。このパラメーターは、FLOAT および DOUBLE データ型でのみ使用します。 |
| defaultValue | 文字列 | いいえ | パラメーターのデフォルト値。 |
| unit | 文字列 | はい | 単位記号。 |
| unitName | 文字列 | はい | 単位名。 |
| custom | ブール値 | はい | カスタム機能かどうかを示します。
|
DATE および TEXT のデータ構造
DATE および TEXT データ型のデータ構造には、次のパラメーターが含まれます。
| パラメーター | タイプ | 必須 | 説明 |
| dataType | 文字列 | はい | データ型。有効な値は DATE または TEXT です。 |
| length | Long | いいえ | 最大データ長は 2,048 バイトです。dataType が TEXT の場合、このパラメーターは必須です。 |
| defaultValue | 文字列 | いいえ | デフォルト値。 |
| custom | ブール値 | はい | カスタム機能かどうかを示します。
|
ARRAY データ仕様
機能またはパラメーターのデータ型が ARRAY の場合、そのデータ仕様には次のパラメーターが含まれます。
| パラメーター | データ型 | 必須 | 説明 |
| dataType | 文字列 | はい | 値は ARRAY である必要があります。 |
| size | Long | はい | 配列内の要素の数です。 |
| childDataType | 文字列 | はい | 配列内の要素のデータ型です。有効な値: STRUCT、INT、FLOAT、DOUBLE、または TEXT。 |
| dataSpecs | Object | いいえ | childDataType が INT、FLOAT、DOUBLE、TEXT などの非構造体型の場合、この dataSpecs パラメーターを使用してデータ仕様を定義します。 説明
|
| dataSpecsList | List | いいえ | childDataType が STRUCT の場合、この dataSpecsList パラメーターを使用してデータ仕様を定義します。 説明
|
| custom | ブール値 | はい | 機能がカスタムであるかどうかを示します。
|
ENUM および BOOL タイプ
機能またはパラメーターのデータ型が BOOL または ENUM の場合、そのデータ構造には次のパラメーターが含まれます。
| パラメーター | タイプ | 必須 | 説明 |
| dataType | String | はい | 値は BOOL または ENUM である必要があります。 |
| name | String | はい | ENUM 項目の名前です。名前は最大 20 文字で、漢字、英字、または数字で始まる必要があります。漢字、英字、数字、アンダースコア (_)、およびハイフン (-) を使用できます。各漢字は 1 文字としてカウントされます。 |
| value | Integer | はい | ENUM の値です。 |
| custom | Boolean | はい | これがカスタム機能であるかどうかを指定します。
|
構造体のデータ構造
機能またはパラメーターのデータ型が構造体の場合、そのデータ構造には次のパラメーターが含まれます。
- childSpecsDTO および childEnumSpecsDTO パラメーターは非推奨です。これは既存の API コールには影響しません。新しいコールでは、これらのパラメーターを渡さないでください。代わりに dataSpecsList パラメーターを使用してください。
- 配列および構造体データ型がネストされている場合、最大 2 レベルの再帰的な入れ子 (親と子) がサポートされます。
| パラメーター | データ型 | 必須 | 説明 |
| dataType | String | はい | 値は構造体である必要があります。 |
| identifier | String | はい | 構造体内のサブパラメーターの識別子です。大文字、小文字、数字、アンダースコア (_) を使用できます。最大長は 50 文字です。 説明 識別子には、 set、 get、 post、 property、 event、 time、 value などの予約語は使用できません。 |
| name | String | いいえ | 構造体内のサブパラメーターの名前です。名前は、漢字、英字、または数字で始まる必要があります。漢字、大文字、小文字、数字、ハイフン (-)、アンダースコア (_)、およびピリオド (.) を使用できます。最大長は 30 文字です。各漢字は 1 文字としてカウントされます。 説明 このパラメーターは childName と同じ定義であり、現在は使用されていません。 |
| childDataType | String | いいえ | 構造体内のサブパラメーターのデータ型です。 有効な値: INT、 FLOAT、 DOUBLE、 TEXT、 DATE、 ENUM、 BOOL。 |
| childName | String | はい | 構造体内のサブパラメーターの名前です。名前は、漢字、英字、または数字で始まる必要があります。漢字、大文字、小文字、数字、ハイフン (-)、アンダースコア (_)、およびピリオド (.) を使用できます。最大長は 30 文字です。各漢字は 1 文字としてカウントされます。 |
| dataSpecs | Object | いいえ |
INT、 FLOAT、 DOUBLE、 TEXT、 DATE、 配列などの非リストデータ型 (dataType) のデータ仕様は dataSpecs に保存されます。 説明
|
| dataSpecsList | List | いいえ | サブパラメーターの dataType がリスト型 (たとえば、ENUM、 BOOL、または構造体) の場合、そのデータ仕様は dataSpecsList パラメーターに保存されます。 説明
|
| custom | ブール型 | はい | これがカスタム機能であるかどうかを指定します。
|
extendConfig のデータ構造
各プロパティ、イベント、またはサービスのデータ構造では、extendConfig を使用して、デバイス通信プロトコルを標準 TSL モデルにマッピングするための拡張情報を定義します。
IoT Platform は、Modbus、OPC UA、またはカスタムゲートウェイプロトコルを使用するデバイスの拡張情報をサポートします。データ仕様はプロトコルによって異なります。
Modbus タイプ
Modbus は、プロパティの拡張情報のみをサポートします。
extendConfig の構造を示すために、考えられるすべてのパラメーターが含まれています。実際のパラメーターは、ユースケースによって異なります。{
"identifier":"extend1",
"writeFunctionCode":0,
"writeOnly":0,
"registerAddress":"0xFE",
"operateType":"coilStatus",
"scaling":0.1,
"pollingTime":1000,
"trigger":1,
"bitMask":128,
"originalDataType":{
"type":"uint64",
"specs":{
"swap":0,
"reverseRegister":0}
}
}
| パラメーター | タイプ | 説明 |
| identifier | 文字列 | プロダクト内のプロパティの一意の識別子です。 |
| registerAddress | 文字列 | レジスタアドレスです。値は 0x で始まり、0x0 から 0xFFFF の範囲内である必要があります。例: 0xFE |
| operateType | 文字列 | 操作タイプです。有効な値は次のとおりです:
|
| writeFunctionCode | 整数 | 書き込み操作のファンクションコードです。有効な値は、指定された operateType によって異なります。
|
| writeOnly | 整数 | 操作が書き込み専用かどうかを指定します。
|
| scaling | 数値 | スケーリング係数です。値に 0 は指定できません。 このパラメーターは、文字列またはブール値のデータ型には適用されません。 |
| pollingTime | 整数 | 収集間隔です。ミリ秒 (ms) 単位で指定します。このパラメーターが指定されていない場合、デバイスのデフォルトの収集間隔が使用されます。 |
| trigger | 整数 | データ報告方法です。1:定期的にデータを報告します。2:変更時にデータを報告します。 |
| bitMask | 整数 | ブール値データ型に固有のパラメーターです。 マスクです。有効な値:1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384、32768。これらの値は 1<<(0 から 15) に対応します。 |
| originalDataType | オブジェクト | 元のデータ型です。 |
| type | 文字列 | 元のデータ型です。値は、次の基本型のいずれかである必要があります:int16、uint16、int32、uint32、int64、uint64、float、double、string、bool、またはカスタムデータ (ビッグエンディアン順序で 16 進数データを返します)。 |
| specs | オブジェクト | 特定のデータ型に固有のパラメーターです。 |
| registerCount | 整数 | 文字列およびカスタムデータ型に固有のパラメーターです。 レジスタの数です。 |
| swap | 整数 | 文字列およびカスタムデータを除くすべてのデータ型のパラメーターです。 16 ビットレジスタ内の上位バイトと下位バイトを入れ替えるかどうかを指定します (例: byte1byte2 が byte2byte1 になります)。
|
| reverseRegister | 整数 | 文字列およびカスタムデータを除くすべてのデータ型のパラメーターです。 32 ビットデータ内の 16 ビットレジスタの順序を逆にするかどうかを指定します (例: byte1byte2byte3byte4 が byte3byte4byte1byte2 になります)。
|
OPC UA タイプ
OPC UA は、プロパティ、サービス、およびイベントの拡張情報をサポートします。
{
"identifier":"extend2",
"displayName":"Action",
"inputData":[
{
"identifier":"xxxx",
"index":1
},
{
"identifier":"xxxx",
"index":2
}
],
"outputData":[
{
"identifier":"xxxx",
"index":1
},
{
"identifier":"xxxx",
"index":2
}
]
}
| パラメーター | タイプ | 説明 |
| identifier | 文字列 | プロダクト内のプロパティ、サービス、またはイベントの一意の識別子です。 |
| displayName | 文字列 | 表示名です。このパラメーターは、プロパティおよびイベントには必須ですが、サービスにはオプションです。 |
| inputData | リスト | 入力データのパラメーターです。 |
| outputData | リスト | 出力データのパラメーターです。 |
| identifier | 文字列 | プロダクト内の入力または出力パラメーターの一意の識別子です。 |
| index | 整数 | 親リスト (inputData または outputData) におけるパラメーターの一意のインデックスです。 |
カスタムタイプ
カスタムタイプは、プロパティ、サービス、およびイベントの拡張情報をサポートします。
{
"identifier":"xxx",
"customize":{}
}
| パラメーター | タイプ | 説明 |
| identifier | 文字列 | プロダクト内のプロパティ、サービス、またはイベントの一意の識別子です。 |
| customize | オブジェクト | JSON オブジェクト形式のユーザー定義データです。 |
バリデーション
json-schema を使用して、ThingModelJson の入力パラメーターを検証できます。
スキーマ定義については、schema.json をご参照ください。
次の例は、バリデーションを実行する方法を示します。
- json-schema ライブラリをダウンロードするには、次の依存関係を Maven プロジェクトに追加します:
<dependency> <groupId>com.github.everit-org.json-schema</groupId> <artifactId>org.everit.json.schema</artifactId> <version>1.11.0</version> </dependency> - サンプルコード:
package com.aliyun.iot.thingmodel; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import org.everit.json.schema.Schema; import org.everit.json.schema.ValidationException; import org.everit.json.schema.loader.SchemaLoader; import org.json.JSONObject; import org.json.JSONTokener; /** * @作成者: *** * @date: 2020-01-14 15:11 */ public class ThingModelJsonValidator { public static void main(String[] args) throws Exception { try (InputStream inputStream = new URL("https://iotx-thing-model-schema.oss-ap-southeast-1.aliyuncs.com/schema.json").openStream()) { JSONObject rawSchema = new JSONObject(new JSONTokener(inputStream)); Schema schema = SchemaLoader.load(rawSchema); long start = System.currentTimeMillis(); JSONObject object = new JSONObject(); String jsonStr = "{\n" + "\t\t\t\"productKey\": \"a1Q1Yrc****\",\n" + "\t\t\t\"name\": \"Alert event\",\n" + "\t\t\t\"identifier\": \"alarmEvent\",\n" + "\t\t\t\"eventName\": \"Alert event\",\n" + "\t\t\t\"eventType\": \"ALERT_EVENT_TYPE\",\n" + "\t\t\t\"outputData\": [\n" + "\t\t\t\t{\n" + "\t\t\t\t\t\"paraOrder\": 0,\n" + "\t\t\t\t\t\"direction\": \"PARAM_OUTPUT\",\n" + "\t\t\t\t\t\"dataSpecsList\": [\n" + "\t\t\t\t\t\t{\n" + "\t\t\t\t\t\t\t\"dataType\": \"ENUM\",\n" + "\t\t\t\t\t\t\t\"name\": \"Anti-detachment alert\",\n" + "\t\t\t\t\t\t\t\"value\": 0\n" + "\t\t\t\t\t\t},\n" + "\t\t\t\t\t\t{\n" + "\t\t\t\t\t\t\t\"dataType\": \"ENUM\",\n" + "\t\t\t\t\t\t\t\"name\": \"Anti-detachment alert resolved\",\n" + "\t\t\t\t\t\t\t\"value\": 1\n" + "\t\t\t\t\t\t}\n" + "\t\t\t\t\t],\n" + "\t\t\t\t\t\"dataType\": \"ENUM\",\n" + "\t\t\t\t\t\"identifier\": \"alarmType\",\n" + "\t\t\t\t\t\"name\": \"Alert type\",\n" + "\t\t\t\t\t\"index\": 0,\n" + "\t\t\t\t\t\"custom\": true\n" + "\t\t\t\t}\n" + "\t\t\t],\n" + "\t\t\t\"outputParams\": [\n" + "\t\t\t\t{\n" + "\t\t\t\t\t\"index\": 0,\n" + "\t\t\t\t\t\"identifier\": \"alarmType\"\n" + "\t\t\t\t}\n" + "\t\t\t],\n" + "\t\t\t\"custom\": true\n" + "\t\t}"; object.put("properties", new ArrayList<>()); object.put("services", new ArrayList<>()); object.put("events", Arrays.asList(com.alibaba.fastjson.JSONObject.parseObject(jsonStr))); object.put("productKey", "a1Q1Yrc****"); schema.validate(object); // このオブジェクトが無効な場合、ValidationException をスローします System.out.println(System.currentTimeMillis() - start); } catch (ValidationException exception) { System.out.println(exception); } } }
ThingModelJson の作成
Visual Studio Code で、自動補完を利用して ThingModelJson を作成します。
- Visual Studio Code 公式サイト にアクセスし、最新バージョンの Visual Studio Code をダウンロードしてインストールします。
- Visual Studio Code を開き、左下隅にある
ボタンをクリックして、[設定] を選択します。 - [ユーザー設定] タブで、 を選択します。[スキーマ] の下で [settings.json で編集] をクリックし、次の設定を追加してファイルを保存します。
"json.schemas": [{ "fileMatch": ["*.json"], "url": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json" }]設定を保存すると、Thing モデルを定義する際に自動補完プロンプトが表示されます。
"$schema": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json" "" events functionBlockId functionBlockName functionBlocks properties services