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
0xFFpour 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
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;
}