Todos los productos
Search
Centro de documentos

IoT Platform:Estructura de datos de ThingModelJson

Última actualización: Sep 07, 2026

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.

Importante

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.
  • READ_WRITE: lectura y escritura.
  • READ_ONLY: solo lectura.
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
  • Las especificaciones de datos aplican a todos los datos, excepto a las definiciones de propiedades, servicios, eventos y parámetros.
  • Debe especificar el parámetro dataSpecs o dataSpecsList según el tipo de datos. No es posible especificar ambos.
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
  • Las especificaciones de datos aplican a todos los datos, excepto a las definiciones de propiedades, servicios, eventos y parámetros.
  • Debe especificar el parámetro dataSpecs o dataSpecsList según el tipo de datos. No es posible especificar ambos.
required Boolean Sí Indica si la propiedad es obligatoria para una categoría estándar.
  • true: sí
  • false: no
custom Boolean Sí Indica si se trata de una función personalizada.
  • true: sí
  • false: no
  • 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.
  • true: sí
  • false: no
callType String Sí El tipo de llamada del servicio.
  • ASYNC: llamada asíncrona
  • SYNC: llamada síncrona
custom Boolean Sí Indica si se trata de una función personalizada.
  • true: sí
  • false: no

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:
  • INFO_EVENT_TYPE: información
  • ALERT_EVENT_TYPE: alerta
  • ERROR_EVENT_TYPE: error
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:
  • true: sí
  • false: no
custom Boolean Sí Indica si se trata de una función personalizada. Valores válidos:
  • true: sí
  • false: no

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.
  • PARAM_INPUT: parámetro de entrada.
  • PARAM_OUTPUT: parámetro 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
  • Estas especificaciones aplican a los datos del parámetro, no a las definiciones de otros componentes TSL como propiedades, servicios o eventos.
  • Debe especificar el parámetro dataSpecs o dataSpecsList según el tipo de datos. No es posible especificar ambos.
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
  • Estas especificaciones aplican a los datos del parámetro, no a las definiciones de otros componentes TSL como propiedades, servicios o eventos.
  • Debe especificar el parámetro dataSpecs o dataSpecsList según el tipo de datos. No es posible especificar ambos.
custom Boolean Sí Indica si el parámetro pertenece a una función TSL personalizada.
  • true: sí
  • false: no

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 "max":"200" en lugar de "max":200.

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.
  • true: sí
  • false: no

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.
  • true: Sí
  • false: No

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.

Importante

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
  • Las especificaciones de datos aplican a todos los datos, excepto a las definiciones de propiedades, servicios, eventos y parámetros.
  • Debe especificar el parámetro dataSpecs o dataSpecsList según el tipo de dato secundario. No es posible especificar ambos.
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
  • Las especificaciones de datos aplican a todos los datos, excepto a las definiciones de propiedades, servicios, eventos y parámetros.
  • Debe especificar el parámetro dataSpecs o dataSpecsList según el tipo de dato secundario. No es posible especificar ambos.
custom Boolean Sí Indica si la función está personalizada.
  • true: Sí
  • false: No

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.
  • true: La función está personalizada.
  • false: La función no está 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.

Importante
  • 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
  • Las especificaciones de datos se refieren a todas las definiciones de datos distintas de las definiciones de propiedades, servicios, eventos y parámetros.
  • dataSpecsdataSpecsListDebe proporcionar un valor para o , pero no para ambos. Utilice el parámetro que corresponda al tipo de dato.
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
  • Las especificaciones de datos se refieren a todas las definiciones de datos distintas de las definiciones de propiedades, servicios, eventos y parámetros.
  • dataSpecsdataSpecsListDebe proporcionar un valor para o , pero no para ambos. Utilice el parámetro que corresponda al tipo de dato.
custom Boolean Sí Especifica si se trata de una función personalizada.
  • true: Sí
  • false: No

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.

Nota

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.

Nota

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:
  • coilStatus: estado de bobina
  • inputStatus: entrada discreta
  • holdingRegister: registro de retención
  • inputRegister: registro de entrada
writeFunctionCode Integer El código de función para operaciones de escritura. Los valores válidos dependen del operateType especificado.
  • coilStatus:
    • 5: lectura y escritura (lectura: 0x01, escritura: 0x05)
    • 15: lectura y escritura (lectura: 0x01, escritura: 0x0F)
    • 0: solo lectura (lectura: 0x01)
  • inputStatus: 0: solo lectura (lectura: 0x02)
  • holdingRegister:
    • 6: lectura y escritura (lectura: 0x03, escritura: 0x06)
    • 16: lectura y escritura (lectura: 0x03, escritura: 0x10)
    • 0: solo lectura (lectura: 0x03)
  • inputRegister: 0: solo lectura (lectura: 0x04)
writeOnly Integer Indica si la operación es solo de escritura.
  • 0: No es solo de escritura.
    • writeFunctionCodewriteOnlySi no es 0 (lo que indica lectura y escritura), un valor de 0 significa que se admiten tanto las operaciones de lectura como las de escritura.
    • writeFunctionCodewriteOnlySi es 0 (lo que indica solo lectura), debe ser 0.
  • 1: Solo escritura.

    Solo cuando writeFunctionCode no es 0 (lo que indica lectura y escritura), writeOnly puede ser 1 para indicar compatibilidad con solo 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).

  • 0: No intercambiar.
  • 1: Intercambiar.
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).
  • 0: No invertir.
  • 1: Invertir.

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.

  1. Vaya al sitio web oficial de Visual Studio Code para descargar e instalar la versión más reciente de Visual Studio Code.

  2. Abra Visual Studio Code, haga clic en el botón

    Settings

    设置

    en la esquina inferior izquierda y seleccione

    .

  3. En la pestaña User Settings, elija Extensions > JSON. 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