Parameter ThingModelJson, yang digunakan dalam permintaan dan respons API model TSL tertentu, merepresentasikan cara IoT Platform menyimpan definisi fitur model TSL secara internal. Struktur ini berbeda dari struktur data TSL, dengan semua field diurutkan secara alfabetis berdasarkan kunci.
Untuk batasan definisi fitur TSL pada produk dan perangkat, lihat Batasan Definisi Fitur TSL untuk Produk dan Perangkat.
Struktur data
Modul TSL bawaan dan kustom memiliki struktur data yang berbeda.
- Modul TSL bawaan
{ "_ppk":{ "description":"test", "version":"159244410****" } "events":[], "productKey":"al12345****", "properties":[], "services":[], "functionBlocks":[{ "productKey":"al12345****", "functionBlockId":"location0", "functionBlockName":"Location module 0" }] }Parameter Type Description productKey String ProductKey dari produk tempat model TSL tersebut berada. _ppk String Informasi versi model TSL, yang mencakup field berikut: - version: Nomor versi model TSL. Parameter ini hanya dikembalikan untuk model TSL yang telah dipublikasikan.
- description: Deskripsi versi modul TSL bawaan. Parameter ini hanya dikembalikan untuk model TSL yang telah dipublikasikan.
properties List Daftar properti dalam model TSL. Untuk informasi lebih lanjut mengenai struktur data properti, lihat Spesifikasi struktur data properti. Gunakan extendConfig dalam setiap struktur data properti untuk mendefinisikan informasi tambahan. Untuk informasi lebih lanjut, lihat Spesifikasi struktur data extendConfig. Jika suatu properti tidak memiliki informasi tambahan, Anda tidak perlu meneruskan extendConfig.
services List Daftar layanan dalam model TSL. Untuk informasi lebih lanjut mengenai struktur data layanan, lihat Spesifikasi format data layanan. Gunakan extendConfig dalam setiap struktur data layanan untuk mendefinisikan informasi tambahan. Untuk informasi lebih lanjut, lihat Spesifikasi struktur data extendConfig. Jika suatu layanan tidak memiliki informasi tambahan, Anda tidak perlu meneruskan extendConfig.
events List Daftar event dalam model TSL. Untuk informasi lebih lanjut mengenai struktur data event, lihat Spesifikasi format data event. Gunakan extendConfig dalam setiap struktur data event untuk mendefinisikan informasi tambahan. Untuk informasi lebih lanjut, lihat Spesifikasi struktur data extendConfig. Jika suatu event tidak memiliki informasi tambahan, Anda tidak perlu meneruskan extendConfig.
functionBlocks List Daftar modul TSL kustom. Hanya disertakan jika produk memiliki modul kustom. Berisi field berikut: - productKey: ProductKey dari produk tempat model TSL tersebut berada.
- functionBlockId: Pengidentifikasi unik untuk modul TSL kustom dalam suatu produk.
- functionBlockName: Nama modul TSL kustom.
- Modul TSL kustom
{ "productKey":"al12345****", "identifier":"location0", "name":"Location module 0", "properties":[], "services":[], "events":[], "description":"" }Tabel berikut mencantumkan parameter dasar modul TSL kustom. Untuk parameter lainnya, lihat deskripsi modul TSL bawaan.
Parameter Type Description identifier String Pengidentifikasi unik untuk modul TSL kustom dalam suatu produk. Pengidentifikasi dapat terdiri dari maksimal 30 karakter dan boleh berisi huruf kapital, huruf kecil, angka, serta garis bawah (_).
name String Nama modul TSL kustom. Nama harus terdiri dari 4 hingga 30 karakter dan boleh berisi karakter Tionghoa, Jepang, huruf Latin, angka, serta garis bawah (_). Satu karakter Tionghoa atau Jepang dihitung sebagai satu karakter.
description String Deskripsi modul, dengan panjang maksimum 100 karakter.
Struktur data properti
Tabel berikut mencantumkan parameter untuk mendefinisikan sebuah properti.
| Parameter | Type | Required | Description |
| productKey | String | Yes | ProductKey dari produk tempat model TSL tersebut berada. |
| createTs | Long | No | Waktu pembuatan fitur, dalam bentuk timestamp 13 digit. Jika Anda tidak menentukan parameter ini, sistem akan menghasilkan nilai tersebut. Fitur diurutkan berdasarkan timestamp ini secara menaik. Catatan Untuk model TSL yang sudah ada, waktu pembuatan adalah waktu ketika model TSL pertama kali dimodifikasi setelah dipublikasikan. |
| identifier | String | Yes | Pengidentifikasi unik properti. Panjangnya maksimal 50 karakter dan boleh berisi huruf kapital, huruf kecil, angka, serta garis bawah (_). Catatan Pengidentifikasi tidak boleh merupakan kata kunci yang dicadangkan, seperti set, get, post, property, event, time, atau value. |
| dataType | String | Yes | Tipe data properti. Nilai yang valid: ARRAY, STRUCT, INT, FLOAT, DOUBLE, TEXT, DATE, ENUM, dan BOOL. Parameter yang harus Anda tentukan bervariasi tergantung tipe datanya. Untuk informasi lebih lanjut, lihat spesifikasi data untuk setiap tipe data dalam topik ini. |
| name | String | Yes | Nama tampilan properti. Panjangnya maksimal 30 karakter dan boleh berisi karakter Tionghoa, huruf kapital, huruf kecil, angka, tanda hubung (-), garis bawah (_), serta titik (.). Nama harus dimulai dengan karakter Tionghoa, huruf, atau angka. Satu karakter Tionghoa dihitung sebagai satu karakter. |
| rwFlag | String | Yes | Apakah properti bersifat read-only atau read-write di IoT Platform.
|
| dataSpecs | Object | No | Jika dataType diatur ke INT, FLOAT, DOUBLE, TEXT, DATE, atau ARRAY, spesifikasi data disimpan dalam parameter dataSpecs. Untuk contoh, lihat blok kode di bawah tabel ini. Catatan
|
| dataSpecsList | List | No | Jika dataType diatur ke ENUM, BOOL, atau STRUCT, spesifikasi data disimpan dalam parameter dataSpecsList. Untuk contoh, lihat blok kode di bawah tabel ini. Catatan
|
| required | Boolean | Yes | Menentukan apakah properti tersebut wajib untuk kategori standar.
|
| custom | Boolean | Yes | Menentukan apakah ini merupakan fitur kustom.
|
- Contoh dataSpecs ketika dataType adalah INT:
{ "dataSpecs": { "custom": true, "dataType": "INT", "defaultValue": "30", "max": "1440", "min": "0", "step": "10", "unit": "min" } } - Contoh dataSpecs ketika dataType adalah TEXT:
{ "dataSpecs": { "custom": true, "dataType": "TEXT", "id": 2412127, "length": 2048 } } - Contoh dataSpecs ketika dataType adalah ARRAY:
{ "dataSpecs": { "childDataType": "INT", "custom": true, "dataType": "ARRAY", "size": 1 } } - Contoh dataSpecsList ketika dataType adalah ENUM:
{ "dataSpecsList": [ { "custom": false, "dataType": "ENUM", "defaultValue": "true", "name": "Open", "value": 1 }, { "custom": false, "dataType": "ENUM", "defaultValue": "false", "name": "Close", "value": 0 } ] } - Contoh item dalam dataSpecsList ketika dataType adalah STRUCT:
{ "childDataType": "TEXT", "childName": "Card number", "dataSpecs": { "custom": true, "dataType": "TEXT", "length": 128 }, "dataType": "STRUCT", "identifier": "CardNo", "name": "NVR chip information" }
Format data layanan
Tabel berikut mencantumkan parameter untuk mendefinisikan sebuah layanan.
| Parameter | Type | Required | Description |
| productKey | String | Yes | ProductKey dari produk yang berisi model TSL. |
|
createTs
|
Long
|
No
|
Waktu pembuatan fitur, dalam bentuk timestamp 13 digit. Jika Anda tidak menentukan parameter ini, sistem akan menghasilkan nilai tersebut. Fitur diurutkan berdasarkan timestamp ini secara menaik.
Catatan Untuk model TSL yang sudah ada, waktu pembuatan adalah waktu ketika model TSL pertama kali dimodifikasi setelah dipublikasikan. |
| identifier | String | Yes | Pengidentifikasi layanan dapat terdiri dari maksimal 50 karakter dan boleh berisi huruf kapital, huruf kecil, angka, serta garis bawah (_). Catatan Pengidentifikasi tidak boleh merupakan kata kunci yang dicadangkan, seperti set, get, post, property, event, time, atau value. |
| serviceName | String | Yes | Nama layanan dapat terdiri dari maksimal 30 karakter dan boleh berisi karakter Tionghoa, huruf kapital dan kecil, angka, tanda hubung (-), garis bawah (_), serta titik (.). Nama harus dimulai dengan karakter Tionghoa, huruf, atau angka. Setiap karakter Tionghoa dihitung sebagai satu karakter. |
| inputParams | List | No | Daftar parameter input. Untuk detail struktur data, lihat Struktur data parameter input dan output. |
| outputParams | List | No | Daftar parameter output. Untuk detail struktur data, lihat Struktur data parameter input dan output. |
| required | Boolean | Yes | Menentukan apakah layanan tersebut wajib untuk kategori standar.
|
| callType | String | Yes | Tipe pemanggilan layanan.
|
| custom | Boolean | Yes | Menentukan apakah ini merupakan fitur kustom.
|
Format data event
Tabel berikut mencantumkan parameter untuk mendefinisikan sebuah event.
| Parameter | Type | Required | Description |
| productKey | String | Yes | ProductKey dari produk yang berisi model TSL. |
|
createTs
|
Long
|
No
|
Waktu pembuatan fitur, dalam bentuk timestamp 13 digit. Jika Anda tidak menentukan parameter ini, sistem akan menghasilkan nilai tersebut. Fitur diurutkan berdasarkan timestamp ini secara menaik.
Catatan Untuk model TSL yang sudah ada, waktu pembuatan adalah waktu ketika model TSL pertama kali dimodifikasi setelah dipublikasikan. |
| identifier | String | Yes | Pengidentifikasi event. Panjangnya maksimal 50 karakter dan boleh berisi huruf kapital, huruf kecil, angka, serta garis bawah (_). Catatan Pengidentifikasi tidak boleh merupakan kata kunci yang dicadangkan, seperti set, get, post, property, event, time, atau value. |
| eventName | String | Yes | Nama event. Panjangnya maksimal 30 karakter dan harus dimulai dengan karakter Tionghoa, huruf, atau angka. Nama boleh berisi karakter Tionghoa, huruf kapital, huruf kecil, angka, tanda hubung (-), garis bawah (_), serta titik (.). Setiap karakter Tionghoa dihitung sebagai satu karakter. |
| eventType | String | Yes | Tipe event. Nilai yang valid:
|
| outputdata | List | No | Parameter output event. Untuk detail struktur data, lihat Struktur data parameter input dan output. |
| required | Boolean | Yes | Apakah ini merupakan event wajib untuk kategori standar. Nilai yang valid:
|
| custom | Boolean | Yes | Apakah ini merupakan fitur kustom. Nilai yang valid:
|
Struktur parameter input dan output
Tabel berikut mencantumkan field untuk mendefinisikan parameter input dan output layanan atau event.
| Parameter | Type | Required | Description |
| dataType | String | Yes | Tipe data parameter. Nilai yang valid: ARRAY, STRUCT, INT, FLOAT, DOUBLE, TEXT, DATE, ENUM, dan BOOL. Untuk spesifikasi data setiap tipe data, lihat bagian terkait dalam topik ini. |
| identifier | String | Yes | Pengidentifikasi unik untuk parameter. Panjangnya maksimal 50 karakter dan boleh berisi huruf kapital dan kecil, angka, serta karakter garis bawah (_). Catatan Pengidentifikasi tidak boleh merupakan kata kunci yang dicadangkan, seperti set, get, post, property, event, time, atau value. |
| name | String | Yes | Nama tampilan parameter. Panjangnya maksimal 30 karakter dan boleh berisi karakter Tionghoa, huruf kapital, huruf kecil, angka, tanda hubung (-), garis bawah (_), serta titik (.). Nama harus dimulai dengan karakter Tionghoa, huruf, atau angka. Setiap karakter Tionghoa dihitung sebagai satu karakter. |
| direction | String | Yes | Menunjukkan apakah parameter tersebut merupakan parameter input atau output.
|
| paraOrder | Integer | Yes | Nomor urutan unik berbasis nol untuk parameter tersebut. |
| dataSpecs | Object | No | Jika dataType merupakan tipe sederhana seperti INT, FLOAT, DOUBLE, TEXT, DATE, atau BOOL, spesifikasi data disimpan dalam parameter dataSpecs. Catatan
|
| dataSpecsList | List | No | Jika dataType merupakan tipe kompleks seperti ENUM, ARRAY, atau STRUCT, spesifikasi data disimpan dalam parameter dataSpecsList. Catatan
|
| custom | Boolean | Yes | Menunjukkan apakah parameter tersebut termasuk dalam fitur TSL kustom.
|
Struktur data INT, FLOAT, dan DOUBLE
Jika fitur atau parameter memiliki tipe data INT, FLOAT, atau DOUBLE, struktur datanya mencakup parameter berikut.
| Parameter | Type | Required | Description |
| dataType | String | Yes | Tipe data. Nilai yang valid: INT, FLOAT, atau DOUBLE. |
| max | String | Yes | Nilai maksimum. Nilai ini harus sesuai dengan tipe yang ditentukan dalam parameter dataType. Nilai harus diteruskan sebagai string. Misalnya, jika dataType adalah INT, gunakan |
| min | String | Yes | Nilai minimum. Nilai ini harus sesuai dengan tipe yang ditentukan dalam parameter dataType. Nilai harus diteruskan sebagai string. Untuk informasi lebih lanjut, lihat deskripsi untuk max. |
| step | String | Yes | Ukuran langkah, yaitu perubahan inkremental untuk nilai tersebut. Nilai ini harus sesuai dengan tipe yang ditentukan dalam parameter dataType. Nilai harus diteruskan sebagai string. Untuk informasi lebih lanjut, lihat deskripsi untuk max. |
| precise | String | No | Presisi. Parameter ini hanya digunakan untuk tipe data FLOAT dan DOUBLE. |
| defaultValue | String | No | Nilai default untuk parameter tersebut. |
| unit | String | Yes | Simbol satuan. |
| unitName | String | Yes | Nama satuan. |
| custom | Boolean | Yes | Menunjukkan apakah ini merupakan fitur kustom.
|
Struktur data DATE dan TEXT
Struktur data untuk tipe data DATE dan TEXT mencakup parameter berikut.
| Parameter | Type | Required | Description |
| dataType | String | Yes | Tipe data. Nilai yang valid adalah DATE atau TEXT. |
| length | Long | Yes | Panjang data maksimum adalah 2.048 byte. Parameter ini wajib jika dataType diatur ke TEXT. |
| defaultValue | String | No | Nilai default. |
| custom | Boolean | Yes | Menunjukkan apakah ini merupakan fitur kustom.
|
Spesifikasi data ARRAY
Ketika tipe data fitur atau parameter adalah ARRAY, spesifikasi datanya mencakup parameter berikut.
| Parameter | Type | Required | Description |
| dataType | String | Yes | Nilainya harus ARRAY. |
| size | Long | Yes | Jumlah elemen dalam array. |
| childDataType | String | Yes | Tipe data elemen dalam array. Nilai yang valid: STRUCT, INT, FLOAT, DOUBLE, atau TEXT. |
| dataSpecs | Object | No | Jika childDataType merupakan tipe non-list seperti INT, FLOAT, DOUBLE, TEXT, DATE, atau ARRAY, gunakan parameter dataSpecs ini untuk mendefinisikan spesifikasi data. Catatan
|
| dataSpecsList | List | No | Jika childDataType merupakan tipe list seperti ENUM, BOOL, atau STRUCT, gunakan parameter dataSpecsList ini untuk mendefinisikan spesifikasi data. Catatan
|
| custom | Boolean | Yes | Menunjukkan apakah fitur tersebut kustom.
|
Tipe ENUM dan BOOL
Jika fitur atau parameter bertipe BOOL atau ENUM, struktur datanya mencakup parameter berikut.
| Parameter | Type | Required | Description |
| dataType | String | Yes | Nilainya harus BOOL atau ENUM. |
| name | String | Yes | Nama item ENUM. Panjangnya maksimal 20 karakter dan harus dimulai dengan karakter Tionghoa, huruf Latin, atau angka. Nama boleh berisi karakter Tionghoa, huruf Latin, angka, garis bawah (_), dan tanda hubung (-). Setiap karakter Tionghoa dihitung sebagai satu karakter. |
| value | Integer | Yes | Nilai enum. |
| custom | Boolean | Yes | Menentukan apakah ini merupakan fitur kustom.
|
Struktur data Struct
Ketika tipe data fitur atau parameter adalah struct, struktur datanya mencakup parameter berikut.
- Parameter childSpecsDTO dan childEnumSpecsDTO sudah tidak digunakan lagi. Hal ini tidak memengaruhi panggilan API yang sudah ada. Untuk panggilan baru, jangan teruskan parameter ini. Gunakan parameter dataSpecsList sebagai gantinya.
- Ketika tipe data array dan struct bersarang, paling banyak dua tingkat nesting rekursif (parent dan child) didukung.
| Parameter | Type | Required | Description |
| dataType | String | Yes | Nilainya harus struct. |
| identifier | String | Yes | Pengidentifikasi sub-parameter dalam struct. Boleh berisi huruf kapital, huruf kecil, angka, dan garis bawah (_). Panjang maksimum 50 karakter. Catatan Pengidentifikasi tidak boleh merupakan kata-kata yang dicadangkan berikut: set, get, post, property, event, time, atau value. |
| name | String | Yes | Nama sub-parameter dalam struct. Nama harus dimulai dengan karakter Tionghoa, huruf, atau angka. Nama boleh berisi karakter Tionghoa, huruf kapital, huruf kecil, angka, tanda hubung (-), garis bawah (_), dan titik (.). Panjang maksimum 30 karakter. Setiap karakter Tionghoa dihitung sebagai satu karakter. Catatan childNameParameter ini memiliki definisi yang sama dan saat ini tidak digunakan. |
| childDataType | String | No | Tipe data sub-parameter dalam struct. Nilai yang valid: INT, FLOAT, DOUBLE, TEXT, DATE, ENUM, BOOL. |
| childName | String | Yes | Nama sub-parameter dalam struct. Nama harus dimulai dengan karakter Tionghoa, huruf, atau angka. Nama boleh berisi karakter Tionghoa, huruf kapital, huruf kecil, angka, tanda hubung (-), garis bawah (_), dan titik (.). Panjang maksimum 30 karakter. Setiap karakter Tionghoa dihitung sebagai satu karakter. |
| dataSpecs | Object | No |
Spesifikasi data untuk tipe data non-list (dataType) seperti INT, FLOAT, DOUBLE, TEXT, DATE, dan ARRAY disimpan dalam dataSpecs. Catatan
|
| dataSpecsList | List | No | dataTypeENUMBOOLSTRUCTdataSpecsListJika dari sub-parameter merupakan tipe list (seperti , , atau ), spesifikasi datanya disimpan dalam parameter . Catatan
|
| custom | Boolean | Yes | Menentukan apakah ini merupakan fitur kustom.
|
Struktur data extendConfig
Dalam struktur data setiap properti, event, atau layanan, gunakan extendConfig untuk mendefinisikan informasi tambahan yang memetakan protokol komunikasi perangkat ke model TSL standar.
IoT Platform mendukung informasi tambahan untuk perangkat yang menggunakan protokol Modbus, OPC UA, atau gateway kustom. Spesifikasi data berbeda-beda tergantung protokolnya:
Tipe Modbus
Modbus hanya mendukung informasi tambahan untuk properti.
extendConfig. Parameter aktual tergantung kasus penggunaan Anda.{
"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}
}
}
| Parameter | Type | Description |
| identifier | String | Pengidentifikasi unik untuk properti dalam produk tersebut. |
| registerAddress | String | Alamat register. Nilainya harus dimulai dengan 0x dan berada dalam rentang 0x0 hingga 0xFFFF. Contohnya, 0xFE. |
| operateType | String | Tipe operasi. Nilai yang valid meliputi:
|
| writeFunctionCode | Integer | Kode fungsi untuk operasi tulis. Nilai yang valid bergantung pada operateType yang ditentukan.
|
| writeOnly | Integer | Apakah operasi tersebut hanya tulis.
|
| scaling | Number | Faktor penskalaan. Nilainya tidak boleh 0. Parameter ini tidak berlaku untuk tipe data string atau bool. |
| pollingTime | Integer | Interval pengumpulan, dalam milidetik (ms). Jika parameter ini tidak ditentukan, interval pengumpulan default perangkat akan digunakan. |
| trigger | Integer | Metode pelaporan data. 1: Melaporkan data secara berkala. 2: Melaporkan data saat terjadi perubahan. |
| bitMask | Integer | Parameter khusus untuk tipe data bool. Mask. Nilai yang valid: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, dan 32768. Nilai-nilai ini sesuai dengan 1<<(0 hingga 15). |
| originalDataType | Object | Tipe data asli. |
| type | String | Tipe data asli. Nilainya harus salah satu dari tipe dasar berikut: int16, uint16, int32, uint32, int64, uint64, float, double, string, bool, atau data kustom (mengembalikan data heksa dalam urutan big-endian). |
| specs | Object | Parameter khusus untuk tipe data tertentu. |
| registerCount | Integer | Parameter khusus untuk tipe data string dan data kustom. Jumlah register. |
| swap | Integer | Parameter untuk semua tipe data kecuali string dan data kustom. Menentukan apakah byte tinggi dan rendah dalam register 16-bit ditukar (misalnya, byte1byte2 menjadi byte2byte1).
|
| reverseRegister | Integer | Parameter untuk semua tipe data kecuali string dan data kustom. Menentukan apakah urutan register 16-bit dalam data 32-bit dibalik (misalnya, byte1byte2byte3byte4 menjadi byte3byte4byte1byte2).
|
Tipe OPC UA
OPC UA mendukung informasi tambahan untuk properti, layanan, dan event.
{
"identifier":"extend2",
"displayName":"Action",
"inputData":[
{
"identifier":"xxxx",
"index":1
},
{
"identifier":"xxxx",
"index":2
}
],
"outputData":[
{
"identifier":"xxxx",
"index":1
},
{
"identifier":"xxxx",
"index":2
}
]
}
| Parameter | Type | Description |
| identifier | String | Pengidentifikasi unik untuk properti, layanan, atau event dalam suatu produk. |
| displayName | String | Nama tampilan. Parameter ini wajib untuk properti dan event, tetapi opsional untuk layanan. |
| inputData | List | Parameter data input. |
| outputData | List | Parameter data output. |
| identifier | String | Pengidentifikasi unik untuk parameter input atau output dalam produk tersebut. |
| index | Integer | Indeks unik untuk parameter dalam daftar induknya (inputData atau outputData). |
Tipe kustom
Tipe kustom mendukung informasi tambahan untuk properti, layanan, dan event.
{
"identifier":"xxx",
"customize":{}
}
| Parameter | Type | Description |
| identifier | String | Pengidentifikasi unik untuk properti, layanan, atau event dalam suatu produk. |
| customize | Object | Data kustom yang ditentukan pengguna dalam format objek JSON. |
Validasi
Anda dapat menggunakan json-schema untuk memvalidasi parameter input dalam ThingModelJson.
Untuk definisi skema, lihat schema.json.
Contoh berikut menunjukkan cara melakukan validasi:
- Untuk mengunduh library json-schema, tambahkan dependensi berikut ke proyek Maven Anda.
<dependency> <groupId>com.github.everit-org.json-schema</groupId> <artifactId>org.everit.json.schema</artifactId> <version>1.11.0</version> </dependency> - Kode contoh:
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; /** * @author: *** * @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); // melempar ValidationException jika objek ini tidak valid System.out.println(System.currentTimeMillis() - start); } catch (ValidationException exception) { System.out.println(exception); } } }
Menulis ThingModelJson
Gunakan Visual Studio Code untuk menulis ThingModelJson dengan dukungan auto-completion.
- Buka situs resmi Visual Studio Code untuk mengunduh dan menginstal versi terbaru Visual Studio Code.
- Buka Visual Studio Code, klik tombol
di pojok kiri bawah, lalu pilih Settings. - Pada tab User Settings, pilih . Di bawah Schemas, klik Edit in settings.json, tambahkan konfigurasi berikut, lalu simpan file tersebut.
"json.schemas": [{ "fileMatch": ["/.json"], "url": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json" }]Setelah Anda menyimpan konfigurasi, prompt auto-completion akan muncul saat Anda mendefinisikan Thing Model.
"$schema": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json" "" events functionBlockId functionBlockName functionBlocks properties services