Code: Select all
#!/usr/bin/php
<?php
$data = array();
for($x=1;$x<=2;$x++){
$x = exec("/usr/local/bin/sdm120c -v -c -p -g -f -e -i -t -q -w3 -z5 /dev/ttyUSB0");
$data = preg_split('/[[:space:]]+/', $x);
if($data[8] = 'OK'){
$tensione = $data[0];
$corrente = $data[1];
$potenza = $data[2];
$cosfi = $data[3];
//$frequenza = $data[4];
$prelevata = $data[5];
$immessa = $data[6];
$energia = $data[7];
udevice(1,0,$tensione);
udevice(2,0,$corrente);
udevice(3,0,"$potenza;$energia");
udevice(4,0,$cosfi);
udevice(72,0,$prelevata);
udevice(69,0,$immessa);
}
$data = json_decode(file_get_contents('http://192.168.1.103/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData'),true);
if(isset($data['Body']['Data']['PAC']['Value'])){
$froniuspac=$data['Body']['Data']['PAC']['Value'];
$froniusday=$data['Body']['Data']['DAY_ENERGY']['Value'];
$froniustotal=$data['Body']['Data']['TOTAL_ENERGY']['Value'];
udevice(58,0,$froniuspac);
udevice(59,0,$froniusday);
udevice(60,0,$froniustotal);
}
//Calculate the total
$totalenergy = $froniuspac + $prelevata - $immessa;
udevice(123,0,$totalenergy);
sleep(28);
}
function udevice($idx,$nvalue,$svalue){
$reply=json_decode(file_get_contents('http://192.168.x.xxx:8080/json.htm?type=command¶m=udevice&idx='.$idx.'&nvalue='.$nvalue.'&svalue='.$svalue),true);
if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
logwrite(' '.$idx.' N='.$nvalue.' S='.$svalue.' = '.$reply);
usleep(250000);
return $reply;
}
function logwrite($msg) {
$time = microtime(true);
$dFormat = "Y-m-d H:i:s";
$mSecs = $time - floor($time);
$mSecs = substr(number_format($mSecs,3),1);
$fp = fopen('/var/log/fronius.log',"a+");
fwrite($fp, sprintf("%s%s %s\n", date($dFormat), $mSecs, $msg));
fclose($fp);
}