全部产品
Search
文档中心

IoT Platform:Menguraikan data khusus dari perangkat

更新时间:Jul 02, 2025

Dalam skenario IoT tertentu, perangkat dengan sumber daya terbatas atau spesifikasi rendah serta perangkat yang memerlukan throughput jaringan tinggi tidak dapat menggunakan model Thing Specification Language (TSL) dalam format JSON untuk berkomunikasi dengan IoT Platform. Untuk mengatasi masalah ini, Anda dapat meneruskan data mentah dari perangkat ke IoT Platform. IoT Platform menyediakan fitur penguraian data yang mengonversi data antara format khusus perangkat dan format JSON berdasarkan skrip yang Anda kirimkan. Fitur ini dapat digunakan sebelum memproses data.

Informasi latar belakang

Gambar berikut menunjukkan aliran data antara perangkat dan server.

iot

Contoh ini menggunakan perangkat yang mengumpulkan data lingkungan.

Menghubungkan perangkat ke IoT Platform

  1. Masuk ke IoT Platform Console.

  2. Di halaman Overview, klik All environment. Pada tab All environment, temukan instance yang ingin dikelola dan klik ID atau nama instance tersebut.

  3. Di panel navigasi di sebelah kiri, pilih Devices > Products. Di halaman Products, klik Create Product untuk membuat produk. Dalam contoh ini, sebuah produk bernama EnvSensor dibuat.

    Atur parameter Data Type menjadi Custom. Gunakan nilai default untuk parameter lainnya. Untuk informasi lebih lanjut, lihat Buat Produk.

  4. Setelah produk dibuat, klik Define TSL untuk menambahkan fitur TSL. Kemudian, publikasikan model TSL.

    Dalam contoh ini, model TSL sampel TSL Model disediakan. Anda dapat menggunakan model TSL untuk menambahkan beberapa fitur TSL sekaligus. Untuk informasi lebih lanjut, lihat Tambahkan Fitur TSL Secara Massal.物模型属性

  5. Di panel navigasi di sebelah kiri, pilih Devices > Devices. Di halaman Devices, klik Device List. Pada tab Device List, klik Add Device untuk membuat perangkat untuk produk EnvSensor. Dalam contoh ini, sebuah perangkat bernama Esensor dibuat.

    Setelah perangkat dibuat, peroleh informasi sertifikat perangkat, termasuk ProductKey, DeviceName, dan DeviceSecret.

  6. Konfigurasikan perangkat dan lakukan pengujian.

    Gunakan Link SDK untuk mensimulasikan perangkat dan mengirimkan pesan ke IoT Platform. Dalam contoh ini, Link SDK for Node.js digunakan. Untuk informasi lebih lanjut tentang cara mengonfigurasi perangkat, lihat Hubungkan Perangkat ke IoT Platform dan Kirimkan Data.

    Untuk informasi lebih lanjut tentang cara menggunakan Link SDK, lihat Koneksi Perangkat Menggunakan Link SDK.

    Kode sampel:

    const mqtt = require('aliyun-iot-mqtt');
    // Tentukan informasi tentang sertifikat perangkat.
    var options = {
        productKey: "g18lk****",
        deviceName: "Esensor",
        deviceSecret: "c39fe9dc32f97bfd753******b",
        host: "iot******.mqtt.iothub.aliyuncs.com"
    };
    // Buat koneksi.
    const client = mqtt.getAliyunIotMqttClient(options);
    // Dengarkan perintah dari 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() {
        // Kirim data lingkungan.
    	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);

    Setelah perangkat terhubung ke IoT Platform, statusnya akan berubah menjadi Online. Status ini dapat dilihat di halaman Devices pada instance tempat perangkat tersebut terhubung.设备在线

    Klik View di kolom Actions untuk Esensor. Kemudian, klik TSL Data. Dalam contoh ini, tipe data produk diatur ke Custom. Dalam kasus ini, data TSL yang dikirimkan tidak ditampilkan di tab Status.

    运行状态

    Pilih Maintenance > Device Log. Pada tab Cloud run log, pilih Device-to-cloud Messages untuk melihat pesan yang dikirimkan dalam format heksadesimal.

    Dalam contoh ini, data berikut ditampilkan: 0xaa1fc800003710ff0005d76b15001c013400ad04ffff0400ffff18003000ff2e.

Tulis skrip penguraian data

Anda dapat mengedit, mengirimkan, dan men-debug skrip penguraian data di konsol IoT Platform.

  1. Masuk ke konsol IoT Platform. Klik nama instance yang ingin dikelola. Di panel navigasi di sebelah kiri halaman Instance Details, pilih

  2. Di halaman Products, temukan produk dan klik View di kolom Actions.

  3. Di halaman product details, klik Message Analysis.

  4. Di tab Message Analysis, tulis skrip di bidang Edit Script.

    Ubah skrip sesuai dengan protokol komunikasi yang digunakan oleh perangkat. Tabel berikut menjelaskan struktur badan pesan perangkat.

    Byte

    Deskripsi

    Catatan

    12

    Nilai byte rendah properti PM2.5

    Mengembalikan nilai properti PM2.5. Nilai valid: 0 hingga 999. Unit: ug/m3.

    13

    Nilai byte tinggi properti PM2.5

    14

    Nilai byte rendah properti suhu × 10

    Mengembalikan nilai properti suhu. Nilai valid: -10 hingga 50. Unit: °C.

    15

    Nilai byte tinggi properti suhu × 10

    16

    Nilai byte rendah properti kelembapan

    Mengembalikan nilai properti kelembapan. Nilai valid: 0 hingga 99. Unit: %.

    17

    Nilai byte tinggi properti kelembapan

    18

    Nilai byte rendah properti karbon dioksida

    Mengembalikan nilai properti karbon dioksida. Nilai valid: 0 hingga 9999. Unit: mg/m3.

    19

    Nilai byte tinggi properti karbon dioksida

    22

    Nilai byte rendah properti formaldehida × 100

    Mengembalikan nilai properti formaldehida. Nilai valid: 0 hingga 9.99.

    23

    Nilai byte tinggi properti formaldehida × 100

    28

    Nilai byte rendah properti iluminasi

    Mengembalikan nilai properti iluminasi. Unit: lux.

    29

    Nilai byte tinggi properti iluminasi

    Dalam contoh ini, perangkat hanya mengirimkan data lingkungan. Oleh karena itu, Anda hanya perlu mengonfigurasi fungsi rawDataToProtocol() untuk menguraikan data upstream. Fungsi protocolToRawData() tidak perlu dikonfigurasi. Anda dapat mengonversi data khusus menjadi data properti, layanan, atau acara. Dalam contoh ini, data khusus dikonversi menjadi data properti.

    var PROPERTY_REPORT_METHOD = 'thing.event.property.post';
    
    // Kirim data upstream. Fungsi berikut mengonversi data dalam format khusus menjadi model TSL dalam format JSON. 
    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();
    
            // Tentukan metode permintaan. 
            jsonMap['method'] = PROPERTY_REPORT_METHOD;
            // Tentukan versi protokol. Atur nilainya menjadi 1.0. 
            jsonMap['version'] = '1.0';
            // Tentukan ID permintaan. 
            jsonMap['id'] = new Date().getTime();
            var params = {};
            // Nilai 12 dan 13 adalah nilai properti PM2.5. 
            params['PM25'] = (dataView.getUint8(13)*256+dataView.getUint8(12));
            // Nilai 14 dan 15 adalah nilai properti suhu. 
            params['temperature'] = (dataView.getUint8(15)*256+dataView.getUint8(14))/10;
            // Nilai 16 dan 17 adalah nilai properti kelembapan. 
            params['humidity'] = (dataView.getUint8(17)*256+dataView.getUint8(16));
            // Nilai 18 dan 19 adalah nilai properti co2. 
            params['co2'] = (dataView.getUint8(19)*256+dataView.getUint8(18));
            // Nilai 22 dan 23 adalah nilai properti hcho. 
            params['hcho'] = (dataView.getUint8(23)*256+dataView.getUint8(22))/100;
            // Nilai 28 dan 29 adalah nilai properti lightLux. 
            params['lightLux'] = (dataView.getUint8(29)*256+dataView.getUint8(28));
    
            jsonMap['params'] = params;
    
        return jsonMap;
    }
    // Kirim perintah downstream. Fungsi berikut mengonversi model TSL dalam format JSON menjadi data dalam format khusus. 
    function protocolToRawData(json) {
        var payloadArray = [1];// Perangkat hanya dapat mengirimkan data dan tidak dapat menerima perintah dari IoT Platform. 
        return payloadArray;
    }
    
    // Menguraikan data topik dalam format khusus ke data JSON Alink. 
    function transformPayload(topic, rawData) {
        var jsonObj = {}
        return jsonObj;
    }
  5. Uji penguraian data.

    1. Pilih Data Perangkat Upstream dari daftar drop-down Simulation Type.

    2. Di tab Input Simulation, masukkan data uji di bidang.

      Anda dapat menggunakan data heksadesimal yang dikirimkan oleh perangkat sebagai data uji. Untuk melihat data heksadesimal, buka halaman Device Log. Contoh: 0xaa1fc800003710ff0005d76b15001c013400ad04ffff0400ffff18003000ff2e.

    3. Klik Run.

      Gambar berikut menunjukkan hasil di tab Parsing Results.

      设备上报数据

  6. Setelah memastikan bahwa data uji dapat diuraikan oleh skrip, klik Submit untuk mengirimkan skrip ke IoT Platform.

Debug perangkat dan kirimkan data

Setelah mengirimkan skrip, Anda dapat menggunakan perangkat SDK untuk men-debug skrip.

Saat perangkat mengirimkan data ke IoT Platform, platform menggunakan skrip untuk menguraikan data. Pilih Maintenance > Cloud run Log. Di tab Cloud Run Log, lihat log untuk penguraian data.日志服务

Untuk melihat data yang diuraikan, buka halaman Device Details dan pilih TSL Data > Status.

运行状态

Contoh data TSL upstream

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