Tous les produits
Search
Centre de documentation

IoT Platform:Exemple de script PHP

Dernière mise à jour :Aug 09, 2026

Cette rubrique fournit un modèle de script PHP ainsi qu’un exemple de script que vous pouvez utiliser pour analyser les données envoyées vers des rubriques personnalisées.

Modèle de script

Vous pouvez rédiger un script PHP pour analyser les données en vous basant sur le modèle PHP suivant :

<?php
/**
 * Convert the data that is sent by a device to a custom topic to JSON data when the device submits data to IoT Platform. 
 * $topic: the input parameter that specifies the topic to which the device sends messages. The value is a string. 
 * $rawData: the input parameter. The value is an array of integers. 
 * $jsonObj: an output parameter. The value is a JSON object that indicates an association array. The value of each key must be a string that is not a numeric string such as "10". Key values cannot be empty. 
 */
function transformPayload($topic, $rawData)
{
    $jsonObj = array();
    return $jsonObj;
}
?>

Notes relatives à la rédaction du script

  • N’utilisez pas de variables globales ou statiques. Dans le cas contraire, les résultats risquent d’être incohérents.

  • Dans le script, traitez les données à l’aide de l’opération du complément à deux. La plage de complément pour les valeurs comprises dans [-128,127] est [0,255]. Par exemple, le complément de -1 est 255 en décimal.

  • Le paramètre d’entrée de la fonction transformPayload est un tableau d’entiers. Utilisez 0xFF pour l’opération ET binaire afin d’obtenir le complément. Le résultat renvoyé est un tableau associatif. Chaque valeur de key doit contenir des caractères non numériques. Par exemple, si une valeur de key est « 10 », le tableau PHP récupère l’entier 10.

  • L’environnement d’exécution PHP impose une gestion stricte des exceptions. En cas d’erreur, une exception est levée et le code suivant n’est pas exécuté. Pour garantir la robustesse du code, vous devez capturer et traiter les exceptions.

Exemple de script

Remarque

L’exemple de script ci-dessous analyse uniquement les messages envoyés vers des rubriques personnalisées. Si vous définissez le paramètre

Data Type

du produit sur

Custom

, vous devez également écrire un script pour analyser les messages du langage de spécification des objets (TSL). Pour plus d’informations, consultez

Soumettre un script d’analyse de message de modèle TSL

.

Pour obtenir des informations sur les custom data formats, consultez la rubrique Créer un produit.

<?php
/*
  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;
}