Tous les produits
Search
Centre de documentation

:Exemple de code PHP pour l'analyse des données personnalisées

Dernière mise à jour :Aug 09, 2026

Lorsque vous écrivez du code pour analyser les données personnalisées d'un produit, celui-ci doit inclure un script qui analyse les données de rubrique personnalisée et un autre qui analyse les données du langage de spécification des objets (TSL). Cette rubrique fournit un exemple de code PHP.

<?php
/*
Sample data:
Device data submission
Input:
    0x0000000001003201
Output:
    {"method":"thing.event.property.post","id":"1","params":{"prop_int16":50,"prop_bool":1},"version":"1.0"}

Result of property setting
Input:
    0x0300223344c8
Output:
    {"code":"200","id":"2241348","version":"1.0"}
*/
function rawDataToProtocol($bytes)
{
    $data = [];
    $length = count($bytes);
    for ($i = 0; $i < $length; $i++) {
        $data[$i] = $bytes[$i] & 0xff;
    }

    $jsonMap = [];
    $fHead = $data[0]; // The command field. 
    if ($fHead == 0x00) {
        $jsonMap['method'] = 'thing.event.property.post '; // The topic that is used to submit properties. Data format: Alink JSON. 
        $jsonMap['version'] = '1.0'; // The version of the protocol. This value is fixed. Data format: Alink JSON. 
        $jsonMap['id'] = '' . getInt32($data, 1); // The ID of the request. Data format: Alink JSON. 
        $params = [];
        $params['prop_int16'] = getInt16($data, 5); // The value of the prop_int16 property of the product. 
        $params['prop_bool'] = $data[7]; // The value of the prop_bool property of the product. 
        $jsonMap['params'] = params; // The params field. Data format: Alink JSON. 
    } else if ($fHead == 0x03) {
        $jsonMap['version'] = '1.0'; // The version of the protocol. This value is fixed. Data format: Alink JSON. 
        $jsonMap['id'] = '' . getInt32($data, 1); // The ID of the request. Data format: Alink JSON. 
        $jsonMap['code'] = getInt8($data, 5);
    }

    return $jsonMap;
}

/*
Sample data:
Property setting
Input:
    {"method":"thing.service.property.set","id":"12345","version":"1.0","params":{"prop_int16":333, "prop_bool":1}}
Output:
    0x013039014d01

Result of device data submission:
Input:
    {"method":"thing.event.property.post","id":"12345","version":"1.0","code":200,"data":{}}
Output:
    0x023039c8
*/
function protocolToRawData($json)
{
    $method = $json['method'];
    $id = $json['id'];
    $version = $json['version'];
    $payloadArray = [];
    if ($method == 'thing.service.property.set ') // Configure properties. 
    {
        $params = $json['params'];
        $prop_int16 = $params['prop_int16'];
        $prop_bool = $params['prop_bool'];
        // Concatenate raw data based on the custom protocol format. 
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex(0x01))); // The command field. 
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex(intval($id)))); // The ID of the request. Data format: Alink JSON. 
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex($prop_int16))); // The value of the prop_int16 property. 
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex($prop_bool))); // The value of the prop_bool property. 
    } else if ($method == 'thing.event.property.post ') { // The response. 
        $code = $json['code'];
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex(0x02))); // The command field. 
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex(intval($id)))); // The ID of the request. Data format: Alink JSON. 
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex($code)));
    } else { // Unknown commands. The commands are not run. 
        $code = $json['code'];
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex(0xff))); // The command field. 
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex(intval($id)))); // The ID of the request. Data format: Alink JSON. 
        $payloadArray = concat($payloadArray, hexStringToByteArray(toHex($code)));
    }
    return $payloadArray;
}

/*
  Sample data:
  Use the following custom topic to submit 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;
}