当前位置:   article > 正文

php物联网平台搭建,PHP脚本示例

php 物联网平台源码

脚本示例

以下是基于<?php

/*

示例数据:

设备上报数据:

传入参数:

0x0000000001003201

输出结果:

{"method":"thing.event.property.post","id":"1","params":{"prop_int16":50,"prop_bool":1},"version":"1.0"}

属性设置的返回结果:

传入参数:

0x0300223344c8

输出结果:

{"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]; //command字段。

if ($fHead == 0x00) {

$jsonMap['method'] = 'thing.event.property.post'; //ALink JSON格式,属性上报topic。

$jsonMap['version'] = '1.0'; //ALink JSON格式,协议版本号固定字段。

$jsonMap['id'] = '' . getInt32($data, 1); //ALink JSON格式,标示该次请求id值。

$params = [];

$params['prop_int16'] = getInt16($data, 5); //对应产品属性中prop_int16。

$params['prop_bool'] = $data[7]; //对应产品属性中prop_bool。

$jsonMap['params'] = $params; //ALink JSON格式,params标准字段。

} else if ($fHead == 0x03) {

$jsonMap['version'] = '1.0'; //ALink JSON格式,协议版本号固定字段。

$jsonMap['id'] = '' . getInt32($data, 1); //ALink JSON格式,标示该次请求id值。

$jsonMap['code'] = getInt8($data, 5);

}

return $jsonMap;

}

/*

示例数据:

属性设置:

传入参数:

{"method":"thing.service.property.set","id":"12345","version":"1.0","params":{"prop_int16":333, "prop_bool":1}}

输出结果:

0x013039014d01

设备上报的返回结果:

传入数据:

{"method":"thing.event.property.post","id":"12345","version":"1.0","code":200,"data":{}}

输出结果:

0x023039c8

*/

function protocolToRawData($json)

{

$method = $json['method'];

$id = $json['id'];

$version = $json['version'];

$payloadArray = [];

if ($method == 'thing.service.property.set') //属性设置。

{

$params = $json['params'];

$prop_int16 = $params['prop_int16'];

$prop_bool = $params['prop_bool'];

//按照自定义协议格式拼接rawData。

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex(0x01))); //command字段。

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex(intval($id)))); //ALink JSON格式'id'。

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex($prop_int16))); //属性'prop_int16'的值。

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex($prop_bool))); //属性'prop_bool'的值。

} else if ($method == 'thing.event.property.post') { //设备上报数据返回结果。

$code = $json['code'];

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex(0x02))); //command字段。

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex(intval($id)))); //ALink JSON格式'id'。

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex($code)));

} else { //未知命令,对于这些命令不做处理。

$code = $json['code'];

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex(0xff))); //command字段。

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex(intval($id)))); //ALink JSON格式'id'。

$payloadArray = concat($payloadArray, hexStringToByteArray(toHex($code)));

}

return $payloadArray;

}

/*

示例数据:

自定义Topic:

/user/update,上报数据。

输入参数:

topic: /{productKey}/{deviceName}/user/update

bytes: 0x000000000100320100000000

输出参数:

{

"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;

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/414943
推荐阅读
相关标签
  

闽ICP备14008679号