All Products
Search
Document Center

IoT Platform:Tulis skrip kustom

Last Updated:Jun 21, 2025

Ketika format data topik node sumber adalah data mentah dalam tugas penguraian data, skrip kustom dapat digunakan untuk penguraian. IoT Platform mendukung skrip JavaScript (ECMAScript 5), Python 2.7, dan PHP 7.2. Topik ini menyediakan templat serta contoh untuk menulis skrip penguraian data topik kustom.

Contoh skrip JavaScript

Templat skrip

/**
 * Mengonversi data yang dikirim perangkat ke topik kustom menjadi format JSON saat diserahkan ke IoT Platform.
 * Parameter masukan: data, array byte[], tidak boleh kosong.
 * Parameter keluaran: jsonObj, objek, tidak boleh kosong.
 */
function executeScript(data) {
    var jsonObj = {};
    return jsonObj;
}

Contoh skrip

/*
  Data sampel:
  Topik kustom:
     /user/update, ke mana data dikirim.
  Parameter masukan:
     data: 0x000000000100320100000000
  Parameter keluaran:
    {
        "prop_float": 0,
        "prop_int16": 50,
        "prop_bool": 1
    }
 */
function executeScript(data) {
    var uint8Array = new Uint8Array(data.length);
    for (var i = 0; i < data.length; i++) {
        uint8Array[i] = data[i] & 0xff;
    }
    var dataView = new DataView(uint8Array.buffer, 0);
    var jsonMap = {};
    jsonMap['prop_int16'] = dataView.getInt16(5);
    jsonMap['prop_bool'] = uint8Array[7];
    jsonMap['prop_float'] = dataView.getFloat32(8);

    return jsonMap;
}

Contoh skrip Python

Templat skrip

# Mengonversi data yang dikirim perangkat ke topik kustom menjadi format JSON saat diserahkan ke IoT Platform.
# Parameter masukan: data, daftar, elemen harus berupa bilangan bulat dan daftarnya tidak boleh kosong.
# Parameter keluaran: jsonObj, kamus.
def execute_script(data):
   jsonObj = {}
   return jsonObj

Contoh skrip

# coding=UTF-8

#  Data sampel:
#  Topik kustom: /user/update, ke mana data dikirim.
#  Parameter masukan:
#     data: 0x000000000100320100000000
#  Parameter keluaran:
#  {
#     "prop_float": 0,
#     "prop_int16": 50,
#     "prop_bool": 1
#   }
def execute_script(data):
    uint8Array = []
    for byteValue in data:
        uint8Array.append(byteValue & 0xff)

    jsonMap = {}
    jsonMap['prop_int16'] = bytes_to_int(uint8Array[5:7])
    jsonMap['prop_bool'] = bytes_to_int(uint8Array[7:8])
    jsonMap['prop_float'] = bytes_to_int(uint8Array[8:])

    return jsonMap

# Mengonversi larik byte menjadi bilangan bulat.
def bytes_to_int(bytes):
    result = ''.join(['%02X' % i for i in bytes])
    return int(result, 16)

Contoh skrip PHP

Templat skrip

<?php
/**
 * Mengonversi data yang dikirim perangkat ke topik kustom menjadi format JSON saat diserahkan ke IoT Platform.
 * Parameter masukan: $data, array biasa, elemen harus berupa bilangan bulat.
 * Parameter keluaran: $jsonObj, array asosiatif, kunci harus berupa string dan bukan karakter numerik seperti "10", tidak boleh kosong.
 */
function executeScript($data)
{
    $jsonObj = array();
    return $jsonObj;
}
    null

    Hindari menggunakan variabel global atau statis karena dapat menghasilkan hasil yang tidak konsisten.

    Skrip memproses data menggunakan operasi komplemen dua. Nilai dalam rentang [-128, 127] dilengkapi menjadi [0, 255]. Sebagai contoh, -1 dilengkapi menjadi 255 (desimal).

    Parameter masukan untuk fungsi penguraian protokol kustom, executeScript, adalah array bilangan bulat. Setiap elemen harus menjalani operasi AND bit demi bit dengan 0xFF untuk mendapatkan pelengkapnya. Fungsi tersebut mengembalikan array asosiatif di mana kunci harus berisi karakter non-array (misalnya, kunci "10" mengakibatkan array PHP menafsirkannya sebagai bilangan bulat 10).

    Penanganan pengecualian Ketat diperlukan dalam lingkungan eksekusi PHP. Kesalahan melempar pengecualian, menghentikan eksekusi kode selanjutnya. Untuk memastikan ketahanan, tangkap dan kelola pengecualian dengan tepat.

Contoh skrip

<?php
/*
  Data sampel:
  Topik kustom:
     /user/update, ke mana data dikirim.
  Parameter masukan:
     data: 0x000000000100320100000000
  Parameter keluaran:
  {
     "prop_float": 0,
     "prop_int16": 50,
     "prop_bool": 1
   }
 */
function executeScript($bytes)
{
    $data = array();
    $length = count($bytes);
    for ($i = 0; $i < $length; $i++) {
        $data[$i] = $bytes[$i] & 0xff;
    }

    $jsonMap = array();
    $jsonMap['prop_int16'] = getInt16($data, 5);
    $jsonMap['prop_bool'] = $data[7];

    return $jsonMap;
}

function getInt16($bytes, $index)
{
    $array = array_slice($bytes, $index, 2);
    return hexdec(implode('', array_map('dechex', $array)));
}

function byteArrayToHexString($data)
{
    return implode('', array_map(function($byte) {
        return str_pad(dechex($byte), 2, '0', STR_PAD_LEFT);
    }, $data));
}