Todos los productos
Search
Centro de documentos

IoT Platform:Analizar datos personalizados de dispositivos

Última actualización: Sep 03, 2026

Es posible que los dispositivos con recursos limitados no puedan construir datos en formato JSON del Thing Specification Language (TSL). Puede transmitir datos sin procesar a IoT Platform y utilizar la función de análisis de datos para convertir la información entre formatos personalizados del dispositivo y JSON, mediante scripts que usted envíe.

Contexto

La siguiente figura muestra el flujo de datos entre dispositivos y servidores.

iot

Este ejemplo utiliza un dispositivo de recolección de datos ambientales.

Conectar un dispositivo a IoT Platform

  1. Inicie sesión en la consola de IoT Platform IoT Platform console.

  2. En la página Overview, localice la instancia que desea gestionar y haga clic en el ID o nombre de la instancia.

  3. En el panel de navegación izquierdo, seleccione Devices > Products. En la página Products, haga clic en Create Product para crear un producto. En este ejemplo, se crea un producto llamado EnvSensor.

    Establezca el parámetro Data Type en Custom. Utilice los valores predeterminados para los demás parámetros. Para obtener más información, consulte Create a product.

  4. Una vez creado el producto, haga clic en Define TSL para agregar funciones TSL. Posteriormente, publique el modelo TSL.

    En este ejemplo se proporciona un TSL model de muestra. Puede usar el modelo TSL para agregar varias funciones TSL al mismo tiempo. Para obtener más información, consulte Import a TSL model.

    El modelo TSL debe incluir las siguientes seis propiedades personalizadas:

    • Temperature (identificador temperature, float, valores válidos: -10 a 50)

    • Humidity (identificador humidity, int32, valores válidos: 0 a 100)

    • Carbon dioxide (identificador co2, int32, valores válidos: 0 a 10000)

    • Formaldehyde (identificador hcho, float, valores válidos: 0 a 10)

    • PM25 (identificador PM25, int32, valores válidos: 0 a 1000)

    • Illuminance (identificador lightLux, float, valores válidos: 0 a 10000)

  5. En el panel de navegación izquierdo, seleccione Devices > Devices. En la página Devices, haga clic en Device List. En la pestaña Device List, haga clic en Add Device para crear un dispositivo para el producto EnvSensor. En este ejemplo, se crea un dispositivo llamado Esensor.

    Después de crear el dispositivo, obtenga la información del certificado del dispositivo. Esta información incluye ProductKey, DeviceName y DeviceSecret.

  6. Configure un dispositivo y realice una prueba.

    Utilice un Link SDK para simular un dispositivo y enviar mensajes a IoT Platform. En este ejemplo se usa Link SDK for Node.js. Para obtener más información sobre cómo configurar un dispositivo, consulte Connect the device to IoT Platform and submit data.

    Para obtener más información sobre cómo usar los Link SDK, consulte Device connection by using a Link SDK

    Código de ejemplo:

    const mqtt = require('aliyun-iot-mqtt');
    // Specify information about the device certificate.
    var options = {
        productKey: "g18lk****",
        deviceName: "Esensor",
        deviceSecret: "c39fe9dc32f97bfd753******b",
        host: "iot******.mqtt.iothub.aliyuncs.com"
    };
    // Establish a connection.
    const client = mqtt.getAliyunIotMqttClient(options);
    // Listen to commands from IoT Platform.
    client.subscribe(`/${options.productKey}/${options.deviceName}/user/get`)
    client.on('message', function(topic, message) {
        console.log("topic " + topic)
        console.log("message " + message)
    })
    setInterval(function() {
        // Submit environmental data.
    	const payloadArray = new Buffer.from([0xaa,0x1f,0xc8,0x00,0x00,0x37,0x10,0xff,0x00,0x05,0xd7,0x6b,0x15,0x00,0x1c,0x01,0x34,0x00,0xad,0x04,0xff,0xff,0x04,0x00,0xff,0xff,0x18,0x00,0x30,0x00,0xff,0x2e])
        client.publish(`/sys/${options.productKey}/${options.deviceName}/thing/model/up_raw`, payloadArray, { qos: 0 });
    }, 5 * 1000);

    Después de conectar el dispositivo a IoT Platform, este pasa al estado Online. Puede consultar el estado en la página Devices de la instancia a la que está conectado el dispositivo.

    Al ejecutar el SDK del dispositivo, el dispositivo Esensor aparece como Online en la lista de dispositivos de la página Devices en la consola de IoT Platform, y el interruptor Enabled se encuentra activado. Esto indica que el dispositivo se conectó correctamente a IoT Platform.

    Haga clic en View en la columna Actions de Esensor. A continuación, haga clic en TSL Data. En este ejemplo, el tipo de datos del producto está configurado como Custom. Por lo tanto, los datos TSL enviados no se muestran en la pestaña Status.

    Seleccione Maintenance > Device Log. En la pestaña Cloud run log, seleccione Device-to-cloud Messages para ver los mensajes enviados, los cuales se muestran en formato hexadecimal.

    En este ejemplo, se muestran los siguientes datos: 0xaa1fc800003710ff0005d76b15001c013400ad04ffff0400ffff18003000ff2e.

Escribir un script de análisis de datos

Edite, envíe y depure scripts de análisis de datos en la consola de IoT Platform.

  1. Inicie sesión en la consola de IoT Platform. Haga clic en el nombre de la instancia que desea gestionar. En el panel de navegación izquierdo de la página Instance Details, seleccione Devices > Products.

  2. En la página Products, localice el producto y haga clic en View en la columna Actions.

  3. En la página product details, haga clic en Message Analysis.

  4. En la pestaña Message Analysis, escriba un script en el campo Edit Script.

    Modifique el script según el protocolo de comunicación que utilice el dispositivo. La siguiente tabla describe la estructura del cuerpo del mensaje del dispositivo.

    Byte

    Descripción

    Observaciones

    12

    Valor del byte bajo de la propiedad PM2.5

    Devuelve el valor de la propiedad PM2.5. Valores válidos: 0 a 999. Unidad: ug/m3.

    13

    Valor del byte alto de la propiedad PM2.5

    14

    Valor del byte bajo de la propiedad temperature × 10

    Devuelve el valor de la propiedad temperature. Valores válidos: -10 a 50. Unidad: °C.

    15

    Valor del byte alto de la propiedad temperature × 10

    16

    Valor del byte bajo de la propiedad humidity

    Devuelve el valor de la propiedad humidity. Valores válidos: 0 a 99. Unidad: %.

    17

    Valor del byte alto de la propiedad humidity

    18

    Valor del byte bajo de la propiedad carbon dioxide

    Devuelve el valor de la propiedad carbon dioxide. Valores válidos: 0 a 9999. Unidad: mg/m3.

    19

    Valor del byte alto de la propiedad carbon dioxide

    22

    Valor del byte bajo de la propiedad formaldehyde × 100

    Devuelve el valor de la propiedad formaldehyde. Valores válidos: 0 a 9.99.

    23

    Valor del byte alto de la propiedad formaldehyde × 100

    28

    Valor del byte bajo de la propiedad illuminance

    Devuelve el valor de la propiedad illuminance. Unidad: lux.

    29

    Valor del byte alto de la propiedad illuminance

    Dado que el dispositivo en este ejemplo solo envía datos ambientales, únicamente necesita configurar la función rawDataToProtocol() para el análisis de datos ascendentes. La función protocolToRawData() no es necesaria. Los datos personalizados pueden convertirse en datos de propiedad, servicio o evento. Este ejemplo convierte datos personalizados en datos de propiedad.

    var PROPERTY_REPORT_METHOD = 'thing.event.property.post';
    
    // Submit upstream data. The following function converts data in a custom format into a TSL model in the JSON format. 
    function rawDataToProtocol(bytes) {
    
        var uint8Array = new Uint8Array(bytes.length);
        for (var i = 0; i < bytes.length; i++) {
            uint8Array[i] = bytes[i] & 0xff;
        }
    
        var dataView = new DataView(uint8Array.buffer, 0);
    
        var jsonMap = new Object();
    
            // Specify the request method. 
            jsonMap['method'] = PROPERTY_REPORT_METHOD;
            // Specify the protocol version. Set the value to 1.0. 
            jsonMap['version'] = '1.0';
            // Specify the ID of the request. 
            jsonMap['id'] = new Date().getTime();
            var params = {};
            // The values 12 and 13 are the values of the PM2.5 property. 
            params['PM25'] = (dataView.getUint8(13)*256+dataView.getUint8(12));
            // The values 14 and 15 are the values of the temperature property. 
            params['temperature'] = (dataView.getUint8(15)*256+dataView.getUint8(14))/10;
            // The values 16 and 17 are the values of the humidity property. 
            params['humidity'] = (dataView.getUint8(17)*256+dataView.getUint8(16));
            // The values 18 and 19 are the values of the co2 property. 
            params['co2'] = (dataView.getUint8(19)*256+dataView.getUint8(18));
            // The values 22 and 23 are the values of the hcho property. 
            params['hcho'] = (dataView.getUint8(23)*256+dataView.getUint8(22))/100;
            // The values 28 and 29 are the values of the lightLux property. 
            params['lightLux'] = (dataView.getUint8(29)*256+dataView.getUint8(28));
    
            jsonMap['params'] = params;
    
        return jsonMap;
    }
    // Send downstream commands. The following function converts a TSL model in the JSON format into data of a custom format. 
    function protocolToRawData(json) {
        var payloadArray = [1];// The device can only submit data and cannot receive commands from IoT Platform. 
        return payloadArray;
    }
    
    // Parse topic data in a custom format to Alink JSON data. 
    function transformPayload(topic, rawData) {
        var jsonObj = {}
        return jsonObj;
    }
  5. Pruebe el análisis de datos.

    1. Seleccione Upstreamed Device Data en la lista desplegable Simulation Type.

    2. En la pestaña Input Simulation, introduzca los datos de prueba en el campo correspondiente.

      Puede utilizar los datos hexadecimales enviados por el dispositivo como datos de prueba. Para ver los datos hexadecimales, vaya a la página Device Log. Ejemplo: 0xaa1fc800003710ff0005d76b15001c013400ad04ffff0400ffff18003000ff2e.

    3. Haga clic en Run.

      En la pestaña Parsing Results, el resultado del análisis se muestra en formato JSON. El campo method es thing.event.property.post, y el campo params contiene propiedades como hcho, pm25, lightLux, co2, temperature y humidity con sus valores correspondientes.

  6. Una vez que confirme que el script puede analizar correctamente los datos de prueba, haga clic en Submit para enviar el script a IoT Platform.

Depurar el dispositivo y enviar datos

Después de enviar el script, utilice el SDK del dispositivo para depurarlo.

Cuando el dispositivo envía datos a IoT Platform, la plataforma utiliza el script para analizarlos. Seleccione Maintenance > Cloud run Log. En la pestaña Cloud run log, consulte los registros de análisis de datos.

En la pestaña Cloud run log de la consola de IoT Platform, puede consultar los registros completos del enlace para los datos enviados por el dispositivo Esensor. Las entradas de registro incluyen los siguientes tipos de negocio:

  • Mensajes de dispositivo a nube

  • Análisis de mensajes (RawDataToProtocol)

  • Análisis de mensajes (ProtocolToRaw)

  • Modelo TSL

Haga clic en View en la columna de contenido del mensaje del registro del modelo TSL para ver los datos JSON analizados. El campo params en ResultData contiene propiedades del sensor como PM25:21, co2:1197, temperature:28.4 y humidity:52. El campo Reason muestra success, lo que indica que tanto el envío de datos como el análisis del script se completaron correctamente.

Para ver los datos analizados, vaya a la página Device Details y seleccione TSL Data > Status.

La página muestra los datos analizados en tiempo real del dispositivo Esensor en formato de tarjeta, donde se presentan las siguientes seis propiedades:

  • Illuminance: 48 Lux

  • PM25: 21 μg/m³

  • Formaldehyde: 0.04 ppm

  • CarbonDioxide: 1197 mg/m³

  • humidity: 52%

  • temperature: 28.4℃

Ejemplo de datos TSL ascendentes

{
  "schema": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json",
  "profile": {
    "version": "1.0",
    "productKey": "g4****"
  },
  "properties": [
    {
      "identifier": "lightLux",
      "name": "illuminance",
      "accessMode": "rw",
      "required": false,
      "dataType": {
        "type": "float",
        "specs": {
          "min": "0",
          "max": "10000",
          "unit": "Lux",
          "unitName": "luminous flux per unit area",
          "step": "0.1"
        }
      }
    },
    {
      "identifier": "PM25",
      "name": "PM25",
      "accessMode": "rw",
      "required": false,
      "dataType": {
        "type": "int",
        "specs": {
          "min": "0",
          "max": "1000",
          "unit": "μg/m³",
          "unitName": "micrograms per cubic meter",
          "step": "1"
        }
      }
    },
    {
      "identifier": "hcho",
      "name": "formaldehyde",
      "accessMode": "rw",
      "desc": "HCHOValue",
      "required": false,
      "dataType": {
        "type": "float",
        "specs": {
          "min": "0",
          "max": "10",
          "unit": "ppm",
          "unitName": "parts per million",
          "step": "0.1"
        }
      }
    },
    {
      "identifier": "co2",
      "name": "carbon dioxide",
      "accessMode": "rw",
      "required": false,
      "dataType": {
        "type": "int",
        "specs": {
          "min": "0",
          "max": "10000",
          "unit": "mg/m³",
          "unitName": "milligrams per cubic meter",
          "step": "1"
        }
      }
    },
    {
      "identifier": "humidity",
      "name": "humidity",
      "accessMode": "rw",
      "required": false,
      "dataType": {
        "type": "int",
        "specs": {
          "min": "0",
          "max": "100",
          "unit": "%",
          "unitName": "percentage",
          "step": "1"
        }
      }
    },
    {
      "identifier": "temperature",
      "name": "temperature",
      "accessMode": "rw",
      "desc": "motor working temperature",
      "required": false,
      "dataType": {
        "type": "float",
        "specs": {
          "min": "-10",
          "max": "50",
          "unit": "℃",
          "step": "0.1"
        }
      }
    }
  ],
  "events": [
    {
      "identifier": "post",
      "name": "post",
      "type": "info",
      "required": true,
      "desc": "submit properties",
      "method": "thing.event.property.post",
      "outputData": [
        {
          "identifier": "lightLux",
          "name": "illuminance",
          "dataType": {
            "type": "float",
            "specs": {
              "min": "0",
              "max": "10000",
              "unit": "Lux",
              "unitName": "luminous flux per unit area",
              "step": "0.1"
            }
          }
        },
        {
          "identifier": "PM25",
          "name": "PM25",
          "dataType": {
            "type": "int",
            "specs": {
              "min": "0",
              "max": "1000",
              "unit": "μg/m³",
              "unitName": "micrograms per cubic meter",
              "step": "1"
            }
          }
        },
        {
          "identifier": "hcho",
          "name": "formaldehyde",
          "dataType": {
            "type": "float",
            "specs": {
              "min": "0",
              "max": "10",
              "unit": "ppm",
              "unitName": "parts per million",
              "step": "0.1"
            }
          }
        },
        {
          "identifier": "co2",
          "name": "carbon dioxide",
          "dataType": {
            "type": "int",
            "specs": {
              "min": "0",
              "max": "10000",
              "unit": "mg/m³",
              "unitName": "milligrams per cubic meter",
              "step": "1"
            }
          }
        },
        {
          "identifier": "humidity",
          "name": "humidity",
          "dataType": {
            "type": "int",
            "specs": {
              "min": "0",
              "max": "100",
              "unit": "%",
              "unitName": "percentage",
              "step": "1"
            }
          }
        },
        {
          "identifier": "temperature",
          "name": "temperature",
          "dataType": {
            "type": "float",
            "specs": {
              "min": "-10",
              "max": "50",
              "unit": "℃",
              "step": "0.1"
            }
          }
        }
      ]
    }
  ],
  "services": [
    {
      "identifier": "set",
      "name": "set",
      "required": true,
      "callType": "async",
      "desc": "set properties",
      "method": "thing.service.property.set",
      "inputData": [
        {
          "identifier": "lightLux",
          "name": "illuminance",
          "dataType": {
            "type": "float",
            "specs": {
              "min": "0",
              "max": "10000",
              "unit": "Lux",
              "unitName": "luminous flux per unit area",
              "step": "0.1"
            }
          }
        },
        {
          "identifier": "PM25",
          "name": "PM25",
          "dataType": {
            "type": "int",
            "specs": {
              "min": "0",
              "max": "1000",
              "unit": "μg/m³",
              "unitName": "micrograms per cubic meter",
              "step": "1"
            }
          }
        },
        {
          "identifier": "hcho",
          "name": "formaldehyde",
          "dataType": {
            "type": "float",
            "specs": {
              "min": "0",
              "max": "10",
              "unit": "ppm",
              "unitName": "parts per million",
              "step": "0.1"
            }
          }
        },
        {
          "identifier": "co2",
          "name": "carbon dioxide",
          "dataType": {
            "type": "int",
            "specs": {
              "min": "0",
              "max": "10000",
              "unit": "mg/m³",
              "unitName": "milligrams per cubic meter",
              "step": "1"
            }
          }
        },
        {
          "identifier": "humidity",
          "name": "humidity",
          "dataType": {
            "type": "int",
            "specs": {
              "min": "0",
              "max": "100",
              "unit": "%",
              "unitName": "percentage",
              "step": "1"
            }
          }
        },
        {
          "identifier": "temperature",
          "name": "temperature",
          "dataType": {
            "type": "float",
            "specs": {
              "min": "-10",
              "max": "50",
              "unit": "℃",
              "step": "0.1"
            }
          }
        }
      ],
      "outputData": []
    },
    {
      "identifier": "get",
      "name": "get",
      "required": true,
      "callType": "async",
      "desc": "obtain properties",
      "method": "thing.service.property.get",
      "inputData": [
        "lightLux",
        "PM25",
        "hcho",
        "co2",
        "humidity",
        "temperature"
      ],
      "outputData": [
        {
          "identifier": "lightLux",
          "name": "illuminance",
          "dataType": {
            "type": "float",
            "specs": {
              "min": "0",
              "max": "10000",
              "unit": "Lux",
              "unitName": "luminous flux per unit area",
              "step": "0.1"
            }
          }
        },
        {
          "identifier": "PM25",
          "name": "PM25",
          "dataType": {
            "type": "int",
            "specs": {
              "min": "0",
              "max": "1000",
              "unit": "μg/m³",
              "unitName": "micrograms per cubic meter",
              "step": "1"
            }
          }
        },
        {
          "identifier": "hcho",
          "name": "formaldehyde",
          "dataType": {
            "type": "float",
            "specs": {
              "min": "0",
              "max": "10",
              "unit": "ppm",
              "unitName": "parts per million",
              "step": "0.1"
            }
          }
        },
        {
          "identifier": "co2",
          "name": "carbon dioxide",
          "dataType": {
            "type": "int",
            "specs": {
              "min": "0",
              "max": "10000",
              "unit": "mg/m³",
              "unitName": "milligrams per cubic meter",
              "step": "1"
            }
          }
        },
        {
          "identifier": "humidity",
          "name": "humidity",
          "dataType": {
            "type": "int",
            "specs": {
              "min": "0",
              "max": "100",
              "unit": "%",
              "unitName": "percentage",
              "step": "1"
            }
          }
        },
        {
          "identifier": "temperature",
          "name": "temperature",
          "dataType": {
            "type": "float",
            "specs": {
              "min": "-10",
              "max": "50",
              "unit": "℃",
              "step": "0.1"
            }
          }
        }
      ]
    }
  ]
}