全部产品
Search
文档中心

IoT Platform:Contoh skrip PHP

更新时间:Jul 02, 2025

Topik ini menyediakan template dan contoh skrip PHP yang dapat digunakan untuk mengurai data yang dikirim ke topik kustom.

Template skrip

Anda dapat menulis skrip PHP untuk mengurai data berdasarkan template PHP berikut:

<?php
/**
 * Konversikan data yang dikirim oleh perangkat ke topik kustom menjadi data JSON ketika perangkat mengirimkan data ke IoT Platform.
 * $topic: parameter input yang menentukan topik ke mana perangkat mengirim pesan. Nilainya adalah string.
 * $rawData: parameter input. Nilainya adalah array integer.
 * $jsonObj: parameter output. Nilainya adalah objek JSON yang menunjukkan array asosiasi. Nilai setiap kunci harus berupa string yang bukan string numerik seperti "10". Nilai kunci tidak boleh kosong.
 */
function transformPayload($topic, $rawData)
{
    $jsonObj = array();
    return $jsonObj;
}
?>

Catatan untuk penulisan skrip

  • Hindari penggunaan variabel global atau statis. Jika tidak, hasilnya mungkin tidak konsisten.
  • Dalam skrip, proses data menggunakan operasi komplemen dua. Rentang komplemen untuk nilai dalam rentang [-128,127] adalah [0,255]. Sebagai contoh, komplemen dari -1 adalah 255 dalam desimal.
  • Parameter input fungsi transformPayload adalah array integer. Gunakan 0xFF untuk operasi AND bitwise guna mendapatkan komplemen. Hasil kembalian adalah array asosiasi. Setiap kunci harus berisi karakter non-array. Sebagai contoh, jika nilai kunci adalah "10", array PHP akan mengambil integer 10.
  • Lingkungan runtime PHP sangat ketat dalam penanganan pengecualian. Jika terjadi kesalahan, pengecualian akan dilempar dan kode selanjutnya tidak dijalankan. Untuk memastikan keandalan kode, tangkap dan proses pengecualian tersebut.

Contoh skrip

Catatan Contoh skrip berikut hanya dapat digunakan untuk mengurai pesan yang dikirim ke topik kustom. Jika Anda mengatur parameter Data Type produk ke Custom, Anda juga harus menulis skrip untuk mengurai pesan Thing Specification Language (TSL). Untuk informasi tentang cara menulis skrip untuk mengurai data TSL, lihat Kirim Skrip untuk Mengurai Data TSL.

Untuk informasi tentang custom data formats, lihat Buat Produk.

<?php
/*
  Contoh data
  Gunakan topik kustom berikut untuk mengirimkan data:
     /user/update. 
  Input:
     topic: /${productKey}/${deviceName}/user/update
     bytes: 0x000000000100320100000000 
  Output:
  {
     "prop_float": 0,
     "prop_int16": 50,
     "prop_bool": 1,
     "topic": "/${productKey}/${deviceName}/user/update"
   }
 */
function transformPayload($topic, $bytes)
{
    $data = array();
    $length = count($bytes);
    for ($i = 0; $i < $length; $i++) {
        $data[$i] = $bytes[$i] & 0xff;
    }

    $jsonMap = array();

    if (strpos($topic, '/user/update/error') !== false) {
        $jsonMap['topic'] = $topic;
        $jsonMap['errorCode'] = getInt8($data, 0);
    } else if (strpos($topic, '/user/update') !== false) {
        $jsonMap['topic'] = $topic;
        $jsonMap['prop_int16'] = getInt16($data, 5);
        $jsonMap['prop_bool'] = $data[7];
    }

    return $jsonMap;
}

function getInt32($bytes, $index)
{
    $array = array($bytes[$index], $bytes[$index + 1], $bytes[$index + 2], $bytes[$index + 3]);

    return hexdec(byteArrayToHexString($array));
}

function getInt16($bytes, $index)
{
    $array = array($bytes[$index], $bytes[$index + 1]);

    return hexdec(byteArrayToHexString($array));
}

function getInt8($bytes, $index)
{
    $array = array($bytes[$index]);
    return hexdec(byteArrayToHexString($array));
}

function byteArrayToHexString($data)
{
    $hexStr = '';
    for ($i = 0; $i < count($data); $i++) {
        $hexValue = dechex($data[$i]);

        $tempHexStr = strval($hexValue);

        if (strlen($tempHexStr) === 1) {
            $hexStr = $hexStr . '0' . $tempHexStr;
        } else {
            $hexStr = $hexStr . $tempHexStr;
        }
    }

    return $hexStr;
}

function hexStringToByteArray($hex)
{
    $result = array();
    $index = 0;
    for ($i = 0; $i < strlen($hex) - 1; $i += 2) {
        $result[$index++] = hexdec($hex[$i] . $hex[$i + 1]);
    }
    return $result;
}


function concat($array, $data)
{
    return array_merge($array, $data);
}

function toHex($data)
{
    $var = dechex($data);
    $length = strlen($var);
    if ($length % 2 == 1) {
        $var = '0' . $var;
    }
    return $var;
}