Tous les produits
Search
Centre de documentation

IoT Platform:Analyser les données personnalisées des appareils

Dernière mise à jour :Aug 21, 2026

Les appareils aux ressources limitées ne peuvent pas toujours générer des données au format JSON selon le langage de spécification des objets (TSL). Transmettez les données brutes à IoT Platform et utilisez la fonctionnalité d'analyse des données pour convertir les formats personnalisés des appareils en JSON, grâce à des scripts que vous soumettez.

Informations générales

Le schéma suivant illustre le flux de données entre les appareils et les serveurs.

iot

Cet exemple s'appuie sur un appareil de collecte de données environnementales.

Connecter un appareil à IoT Platform

  1. Connectez-vous à la console IoT Platform console IoT Platform.

  2. Sur la page Overview, repérez l'instance à gérer et cliquez sur son ID ou son nom.

  3. Dans le volet de navigation de gauche, accédez à Devices > Products. Sur la page Products, cliquez sur Create Product pour créer un produit. Dans cet exemple, créez un produit nommé EnvSensor.

    Définissez le paramètre Data Type sur Custom. Conservez les valeurs par défaut pour les autres paramètres. Pour plus d'informations, consultez la rubrique Créer un produit.

  4. Une fois le produit créé, cliquez sur Define TSL pour ajouter des fonctionnalités TSL, puis publiez le modèle TSL.

    Cet exemple fournit un modèle TSL type. Utilisez-le pour ajouter plusieurs fonctionnalités TSL en une seule opération. Pour plus de détails, reportez-vous à la section Importer un modèle TSL.

    Le modèle TSL doit inclure les six propriétés personnalisées suivantes :

    • Temperature (identifiant temperature, float, valeurs valides : -10 à 50)

    • Humidity (identifiant humidity, int32, valeurs valides : 0 à 100)

    • Carbon dioxide (identifiant co2, int32, valeurs valides : 0 à 10000)

    • Formaldehyde (identifiant hcho, float, valeurs valides : 0 à 10)

    • PM25 (identifiant PM25, int32, valeurs valides : 0 à 1000)

    • Illuminance (identifiant lightLux, float, valeurs valides : 0 à 10000)

  5. Dans le volet de navigation de gauche, accédez à Devices > Devices. Sur la page Devices, cliquez sur Device List. Dans l'onglet Device List, cliquez sur Add Device pour créer un appareil associé au produit EnvSensor. Dans cet exemple, créez un appareil nommé Esensor.

    Après la création de l'appareil, récupérez les informations du certificat de l'appareil, notamment le ProductKey, le DeviceName et le DeviceSecret.

  6. Configurez l'appareil et effectuez un test.

    Utilisez un SDK Link pour simuler un appareil et envoyer des messages à IoT Platform. Cet exemple utilise le SDK Link pour Node.js. Pour savoir comment configurer un appareil, consultez la rubrique Connecter l'appareil à IoT Platform et soumettre des données.

    Pour plus d'informations sur l'utilisation des SDK Link, consultez la rubrique Connexion de l'appareil à l'aide d'un SDK Link

    Exemple de code :

    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);

    Une fois l'appareil connecté à IoT Platform, son statut passe à Online. Vérifiez ce statut sur la page Devices de l'instance concernée.

    Après l'exécution du SDK de l'appareil, l'appareil Esensor apparaît avec le statut Online dans la liste des appareils sur la page Devices de la console IoT Platform, et le commutateur Enabled est activé. Cela confirme que l'appareil est bien connecté à IoT Platform.

    Cliquez sur View dans la colonne Actions de l'appareil Esensor, puis sur TSL Data. Comme le type de données du produit est défini sur Custom dans cet exemple, les données TSL soumises n'apparaissent pas dans l'onglet Status.

    Accédez à Maintenance > Device Log. Dans l'onglet Cloud run log, sélectionnez Device-to-cloud Messages pour afficher les messages soumis au format hexadécimal.

    Dans cet exemple, les données affichées sont les suivantes : 0xaa1fc800003710ff0005d76b15001c013400ad04ffff0400ffff18003000ff2e.

Rédiger un script d'analyse des données

Modifiez, soumettez et déboguez les scripts d'analyse des données directement dans la console IoT Platform.

  1. Connectez-vous à la console IoT Platform. Cliquez sur le nom de l'instance à gérer. Dans le volet de navigation de gauche de la page Instance Details, accédez à Devices > Products.

  2. Sur la page Products, repérez le produit concerné et cliquez sur View dans la colonne Actions.

  3. Sur la page product details, cliquez sur Message Analysis.

  4. Dans l'onglet Message Analysis, rédigez le script dans le champ Edit Script.

    Adaptez le script au protocole de communication utilisé par l'appareil. Le tableau ci-dessous décrit la structure du corps du message de l'appareil.

    Octet

    Description

    Remarques

    12

    Octet de poids faible de la propriété PM2,5

    Renvoie la valeur de la propriété PM2,5. Valeurs valides : 0 à 999. Unité : ug/m3.

    13

    Octet de poids fort de la propriété PM2,5

    14

    Octet de poids faible de la propriété temperature × 10

    Renvoie la valeur de la propriété temperature. Valeurs valides : -10 à 50. Unité : °C.

    15

    Octet de poids fort de la propriété temperature × 10

    16

    Octet de poids faible de la propriété humidity

    Renvoie la valeur de la propriété humidity. Valeurs valides : 0 à 99. Unité : %.

    17

    Octet de poids fort de la propriété humidity

    18

    Octet de poids faible de la propriété carbon dioxide

    Renvoie la valeur de la propriété carbon dioxide. Valeurs valides : 0 à 9999. Unité : mg/m3.

    19

    Octet de poids fort de la propriété carbon dioxide

    22

    Octet de poids faible de la propriété formaldehyde × 100

    Renvoie la valeur de la propriété formaldehyde. Valeurs valides : 0 à 9,99.

    23

    Octet de poids fort de la propriété formaldehyde × 100

    28

    Octet de poids faible de la propriété illuminance

    Renvoie la valeur de la propriété illuminance. Unité : lux.

    29

    Octet de poids fort de la propriété illuminance

    Comme l'appareil de cet exemple ne soumet que des données environnementales, configurez uniquement la fonction rawDataToProtocol() pour l'analyse des données ascendantes. La fonction protocolToRawData() n'est pas nécessaire. Les données personnalisées peuvent être converties en données de propriété, de service ou d'événement. Ici, nous les convertissons en données de propriété.

    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. Testez l'analyse des données.

    1. Sélectionnez Upstreamed Device Data dans la liste déroulante Simulation Type.

    2. Dans l'onglet Input Simulation, saisissez les données de test dans le champ prévu.

      Utilisez les données hexadécimales soumises par l'appareil comme données de test. Pour les consulter, rendez-vous sur la page Device Log. Exemple : 0xaa1fc800003710ff0005d76b15001c013400ad04ffff0400ffff18003000ff2e.

    3. Cliquez sur Run.

      Dans l'onglet Parsing Results, le résultat de l'analyse s'affiche au format JSON. Le champ method contient thing.event.property.post, et le champ params inclut les propriétés telles que hcho, pm25, lightLux, co2, temperature et humidity avec leurs valeurs respectives.

  6. Une fois que vous avez vérifié que le script analyse correctement les données de test, cliquez sur Submit pour soumettre le script à IoT Platform.

Déboguer l'appareil et soumettre des données

Après avoir soumis le script, utilisez le SDK de l'appareil pour le déboguer.

Lorsque l'appareil envoie des données à IoT Platform, la plateforme les analyse via le script. Accédez à Maintenance > Cloud run Log. Dans l'onglet Cloud run log, consultez les journaux d'analyse des données.

Dans l'onglet Cloud run log de la console IoT Platform, vous pouvez visualiser l'intégralité des journaux de liaison pour les données soumises par l'appareil Esensor. Les entrées de journal couvrent les types d'activité suivants :

  • Messages appareil-vers-cloud

  • Analyse des messages (RawDataToProtocol)

  • Analyse des messages (ProtocolToRaw)

  • Modèle TSL

Cliquez sur View dans la colonne du contenu du message du journal du modèle TSL pour afficher les données JSON analysées. Le champ params de ResultData contient les propriétés des capteurs, telles que PM25:21, co2:1197, temperature:28.4 et humidity:52. Le champ Reason indique success, ce qui confirme la réussite de la soumission des données et de l'analyse par le script.

Pour consulter les données analysées, accédez à la page Device Details et naviguez vers TSL Data > Status.

La page affiche les données en temps réel analysées de l'appareil Esensor sous forme de cartes, présentant les six propriétés suivantes :

  • Illuminance : 48 Lux

  • PM25 : 21 μg/m³

  • Formaldehyde : 0,04 ppm

  • CarbonDioxide : 1197 mg/m³

  • humidity : 52 %

  • temperature : 28,4 ℃

Exemple de données TSL ascendantes

{
  "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"
            }
          }
        }
      ]
    }
  ]
}