El parámetro ThingModelJson se utiliza en ciertas solicitudes y respuestas de la API del modelo TSL. Este parámetro representa la forma en que IoT Platform almacena internamente las definiciones de funciones del modelo TSL. Dicha estructura difiere de la estructura de datos TSL y todos sus campos se ordenan alfabéticamente por clave.
Para conocer los límites de las definiciones de funciones TSL para productos y dispositivos, consulte TSL Feature Definition Limits for Products and Devices.
Estructura de datos
Los módulos TSL predeterminados y personalizados tienen estructuras de datos distintas.
-
Módulo TSL predeterminado
{ "_ppk":{ "description":"test", "version":"159244410****" } "events":[], "productKey":"al12345****", "properties":[], "services":[], "functionBlocks":[{ "productKey":"al12345****", "functionBlockId":"location0", "functionBlockName":"Location module 0" }] }Parámetro Tipo Descripción productKey String El productKey del producto al que pertenece el modelo TSL. _ppk String La información de versión del modelo TSL, que contiene los siguientes campos: - version: el número de versión del modelo TSL. Este parámetro solo se devuelve para los modelos TSL publicados.
- description: la descripción de la versión del módulo TSL predeterminado. Este parámetro solo se devuelve para los modelos TSL publicados.
properties List La lista de propiedades del modelo TSL. Para obtener más información sobre la estructura de datos de las propiedades, consulte Property data structure specification. Utilice extendConfig en cada estructura de datos de propiedad para definir información extendida. Para obtener más información, consulte extendConfig data structure specification. Si una propiedad no tiene información extendida, no es necesario pasar extendConfig.
services List La lista de servicios del modelo TSL. Para obtener más información sobre la estructura de datos de los servicios, consulte Service data format specification. Utilice extendConfig en cada estructura de datos de servicio para definir información extendida. Para obtener más información, consulte extendConfig data structure specification. Si un servicio no tiene información extendida, no es necesario pasar extendConfig.
events List La lista de eventos del modelo TSL. Para obtener más información sobre la estructura de datos de los eventos, consulte Event data format specification. Utilice extendConfig en cada estructura de datos de evento para definir información extendida. Para obtener más información, consulte extendConfig data structure specifications. Si un evento no tiene información extendida, no es necesario pasar extendConfig.
functionBlocks List La lista de módulos TSL personalizados. Solo se incluye si el producto cuenta con módulos personalizados. Contiene los siguientes campos: - productKey: el productKey del producto al que pertenece el modelo TSL.
- functionBlockId: el identificador único del módulo TSL personalizado dentro de un producto.
- functionBlockName: el nombre del módulo TSL personalizado.
-
Módulo TSL personalizado
{ "productKey":"al12345****", "identifier":"location0", "name":"Location module 0", "properties":[], "services":[], "events":[], "description":"" }A continuación se muestran los parámetros básicos de un módulo TSL personalizado. Para consultar otros parámetros, revise las descripciones del módulo TSL predeterminado.
Parámetro
Tipo
Descripción
identifier
String
El identificador único del módulo TSL personalizado dentro de un producto.
El identificador puede tener hasta 30 caracteres y admite letras mayúsculas, letras minúsculas, dígitos y guiones bajos (_).
name
String
El nombre del módulo TSL personalizado.
El nombre debe tener entre 4 y 30 caracteres. Admite caracteres chinos, japoneses, letras del alfabeto inglés, dígitos y guiones bajos (_). Cada carácter chino o japonés cuenta como un solo carácter.
description
String
La descripción del módulo, con una longitud máxima de 100 caracteres.
Estructura de datos de las propiedades
A continuación se listan los parámetros necesarios para definir una propiedad.
Los parámetros
std
y
customFlag
están obsoletos. No afectan las llamadas a la API existentes y no es necesario especificarlos en las llamadas nuevas.
| Parámetro | Tipo | Obligatorio | Descripción |
| productKey | String | Sí | El ProductKey del producto al que pertenece el modelo TSL. |
| createTs | Long | No | La hora de creación de la función, expresada como una marca de tiempo de 13 dígitos. Si no especifica este parámetro, el sistema genera uno automáticamente. Las funciones se ordenan de forma ascendente según esta marca de tiempo. Nota En un modelo TSL existente, la hora de creación corresponde al momento en que se modificó por primera vez después de publicarse. |
| identifier | String | Sí | El identificador único de la propiedad. Debe tener un máximo de 50 caracteres y admite letras mayúsculas, letras minúsculas, dígitos y guiones bajos (_). Nota El identificador no puede ser una palabra clave reservada, como set, get, post, property, event, time o value. |
| dataType | String | Sí | El tipo de datos de la propiedad. Valores válidos: ARRAY, STRUCT, INT, FLOAT, DOUBLE, TEXT, DATE, ENUM y BOOL. Los parámetros obligatorios varían según el tipo de datos. Para obtener más información, consulte las especificaciones de datos de cada tipo en este tema. |
| name | String | Sí | El nombre para mostrar de la propiedad. Puede tener hasta 30 caracteres y admite caracteres chinos, letras mayúsculas, letras minúsculas, dígitos, guiones (-), guiones bajos (_) y puntos (.). Debe comenzar con un carácter chino, una letra o un dígito. Cada carácter chino cuenta como un solo carácter. |
| rwFlag | String | Sí | Indica si la propiedad es de solo lectura o de lectura y escritura en IoT Platform.
|
| dataSpecs | Object | No | Si dataType se establece en INT, FLOAT, DOUBLE, TEXT, DATE o ARRAY, las especificaciones de datos se almacenan en el parámetro dataSpecs. Para ver ejemplos, consulte los bloques de código debajo de esta tabla. Nota
|
| dataSpecsList | List | No | Si dataType se establece en ENUM, BOOL o STRUCT, las especificaciones de datos se almacenan en el parámetro dataSpecsList. Para ver ejemplos, consulte los bloques de código debajo de esta tabla. Nota
|
| required | Boolean | Sí | Indica si la propiedad es obligatoria para una categoría estándar.
|
| custom | Boolean | Sí | Indica si se trata de una función personalizada.
|
-
Ejemplo de dataSpecs cuando dataType es INT:
{ "dataSpecs": { "custom": true, "dataType": "INT", "defaultValue": "30", "max": "1440", "min": "0", "step": "10", "unit": "min" } } -
Ejemplo de dataSpecs cuando dataType es TEXT:
{ "dataSpecs": { "custom": true, "dataType": "TEXT", "id": 2412127, "length": 2048 } } -
Ejemplo de dataSpecs cuando dataType es ARRAY:
{ "dataSpecs": { "childDataType": "INT", "custom": true, "dataType": "ARRAY", "size": 1 } } -
Ejemplo de dataSpecsList cuando dataType es ENUM:
{ "dataSpecsList": [ { "custom": false, "dataType": "ENUM", "defaultValue": "true", "name": "Open", "value": 1 }, { "custom": false, "dataType": "ENUM", "defaultValue": "false", "name": "Close", "value": 0 } ] } -
Ejemplo de un elemento en dataSpecsList cuando dataType es STRUCT:
{ "childDataType": "TEXT", "childName": "Card number", "dataSpecs": { "custom": true, "dataType": "TEXT", "length": 128 }, "dataType": "STRUCT", "identifier": "CardNo", "name": "NVR chip information" }
Formato de datos de los servicios
A continuación se listan los parámetros necesarios para definir un servicio.
| Parámetro | Tipo | Obligatorio | Descripción |
| productKey | String | Sí | El ProductKey del producto que contiene el modelo TSL. |
|
createTs
|
Long
|
No
|
La hora de creación de la función, expresada como una marca de tiempo de 13 dígitos. Si no especifica este parámetro, el sistema genera uno automáticamente. Las funciones se ordenan de forma ascendente según esta marca de tiempo.
Nota En un modelo TSL existente, la hora de creación corresponde al momento en que se modificó por primera vez después de publicarse. |
| identifier | String | Sí | El identificador del servicio puede tener hasta 50 caracteres y admite letras mayúsculas, letras minúsculas, dígitos y guiones bajos (_). Nota El identificador no puede ser una palabra clave reservada, como set, get, post, property, event, time o value. |
| serviceName | String | Sí | El nombre del servicio puede tener hasta 30 caracteres y admite caracteres chinos, letras mayúsculas y minúsculas, dígitos, guiones (-), guiones bajos (_) y puntos (.). Debe comenzar con un carácter chino, una letra o un dígito. Cada carácter chino cuenta como un solo carácter. |
| inputParams | List | No | Una lista de parámetros de entrada. Para obtener detalles sobre la estructura de datos, consulte Data structure of the input and output parameters. |
| outputParams | List | No | Una lista de parámetros de salida. Para obtener detalles sobre la estructura de datos, consulte Data structure of the input and output parameters. |
| required | Boolean | Sí | Indica si el servicio es obligatorio para una categoría estándar.
|
| callType | String | Sí | El tipo de llamada del servicio.
|
| custom | Boolean | Sí | Indica si se trata de una función personalizada.
|
Formato de datos de los eventos
A continuación se listan los parámetros necesarios para definir un evento.
| Parámetro | Tipo | Obligatorio | Descripción |
| productKey | String | Sí | El ProductKey del producto que contiene el modelo TSL. |
|
createTs
|
Long
|
No
|
La hora de creación de la función, expresada como una marca de tiempo de 13 dígitos. Si no especifica este parámetro, el sistema genera uno automáticamente. Las funciones se ordenan de forma ascendente según esta marca de tiempo.
Nota En un modelo TSL existente, la hora de creación corresponde al momento en que se modificó por primera vez después de publicarse. |
| identifier | String | Sí | El identificador del evento. Puede tener hasta 50 caracteres y admite letras mayúsculas, letras minúsculas, dígitos y guiones bajos (_). Nota El identificador no puede ser una palabra clave reservada, como set, get, post, property, event, time o value. |
| eventName | String | Sí | El nombre del evento. Debe tener un máximo de 30 caracteres y comenzar con un carácter chino, una letra o un dígito. Admite caracteres chinos, letras mayúsculas, letras minúsculas, dígitos, guiones (-), guiones bajos (_) y puntos (.). Cada carácter chino cuenta como un solo carácter. |
| eventType | String | Sí | El tipo de evento. Valores válidos:
|
| outputdata | List | No | Los parámetros de salida del evento. Para obtener detalles sobre la estructura de datos, consulte Data structure of the input and output parameters. |
| required | Boolean | Sí | Indica si el evento es obligatorio para una categoría estándar. Valores válidos:
|
| custom | Boolean | Sí | Indica si se trata de una función personalizada. Valores válidos:
|
Estructura de los parámetros de entrada y salida
A continuación se listan los campos necesarios para definir los parámetros de entrada y salida de un servicio o evento.
| Parámetro | Tipo | Obligatorio | Descripción |
| dataType | String | Sí | El tipo de datos del parámetro. Valores válidos: ARRAY, STRUCT, INT, FLOAT, DOUBLE, TEXT, DATE, ENUM y BOOL. Para consultar las especificaciones de datos de cada tipo, revise las secciones correspondientes de este tema. |
| identifier | String | Sí | Un identificador único para el parámetro. Puede tener hasta 50 caracteres y admite letras mayúsculas y minúsculas, dígitos y el carácter de guion bajo (_). Nota El identificador no puede ser una palabra clave reservada, como set, get, post, property, event, time o value. |
| name | String | Sí | El nombre para mostrar del parámetro. Puede tener hasta 30 caracteres y admite caracteres chinos, letras mayúsculas, letras minúsculas, dígitos, guiones (-), guiones bajos (_) y puntos (.). El nombre debe comenzar con un carácter chino, una letra o un dígito. Cada carácter chino cuenta como un solo carácter. |
| direction | String | Sí | Indica si el parámetro es de entrada o de salida.
|
| paraOrder | Integer | Sí | El número de secuencia único del parámetro, con índice basado en cero. |
| dataSpecs | Object | No | Si dataType es un tipo simple como INT, FLOAT, DOUBLE, TEXT, DATE o BOOL, las especificaciones de datos se almacenan en el parámetro dataSpecs. Nota
|
| dataSpecsList | List | No | Si dataType es un tipo complejo como ENUM, ARRAY o STRUCT, las especificaciones de datos se almacenan en el parámetro dataSpecsList. Nota
|
| custom | Boolean | Sí | Indica si el parámetro pertenece a una función TSL personalizada.
|
Estructura de datos de INT, FLOAT y DOUBLE
Si una función o un parámetro tiene el tipo de datos INT, FLOAT o DOUBLE, su estructura de datos incluye los siguientes parámetros.
| Parámetro | Tipo | Obligatorio | Descripción |
| dataType | String | Sí | El tipo de datos. Valores válidos: INT, FLOAT o DOUBLE. |
| max | String | Sí | El valor máximo. Este valor debe corresponder al tipo especificado en el parámetro dataType. El valor debe pasarse como una cadena (string). Por ejemplo, si dataType es INT, utilice |
| min | String | Sí | El valor mínimo. Este valor debe corresponder al tipo especificado en el parámetro dataType. El valor debe pasarse como una cadena (string). Para obtener más información, consulte la descripción de max. |
| step | String | Sí | El tamaño del paso, es decir, el cambio incremental del valor. Este valor debe corresponder al tipo especificado en el parámetro dataType. El valor debe pasarse como una cadena (string). Para obtener más información, consulte la descripción de max. |
| precise | String | No | La precisión. Este parámetro solo se utiliza para los tipos de datos FLOAT y DOUBLE. |
| defaultValue | String | No | El valor predeterminado del parámetro. |
| unit | String | Sí | El símbolo de la unidad. |
| unitName | String | Sí | El nombre de la unidad. |
| custom | Boolean | Sí | Indica si se trata de una función personalizada.
|
Estructura de datos DATE y TEXT
La estructura de datos para los tipos de dato DATE y TEXT incluye los siguientes parámetros.
| Parámetro | Tipo | Obligatorio | Descripción |
| dataType | String | Sí | El tipo de dato. Los valores válidos son DATE o TEXT. |
| length | Long | Sí | La longitud máxima de los datos es de 2048 bytes. Este parámetro es obligatorio si dataType se establece en TEXT. |
| defaultValue | String | No | El valor predeterminado. |
| custom | Boolean | Sí | Indica si se trata de una función personalizada.
|
Especificación de datos ARRAY
Cuando el tipo de dato de una función o un parámetro es ARRAY, la especificación de datos incluye los siguientes parámetros.
Los tipos de dato anidados
ARRAY
y
STRUCT
admiten como máximo dos niveles de anidamiento recursivo (padre e hijo).
| Parámetro | Tipo | Obligatorio | Descripción |
| dataType | String | Sí | El valor debe ser ARRAY. |
| size | Long | Sí | El número de elementos del arreglo. |
| childDataType | String | Sí | El tipo de dato de los elementos del arreglo. Valores válidos: STRUCT, INT, FLOAT, DOUBLE o TEXT. |
| dataSpecs | Object | No | Si childDataType es un tipo que no es de lista, como INT, FLOAT, DOUBLE, TEXT, DATE o ARRAY, utilice el parámetro dataSpecs para definir la especificación de datos. Nota
|
| dataSpecsList | List | No | Si childDataType es un tipo de lista, como ENUM, BOOL o STRUCT, utilice el parámetro dataSpecsList para definir la especificación de datos. Nota
|
| custom | Boolean | Sí | Indica si la función está personalizada.
|
Tipos ENUM y BOOL
Si una función o un parámetro es de tipo BOOL o ENUM, su estructura de datos incluye los siguientes parámetros.
| Parámetro | Tipo | Obligatorio | Descripción |
| dataType | String | Sí | El valor debe ser BOOL o ENUM. |
| name | String | Sí | El nombre del elemento ENUM. El nombre puede tener hasta 20 caracteres y debe comenzar con un carácter chino, una letra inglesa o un dígito. Puede contener caracteres chinos, letras inglesas, dígitos, guiones bajos (_) y guiones (-). Cada carácter chino cuenta como un solo carácter. |
| value | Integer | Sí | El valor de enumeración. |
| custom | Boolean | Sí | Especifica si se trata de una función personalizada.
|
Estructura de datos struct
Cuando el tipo de dato de una función o un parámetro es struct, su estructura de datos incluye los siguientes parámetros.
Los parámetros childSpecsDTO y childEnumSpecsDTO están obsoletos. Esto no afecta las llamadas a API existentes. Para las llamadas nuevas, no pase estos parámetros. En su lugar, utilice el parámetro dataSpecsList.
Cuando los tipos de dato array y struct se anidan, se admiten hasta dos niveles de anidamiento recursivo (padre e hijo).
| Parámetro | Tipo | Obligatorio | Descripción |
| dataType | String | Sí | El valor debe ser struct. |
| identifier | String | Sí | El identificador del subparámetro dentro de la estructura. Puede contener letras mayúsculas, letras minúsculas, dígitos y guiones bajos (_). La longitud máxima es de 50 caracteres. Nota El identificador no puede ser ninguna de las siguientes palabras reservadas: set, get, post, property, event, time ni value. |
| name | String | Sí | El nombre del subparámetro dentro de la estructura. Debe comenzar con un carácter chino, una letra o un dígito. Puede contener caracteres chinos, letras mayúsculas, letras minúsculas, dígitos, guiones (-), guiones bajos (_) y puntos (.). La longitud máxima es de 30 caracteres. Cada carácter chino cuenta como un solo carácter. Nota childNameEste parámetro tiene la misma definición que y actualmente no se utiliza. |
| childDataType | String | No | El tipo de dato del subparámetro dentro de la estructura. Valores válidos: INT, FLOAT, DOUBLE, TEXT, DATE, ENUM, BOOL. |
| childName | String | Sí | El nombre del subparámetro dentro de la estructura. Debe comenzar con un carácter chino, una letra o un dígito. Puede contener caracteres chinos, letras mayúsculas, letras minúsculas, dígitos, guiones (-), guiones bajos (_) y puntos (.). La longitud máxima es de 30 caracteres. Cada carácter chino cuenta como un solo carácter. |
| dataSpecs | Object | No |
Las especificaciones de datos para tipos de dato (dataType) que no son de lista, como INT, FLOAT, DOUBLE, TEXT, DATE y ARRAY, se almacenan en dataSpecs. Nota
|
| dataSpecsList | List | No | dataTypeENUMBOOLSTRUCTdataSpecsListSi el de un subparámetro es un tipo de lista (como , o ), sus especificaciones de datos se almacenan en el parámetro . Nota
|
| custom | Boolean | Sí | Especifica si se trata de una función personalizada.
|
Estructura de datos extendConfig
En la estructura de datos de cada propiedad, evento o servicio, utilice extendConfig para definir la información extendida que asigna los protocolos de comunicación del dispositivo al modelo TSL estándar.
configCode
El campo en la respuesta es un identificador único que el sistema genera para la información extendida de una sola función.
IoT Platform admite información extendida para dispositivos que usan los protocolos Modbus, OPC UA o protocolos de puerta de enlace personalizados. Las especificaciones de datos varían según el protocolo:
Tipo Modbus
Modbus solo admite información extendida para propiedades.
A continuación se muestra un ejemplo que incluye todos los parámetros posibles para ilustrar la estructura de
extendConfig
. Los parámetros reales dependen de su caso de uso.
{
"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}
}
}
| Parámetro | Tipo | Descripción |
| identifier | String | Un identificador único para la propiedad dentro del producto. |
| registerAddress | String | La dirección del registro. El valor debe comenzar con 0x y estar dentro del rango de 0x0 a 0xFFFF. Por ejemplo, 0xFE. |
| operateType | String | El tipo de operación. Los valores válidos incluyen:
|
| writeFunctionCode | Integer | El código de función para operaciones de escritura. Los valores válidos dependen del operateType especificado.
|
| writeOnly | Integer | Indica si la operación es solo de escritura.
|
| scaling | Number | El factor de escala. El valor no puede ser 0. Este parámetro no aplica para los tipos de dato string o bool. |
| pollingTime | Integer | El intervalo de recopilación, en milisegundos (ms). Si no se especifica este parámetro, se utiliza el intervalo de recopilación predeterminado del dispositivo. |
| trigger | Integer | El método de reporte de datos. 1: Reporta datos periódicamente. 2: Reporta datos cuando hay cambios. |
| bitMask | Integer | Un parámetro específico del tipo de dato bool. La máscara. Valores válidos: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 y 32768. Estos valores corresponden a 1<<(0 a 15). |
| originalDataType | Object | El tipo de dato original. |
| type | String | El tipo de dato original. El valor debe ser uno de los siguientes tipos básicos: int16, uint16, int32, uint32, int64, uint64, float, double, string, bool o datos personalizados (devuelve datos hexadecimales en orden big-endian). |
| specs | Object | Parámetros específicos de ciertos tipos de dato. |
| registerCount | Integer | Un parámetro específico de los tipos de dato string y personalizado. El número de registros. |
| swap | Integer | Un parámetro para todos los tipos de dato, excepto string y datos personalizados. Especifica si se intercambian los bytes alto y bajo dentro de un registro de 16 bits (por ejemplo, byte1byte2 se convierte en byte2byte1).
|
| reverseRegister | Integer | Un parámetro para todos los tipos de dato, excepto string y datos personalizados. Especifica si se invierte el orden de los registros de 16 bits dentro de datos de 32 bits (por ejemplo, byte1byte2byte3byte4 se convierte en byte3byte4byte1byte2).
|
Tipo OPC UA
OPC UA admite información extendida para propiedades, servicios y eventos.
{
"identifier":"extend2",
"displayName":"Action",
"inputData":[
{
"identifier":"xxxx",
"index":1
},
{
"identifier":"xxxx",
"index":2
}
],
"outputData":[
{
"identifier":"xxxx",
"index":1
},
{
"identifier":"xxxx",
"index":2
}
]
}
|
Parámetro |
Tipo |
Descripción |
|
identifier |
String |
Un identificador único para la propiedad, el servicio o el evento dentro de un producto. |
|
displayName |
String |
El nombre para mostrar. Este parámetro es obligatorio para propiedades y eventos, pero opcional para servicios. |
|
inputData |
List |
Los parámetros de datos de entrada. |
|
outputData |
List |
Los parámetros de datos de salida. |
|
identifier |
String |
Un identificador único para un parámetro de entrada o salida dentro del producto. |
|
index |
Integer |
Un índice único para el parámetro dentro de su lista principal (inputData o outputData). |
Tipo personalizado
El tipo personalizado admite información extendida para propiedades, servicios y eventos.
{
"identifier":"xxx",
"customize":{}
}
|
Parámetro |
Tipo |
Descripción |
|
identifier |
String |
Un identificador único para la propiedad, el servicio o el evento dentro de un producto. |
|
customize |
Object |
Datos personalizados definidos por el usuario en formato de objeto JSON. |
Validación
Puede usar json-schema para validar los parámetros de entrada en ThingModelJson.
Para consultar la definición del esquema, consulte schema.json.
A continuación se muestra un ejemplo de cómo ejecutar la validación:
-
Para descargar la biblioteca json-schema, agregue la siguiente dependencia a su proyecto de Maven.
<dependency> <groupId>com.github.everit-org.json-schema</groupId> <artifactId>org.everit.json.schema</artifactId> <version>1.11.0</version> </dependency> -
Código de ejemplo:
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); // throws a ValidationException if this object is invalid System.out.println(System.currentTimeMillis() - start); } catch (ValidationException exception) { System.out.println(exception); } } }
Escritura de ThingModelJson
Utilice Visual Studio Code para escribir ThingModelJson con compatibilidad de autocompletado.
Vaya al sitio web oficial de Visual Studio Code para descargar e instalar la versión más reciente de Visual Studio Code.
-
Abra Visual Studio Code, haga clic en el botón
Settings

en la esquina inferior izquierda y seleccione
.
-
En la pestaña User Settings, elija . En Schemas, haga clic en Edit in settings.json, agregue la siguiente configuración y guarde el archivo.
"json.schemas": [{ "fileMatch": ["/.json"], "url": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json" }]Después de guardar la configuración, aparecerán sugerencias de autocompletado mientras define un Thing Model.
"$schema": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json" "" events functionBlockId functionBlockName functionBlocks properties services