PHP解析ELA温度传感器原始数据

时间:2020-07-03 10:45:00

标签: php parsing temperature raw-data

我已经成功地从原始数据下面转换了正温度数据

array (
'timestamp' => '2020-06-11T11:09:21.335Z',
'type' => 'Unknown',
'mac' => 'F64BB46181EF',
'bleName' => 'P RHT 900350',
'rssi' => -63,
'rawData' => '02010605166E2AC90A04166F2A240D09502052485420393030333530',

$cutdata = str_split($rawData,2);
$humidity_cut = hexdec($cutdata[13]);
$x_cut = $cutdata[8].$cutdata[7]; //gives 0AC9
$c_cut = hexdec($x_cut);
$temp_cut = $c_cut/100;
echo $temp_cut;exit;

但是当我得到负温度值时,给我的问题是温度值增加了600多个

这是负的Temp Raw数据

array (
'timestamp' => '2020-07-03T10:05:53.049Z',
'type' => 'Unknown',
'mac' => 'EDF2F589DCAE',
'bleName' => 'P RHT 900351',
'rssi' => -79,
'rawData' => '02010605166E2AB4FA04166F2A310D09502052485420393030333531',

我已经问过他们所说的支持团队

您必须进行2的补码, 将所有位取反,然后在二进制数中加1。

enter image description here

1 个答案:

答案 0 :(得分:1)

我假设输出正常,但是对于32位数字,此代码检查是否设置了高位(使用& 32768),如果是,则将其与65535进行异或(所有设置16位)将其取反,然后再加1(然后将结果设为-ve数字)...

if ( $c_cut & 32768  )  {
    $c_cut = -(($c_cut ^ 65535)+1);
}

其结果为-13.56。

相关问题