/*
'A Phase Voltage' => '0000',
'B Phase Voltage' => '0002',
'C Phase Voltage' => '0004',
'A Line Current' => '0008',
'B Line Current' => '000A',
'C Line Current' => '000C',
'Total Active Power' => '0010',
'A Phase Active Power' => '0012',
'B Phase Active Power' => '0014',
'C Phase Active Power' => '0016',
'Total Reactive Power' => '0018',
'A Phase Reactive Power' => '001A',
'B Phase Reactive Power' => '001C',
'C Phase Reactive Power' => '001E',
'A Phase Power Factor' => '002A',
'B Phase Power Factor' => '002C',
'C Phase Power Factor' => '002E',
'Frequency' => '0036',
'Total Active Electricity Power' => '0100',
'Total Reactive Electricity Power' => '0400',
*/
$registersList = [
'A Phase Voltage' => [
'regNumber' => '0000',
'objectName' => 'ElCounter',
'propertyName' => 'voltage_A',
'roundAccuracy' => 0,
],
'B Phase Voltage' => [
'regNumber' => '0002',
'objectName' => 'ElCounter',
'propertyName' => 'voltage_B',
'roundAccuracy' => 0,
],
'C Phase Voltage' => [
'regNumber' => '0004',
'objectName' => 'ElCounter',
'propertyName' => 'voltage_C',
'roundAccuracy' => 0,
],
'A Line Current' => [
'regNumber' => '0008',
'objectName' => 'ElCounter',
'propertyName' => 'current_A',
'roundAccuracy' => 1,
],
'B Line Current' => [
'regNumber' => '000A',
'objectName' => 'ElCounter',
'propertyName' => 'current_B',
'roundAccuracy' => 1,
],
'C Line Current' => [
'regNumber' => '000C',
'objectName' => 'ElCounter',
'propertyName' => 'current_C',
'roundAccuracy' => 1,
],
'Frequency' => [
'regNumber' => '0036',
'objectName' => 'ElCounter',
'propertyName' => 'frequency',
'roundAccuracy' => 0,
],
'Total Active Electricity Power' => [
'regNumber' => '0100',
'objectName' => 'ElCounter',
'propertyName' => 'total_active_power',
'roundAccuracy' => 1,
],
'Total Reactive Electricity Power' => [
'regNumber' => '0400',
'objectName' => 'ElCounter',
'propertyName' => 'total_reactive_power',
'roundAccuracy' => 1,
],
];
$urlTx = 'http://192.168.0.5/sec/?mode=rs485&uart_tx=';
$urlRx = 'http://192.168.0.5/sec/?mode=rs485&uart_rx=1';
foreach($registersList as $regName => $regProperties) {
$regNumber = (isset($regProperties['regNumber'])) ? $regProperties['regNumber'] : '0000';
$objectName = (isset($regProperties['objectName'])) ? $regProperties['objectName'] : '';
$propertyName = (isset($regProperties['propertyName'])) ? $regProperties['propertyName'] : '';
$roundAccuracy = (isset($regProperties['roundAccuracy'])) ? $regProperties['roundAccuracy'] : false;
echo "$regName => $regNumber => " . $urlTx . '0104' . $regNumber . '0002' . '<br>';
$res = file_get_contents($urlTx . '0104' . $regNumber . '0002');
echo "$res = ";
usleep(100000);
$res = file_get_contents($urlRx);
echo "$res = ";
if($res != 'CRC Error') {
$data = explode('|', $res);
$value = hex2bin($data[3].$data[4].$data[5].$data[6]);
$value = unpack('f', strrev($value));
if($roundAccuracy !== false) {
$value = round($value[1], $roundAccuracy);
} else {
$value = $value[1];
}
echo '<b>' . $value . '</b><br>';
if($objectName != '' && $propertyName != '') {
echo "setGlobal('$objectName.$propertyName', $value)<br><br>";
setGlobal("$objectName.$propertyName", $value);
}
} else {
echo '<br>';
}
usleep(150000);
}